7193 lines
297 KiB
HTML
7193 lines
297 KiB
HTML
<div class="sheet-mainBg">
|
|
<!-- FDP -->
|
|
<!-- INPUT HIDDEN Version FdP -->
|
|
<input type="hidden" name="attr_VERFDP" value="3.9.2" />
|
|
<input type="hidden" name="attr_VERSION" value="3.9.2" />
|
|
<!-- INPUT HIDDEN Univers (COF, CG, COC) -->
|
|
<input type="hidden" name="attr_UNIVERS" value="COC" />
|
|
<input type="hidden" name="attr_coc_setting_bitume" value="0" />
|
|
<input type="hidden" name="attr_coc_setting_shadowrun" value="0" />
|
|
<!-- INPUT HIDDEN Libellés -->
|
|
<input type="hidden" name="attr_lib_profil" value="Profil" />
|
|
<input type="hidden" name="attr_lib_famille" value="Famille" />
|
|
<input type="hidden" name="attr_lib_origine" value="Origine" />
|
|
<!-- INPUT HIDDEN Type de jet -->
|
|
<input type="hidden" name="attr_JETNORMAL" value="1d@{ETATDE}" />
|
|
<input type="hidden" name="attr_JETSUP" value="2d@{ETATDE}kh1" />
|
|
<input type="hidden" name="attr_JETSUPHERO" value="{2d@{ETATDE}kh1, 0d20+10}kh1" />
|
|
<input type="hidden" name="attr_JETRISQUE" value="1d12" />
|
|
<input type="hidden" name="attr_JETINF" value="2d@{ETATDE}kl1" />
|
|
<input type="hidden" name="attr_JDEX" value="1d@{ETATDE}" />
|
|
<input type="hidden" name="attr_JDEXSUP" value="2d@{ETATDE}kh1" />
|
|
<input type="hidden" name="attr_JDEXSUPHERO" value="{2d@{ETATDE}kh1, 0d20+10}kh1" />
|
|
<input type="hidden" name="attr_JDEXRISQUE" value="1d12" />
|
|
<!-- INPUT HIDDEN Buffs -->
|
|
<input type="hidden" name="attr_FOR_BUFF" value="0" />
|
|
<input type="hidden" name="attr_DEX_BUFF" value="0" />
|
|
<input type="hidden" name="attr_CON_BUFF" value="0" />
|
|
<input type="hidden" name="attr_INT_BUFF" value="0" />
|
|
<input type="hidden" name="attr_PER_BUFF" value="0" />
|
|
<input type="hidden" name="attr_CHA_BUFF" value="0" />
|
|
<input type="hidden" name="attr_ATKCAC_BUFF" value="0" />
|
|
<input type="hidden" name="attr_ATKTIR_BUFF" value="0" />
|
|
<input type="hidden" name="attr_ATKMEN_BUFF" value="0" />
|
|
<input type="hidden" name="attr_ATKPIL_BUFF" value="0" />
|
|
<input type="hidden" name="attr_ATKMAG_BUFF" value="0" />
|
|
<input type="hidden" name="attr_PSYINFLU_BUFF" value="0" />
|
|
<input type="hidden" name="attr_PSYINTUI_BUFF" value="0" />
|
|
<input type="hidden" name="attr_INIT_BUFF" value="0" />
|
|
<input type="hidden" name="attr_DEF_BUFF" value="0" />
|
|
<input type="hidden" name="attr_DEP_BUFF" value="0" />
|
|
<input type="hidden" name="attr_PV_BUFF" value="0" />
|
|
<!-- INPUT HIDDEN Précédent état préjudiciable -->
|
|
<input type="hidden" name="attr_CONDITION" value="" />
|
|
<input type="hidden" name="attr_PCONDITION" value="" />
|
|
<!-- INPUT HIDDEN Précédent nombre de PV -->
|
|
<input type="hidden" name="attr_LAST_PV" value="" />
|
|
<!-- INPUT HIDDEN PV par niveau -->
|
|
<input type="hidden" name="attr_PV_NIVEAU" value="" />
|
|
<!-- INPUT HIDDEN Choix carac jets capacités -->
|
|
<input type="hidden" name="attr_QRYMOD"
|
|
value="?{Carac. ?|Force,@{FOR}|Dextérité,@{DEX}|Constitution,@{CON}|Intelligence,@{INT}|Perception,@{PER}|Charisme,@{CHA}}" />
|
|
<input type="hidden" name="attr_QRYMODT"
|
|
value="?{Carac. ?|Force,@{FOR_TEST}|Dextérité,@{DEX_TEST}|Constitution,@{CON_TEST}|Intelligence,@{INT_TEST}|Perception,@{PER_TEST}|Charisme,@{CHA_TEST}}" />
|
|
<!-- INPUT HIDDEN Rangs Voies -->
|
|
<input type="hidden" name="attr_RANG_VOIE1" value="0" />
|
|
<input type="hidden" name="attr_RANG_VOIE2" value="0" />
|
|
<input type="hidden" name="attr_RANG_VOIE3" value="0" />
|
|
<input type="hidden" name="attr_RANG_VOIE4" value="0" />
|
|
<input type="hidden" name="attr_RANG_VOIE5" value="0" />
|
|
<input type="hidden" name="attr_RANG_VOIE6" value="0" />
|
|
<input type="hidden" name="attr_RANG_VOIE7" value="0" />
|
|
<input type="hidden" name="attr_RANG_VOIE8" value="0" />
|
|
<input type="hidden" name="attr_RANG_VOIE9" value="0" />
|
|
<!-- INPUT HIDDEN Caractéristiques -->
|
|
<input type="hidden" name="attr_CARACS" value="" />
|
|
<!-- INPUT HIDDEN PC -->
|
|
<input type="hidden" name="attr_PC_DESC_SNGL" value="Point de Chance" />
|
|
<input type="hidden" name="attr_PC_DESC_PLUR" value="Points de Chance" />
|
|
<input type="hidden" name="attr_PC_DESC_ABRV" value="PC" />
|
|
<!-- INPUT HIDDEN cpt1 -->
|
|
<input type="hidden" name="attr_cpt1_desc_sngl" value="" />
|
|
<input type="hidden" name="attr_cpt1_desc_plur" value="" />
|
|
<input type="hidden" name="attr_cpt1_desc_abrv" value="" />
|
|
<!-- INPUT HIDDEN PM -->
|
|
<input type="hidden" name="attr_pm_desc" value="Magie" />
|
|
<input type="hidden" name="attr_pm_abrv" value="PM" />
|
|
<!-- INPUT HIDDEN Liste des equipements avec dé d'usure -->
|
|
<input type="hidden" name="attr_QRYUD" value="" />
|
|
<!-- Fin INPUT HIDDEN -->
|
|
<div class="sheet-container">
|
|
<!-- Identité -->
|
|
<input type="checkbox" class="block-switch" style="display: none;" name="attr_coc_setting_bitume" value="1">
|
|
<div class="block-hidden">
|
|
<div style="vertical-align: middle; text-align: center;">
|
|
<img style="width:70%; height:90%" title="Version 3.9.2 - 27/04/2021"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_logo.png" />
|
|
</div>
|
|
</div>
|
|
<div class="block-show">
|
|
<div style="vertical-align: middle; text-align: center;">
|
|
<img style="width:70%; height:90%" title="Version 3.9.2 - 27/04/2021"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_bitume.jpg" />
|
|
</div>
|
|
</div>
|
|
<div style="width:270px;">
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-textfatleft">Nom</td>
|
|
<td colspan="3">
|
|
<input class="sheet-nobox" name="attr_character_name" title="@{character_name}" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfatleft"><span name="attr_lib_profil"></span></td>
|
|
<td colspan="3">
|
|
<input class="sheet-nobox" name="attr_PROFIL" title="@{PROFIL}" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfatleft"><span name="attr_lib_famille"></span></td>
|
|
<td colspan="3">
|
|
<input class="sheet-nobox" name="attr_FAMILLE" title="@{FAMILLE}" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfatleft"><span name="attr_lib_origine"></span></td>
|
|
<td colspan="3">
|
|
<input class="sheet-nobox" name="attr_origine" title="@{origine}" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfatleft">Niveau</td>
|
|
<td style="text-align:left;">
|
|
<input class="sheet-nobox" name="attr_NIVEAU" title="@{NIVEAU}" type="number" value="1" min="0" />
|
|
</td>
|
|
<td class="sheet-textfatleft">Type</td>
|
|
<td class="sheet-boxinput">
|
|
<select class="sheet-pjstatus" name="attr_type_personnage" size="1" title="@{type_personnage}">
|
|
<option value="pj" selected>PJ</option>
|
|
<option value="pnj">PNJ</option>
|
|
<option value="vehicule">Véhicule</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div style="width:130px; margin-left: 5px;">
|
|
<input type="checkbox" class="optional-block-switch" name="attr_physical_traits" value="1" ><span></span>
|
|
<div class="optional-block">
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-textfatleft">Sexe</td>
|
|
<td>
|
|
<input class="sheet-nobox" name="attr_SEXE" title="@{SEXE}" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfatleft">Âge</td>
|
|
<td>
|
|
<input class="sheet-nobox" name="attr_AGE" title="@{AGE}" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfatleft">Taille</td>
|
|
<td>
|
|
<input class="sheet-nobox" name="attr_TAILLE" title="@{TAILLE}" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfatleft">Poids</td>
|
|
<td>
|
|
<input class="sheet-nobox" name="attr_POIDS" title="@{POIDS}" type="text" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- FIN Identité -->
|
|
<input type="radio" name="attr_type_fiche" class="sheet-hidden-tab sheet-fp1" value="pj" checked="checked"><span
|
|
title="Personnage"></span>
|
|
<input type="radio" name="attr_type_fiche" class="sheet-hidden-tab sheet-fp2" value="vehicule"><span
|
|
title="Véhicule"></span>
|
|
<input type="radio" name="attr_type_fiche" class="sheet-hidden-tab sheet-fp3" value="pnj"><span title="PNJ"></span>
|
|
<div class="sheet-tab-content sheet-fp1">
|
|
<input type="radio" name="attr_tab" class="sheet-tab sheet-tab1" value="caracs" checked="checked"><span
|
|
title="Caractéristiques"></span>
|
|
<input type="radio" name="attr_tab" class="sheet-tab sheet-tab2" value="voies"><span title="Capacités"></span>
|
|
<input type="radio" name="attr_tab" class="sheet-tab sheet-tab3" value="equip"><span title="Équipement"></span>
|
|
<input type="radio" name="attr_tab" class="sheet-tab sheet-tab4" value="config"><span title="Configuration"></span>
|
|
<img class="sheet-imghr-up"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div class="sheet-tab-content sheet-tab1">
|
|
<div>
|
|
<!-- Caracs + combat + PV + défense -->
|
|
<table>
|
|
<tr>
|
|
<td style="width:250px;">
|
|
<!-- Caracs -->
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-textfat">CARAC.</td>
|
|
<td></td>
|
|
<td class="sheet-textbase">Valeur</td>
|
|
<td class="sheet-textfat">Mod.</td>
|
|
<td class="sheet-textbase">Bonus</td>
|
|
<td class="sheet-textfat">Test</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_for" title="%{jet_for} Jet de Force"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Force}} {{subtags=Test}} {{carac=[[@{FOR_SUP}[Dé] + [[@{FOR_TEST}]][Bonus] ]] }}">
|
|
FOR</button>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<select class="sheet-selectmin" name="attr_FOR_SUP"
|
|
title="@{FOR_SUP} Caractéristique Normale ou Supérieure/Héroïque (règle p.138)">
|
|
<option value="@{JETNORMAL}" selected>N Normale</option>
|
|
<option value="@{JETSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JETSUPHERO}">H Supérieure ET Héroïque</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_FORCE" title="@{FORCE}" value="10" min="0" />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_FOR" title="@{FOR}" value="floor((@{FORCE}-10)/2)" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_FOR_BONUS" value="@{FOR_BUFF}" title="@{FOR_BONUS} Bonus au Test"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_FOR_TEST" title="@{FOR_TEST}" value="@{FOR}+@{FOR_BONUS}"
|
|
disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_dex" title="%{jet_dex} Jet de Dextérité"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Dextérité}} {{subtags=Test}} {{carac=[[@{DEX_SUP}[Dé] + [[@{DEX_TEST}]][Bonus] ]]}}">
|
|
DEX</button>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<select class="sheet-selectmin" name="attr_DEX_SUP"
|
|
title="@{DEX_SUP} Caractéristique Normale ou Supérieure/Héroïque (règle p.138)">
|
|
<option value="@{JDEX}" selected>N Normale</option>
|
|
<option value="@{JDEXSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JDEXSUPHERO}">H Supérieure ET Héroïque</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_DEXTERITE" title="@{DEXTERITE}" value="10" min="0" />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_DEX" title="@{DEX}" value="floor((@{DEXTERITE}-10)/2)" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_DEX_BONUS" value="@{DEX_BUFF}" title="@{DEX_BONUS} Bonus au Test"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_DEX_TEST" title="@{DEX_TEST}"
|
|
value="@{DEX}+@{DEX_BONUS}-(@{DEFARMUREON}*@{DEFARMUREMALUS})" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_con"
|
|
title="%{jet_con} Jet de Constitution"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Constitution}} {{subtags=Test}} {{carac=[[@{CON_SUP}[Dé] + [[@{CON_TEST}]][Bonus] ]]}}">
|
|
CON</button>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<select class="sheet-selectmin" name="attr_CON_SUP"
|
|
title="@{CON_SUP} Caractéristique Normale ou Supérieure/Héroïque (règle p.138)">
|
|
<option value="@{JETNORMAL}" selected>N Normale</option>
|
|
<option value="@{JETSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JETSUPHERO}">H Supérieure ET Héroïque</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_CONSTITUTION" title="@{CONSTITUTION}" value="10" min="0" />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_CON" title="@{CON}" value="floor((@{CONSTITUTION}-10)/2)"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_CON_BONUS" value="@{CON_BUFF}" title="@{CON_BONUS} Bonus au Test"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_CON_TEST" title="@{CON_TEST}" value="@{CON}+@{CON_BONUS}"
|
|
disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_int" title="%{jet_int} Jet d'Intelligence"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Intelligence}} {{subtags=Test}} {{carac=[[@{INT_SUP}[Dé] + [[@{INT_TEST}]][Bonus] ]]}}">
|
|
INT</button>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<select class="sheet-selectmin" name="attr_INT_SUP"
|
|
title="@{INT_SUP} Caractéristique Normale ou Supérieure/Héroïque (règle p.138)">
|
|
<option value="@{JETNORMAL}" selected>N Normale</option>
|
|
<option value="@{JETSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JETSUPHERO}">H Supérieure ET Héroïque</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_INTELLIGENCE" title="@{INTELLIGENCE}" value="10" min="0" />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_INT" title="@{INT}" value="floor((@{INTELLIGENCE}-10)/2)"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_INT_BONUS" value="@{INT_BUFF}" title="@{INT_BONUS} Bonus au Test"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_INT_TEST" title="@{INT_TEST}" value="@{INT}+@{INT_BONUS}"
|
|
disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_per" title="%{jet_per} Jet de Perception"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Perception}} {{subtags=Test}} {{carac=[[@{PER_SUP}[Dé] + [[@{PER_TEST}]][Bonus] ]]}}">
|
|
PER</button>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<select class="sheet-selectmin" name="attr_PER_SUP"
|
|
title="@{PER_SUP} Caractéristique Normale ou Supérieure/Héroïque (règle p.138)">
|
|
<option value="@{JETNORMAL}" selected>N Normale</option>
|
|
<option value="@{JETSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JETSUPHERO}">H Supérieure ET Héroïque</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_PERCEPTION" title="@{PERCEPTION}" value="10" min="0" />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_PER" title="@{PER}" value="floor((@{PERCEPTION}-10)/2)" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_PER_BONUS" value="@{PER_BUFF}" title="@{PER_BONUS} Bonus au Test"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_PER_TEST" title="@{PER_TEST}" value="@{PER}+@{PER_BONUS}"
|
|
disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_cha" title="%{jet_cha} Jet de Charisme"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Charisme}} {{subtags=Test}} {{carac=[[@{CHA_SUP}[Dé] + [[@{CHA_TEST}]][Bonus] ]]}}">
|
|
CHA</button>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<select class="sheet-selectmin" name="attr_CHA_SUP"
|
|
title="@{CHA_SUP} Caractéristique Normale ou Supérieure/Héroïque (règle p.138)">
|
|
<option value="@{JETNORMAL}" selected>N Normale</option>
|
|
<option value="@{JETSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JETSUPHERO}">H Supérieure ET Héroïque</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_CHARISME" title="@{CHARISME}" value="10" min="0" />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_CHA" title="@{CHA}" value="floor((@{CHARISME}-10)/2)" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_CHA_BONUS" value="@{CHA_BUFF}" title="@{CHA_BONUS} Bonus au Test"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_CHA_TEST" title="@{CHA_TEST}" value="@{CHA}+@{CHA_BONUS}"
|
|
disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfat" colspan="6">ÉTATS PRÉJUDICIABLES</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxinputlight" colspan="6">
|
|
|
|
<input type="radio" name="attr_ETATDE" value="20" title="@{ETATDE} Jet d'un d20 pour tous les tests"
|
|
checked> Normal</input>
|
|
|
|
<input type="radio" name="attr_ETATDE" value="12"
|
|
title="@{ETATDE} Jet d'un d12 pour tous les tests"> Affaibli</input>
|
|
|
|
<input type="checkbox" name="attr_POISSE"
|
|
title="@{POISSE} Moins bon de deux d20 pour tous les tests" value="1" /> Poisse
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxinputlight" colspan="6">
|
|
<button type="action" class="sheet-flatbtn sheet-iconbtn" name="act_cond_aveugle" title="Aveuglé">
|
|
<img class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/stephaned68/ChroniquesContemporaines/master/cond_aveugle.png" />
|
|
</button>
|
|
<button type="action" class="sheet-flatbtn sheet-iconbtn" name="act_cond_effraye" title="Effrayé">
|
|
<img class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/stephaned68/ChroniquesContemporaines/master/cond_effraye.png" />
|
|
</button>
|
|
<button type="action" class="sheet-flatbtn sheet-iconbtn" name="act_cond_etourdi" title="Etourdi">
|
|
<img class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/stephaned68/ChroniquesContemporaines/master/cond_etourdi.png" />
|
|
</button>
|
|
<button type="action" class="sheet-flatbtn sheet-iconbtn" name="act_cond_immobilise"
|
|
title="Immobilisé">
|
|
<img class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/stephaned68/ChroniquesContemporaines/master/cond_immobilise.png" />
|
|
</button>
|
|
<button type="action" class="sheet-flatbtn sheet-iconbtn" name="act_cond_panique" title="Paniqué">
|
|
<img class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/stephaned68/ChroniquesContemporaines/master/cond_panique.png" />
|
|
</button>
|
|
<button type="action" class="sheet-flatbtn sheet-iconbtn" name="act_cond_ralenti" title="Ralenti">
|
|
<img class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/stephaned68/ChroniquesContemporaines/master/cond_ralenti.png" />
|
|
</button>
|
|
<button type="action" class="sheet-flatbtn sheet-iconbtn" name="act_cond_renverse" title="Renversé">
|
|
<img class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/stephaned68/ChroniquesContemporaines/master/cond_renverse.png" />
|
|
</button>
|
|
<button type="action" class="sheet-flatbtn sheet-iconbtn" name="act_cond_surpris" title="Surpris">
|
|
<img class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/stephaned68/ChroniquesContemporaines/master/cond_surpris.png" />
|
|
</button>
|
|
<br /><span name="attr_conditions" value=""></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div>
|
|
<input type="checkbox" class="optional-block-switch" name="attr_option_cpt1" value="1"><span></span>
|
|
<div class="optional-block">
|
|
<table class="tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 65px;">
|
|
<span name="attr_cpt1_desc_abrv"></span>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_cpt1" value="0" title="@{cpt1} Autre compteur" />
|
|
<span name="attr_cpt1_desc_plur"></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<!-- FIN Caracs -->
|
|
<td style="width:100%;">
|
|
<!-- Combat + PV + défense -->
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<!-- Combat -->
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-textfat">COMBAT</td>
|
|
<td class="sheet-textbase">Base</td>
|
|
<td class="sheet-textbase">Mod.</td>
|
|
<td class="sheet-textbase">Div.</td>
|
|
<td class="sheet-textfat">Total</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 116px;">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_init" title="%{jet_init} Initiative"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Initiative}} {{subtags=Combat}} {{carac=[[@{INIT_JET} &{tracker}]]}}">
|
|
INITIATIVE</button>
|
|
</td>
|
|
<td class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_next_init"
|
|
title="%{next_init} Actions multiples si jet d'Init > 20, 30, etc..."
|
|
value="@{togm}&{template:co1} {{perso=@{selected|character_name}}} {{subtags=Initiative}} {{name=Action suivante}} {{desc=(A)ction / (M)ouvement à Init-[[10 &{tracker:-}]]}}">
|
|
Suite</button>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_INIT_CARAC" title="@{INIT_CARAC}" value="@{DEXTERITE}"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_INIT_DIV" title="@{INIT_DIV} Bonus divers"
|
|
value="@{INIT_BUFF}" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight" style="width: 48px;">
|
|
<input type="number" name="attr_INIT" value="0" hidden />
|
|
<span name="attr_INIT" title="@{INIT}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 116px;">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_cac"
|
|
title="%{jet_cac} Jet d'attaque au contact"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Au Contact}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKCAC}]][Bonus] ]]}}">
|
|
AU CONTACT</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_ATKCAC_BASE" value="0" title="@{ATKCAC_BASE} Score de base" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<select class="sheet-carac" name="attr_ATKCAC_CARAC" title="@{ATKCAC_CARAC}" size="1">
|
|
<option value="@{FOR}" selected>FOR</option>
|
|
<option value="@{DEX}">DEX</option>
|
|
<option value="@{CON}">CON</option>
|
|
<option value="@{INT}">INT</option>
|
|
<option value="@{PER}">PER</option>
|
|
<option value="@{CHA}">CHA</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_ATKCAC_DIV" title="@{ATKCAC_DIV} Bonus divers"
|
|
value="@{ATKCAC_BUFF}" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_ATKCAC" title="@{ATKCAC}"
|
|
value="@{ATKCAC_BASE}+@{ATKCAC_CARAC}+@{ATKCAC_DIV}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 116px;" style="width: 116px;">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_tir"
|
|
title="%{jet_tir} Jet d'attaque à distance"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=À Distance}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKTIR}]][Bonus] ]]}}">
|
|
À DISTANCE</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_ATKTIR_BASE" value="0" title="@{ATKTIR_BASE} Score de base" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<select class="sheet-carac" name="attr_ATKTIR_CARAC" title="@{ATKTIR_CARAC}" size="1">
|
|
<option value="@{FOR}">FOR</option>
|
|
<option value="@{DEX}" selected>DEX</option>
|
|
<option value="@{CON}">CON</option>
|
|
<option value="@{INT}">INT</option>
|
|
<option value="@{PER}">PER</option>
|
|
<option value="@{CHA}">CHA</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_ATKTIR_DIV" title="@{ATKTIR_DIV} Bonus divers"
|
|
value="@{ATKTIR_BUFF}" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_ATKTIR" title="@{ATKTIR}"
|
|
value="@{ATKTIR_BASE}+@{ATKTIR_CARAC}+@{ATKTIR_DIV}" disabled />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div>
|
|
<input type="checkbox" class="optional-block-switch" name="attr_option_atkmen" value="1"><span></span>
|
|
<div class="optional-block">
|
|
<table class="tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 116px;">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_men"
|
|
title="%{jet_men} Jet d'attaque mentale"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Mental}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKMEN}]][Bonus] ]]}}">
|
|
MENTAL</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_ATKMEN_BASE" value="0"
|
|
title="@{ATKMEN_BASE} Score de base" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<select class="sheet-carac" name="attr_ATKMEN_CARAC" title="@{ATKMEN_CARAC}" size="1">
|
|
<option value="@{FOR}">FOR</option>
|
|
<option value="@{DEX}">DEX</option>
|
|
<option value="@{CON}">CON</option>
|
|
<option value="@{INT}" selected>INT</option>
|
|
<option value="@{PER}">PER</option>
|
|
<option value="@{CHA}">CHA</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_ATKMEN_DIV" title="@{ATKMEN_DIV} Bonus divers"
|
|
value="@{ATKMEN_BUFF}" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_ATKMEN" title="@{ATKMEN}"
|
|
value="@{ATKMEN_BASE}+@{ATKMEN_CARAC}+@{ATKMEN_DIV}" disabled />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<input type="checkbox" class="optional-block-switch" name="attr_option_atkpsi" value="1"><span></span>
|
|
<div class="optional-block">
|
|
<table class="tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 116px;">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_psi"
|
|
title="%{jet_psi} Jet d'attaque PSI"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=PSI}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKPSI}]][Bonus] ]]}}">
|
|
PSI</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_ATKPSI_BASE" value="0" title="@{ATKPSI_BASE}" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_ATKPSI_CARAC" value="@{INT}"
|
|
title="@{ATKPSI_CARAC} Mod. d'INT" disabled />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_ATKPSI_DIV" value="0" title="@{ATKPSI_DIV}" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_ATKPSI"
|
|
value="@{ATKPSI_BASE}+@{ATKPSI_CARAC}+@{ATKPSI_DIV}" title="@{ATKPSI}" disabled />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<input type="checkbox" class="optional-block-switch" name="attr_option_atkpil" value="1"><span></span>
|
|
<div class="optional-block">
|
|
<table class="tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 116px;">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_pil"
|
|
title="%{jet_pil} Jet de PILotage"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Pilotage}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKMEN}]][Bonus] ]]}}">
|
|
PILOTAGE</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_ATKPIL_BASE" value="0"
|
|
title="@{ATKPIL_BASE} Score de base" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<select class="sheet-carac" name="attr_ATKPIL_CARAC" title="@{ATKPIL_CARAC}" size="1">
|
|
<option value="@{FOR}">FOR</option>
|
|
<option value="@{DEX}">DEX</option>
|
|
<option value="@{CON}">CON</option>
|
|
<option value="@{INT}">INT</option>
|
|
<option value="@{PER}" selected>PER</option>
|
|
<option value="@{CHA}">CHA</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_ATKPIL_DIV" title="@{ATKPIL_DIV} Bonus divers"
|
|
value="@{ATKPIL_BUFF}" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_ATKPIL" title="@{ATKPIL}"
|
|
value="@{ATKPIL_BASE}+@{ATKPIL_CARAC}+@{ATKPIL_DIV}" disabled />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<input type="checkbox" class="optional-block-switch" name="attr_option_atkmag" value="1" ><span></span>
|
|
<div class="optional-block">
|
|
<table class="tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 116px;">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_jet_mag"
|
|
title="%{jet_mag} Jet d'attaque magique"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Magique}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKMAG}]][Bonus] ]]}}">
|
|
MAGIQUE</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_ATKMAG_BASE" value="0"
|
|
title="@{ATKMAG_BASE} Score de base" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<select class="sheet-carac" name="attr_ATKMAG_CARAC" title="@{ATKMAG_CARAC}" size="1">
|
|
<option value="@{FOR}">FOR</option>
|
|
<option value="@{DEX}">DEX</option>
|
|
<option value="@{CON}">CON</option>
|
|
<option value="@{INT}">INT</option>
|
|
<option value="@{PER}">PER</option>
|
|
<option value="@{CHA}" selected>CHA</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_ATKMAG_DIV" title="@{ATKMAG_DIV} Bonus divers"
|
|
value="@{ATKMAG_BUFF}" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_ATKMAG" title="@{ATKMAG}"
|
|
value="@{ATKMAG_BASE}+@{ATKMAG_CARAC}+@{ATKMAG_DIV}" disabled />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<!-- FIN Combat -->
|
|
<td>
|
|
<!-- PV -->
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-textfat" colspan="2">VITALITÉ</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="action" name="act_dv_btn"
|
|
title="Progression d'un niveau">
|
|
DV</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<select class="sheet-carac" name="attr_DV" size="1" title="@{DV} Dé de Vie">
|
|
<option value="0" selected>-</option>
|
|
<option value="4">d4</option>
|
|
<option value="6">d6</option>
|
|
<option value="8">d8</option>
|
|
<option value="10">d10</option>
|
|
<option value="12">d12</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">PV</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_PV" title="@{PV} Points de Vie restants" value="0" />
|
|
/
|
|
<input type="number" name="attr_PV_max" title="@{PV|max} Points de Vie maximum" value="0" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxinput" colspan="2">
|
|
<span class="textbase">DM temp.</span>
|
|
<input type="number" name="attr_DMTEMP" title="@{DMTEMP} Dommages Temporaires" value="0" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxinput" colspan="2">
|
|
<input type="checkbox" name="attr_BLESSURE" title="@{BLESSURE}" value="1" />
|
|
<span class="textbase">Blessure Grave</span>
|
|
<input type="number" name="attr_SEUILBG" title="@{SEUILBG} Seuil de blessure grave"
|
|
value="0" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div>
|
|
<input type="checkbox" class="optional-block-switch" name="attr_option_pr" value="1" ><span></span>
|
|
<div class="optional-block">
|
|
<table class="tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 65px;">
|
|
<button type="roll" class="sheet-boxtitre" title="%{jet_pr} Jet de Récupération"
|
|
name="roll_jet_pr"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Récupération}} {{subtags=Vitalité}} {{DV=[[1d@{DV}[Dé de Vie] +[[@{CON}]][CON] +@{NIVEAU}[Niveau] ]]}}" />
|
|
PR</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_PR" value="0"
|
|
title="@{PR} Points de Récupération courants" />
|
|
/
|
|
<input type="number" name="attr_PR_max" value="0"
|
|
title="@{PR|max} Points de Récupération MAX" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div>
|
|
<input type="checkbox" class="optional-block-switch" name="attr_option_pc" value="1"
|
|
checked><span></span>
|
|
<div class="optional-block">
|
|
<table class="tabsep">
|
|
<tr>
|
|
<td class="sheet-textfatleft" colspan="2"><span name="attr_PC_DESC_PLUR"></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 65px;">
|
|
<button type="roll" class="sheet-boxtitre" title="%{jet_pc} Utilisation d'un PC"
|
|
name="roll_jet_pc"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=@{PC_DESC_PLUR}}} {{subtags=Bonus}} {{desc=@{character_name} utilise un @{PC_DESC_SNGL} et obtient un bonus de @{PC_BONUS}}}" />
|
|
<span name="attr_PC_DESC_ABRV"></span>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_PC" value="0" title="@{PC} Points de Chance courants" />
|
|
/
|
|
<input type="number" name="attr_PC_max" value="0"
|
|
title="@{PC|max} Points de Chance MAX" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<input type="checkbox" class="optional-block-switch" name="attr_option_pm" value="1"><span></span>
|
|
<div class="optional-block">
|
|
<table class="tabsep">
|
|
<tr>
|
|
<td class="sheet-textfatleft" colspan="2"><span name="attr_pm_desc"></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 65px;"><span name="attr_pm_abrv"></span></td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_PM" value="0" title="@{PM} Points de Mana ou d'Energie PSI courants" />
|
|
/
|
|
<input type="number" name="attr_PM_max" value="0"
|
|
title="@{PM|max} Points de Mana ou d'Energie PSI MAX" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<!-- FIN PV -->
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<!-- Défense -->
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-textfat">DÉFENSE</td>
|
|
<td class="sheet-textbase"> </td>
|
|
<td class="sheet-textbase">
|
|
Armure
|
|
<input type="checkbox" name="attr_DEFARMUREON" value="1" checked
|
|
title="@{DEFARMUREON} Armure portée" />
|
|
</td>
|
|
<td class="sheet-textbase">DEX</td>
|
|
<td class="sheet-textbase">Div.</td>
|
|
<td class="sheet-textbase">Action défensive</td>
|
|
<td class="sheet-textfat">Total</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 70px;">DEF</td>
|
|
<td class="sheet-boxinputlight">10+</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_DEFARMURE" title="@{DEFARMURE} Armure" value="0" />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_DEFCAR" value="@{DEX}"
|
|
title="@{DEFCAR} Modificateur de Dextérité" disabled />
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_DEFDIV" title="@{DEFDIV} Bonus divers" value="@{DEF_BUFF}"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<select class="sheet-carac" style="width: 80px" name="attr_DEFACT" size="1"
|
|
title="@{DEFACT} Actions défensives">
|
|
<option value="0" selected>-</option>
|
|
<option value="2">Simple</option>
|
|
<option value="4">Totale (L)</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="number" name="attr_DEF" value="10" hidden />
|
|
<span name="attr_DEF" title="@{DEF} Défense"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfat" colspan="2" style="text-align: right;">Malus</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_DEFARMUREMALUS"
|
|
title="@{DEFARMUREMALUS} Malus aux Tests de DEX et à l'Init. quand l'armure est portée."
|
|
value="0" />
|
|
</td>
|
|
<td class="sheet-textbase" colspan="3"> </td>
|
|
</tr>
|
|
</table>
|
|
<div>
|
|
<input type="checkbox" class="optional-block-switch" name="attr_option_defpsi"
|
|
value="1"><span></span>
|
|
<div class="optional-block">
|
|
<table class="tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 70px;">PSI</td>
|
|
<td class="sheet-boxinput">10+</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_DEFPSI_CARAC" value="@{CHA}"
|
|
title="@{DEFPSI_CARAC} Mod. de CHA" disabled />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_DEFPSI_ATK" value="@{ATKPSI_BASE}" title="@{DEFPSI_ATK}"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_DEFPSI_DIV" value="0" title="@{DEFPSI_DIV}" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_DEFPSI"
|
|
value="10+@{DEFPSI_CARAC}+@{DEFPSI_ATK}+@{DEFPSI_DIV}" title="@{DEFPSI}" disabled />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 70px;" title="Réduction(s) des DM">RD</td>
|
|
<td class="sheet-boxinput" colspan="6">
|
|
<textarea name="attr_RDS" title="@{RDS} Réduction(s) des DM"
|
|
placeholder="Réduction(s) des DM"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<!-- FIN Combat + PV + défense -->
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<!-- FIN Caracs + combat + PV + défense -->
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div>
|
|
<!-- Armes -->
|
|
<table class="sheet-tabsep" title="repeating_armes">
|
|
<tr>
|
|
<td class="sheet-textfatleft" style="width:150px;">ARMES / ATTAQUES</td>
|
|
<td class="sheet-textbase" style="width:150px;">ATTAQUE</td>
|
|
<td class="sheet-textbase" style="width:20px;">CRIT.</td>
|
|
<td class="sheet-textbase" style="width:215px;">DM</td>
|
|
<td class="sheet-textbase" style="width:40px;">PORTÉE</td>
|
|
<td class="sheet-textbase">SPÉCIAL</td>
|
|
</tr>
|
|
</table>
|
|
<fieldset class="repeating_armes">
|
|
<div class="options-block">
|
|
<input class="options-flag" name="attr_armeoptflag" type="checkbox"
|
|
title="Montrer/cacher les options"><span>y</span>
|
|
<div>
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td>
|
|
<button type="roll" class="sheet-neutre" name="roll_pjatk" title="%{repeating_armes_$N_pjatk}"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Attaque}} {{name=@{armenom}}} {{portee=@{armeportees}}} {{desc=@{armejetn} @{armelim} @{tir_special}}} {{@{armeatt}[[@{armejetd}cs>@{armecrit}cf<@{armeinct}[Dé] + [[@{armeatk}]][Attaque] + [[@{armeatkdiv}]][Bonus] + (@{distance}) + (@{couvert}) + (@{visibilite}) + (@{armebuff}) ]]}} {{@{armedmg}[[[[@{armedmnbde}d@{armedmde}@{armedmrel}@{armedmvrel}]][Dé DM] + ([[@{armedmcar}]])[Mod.DM] + (@{armedmdiv})[Bonus DM] + (@{armebuffdm}) ]]}} {{dmtype=@{armedmtype}}} {{degats2=@{armedmg2}}} {{dm2type=@{armedm2_desc}}} {{special=@{armespec}}}" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="min-width:125px;">
|
|
<input type="text" name="attr_armenom" title="@{armenom}" style="width: 125px; font-weight: bold;"
|
|
placeholder="Arme/attaque" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="min-width: 135px;">
|
|
<input type="checkbox" name="attr_armeatt" title="@{armeatt} Faire un jet d'attaque pour toucher"
|
|
value="attaque=" checked="checked" />
|
|
<select class="sheet-carac" style="width: 87px;" name="attr_armeatk" title="@{armeatk}" size="1">
|
|
<option value="@{ATKCAC}" selected>CONTACT</option>
|
|
<option value="@{ATKTIR}">DISTANCE</option>
|
|
<option value="@{ATKMEN}">MENTAL</option>
|
|
<option value="@{ATKMAG}">MAGIE</option>
|
|
</select>+
|
|
<input type="number" style="width: 32px;" name="attr_armeatkdiv" value="0"
|
|
title="@{armeatkdiv} Bonus d'attaque divers" />
|
|
<input type="hidden" name="attr_armebuff" value="" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="text-align: right;">
|
|
<input type="number" name="attr_armecrit" style="width:32px;" min="2" max="20" value="20"
|
|
title="@{armecrit} Seuil de Critique (par défaut 20)" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="checkbox" name="attr_armedmg" title="@{armedmg} Faire un jet de dommages"
|
|
value="degats=" checked="checked" />
|
|
<input type="number" style="width:32px;" name="attr_armedmnbde" value="1"
|
|
title="@{armedmnbde} Nombre de dés de dommage" />
|
|
<select class="sheet-carac" style="width:47px;" name="attr_armedmde" size="1"
|
|
title="@{armedmde} Dé de dommage">
|
|
<optgroup label="Normal">
|
|
<option value="3">d3</option>
|
|
<option value="4">d4</option>
|
|
<option value="6">d6</option>
|
|
<option value="8">d8</option>
|
|
<option value="10">d10</option>
|
|
<option value="12">d12</option>
|
|
</optgroup>
|
|
<optgroup label="Sans limite">
|
|
<option value="3!">d3</option>
|
|
<option value="4!">d4</option>
|
|
<option value="6!" selected>d6</option>
|
|
<option value="8!">d8</option>
|
|
<option value="10!">d10</option>
|
|
<option value="12!">d12</option>
|
|
</optgroup>
|
|
</select>+
|
|
<select class="sheet-carac" style="width:52px;" name="attr_armedmcar" size="1"
|
|
title="@{armedmcar} Modificateur aux dommages">
|
|
<option value="0" selected>-</option>
|
|
<optgroup label="Mod. de Base">
|
|
<option value="@{FOR}">FOR</option>
|
|
<option value="@{DEX}">DEX</option>
|
|
<option value="@{CON}">CON</option>
|
|
<option value="@{INT}">INT</option>
|
|
<option value="@{PER}">PER</option>
|
|
<option value="@{CHA}">CHA</option>
|
|
</optgroup>
|
|
<optgroup label="Mod. de Test">
|
|
<option value="@{FOR_TEST}">FOR</option>
|
|
<option value="@{DEX_TEST}">DEX</option>
|
|
<option value="@{CON_TEST}">CON</option>
|
|
<option value="@{INT_TEST}">INT</option>
|
|
<option value="@{PER_TEST}">PER</option>
|
|
<option value="@{CHA_TEST}">CHA</option>
|
|
</optgroup>
|
|
</select>+
|
|
<input type="number" style="width:32px;" name="attr_armedmdiv" value="0"
|
|
title="@{armedmdiv} Bonus de dommage divers" />
|
|
<input type="hidden" name="attr_armebuffdm" value="" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="min-width:50px;">
|
|
<input type="text" name="attr_armeportee" placeholder="Portée" title="@{armeportee}" />
|
|
<input type="hidden" name="attr_armeportees" value="" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 100%;">
|
|
<textarea name="attr_armespec" placeholder="Notes, capacités spéciales, effet ..."
|
|
title="@{armespec}"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="options">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 18px;"> </td>
|
|
<td class="sheet-boxinputleft" style="width: 275px;">
|
|
<input type="checkbox" name="attr_arme_al" style="width: 12px;"
|
|
title="@{armelim} Action limitée (L)" value="1" />
|
|
<input type="hidden" name="attr_armelim" value="" />
|
|
<input type="text" name="attr_armejetn" class="sheet-carac" style="width: 230px; font-weight: bold;"
|
|
placeholder="Nom de l'attaque" title="@{armejetn}" />
|
|
<select name="attr_armejetd" class="sheet-carac" style="width: 30px;"
|
|
title="@{armejetd} Jet d'attaque : Normal, 'Risque' = avec d12, 'Expert' = meilleur de deux d20">
|
|
<option value="@{JETNORMAL}" selected>N - Normal</option>
|
|
<option value="@{JETRISQUE}">R - Risque (d12)</option>
|
|
<option value="@{JETINF}">H - Handicap (min 2 d20)</option>
|
|
<option value="@{JETSUP}">E - Expert (max 2 d20)</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 32px;">
|
|
<input type="number" class="sheet-carac" style="width: 32px;" name="attr_armeinct" min="1" max="19"
|
|
value="1" title="@{armeinct} Seuil d'incident de tir (par défaut 1)" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 215px;">
|
|
<input type="text" class="sheet-carac" style="width: 115px;" name="attr_armedmtype"
|
|
title="@{armedmtype}" placeholder="Type DM">
|
|
<select class="sheet-carac" style="width: 40px;" name="attr_armedmrel"
|
|
title="@{armedmrel} Relance dés de DM = (r)eroll -- 1 seule fois = (r)eroll (o)nce">
|
|
<option value="" selected>-x- Pas de relance DM</option>
|
|
<option value="r">-r- Relance DM (r)</option>
|
|
<option value="ro">-o- Relance DM 1 seule fois (ro)</option>
|
|
</select>
|
|
<input type="text" class="sheet-carac" style="width: 45px;" name="attr_armedmvrel"
|
|
title="@{armedmvrel} Seuil de relance (relance les 1 si non indiqué)" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 240px;" colspan="2">
|
|
<input type="text" class="sheet-carac" style="width: 50px;" name="attr_armedm2_de" placeholder="1d6"
|
|
title="@{armedm2_de}" />
|
|
<input type="text" class="sheet-carac" style="width: 190px;" name="attr_armedm2_desc"
|
|
placeholder="Type de dommage supp." title="@{armedm2_desc}" />
|
|
<input type="hidden" name="attr_armedmg2" value="" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div>
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-textfat">Modificateurs d'Attaque</td>
|
|
<td class="sheet-textfat">Modificateurs de Dommages</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<input type="hidden" name="attr_tir_special" value="" />
|
|
<select style="width: 130px;" name="attr_distance" title="@{distance} Mod. de portée"
|
|
value="0[Portée normale]">
|
|
<optgroup label="Portée">
|
|
<option value="+3[Portée courte]">Courte (+3)</option>
|
|
<option value="0[Portée normale]" selected>Normale</option>
|
|
<option value="-5[Portée double]">Double (-5)</option>
|
|
<option value="-10[Portée triple]">Triple (-10)</option>
|
|
</optgroup>
|
|
</select>
|
|
<select style="width: 130px;" name="attr_couvert" title="@{couvert} Mod. de couverture"
|
|
value="0[Aucun couvert]">
|
|
<optgroup label="Couvert">
|
|
<option value="0[Aucun couvert]" selected>Aucun</option>
|
|
<option value="-2[Couvert partiel]">Partiel (-2)</option>
|
|
<option value="-5[Couvert important]">Important (-5)</option>
|
|
</optgroup>
|
|
</select>
|
|
<select style="width: 130px;" name="attr_visibilite" title="@{visibilite} Mod. visibilité cible"
|
|
value="0[Cible visible]">
|
|
<optgroup label="Cible">
|
|
<option value="0[Cible visible]" selected>Visible</option>
|
|
<option value="-2[Cible au CaC]">Cible au CaC (-2)</option>
|
|
<option value="-5[Cible masquée par allié]">Masquée par allié (-5)</option>
|
|
</optgroup>
|
|
</select>
|
|
</td>
|
|
<td> </td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 50%;">
|
|
<fieldset class="repeating_modatk">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 20px;">
|
|
<input type="checkbox" name="attr_modatkon" value="1" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" class="sheet-carac" name="attr_modatknom" placeholder="Nom" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" class="sheet-carac" name="attr_modatkval" placeholder="Valeur" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</td>
|
|
<td style="width: 50%;">
|
|
<fieldset class="repeating_moddm">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 20px;">
|
|
<input type="checkbox" name="attr_moddmon" value="1" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" class="sheet-carac" name="attr_moddmnom" placeholder="Nom" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" class="sheet-carac" name="attr_moddmval" placeholder="Valeur" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
</div>
|
|
<div class="sheet-tab-content sheet-tab2">
|
|
<div>
|
|
<input class="block-switch" name="attr_setup_abilities" type="checkbox">
|
|
<div class="block-hidden">
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-textfatleft" colspan="5">
|
|
CAPACITÉS DU PERSONNAGE
|
|
<span class="sheet-setup-abilities sheet-textbase">Edition <input type="checkbox" name="attr_setup_abilities"
|
|
title="Editer les capacités"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px;"> </td>
|
|
<td class="sheet-boxtitresmall">Voie 1</td>
|
|
<td class="sheet-boxtitresmall">Voie 2</td>
|
|
<td class="sheet-boxtitresmall">Voie 3</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie1nom"
|
|
title="@{voie1nom}" placeholder="Nom de la Voie n°1" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie2nom"
|
|
title="@{voie2nom}" placeholder="Nom de la Voie n°2" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie3nom"
|
|
title="@{voie3nom}" placeholder="Nom de la Voie n°3" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">1</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v1r1" value="1" />
|
|
<span name="attr_voie1-t1" class="sheet-boxability" title="@{voie1-t1}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v1r1" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie1-t1} }} {{desc=**@{voie1nom}, rang [[1]]** }} {{text=@{voie1-1} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie1-1" class="sheet-boxability" title="@{voie1-1}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v2r1" value="1" />
|
|
<span name="attr_voie2-t1" class="sheet-boxability" title="@{voie2-t1}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v2r1" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie2-t1} }} {{desc=**@{voie2nom}, rang [[1]]** }} {{text=@{voie2-1} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie2-1" class="sheet-boxability" title="@{voie2-1}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v3r1" value="1" />
|
|
<span name="attr_voie3-t1" class="sheet-boxability" title="@{voie3-t1}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v3r1" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie3-t1} }} {{desc=**@{voie3nom}, rang [[1]]** }} {{text=@{voie3-1} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie3-1" class="sheet-boxability" title="@{voie3-1}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">2</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v1r2" value="1" />
|
|
<span name="attr_voie1-t2" class="sheet-boxability" title="@{voie1-t2}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v1r2" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie1-t2} }} {{desc=**@{voie1nom}, rang [[2]]** }} {{text=@{voie1-2} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie1-2" class="sheet-boxability" title="@{voie1-2}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v2r2" value="1" />
|
|
<span name="attr_voie2-t2" class="sheet-boxability" title="@{voie2-t2}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v2r2" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie2-t2} }} {{desc=**@{voie2nom}, rang [[2]]** }} {{text=@{voie2-2} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie2-2" class="sheet-boxability" title="@{voie2-2}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v3r2" value="1" />
|
|
<span name="attr_voie3-t2" class="sheet-boxability" title="@{voie3-t2}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v3r2" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie3-t2} }} {{desc=**@{voie3nom}, rang [[2]]** }} {{text=@{voie3-2} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie3-2" class="sheet-boxability" title="@{voie3-2}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">3</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v1r3" value="1" />
|
|
<span name="attr_voie1-t3" class="sheet-boxability" title="@{voie1-t3}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v1r3" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie1-t3} }} {{desc=**@{voie1nom}, rang [[3]]** }} {{text=@{voie1-3} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie1-3" class="sheet-boxability" title="@{voie1-3}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v2r3" value="1" />
|
|
<span name="attr_voie2-t3" class="sheet-boxability" title="@{voie2-t3}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v2r3" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie2-t3} }} {{desc=**@{voie2nom}, rang [[3]]** }} {{text=@{voie2-3} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie2-3" class="sheet-boxability" title="@{voie2-3}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v3r3" value="1" />
|
|
<span name="attr_voie3-t3" class="sheet-boxability" title="@{voie3-t3}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v3r3" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie3-t3} }} {{desc=**@{voie3nom}, rang [[3]]** }} {{text=@{voie3-3} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie3-3" class="sheet-boxability" title="@{voie3-3}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">4</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v1r4" value="1" />
|
|
<span name="attr_voie1-t4" class="sheet-boxability" title="@{voie1-t4}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v1r4" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie1-t4} }} {{desc=**@{voie1nom}, rang [[4]]** }} {{text=@{voie1-4} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie1-4" class="sheet-boxability" title="@{voie1-4}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v2r4" value="1" />
|
|
<span name="attr_voie2-t4" class="sheet-boxability" title="@{voie2-t4}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v2r4" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie2-t4} }} {{desc=**@{voie2nom}, rang [[4]]** }} {{text=@{voie2-4} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie2-4" class="sheet-boxability" title="@{voie2-4}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v3r4" value="1" />
|
|
<span name="attr_voie3-t4" class="sheet-boxability" title="@{voie3-t4}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v3r4" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie3-t4} }} {{desc=**@{voie3nom}, rang [[4]]** }} {{text=@{voie3-4} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie3-4" class="sheet-boxability" title="@{voie3-4}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">5</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v1r5" value="1" />
|
|
<span name="attr_voie1-t5" class="sheet-boxability" title="@{voie1-t5}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v1r5" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie1-t5} }} {{desc=**@{voie1nom}, rang [[5]]** }} {{text=@{voie1-5} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie1-5" class="sheet-boxability" title="@{voie1-5}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v2r5" value="1" />
|
|
<span name="attr_voie2-t5" class="sheet-boxability" title="@{voie2-t5}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v2r5" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie2-t5} }} {{desc=**@{voie2nom}, rang [[5]]** }} {{text=@{voie2-5} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie2-5" class="sheet-boxability" title="@{voie2-5}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v3r5" value="1" />
|
|
<span name="attr_voie3-t5" class="sheet-boxability" title="@{voie3-t5}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v3r5" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie3-t5} }} {{desc=**@{voie3nom}, rang [[5]]** }} {{text=@{voie3-5} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie3-5" class="sheet-boxability" title="@{voie3-5}"></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px;"> </td>
|
|
<td class="sheet-boxtitresmall">Voie 4</td>
|
|
<td class="sheet-boxtitresmall">Voie 5</td>
|
|
<td class="sheet-boxtitresmall">Voie 6</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie4nom"
|
|
title="@{voie4nom}" placeholder="Nom de la Voie n°4" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie5nom"
|
|
title="@{voie5nom}" placeholder="Nom de la Voie n°5" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie6nom"
|
|
title="@{voie6nom}" placeholder="Nom de la Voie n°6" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">1</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v4r1" value="1" />
|
|
<span name="attr_voie4-t1" class="sheet-boxability" title="@{voie4-t1}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v4r1" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie4-t1} }} {{desc=**@{voie4nom}, rang [[1]]** }} {{text=@{voie4-1} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie4-1" class="sheet-boxability" title="@{voie4-1}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v5r1" value="1" />
|
|
<span name="attr_voie5-t1" class="sheet-boxability" title="@{voie5-t1}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v5r1" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie5-t1} }} {{desc=**@{voie5nom}, rang [[1]]** }} {{text=@{voie5-1} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie5-1" class="sheet-boxability" title="@{voie5-1}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v6r1" value="1" />
|
|
<span name="attr_voie6-t1" class="sheet-boxability" title="@{voie6-t1}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v6r1" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie6-t1} }} {{desc=**@{voie6nom}, rang [[1]]** }} {{text=@{voie6-1} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie6-1" class="sheet-boxability" title="@{voie6-1}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">2</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v4r2" value="1" />
|
|
<span name="attr_voie4-t2" class="sheet-boxability" title="@{voie4-t2}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v4r2" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie4-t2} }} {{desc=**@{voie4nom}, rang [[2]]** }} {{text=@{voie4-2} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie4-2" class="sheet-boxability" title="@{voie4-2}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v5r2" value="1" />
|
|
<span name="attr_voie5-t2" class="sheet-boxability" title="@{voie5-t2}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v5r2" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie5-t2} }} {{desc=**@{voie5nom}, rang [[2]]** }} {{text=@{voie5-2} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie5-2" class="sheet-boxability" title="@{voie5-2}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v6r2" value="1" />
|
|
<span name="attr_voie6-t2" class="sheet-boxability" title="@{voie6-t2}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v6r2" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie6-t2} }} {{desc=**@{voie6nom}, rang [[2]]** }} {{text=@{voie6-2} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie6-2" class="sheet-boxability" title="@{voie6-2}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">3</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v4r3" value="1" />
|
|
<span name="attr_voie4-t3" class="sheet-boxability" title="@{voie4-t3}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v4r3" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie4-t3} }} {{desc=**@{voie4nom}, rang [[3]]** }} {{text=@{voie4-3} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie4-3" class="sheet-boxability" title="@{voie4-3}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v5r3" value="1" />
|
|
<span name="attr_voie5-t3" class="sheet-boxability" title="@{voie5-t3}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v5r3" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie5-t3} }} {{desc=**@{voie5nom}, rang [[3]]** }} {{text=@{voie5-3} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie5-3" class="sheet-boxability" title="@{voie5-3}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v6r3" value="1" />
|
|
<span name="attr_voie6-t3" class="sheet-boxability" title="@{voie6-t3}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v6r3" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie6-t3} }} {{desc=**@{voie6nom}, rang [[3]]** }} {{text=@{voie6-3} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie6-3" class="sheet-boxability" title="@{voie6-3}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">4</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v4r4" value="1" />
|
|
<span name="attr_voie4-t4" class="sheet-boxability" title="@{voie4-t4}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v4r4" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie4-t4} }} {{desc=**@{voie4nom}, rang [[4]]** }} {{text=@{voie4-4} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie4-4" class="sheet-boxability" title="@{voie4-4}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v5r4" value="1" />
|
|
<span name="attr_voie5-t4" class="sheet-boxability" title="@{voie5-t4}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v5r4" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie5-t4} }} {{desc=**@{voie5nom}, rang [[4]]** }} {{text=@{voie5-4} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie5-4" class="sheet-boxability" title="@{voie5-4}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v6r4" value="1" />
|
|
<span name="attr_voie6-t4" class="sheet-boxability" title="@{voie6-t4}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v6r4" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie6-t4} }} {{desc=**@{voie6nom}, rang [[4]]** }} {{text=@{voie6-4} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie6-4" class="sheet-boxability" title="@{voie6-4}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">5</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v4r5" value="1" />
|
|
<span name="attr_voie4-t5" class="sheet-boxability" title="@{voie4-t5}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v4r5" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie4-t5} }} {{desc=**@{voie4nom}, rang [[5]]** }} {{text=@{voie4-5} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie4-5" class="sheet-boxability" title="@{voie4-5}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v5r5" value="1" />
|
|
<span name="attr_voie5-t5" class="sheet-boxability" title="@{voie5-t5}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v5r5" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie5-t5} }} {{desc=**@{voie5nom}, rang [[5]]** }} {{text=@{voie5-5} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie5-5" class="sheet-boxability" title="@{voie5-5}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v6r5" value="1" />
|
|
<span name="attr_voie6-t5" class="sheet-boxability" title="@{voie6-t5}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v6r5" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie6-t5} }} {{desc=**@{voie6nom}, rang [[5]]** }} {{text=@{voie6-5} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie6-5" class="sheet-boxability" title="@{voie6-5}"></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div>
|
|
<input type="checkbox" class="sheet-block-switch" name="attr_voies789"><span>Plus de voies</span>
|
|
<div class="sheet-block-hidden"></div>
|
|
<div class="sheet-block-show">
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px;"> </td>
|
|
<td class="sheet-boxtitresmall">Voie 7</td>
|
|
<td class="sheet-boxtitresmall">Voie 8</td>
|
|
<td class="sheet-boxtitresmall">Voie 9</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie7nom"
|
|
title="@{voie7nom}" placeholder="Nom de la Voie n°7" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie8nom"
|
|
title="@{voie8nom}" placeholder="Nom de la Voie n°8" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie9nom"
|
|
title="@{voie9nom}" placeholder="Nom de la Voie n°9" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">1</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v7r1" value="1" />
|
|
<span name="attr_voie7-t1" class="sheet-boxability" title="@{voie7-t1}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v7r1" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie7-t1} }} {{desc=**@{voie7nom}, rang [[1]]** }} {{text=@{voie7-1} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie7-1" class="sheet-boxability" title="@{voie7-1}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v8r1" value="1" />
|
|
<span name="attr_voie8-t1" class="sheet-boxability" title="@{voie8-t1"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v8r1" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie8-t1} }} {{desc=**@{voie8nom}, rang [[1]]** }} {{text=@{voie8-1} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie8-1" class="sheet-boxability" title="@{voie8-1"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v9r1" value="1" />
|
|
<span name="attr_voie9-t1" class="sheet-boxability" title="@{voie9-t1}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v9r1" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie9-t1} }} {{desc=**@{voie9nom}, rang [[1]]** }} {{text=@{voie9-1} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie9-1" class="sheet-boxability" title="@{voie9-1}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">2</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v7r2" value="1" />
|
|
<span name="attr_voie7-t2" class="sheet-boxability" title="@{voie7-t2}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v7r2" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie7-t2} }} {{desc=**@{voie7nom}, rang [[2]]** }} {{text=@{voie7-2} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie7-2" class="sheet-boxability" title="@{voie7-2}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v8r2" value="1" />
|
|
<span name="attr_voie8-t2" class="sheet-boxability" title="@{voie8-t2}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v8r2" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie8-t2} }} {{desc=**@{voie8nom}, rang [[2]]** }} {{text=@{voie8-2} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie8-2" class="sheet-boxability" title="@{voie8-2}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v9r2" value="1" />
|
|
<span name="attr_voie9-t2" class="sheet-boxability" title="@{voie9-t2}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v9r2" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie9-t2} }} {{desc=**@{voie9nom}, rang [[2]]** }} {{text=@{voie9-2} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie9-2" class="sheet-boxability" title="@{voie9-2}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">3</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v7r3" value="1" />
|
|
<span name="attr_voie7-t3" class="sheet-boxability" title="@{voie7-t3}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v7r3" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie7-t3} }} {{desc=**@{voie7nom}, rang [[3]]** }} {{text=@{voie7-3} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie7-3" class="sheet-boxability" title="@{voie7-3}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v8r3" value="1" />
|
|
<span name="attr_voie8-t3" class="sheet-boxability" title="@{voie8-t3}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v8r3" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie8-t3} }} {{desc=**@{voie8nom}, rang [[3]]** }} {{text=@{voie8-3} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie8-3" class="sheet-boxability" title="@{voie8-3}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v9r3" value="1" />
|
|
<span name="attr_voie9-t3" class="sheet-boxability" title="@{voie9-t3}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v9r3" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie9-t3} }} {{desc=**@{voie9nom}, rang [[3]]** }} {{text=@{voie9-3} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie9-3" class="sheet-boxability" title="@{voie9-3}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">4</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v7r4" value="1" />
|
|
<span name="attr_voie7-t4" class="sheet-boxability" title="@{voie7-t4}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v7r4" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie7-t4} }} {{desc=**@{voie7nom}, rang [[4]]** }} {{text=@{voie7-4} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie7-4" class="sheet-boxability" title="@{voie7-4}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v8r4" value="1" />
|
|
<span name="attr_voie8-t4" class="sheet-boxability" title="@{voie8-t4}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v8r4" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie8-t4} }} {{desc=**@{voie8nom}, rang [[4]]** }} {{text=@{voie8-4} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie8-4" class="sheet-boxability" title="@{voie8-4}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v9r4" value="1" />
|
|
<span name="attr_voie9-t4" class="sheet-boxability" title="@{voie9-t4}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v9r4" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie9-t4} }} {{desc=**@{voie9nom}, rang [[4]]** }} {{text=@{voie9-4} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie9-4" class="sheet-boxability" title="@{voie9-4}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">5</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v7r5" value="1" />
|
|
<span name="attr_voie7-t5" class="sheet-boxability" title="@{voie7-t5}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v7r5" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie7-t5} }} {{desc=**@{voie7nom}, rang [[5]]** }} {{text=@{voie7-5} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie7-5" class="sheet-boxability" title="@{voie7-5}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v8r5" value="1" />
|
|
<span name="attr_voie8-t5" class="sheet-boxability" title="@{voie8-t5}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v8r5" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie8-t5} }} {{desc=**@{voie8nom}, rang [[5]]** }} {{text=@{voie8-5} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie8-5" class="sheet-boxability" title="@{voie8-5}"></span>
|
|
</td>
|
|
<td class="sheet-boxvoie sheet-boxtext">
|
|
<input type="checkbox" name="attr_v9r5" value="1" />
|
|
<span name="attr_voie9-t5" class="sheet-boxability" title="@{voie9-t5}"></span>
|
|
<span style="float: right;">
|
|
<button type="roll" class="sheet-flatbtn sheet-iconbtn" name="roll_v9r5" title=""
|
|
value="&{template:co1} {{perso=@{character_name} }} {{subtags=Capacité }} {{name=@{voie9-t5} }} {{desc=**@{voie9nom}, rang [[5]]** }} {{text=@{voie9-5} }}">w</button>
|
|
</span>
|
|
<br><span name="attr_voie9-5" class="sheet-boxability" title="@{voie9-5}"></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="block-show">
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-textfatleft" colspan="5">
|
|
CAPACITÉS DU PERSONNAGE
|
|
<span class="sheet-setup-abilities">Affichage <input type="checkbox" name="attr_setup_abilities"
|
|
title="Editer les capacités"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px;"> </td>
|
|
<td class="sheet-boxtitresmall">Voie 1</td>
|
|
<td class="sheet-boxtitresmall">Voie 2</td>
|
|
<td class="sheet-boxtitresmall">Voie 3</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie1nom"
|
|
title="@{voie1nom}" placeholder="Nom de la Voie n°1" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie2nom"
|
|
title="@{voie2nom}" placeholder="Nom de la Voie n°2" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie3nom"
|
|
title="@{voie3nom}" placeholder="Nom de la Voie n°3" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">1</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v1r1" value="1" />
|
|
<input type="text" name="attr_voie1-t1" class="sheet-boxability" title="@{voie1-t1}" />
|
|
<br><textarea name="attr_voie1-1" class="sheet-boxability" title="@{voie1-1}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v2r1" value="1" />
|
|
<input type="text" name="attr_voie2-t1" class="sheet-boxability" title="@{voie2-t1}" />
|
|
<br><textarea name="attr_voie2-1" class="sheet-boxability" title="@{voie2-1}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v3r1" value="1" />
|
|
<input type="text" name="attr_voie3-t1" class="sheet-boxability" title="@{voie3-t1}" />
|
|
<br><textarea name="attr_voie3-1" class="sheet-boxability" title="@{voie3-1}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">2</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v1r2" value="1" />
|
|
<input type="text" name="attr_voie1-t2" class="sheet-boxability" title="@{voie1-t2}" />
|
|
<br><textarea name="attr_voie1-2" class="sheet-boxability" title="@{voie1-2}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v2r2" value="1" />
|
|
<input type="text" name="attr_voie2-t2" class="sheet-boxability" title="@{voie2-t2}" />
|
|
<br><textarea name="attr_voie2-2" class="sheet-boxability" title="@{voie2-2}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v3r2" value="1" />
|
|
<input type="text" name="attr_voie3-t2" class="sheet-boxability" title="@{voie3-t2}" />
|
|
<br><textarea name="attr_voie3-2" class="sheet-boxability" title="@{voie3-2}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">3</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v1r3" value="1" />
|
|
<input type="text" name="attr_voie1-t3" class="sheet-boxability" title="@{voie1-t3}" />
|
|
<br><textarea name="attr_voie1-3" class="sheet-boxability" title="@{voie1-3}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v2r3" value="1" />
|
|
<input type="text" name="attr_voie2-t3" class="sheet-boxability" title="@{voie2-t3}" />
|
|
<br><textarea name="attr_voie2-3" class="sheet-boxability" title="@{voie2-3}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v3r3" value="1" />
|
|
<input type="text" name="attr_voie3-t3" class="sheet-boxability" title="@{voie3-t3}" />
|
|
<br><textarea name="attr_voie3-3" class="sheet-boxability" title="@{voie3-3}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">4</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v1r4" value="1" />
|
|
<input type="text" name="attr_voie1-t4" class="sheet-boxability" title="@{voie1-t4}" />
|
|
<br><textarea name="attr_voie1-4" class="sheet-boxability" title="@{voie1-4}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v2r4" value="1" />
|
|
<input type="text" name="attr_voie2-t4" class="sheet-boxability" title="@{voie2-t4}" />
|
|
<br><textarea name="attr_voie2-4" class="sheet-boxability" title="@{voie2-4}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v3r4" value="1" />
|
|
<input type="text" name="attr_voie3-t4" class="sheet-boxability" title="@{voie3-t4}" />
|
|
<br><textarea name="attr_voie3-4" class="sheet-boxability" title="@{voie3-4}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">5</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v1r5" value="1" />
|
|
<input type="text" name="attr_voie1-t5" class="sheet-boxability" title="@{voie1-t5}" />
|
|
<br><textarea name="attr_voie1-5" class="sheet-boxability" title="@{voie1-5}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v2r5" value="1" />
|
|
<input type="text" name="attr_voie2-t5" class="sheet-boxability" title="@{voie2-t5}" />
|
|
<br><textarea name="attr_voie2-5" class="sheet-boxability" title="@{voie2-5}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v3r5" value="1" />
|
|
<input type="text" name="attr_voie3-t5" class="sheet-boxability" title="@{voie3-t5}" />
|
|
<br><textarea name="attr_voie3-5" class="sheet-boxability" title="@{voie3-5}"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px;"> </td>
|
|
<td class="sheet-boxtitresmall">Voie 4</td>
|
|
<td class="sheet-boxtitresmall">Voie 5</td>
|
|
<td class="sheet-boxtitresmall">Voie 6</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie4nom"
|
|
title="@{voie4nom}" placeholder="Nom de la Voie n°4" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie5nom"
|
|
title="@{voie5nom}" placeholder="Nom de la Voie n°5" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie6nom"
|
|
title="@{voie6nom}" placeholder="Nom de la Voie n°6" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">1</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v4r1" value="1" />
|
|
<input type="text" name="attr_voie4-t1" class="sheet-boxability" title="@{voie4-t1}" />
|
|
<br><textarea name="attr_voie4-1" class="sheet-boxability" title="@{voie4-1}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v5r1" value="1" />
|
|
<input type="text" name="attr_voie5-t1" class="sheet-boxability" title="@{voie5-t1}" />
|
|
<br><textarea name="attr_voie5-1" class="sheet-boxability" title="@{voie5-1}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v6r1" value="1" />
|
|
<input type="text" name="attr_voie6-t1" class="sheet-boxability" title="@{voie6-t1}" />
|
|
<br><textarea name="attr_voie6-1" class="sheet-boxability" title="@{voie6-1}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">2</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v4r2" value="1" />
|
|
<input type="text" name="attr_voie4-t2" class="sheet-boxability" title="@{voi41-t2}" />
|
|
<br><textarea name="attr_voie4-2" class="sheet-boxability" title="@{voie4-2}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v5r2" value="1" />
|
|
<input type="text" name="attr_voie5-t2" class="sheet-boxability" title="@{voie5-t2}" />
|
|
<br><textarea name="attr_voie5-2" class="sheet-boxability" title="@{voie5-2}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v6r2" value="1" />
|
|
<input type="text" name="attr_voie6-t2" class="sheet-boxability" title="@{voie6-t2}" />
|
|
<br><textarea name="attr_voie6-2" class="sheet-boxability" title="@{voie6-2}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">3</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v4r3" value="1" />
|
|
<input type="text" name="attr_voie4-t3" class="sheet-boxability" title="@{voie4-t3}" />
|
|
<br><textarea name="attr_voie4-3" class="sheet-boxability" title="@{voie4-3}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v5r3" value="1" />
|
|
<input type="text" name="attr_voie5-t3" class="sheet-boxability" title="@{voie5-t3}" />
|
|
<br><textarea name="attr_voie5-3" class="sheet-boxability" title="@{voie5-3}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v6r3" value="1" />
|
|
<input type="text" name="attr_voie6-t3" class="sheet-boxability" title="@{voie6-t3}" />
|
|
<br><textarea name="attr_voie6-3" class="sheet-boxability" title="@{voie6-3}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">4</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v4r4" value="1" />
|
|
<input type="text" name="attr_voie4-t4" class="sheet-boxability" title="@{voie4-t4}" />
|
|
<br><textarea name="attr_voie4-4" class="sheet-boxability" title="@{voie4-4}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v5r4" value="1" />
|
|
<input type="text" name="attr_voie5-t4" class="sheet-boxability" title="@{voie5-t4}" />
|
|
<br><textarea name="attr_voie5-4" class="sheet-boxability" title="@{voie5-4}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v6r4" value="1" />
|
|
<input type="text" name="attr_voie6-t4" class="sheet-boxability" title="@{voie6-t4}" />
|
|
<br><textarea name="attr_voie6-4" class="sheet-boxability" title="@{voie6-4}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">5</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v4r5" value="1" />
|
|
<input type="text" name="attr_voie4-t5" class="sheet-boxability" title="@{voie4-t5}" />
|
|
<br><textarea name="attr_voie4-5" class="sheet-boxability" title="@{voie4-5}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v5r5" value="1" />
|
|
<input type="text" name="attr_voie5-t5" class="sheet-boxability" title="@{voie5-t5}" />
|
|
<br><textarea name="attr_voie5-5" class="sheet-boxability" title="@{voie5-5}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v6r5" value="1" />
|
|
<input type="text" name="attr_voie6-t5" class="sheet-boxability" title="@{voie6-t5}" />
|
|
<br><textarea name="attr_voie6-5" class="sheet-boxability" title="@{voie6-5}"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div>
|
|
<input type="checkbox" class="sheet-block-switch" name="attr_voies789"><span>Plus de voies</span>
|
|
<div class="sheet-block-hidden"></div>
|
|
<div class="sheet-block-show">
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px;"> </td>
|
|
<td class="sheet-boxtitresmall">Voie 7</td>
|
|
<td class="sheet-boxtitresmall">Voie 8</td>
|
|
<td class="sheet-boxtitresmall">Voie 9</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie7nom"
|
|
title="@{voie7nom}" placeholder="Nom de la Voie n°7" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie8nom"
|
|
title="@{voie8nom}" placeholder="Nom de la Voie n°8" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="text" style="font-weight: bold;text-align: center;" name="attr_voie9nom"
|
|
title="@{voie9nom}" placeholder="Nom de la Voie n°9" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">1</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v7r1" value="1" />
|
|
<input type="text" name="attr_voie7-t1" class="sheet-boxability" title="@{voie7-t1}" />
|
|
<br><textarea name="attr_voie7-1" class="sheet-boxability" title="@{voie7-1}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v8r1" value="1" />
|
|
<input type="text" name="attr_voie8-t1" class="sheet-boxability" title="@{voie8-t1}" />
|
|
<br><textarea name="attr_voie8-1" class="sheet-boxability" title="@{voie8-1"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v9r1" value="1" />
|
|
<input type="text" name="attr_voie9-t1" class="sheet-boxability" title="@{voie9-t1}" />
|
|
<br><textarea name="attr_voie9-1" class="sheet-boxability" title="@{voie9-1}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">2</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v7r2" value="1" />
|
|
<input type="text" name="attr_voie7-t2" class="sheet-boxability" title="@{voie7-t2}" />
|
|
<br><textarea name="attr_voie7-2" class="sheet-boxability" title="@{voie7-2}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v8r2" value="1" />
|
|
<input type="text" name="attr_voie8-t2" class="sheet-boxability" title="@{voie8-t2}" />
|
|
<br><textarea name="attr_voie8-2" class="sheet-boxability" title="@{voie8-2}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v9r2" value="1" />
|
|
<input type="text" name="attr_voie9-t2" class="sheet-boxability" title="@{voie9-t2}" />
|
|
<br><textarea name="attr_voie9-2" class="sheet-boxability" title="@{voie9-2}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">3</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v7r3" value="1" />
|
|
<input type="text" name="attr_voie7-t3" class="sheet-boxability" title="@{voie7-t3}" />
|
|
<br><textarea name="attr_voie7-3" class="sheet-boxability" title="@{voie7-3}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v8r3" value="1" />
|
|
<input type="text" name="attr_voie8-t3" class="sheet-boxability" title="@{voie8-t3}" />
|
|
<br><textarea name="attr_voie8-3" class="sheet-boxability" title="@{voie8-3}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v9r3" value="1" />
|
|
<input type="text" name="attr_voie9-t3" class="sheet-boxability" title="@{voie9-t3}" />
|
|
<br><textarea name="attr_voie9-3" class="sheet-boxability" title="@{voie9-3}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">4</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v7r4" value="1" />
|
|
<input type="text" name="attr_voie7-t4" class="sheet-boxability" title="@{voie7-t4}" />
|
|
<br><textarea name="attr_voie7-4" class="sheet-boxability" title="@{voie7-4}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v8r4" value="1" />
|
|
<input type="text" name="attr_voie8-t4" class="sheet-boxability" title="@{voie8-t4}" />
|
|
<br><textarea name="attr_voie8-4" class="sheet-boxability" title="@{voie8-4}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v9r4" value="1" />
|
|
<input type="text" name="attr_voie9-t4" class="sheet-boxability" title="@{voie9-t4}" />
|
|
<br><textarea name="attr_voie9-4" class="sheet-boxability" title="@{voie9-4}"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">5</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v7r5" value="1" />
|
|
<input type="text" name="attr_voie7-t5" class="sheet-boxability" title="@{voie7-t5}" />
|
|
<br><textarea name="attr_voie7-5" class="sheet-boxability" title="@{voie7-5}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v8r5" value="1" />
|
|
<input type="text" name="attr_voie8-t5" class="sheet-boxability" title="@{voie8-t5}" />
|
|
<br><textarea name="attr_voie8-5" class="sheet-boxability" title="@{voie8-5}"></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v9r5" value="1" />
|
|
<input type="text" name="attr_voie9-t5" class="sheet-boxability" title="@{voie9-t5}" />
|
|
<br><textarea name="attr_voie9-5" class="sheet-boxability" title="@{voie9-5}"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- Voies -->
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<table class="sheet-tabsep" title="repeating_jetcapas">
|
|
<tr>
|
|
<td class="sheet-textfatleft" style="min-width:245px;">Jets de Capacités</td>
|
|
<td class="sheet-textbase" style="width:100%;"> </td>
|
|
</tr>
|
|
</table>
|
|
<fieldset class="repeating_jetcapas">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td>
|
|
<button type="roll" class="sheet-neutre" name="roll_pjcapa" title="%{repeating_jetcapas_$N_pjcapa}"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Capacité}} {{name=@{jetcapanom} @{jetcapalim}}} {{carac=[[@{jetcapanbde}d@{jetcapade}@{jetcapatypjet}[Jet] + [[@{jetcapacarac}]][Bonus Carac] + [[(@{jetcapacoeff}*@{jetcaparang})]][Bonus rang] + @{jetcapadiv}[Bonus divers] ]] }} {{jet=@{jetcapatitre}}} {{desc=@{jetcapaskill}}} {{text=@{jetcapadesc}}}" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="min-width:200px;">
|
|
<input type="text" name="attr_jetcapanom" title="@{jetcapanom}" style="font-weight: bold;"
|
|
placeholder="Nom du Jet de capacité" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="checkbox" name="attr_jetcapa_al" style="width: 12px;"
|
|
title="@{jetcapalim} Action limitée (L)" value="1" />
|
|
<input type="hidden" name="attr_jetcapalim" value="" />
|
|
<input type="number" style="width:32px;" name="attr_jetcapanbde" value="1"
|
|
title="@{jetcapanbde} Nombre de dés" />
|
|
<select class="sheet-carac" style="width:50px;" name="attr_jetcapade" size="1" title="@{jetcapade} Dé">
|
|
<option value="4">d4</option>
|
|
<option value="6">d6</option>
|
|
<option value="8">d8</option>
|
|
<option value="10">d10</option>
|
|
<option value="12">d12</option>
|
|
<option value="@{ETATDE}" selected>d20 (ou d12 si Affaibli)</option>
|
|
</select> (
|
|
<select class="sheet-carac" style="width:30px;" name="attr_jetcapatypjet" size="1"
|
|
title="@{jetcapatypjet} Option du jet : normal, meilleur dé, moins bon dé, sans limite">
|
|
<option value="">N - Normal / additionner tous les dés</option>
|
|
<option value="kh1">S - Garder le meilleur dé</option>
|
|
<option value="kl1">I - Garder le moins bon dé</option>
|
|
<option value="!">E - Explosif (jet sans limite)</option>
|
|
</select>) +
|
|
<select class="sheet-carac" style="width:60px;" name="attr_jetcapacarac" size="1"
|
|
title="@{jetcapacarac} Modificateur du jet">
|
|
<option value="0" selected>-</option>
|
|
<option value="@{NIVEAU}">NIV</option>
|
|
<optgroup label="Mod. de Base">
|
|
<option value="@{FOR}">FOR</option>
|
|
<option value="@{DEX}">DEX</option>
|
|
<option value="@{CON}">CON</option>
|
|
<option value="@{INT}">INT</option>
|
|
<option value="@{PER}">PER</option>
|
|
<option value="@{CHA}">CHA</option>
|
|
<option value="@{QRYMOD}">Choix</option>
|
|
</optgroup>
|
|
<optgroup label="Mod. de Test">
|
|
<option value="@{FOR_TEST}">FOR</option>
|
|
<option value="@{DEX_TEST}">DEX</option>
|
|
<option value="@{CON_TEST}">CON</option>
|
|
<option value="@{INT_TEST}">INT</option>
|
|
<option value="@{PER_TEST}">PER</option>
|
|
<option value="@{CHA_TEST}">CHA</option>
|
|
<option value="@{QRYMODT}">Choix</option>
|
|
</optgroup>
|
|
<optgroup label="Attaques">
|
|
<option value="@{ATKCAC}">ATC</option>
|
|
<option value="@{ATKTIR}">ATD</option>
|
|
<option value="@{ATKMEN}">MEN</option>
|
|
<option value="@{ATKMAG}">MAG</option>
|
|
<option value="@{ATKPIL}">PIL</option>
|
|
</optgroup>
|
|
</select>+ (
|
|
<select class="sheet-carac" style="width:40px;" name="attr_jetcapacoeff" size="1"
|
|
title="@{jetcapacoeff} Bonus par rang">
|
|
<option value="0">-</option>
|
|
<option value="1">+1</option>
|
|
<option value="2">+2</option>
|
|
</select> x
|
|
<select class="sheet-carac" style="width:60px;" name="attr_jetcaparang" size="1"
|
|
title="@{jetcaparang} Rang dans la voie">
|
|
<option value="0" selected>-</option>
|
|
<option value="@{RANG_VOIE1}">Voie 1</option>
|
|
<option value="@{RANG_VOIE2}">Voie 2</option>
|
|
<option value="@{RANG_VOIE3}">Voie 3</option>
|
|
<option value="@{RANG_VOIE4}">Voie 4</option>
|
|
<option value="@{RANG_VOIE5}">Voie 5</option>
|
|
<option value="@{RANG_VOIE6}">Voie 6</option>
|
|
<option value="@{RANG_VOIE7}">Voie 7</option>
|
|
<option value="@{RANG_VOIE8}">Voie 8</option>
|
|
<option value="@{RANG_VOIE9}">Voie 9</option>
|
|
</select>) +
|
|
<input type="hidden" name="attr_jetcapaskill" value="" />
|
|
<input type="number" style="width:32px;" name="attr_jetcapadiv" value="0"
|
|
title="@{jetcapadiv} Bonus divers" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 25%;">
|
|
Voie :
|
|
<select class="sheet-selectmin" name="attr_jetcapavoieno" title="@{jetcapavoieno}">
|
|
<option value="">-</option>
|
|
<option value="v1">1</option>
|
|
<option value="v2">2</option>
|
|
<option value="v3">3</option>
|
|
<option value="v4">4</option>
|
|
<option value="v5">5</option>
|
|
<option value="v6">6</option>
|
|
<option value="v7">7</option>
|
|
<option value="v8">8</option>
|
|
<option value="v9">9</option>
|
|
</select>
|
|
Rang :
|
|
<select class="sheet-selectmin" name="attr_jetcapavoierang" title="@{jetcapavoierang}">
|
|
<option value="">-</option>
|
|
<option value="r1">1</option>
|
|
<option value="r2">2</option>
|
|
<option value="r3">3</option>
|
|
<option value="r4">4</option>
|
|
<option value="r5">5</option>
|
|
</select>
|
|
<input type="hidden" name="attr_jetcapavr" value="" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td> </td>
|
|
<td class="sheet-boxinputleft" style="width: 25%;">
|
|
<input type="text" name="attr_jetcapatitre" style="width:100%;" placeholder="Compétence (CARAC)"
|
|
title="@{jetcapatitre}" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" colspan="3">
|
|
<textarea name="attr_jetcapadesc" placeholder="Description" title="@{jetcapadesc}"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
<!-- FIN Voies -->
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div>
|
|
<span class="sheet-textfatleft">Traits</span>
|
|
<fieldset class="repeating_traits">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 15px;">
|
|
<button type="roll" name="roll_pjtrait" class="sheet-output" title="%{repeating_traits_$N_pjtrait}"
|
|
value='@{togm} &{template:co1} {{perso=@{character_name}}} {{name=@{traitnom}}} {{subtags=@{traittype}}} {{text=@{traitdesc}}}'>w</button>
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 200px;">
|
|
<input type="text" style="font-weight: bold;" name="attr_traitnom" placeholder="Nom du trait"
|
|
title="@{traitnom}" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 150px;">
|
|
<input type="text" name="attr_traittype" placeholder="Origine/Type de trait" title="@{traittype}" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<textarea name="attr_traitdesc" placeholder="Description" title="@{traitdesc}"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div class="sheet-row">
|
|
<!-- BUFFS -->
|
|
<div class="sheet-textfatleft">BUFFS</div>
|
|
<fieldset class="repeating_buffs">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-boxinputleft" style="width: 250px;">
|
|
<input type="checkbox" name="attr_buffon" title="@{buffon}" value="1" />
|
|
<input type="text" style="font-weight: bold; width: 240px;" name="attr_buffnom"
|
|
placeholder="Nom du buff" title="@{buffnom}" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="text" name="attr_buffmods" placeholder="Attribut : Valeur; Attribut : Valeur; ..."
|
|
title="@{buffmods}" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
<input type="checkbox" class="sheet-block-switch" name="attr_buffdetails"><span>Détail par attribut</span>
|
|
<div class="sheet-block-hidden"></div>
|
|
<div class="sheet-block-show">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 5%;">FOR:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_FOR_BUFF_LIST" />
|
|
<span name="attr_FOR_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_FOR_BUFFS" value="@{FOR_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">DEX:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_DEX_BUFF_LIST" />
|
|
<span name="attr_DEX_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_DEX_BUFFS" value="@{DEX_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">CON:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_CON_BUFF_LIST" />
|
|
<span name=attr_CON_BUFF_LIST></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_CON_BUFFS" value="@{CON_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">INT:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_INT_BUFF_LIST" />
|
|
<span name=attr_INT_BUFF_LIST></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_INT_BUFFS" value="@{INT_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">PER:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_PER_BUFF_LIST" />
|
|
<span name="attr_PER_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_PER_BUFFS" value="@{PER_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">CHA:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_CHA_BUFF_LIST" />
|
|
<span name="attr_CHA_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_CHA_BUFFS" value="@{CHA_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">ATC:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_ATKCAC_BUFF_LIST" />
|
|
<span name="attr_ATKCAC_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_ATKCAC_BUFFS" value="@{ATKCAC_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">ATD:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_ATKTIR_BUFF_LIST" />
|
|
<span name="attr_ATKTIR_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_ATKTIR_BUFFS" value="@{ATKTIR_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">MEN:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_ATKMEN_BUFF_LIST" />
|
|
<span name="attr_ATKMEN_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_ATKMEN_BUFFS" value="@{ATKMEN_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">PIL:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_ATKPIL_BUFF_LIST" />
|
|
<span name="attr_ATKPIL_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_ATKPIL_BUFFS" value="@{ATKPIL_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">MAG:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_ATKMAG_BUFF_LIST" />
|
|
<span name="attr_ATKMAG_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_ATKMAG_BUFFS" value="@{ATKMAG_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">INIT:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_INIT_BUFF_LIST" />
|
|
<span name="attr_INIT_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_INIT_BUFFS" value="@{INIT_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">DEF:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_DEF_BUFF_LIST" />
|
|
<span name="attr_DEF_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_DEF_BUFFS" value="@{DEF_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 5%;">PV:</td>
|
|
<td style="width: 90%; text-align: left;">
|
|
<input class="sheet-buff" type="hidden" name="attr_PV_BUFF_LIST" />
|
|
<span name="attr_PV_BUFF_LIST"></span>
|
|
</td>
|
|
<td style="width: 5%;">
|
|
<input class="sheet-buff" type="number" name="attr_PV_BUFFS" value="@{PV_BUFF}" disabled />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<!-- FIN BUFFS -->
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
</div>
|
|
<div class="sheet-tab-content sheet-tab3">
|
|
<div>
|
|
<!-- Equipement et ressources -->
|
|
<div class="sheet-2colrow">
|
|
<div class="sheet-col" title="repeating_equipement">
|
|
<div class="sheet-boxtitre">Equipement</div>
|
|
<div class="sheet-boxinputleft">
|
|
<span class="textbase"> Argent :</span>
|
|
<input type="text" style="width:180px;" name="attr_BOURSE" title="@{BOURSE}"
|
|
placeholder="Rien ? C'est la pauvreté !" />
|
|
Enc. Total :
|
|
<input type="hidden" name="attr_total_enc" value="0" />
|
|
<span name="attr_total_enc" title="@{total_enc} Encombrement total"></span>
|
|
/ <input type="number" name="attr_seuil_enc" title="@{seuil_enc} Seuil d'encombrement (FOR)" value="0" />
|
|
</div>
|
|
<fieldset class="repeating_equipement">
|
|
<div class="sheet-boxvoie">
|
|
<input type="text" style="width: 230px;" name="attr_equip-desc" placeholder="Nom de l'équipement"
|
|
title="@{equip-desc}" />
|
|
<span class="sheet-textbase">Enc.</span>
|
|
<input type="number" name="attr_equip-enc" style="width: 30px;" value="0"
|
|
title="@{equip-enc} Encombrement" />
|
|
<span class="sheet-textbase">Nbre</span>
|
|
<input type="number" name="attr_equip-qte" style="width: 35px;" value="1"
|
|
title="@{equip-qte} Quantité portée/possédée" />
|
|
<input type="checkbox" name="attr_equip-on" value="1" title="@{equip-on} Equipement porté" />
|
|
<br>
|
|
<textarea name="attr_equip-detail" title="@{equip-detail} Description détaillée"></textarea>
|
|
<br>
|
|
<input type="text" class="sheet-carac" style="width: 70%;" name="attr_equip-props"
|
|
title="@{equip-props} Propriétés de l'équipement" placeholder="Propriétés (DEF, DM, etc...)" />
|
|
<input type="checkbox" class="sheet-carac" name="attr_equip-atk" value="1"
|
|
title="@{equip-atk} Lié à une ligne d'attaque" />
|
|
A une attaque
|
|
<input type="hidden" name="attr_equip-atkid" value="" />
|
|
</div>
|
|
</fieldset>
|
|
<div>
|
|
<input type="checkbox" class="optional-block-switch" name="attr_coc_setting_bitume"
|
|
value="1"><span></span>
|
|
<div class="optional-block">
|
|
<div class="sheet-boxtitre" style="margin: 5px 5px 5px 0; width: 100px;">
|
|
<button type="roll" class="sheet-boxtitre" name="roll_ud"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Usure}} {{subtags=Test}} {{carac=[[@{QRYUD}cf<3]] }}">Usure
|
|
(Ud)</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col" title="repeating_ressources">
|
|
<div class="sheet-boxtitre">Autres ressources</div>
|
|
<fieldset class="repeating_ressources">
|
|
<div class="sheet-boxvoie">
|
|
<input type="text" style="width: 280px;" name="attr_res-desc" title="@{res-desc}" />
|
|
<span class="sheet-textbase">Valeur :</span>
|
|
<input type="number" name="attr_res-nbr" value="1" title="@{res-val}" />
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<div class="sheet-col" style="width: 100%;">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre">Notes</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxinputleft">
|
|
<textarea name="attr_notes" style="height:10em;" title="@{notes}"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
</div>
|
|
<!-- FIN Equipement et ressources -->
|
|
</div>
|
|
<div class="sheet-tab-content sheet-tab4">
|
|
<div class="sheet-row">
|
|
<!-- Config -->
|
|
<span style="float: right;"><button type="action" class="sheet-flatbtn sheet-iconbtn" name="act_reset_btn"
|
|
title="Re-calculer attributs (rangs, encombrement)">r</button>
|
|
</span>
|
|
<div class="sheet-textfatleft">PARAMETRES</div>
|
|
<ul>
|
|
<li>Jets :
|
|
<select class="sheet-carac" style="width: 130px;" name="attr_togm" title="@{togm}" size="1">
|
|
<option value="" selected>Publics</option>
|
|
<option value="/w gm ">Chuchotés au MJ</option>
|
|
</select>
|
|
</li>
|
|
<li>Setting :
|
|
<select class="sheet-carac" style="width: 140px;" name="attr_coc_setting" size="1">
|
|
<option value="" selected>Choisir...</option>
|
|
<option value="cthulhu">Cthulhu/Epouvante</option>
|
|
<option value="pulp">Pulp</option>
|
|
<option value="postapo">Post-Apocalypse</option>
|
|
<option value="surhumain">Surhumains</option>
|
|
<option value="cyberpunk">Cyberpunk</option>
|
|
<option value="shadowrun">Cyber+Fantasy</option>
|
|
<option value="menacex">Menace-X</option>
|
|
<option value="bitume">Bitume</option>
|
|
<option value="monstres">Monstres</option>
|
|
</select>
|
|
</li>
|
|
<li>Type de surhumain :
|
|
<select class="sheet-carac" style="width: 140px;" name="attr_coc_surh" size="1">
|
|
<option value="" selected>Choisir...</option>
|
|
<option value="ange">Ange</option>
|
|
<option value="demon">Démon</option>
|
|
<optgroup label="Être féérique">
|
|
<option value="fee-dragon">Dragon</option>
|
|
<option value="fee-dryade">Dryade</option>
|
|
<option value="fee-dwergar">Dwergar</option>
|
|
<option value="fee-gobelin">Gobelin</option>
|
|
<option value="fee-lutin">Lutin</option>
|
|
<option value="fee-ogre">Ogre</option>
|
|
</optgroup>
|
|
<option value="garou">Loup-garou</option>
|
|
<option value="vampire">Vampire</option>
|
|
<optgroup label="Mutant">
|
|
<option value="mutant-endo">Endo-actif</option>
|
|
<option value="mutant-exo">Exo-actif</option>
|
|
<option value="mutant-psycho">Psycho-actif</option>
|
|
</optgroup>
|
|
</select>
|
|
</li>
|
|
<li>Initiative :
|
|
<select class="sheet-carac" style="width: 90px;" name="attr_INIT_JET" title="@{INIT_JET}" size="1">
|
|
<option value="@{INIT}" selected>Normale</option>
|
|
<option value="[[@{INIT}]]+1d6!">Variable</option>
|
|
<option value="{[[@{INIT}]]+1d6!, ([[@{INIT}]]*2)+0d6}kl1">Cyberpunk</option>
|
|
</select>
|
|
</li>
|
|
<li>Attaques :
|
|
<ul>
|
|
<li>MENtale :
|
|
<input type="checkbox" name="attr_option_atkmen" value="1" title="@{option_atkmen}" />
|
|
</li>
|
|
<li>PSI (Menace-X) :
|
|
<input type="checkbox" name="attr_option_atkpsi" value="1" title="@{option_atkpsi}" />
|
|
</li>
|
|
<li>PILotage (Bitume) :
|
|
<input type="checkbox" name="attr_option_atkpil" value="1" title="@{option_atkpil}" />
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>Défense PSI (Menace-X) :
|
|
<input type="checkbox" name="attr_option_defpsi" value="1" title="@{option_defpsi}" />
|
|
</li>
|
|
<li>Magie :
|
|
<ul>
|
|
<li>Attaque magique :
|
|
<input type="checkbox" name="attr_option_atkmag" value="1" title="@{option_atkmag}" />
|
|
</li>
|
|
<li>Points de Mana :
|
|
<input type="checkbox" name="attr_option_pm" value="1" title="@{option_pm}" />
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>Points de Chance :
|
|
<input type="checkbox" name="attr_option_pc" value="1" title="@{option_pc}" checked />
|
|
<ul>
|
|
<li title="Points de Choc, de Cash, de Style, etc...">Intitulé :
|
|
<input type="text" name="attr_PC_DESC_PLUR" style="width: 120px;" title="@{PC_DESC_PLUR}"
|
|
placeholder="Pluriel" />
|
|
<input type="text" name="attr_PC_DESC_SNGL" style="width: 120px;" title="@{PC_DESC_SNGL}"
|
|
placeholder="Singulier" />
|
|
<input type="text" name="attr_PC_DESC_ABRV" style="width: 40px;" title="@{PC_DESC_ABRV}"
|
|
placeholder="Abréviation" />
|
|
</li>
|
|
<li>Valeur de bonus :
|
|
<input type="text" style="width: 280px;" name="attr_PC_BONUS" title="@{PC_BONUS}" />
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>Compteur no 1 :
|
|
<input type="checkbox" name="attr_option_cpt1" value="1" title="@{option_cpt1}" />
|
|
<ul>
|
|
<li title="Points de Folie, de Tension, de Pulsion, etc...">Intitulé :
|
|
<input type="text" style="width: 120px;" name="attr_cpt1_desc_plur" title="@{cpt1_desc_plur}"
|
|
placeholder="Pluriel" />
|
|
<input type="text" style="width: 120px;" name="attr_cpt1_desc_sngl" title="@{cpt1_desc_sngl}"
|
|
placeholder="Singulier" />
|
|
<input type="text" style="width: 40px;" name="attr_cpt1_desc_abrv" title="@{cpt1_desc_abrv}"
|
|
placeholder="Abréviation" />
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>Progression des PV :
|
|
<select class="sheet-carac" style="width: 90px;" name="attr_prog_pv" title="@{prog_pv}" size="1">
|
|
<option value="0" selected>Jet DV</option>
|
|
<option value="1">Moyenne</option>
|
|
</select>
|
|
</li>
|
|
<li>Points de Récupération :
|
|
<input type="checkbox" name="attr_option_pr" value="1" title="@{option_pr}" checked />
|
|
</li>
|
|
<li>Gérer l'encombrement :
|
|
<input type="checkbox" name="attr_use_encombrement" title="@{use_encombrement} Gérer l'encombrement"
|
|
value="1" />
|
|
</li> <!--
|
|
<li>Attributs hors-fiche pour les capacités :
|
|
<ul title="@{hors_fiche}" style="list-style-type: none; margin: 0;">
|
|
<li><input type="radio" class="sheet-carac" name="attr_hors_fiche" value="none" selected />
|
|
Ne pas créer d'attributs hors-fiche
|
|
</li>
|
|
<li><input type="radio" class="sheet-carac" name="attr_hors_fiche" value="direct" />
|
|
Créer un attribut par capacité, préfixé par
|
|
<input type="text" class="sheet-carac" style="width: 60px;" name="attr_hors_fiche_pfx" value="cap" />
|
|
</li>
|
|
<li><input type="radio" class="sheet-carac" name="attr_hors_fiche" value="serial" />
|
|
Créer un attribut sérialisé unique ('capacites')
|
|
</li>
|
|
</ul>
|
|
</li> -->
|
|
</ul>
|
|
</div>
|
|
<!-- FIN Config -->
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div class="sheet-row">
|
|
<input type="checkbox" class="sheet-block-switch"><span>Importer profil</span>
|
|
<div class="sheet-block-hidden"></div>
|
|
<div class="sheet-block-show">
|
|
<div class="sheet-2colrow">
|
|
<div class="sheet-col">
|
|
<textarea class="sheet-boxinputleft" name="attr_json_profile" style="height: 10em; white-space: pre-wrap;"></textarea>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<button type="action" name="act_json_import" class="sheet-flatbtn sheet-iconbtn"
|
|
title="Importer le profil">W</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-tab-content sheet-fp2">
|
|
<div>
|
|
<input type="checkbox" class="block-switch" style="display: none;" name="attr_coc_setting_bitume" value="1">
|
|
<div class="block-hidden">
|
|
<div>
|
|
<!-- Véhicule -->
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-textbase" colspan="3">Description :
|
|
<input type="text" class="sheet-nobox" style="width: 75%;" name="attr_VEHICULE_DESC"
|
|
title="@{VEHICULE_DESC} Description du véhicule" />
|
|
</td>
|
|
<td class="sheet-textbase" colspan="2">Pilote :
|
|
<input type="text" class="sheet-nobox" style="width: 75%;" name="attr_PILOTE"
|
|
title="@{PILOTE} Nom du pilote" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 15%;">FOR</td>
|
|
<td class="sheet-boxtitre" style="width: 15%;">AGI</td>
|
|
<td class="sheet-boxtitre" style="width: 25%;">PV</td>
|
|
<td class="sheet-boxtitre" style="width: 35%;">DEF</td>
|
|
<td class="sheet-boxtitre" style="width: 10%;">Blindage (RD)</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_FOV" value="0" title="@{FOV} Force du véhicule" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_AGI" value="0" title="@{AGI} Agilité du véhicule" />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_PVV" value="0" title="@{PVV} Points de Vie courants" /> /
|
|
<input type="number" name="attr_PVV_max" value="0" title="@{PVV|max} Points de Vie MAX" />
|
|
</td>
|
|
<td class="sheet-boxinput"> Base :
|
|
<input type="number" name="attr_DEFV_BASE" value="0" title="@{DEFV_BASE} DEF de base" /> + DEX :
|
|
<input type="number" name="attr_DEFV_DEX" value="0" title="@{DEFV_DEX} DEX du pilote" /> =
|
|
<input type="number" name="attr_DEFV" value="@{DEFV_BASE}+@{DEFV_DEX}" title="@{DEFV} DEF du véhicule"
|
|
disabled />
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="number" name="attr_RDV" value="0" title="@{RDV} Blindage" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
<div class="sheet-2colrow">
|
|
<div class="sheet-col">
|
|
<div class="sheet-row sheet-boxtitre">Equipement</div>
|
|
<div class="sheet-row">
|
|
<textarea class="sheet-boxinputleft" style="height: 6vh;" name="attr_vehicule_eqp" title="@{vehicule_eqp} Equipement du véhicule"></textarea>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<div class="sheet-row sheet-boxtitre">Notes</div>
|
|
<div class="sheet-row">
|
|
<textarea class="sheet-boxinputleft" style="height: 6vh;" name="attr_vehicule_notes" title="@{vehicule_notes}"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<br>
|
|
<div class="sheet-row">
|
|
<span class="textfatleft">Jets du véhicule</span>
|
|
</div>
|
|
<fieldset class="repeating_jetv">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td>
|
|
<button type="roll" class="sheet-neutre" name="roll_vehicule"
|
|
title="%{repeating_jetv_$N_vehicule} Jet de véhicule"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=@{jetvnom}}} {{subtags=@{VEHICULE_DESC}}} {{carac=[[@{jetvnbde}d@{jetvde}@{jetvtypjet} + [[@{jetvcaracp}]][Bonus] + [[@{jetvcarac}]][Véhicule] + @{jetvdiv}[Divers] ]]}} {{desc=@{jetvdesc}}}" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="min-width:200px;">
|
|
<input type="text" name="attr_jetvnom" title="@{jetvnom}" style="font-weight: bold;"
|
|
placeholder="Nom du Jet de véhicule" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="number" style="width:32px;" name="attr_jetvnbde" value="1"
|
|
title="@{jetvnbde} Nombre de dés" />
|
|
<select class="sheet-carac" style="width:50px;" name="attr_jetvde" size="1" title="@{jetvde} Dé">
|
|
<option value="4">d4</option>
|
|
<option value="6">d6</option>
|
|
<option value="8">d8</option>
|
|
<option value="10">d10</option>
|
|
<option value="12">d12</option>
|
|
<option value="@{ETATDE}" selected>d20 (ou d12 si Affaibli)</option>
|
|
</select>
|
|
(
|
|
<select class="sheet-carac" style="width:30px;" name="attr_jetvtypjet" size="1"
|
|
title="@{jetvtypjet} Option du jet : normal, meilleur dé, moins bon dé, sans limite">
|
|
<option value="">N - Normal / additionner tous les dés</option>
|
|
<option value="kh1">S - Garder le dé Supérieur / le plus haut score</option>
|
|
<option value="kl1">I - Garder le dé Inférieur / le plus bas score</option>
|
|
<option value="!">E - Explosif (jet ouvert / sans limite)</option>
|
|
</select>
|
|
) +
|
|
<select class="sheet-carac" style="width:50px;" name="attr_jetvcaracpil" size="1"
|
|
title="@{jetvcaracp} Mod. du personnage">
|
|
<option value="0" selected>-</option>
|
|
<optgroup label="Mod. de Base">
|
|
<option value="@{FOR}">FOR</option>
|
|
<option value="@{DEX}">DEX</option>
|
|
<option value="@{CON}">CON</option>
|
|
<option value="@{INT}">INT</option>
|
|
<option value="@{PER}">PER</option>
|
|
<option value="@{CHA}">CHA</option>
|
|
</optgroup>
|
|
<optgroup label="Mod. de Test">
|
|
<option value="@{FOR_TEST}">FOR</option>
|
|
<option value="@{DEX_TEST}">DEX</option>
|
|
<option value="@{CON_TEST}">CON</option>
|
|
<option value="@{INT_TEST}">INT</option>
|
|
<option value="@{PER_TEST}">PER</option>
|
|
<option value="@{CHA_TEST}">CHA</option>
|
|
</optgroup>
|
|
<optgroup label="Attaques">
|
|
<option value="@{ATKCAC}">ATC</option>
|
|
<option value="@{ATKTIR}">ATD</option>
|
|
<option value="@{ATKMEN}">MEN</option>
|
|
<option value="@{ATKMAG}">MAG</option>
|
|
</optgroup>
|
|
</select>
|
|
+
|
|
<select class="sheet-carac" style="width:50px;" name="attr_jetvcarac" size="1"
|
|
title="@{jetvcarac} Mod. du véhicule">
|
|
<option value="0" selected>-</option>
|
|
<option value="@{FOV}">FOR</option>
|
|
<option value="@{AGI}">AGI</option>
|
|
</select>
|
|
+
|
|
<input type="number" style="width:32px;" name="attr_jetvdiv" value="0"
|
|
title="@{jetvdiv} Bonus divers" />
|
|
<input type="hidden" name="attr_jetvcaracp" value="0" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width:100%;">
|
|
<textarea name="attr_jetvdesc" placeholder="Description" title="@{jetvdesc}"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
</div>
|
|
</div>
|
|
<div class="block-show">
|
|
<div>
|
|
<!-- Véhicule Bitume -->
|
|
<div class="2colrow">
|
|
<div class="col">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-textfatleft" colspan="4">Description :<br>
|
|
<textarea type="text" class="sheet-nobox" style="border: 1px solid; height: 6em;"
|
|
name="attr_VEHICULE_DESC" title="@{VEHICULE_DESC}">
|
|
</textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfatleft" colspan="4">Pilote :
|
|
<input type="text" class="sheet-nobox" name="attr_PILOTE" title="@{PILOTE} Nom du pilote" />
|
|
</td>
|
|
<td colspan="3"> </td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
<p class="sheet-textfatleft">Modifications</p>
|
|
<input type="hidden" name="attr_vbemp_total" value="0" />
|
|
<fieldset class="repeating_vbmods">
|
|
<div class="sheet-boxvoie">
|
|
<input type="text" style="width: 250px;" name="attr_vbmod-desc" placeholder="Modification"
|
|
title="@{vbmod-desc}" />
|
|
<span class="sheet-textbase">Emp.</span>
|
|
<input type="number" name="attr_vbmod-emp" style="width: 30px;" value="1"
|
|
title="@{vbmod-emp} Emplacements" />
|
|
<span class="sheet-textbase">Coût</span>
|
|
<input type="number" name="attr_vbmod-res" style="width: 30px;" value="0"
|
|
title="@{vbmod-res} Coût (R)" />
|
|
<br>
|
|
<textarea name="attr_vbmod-effet" placeholder="Effet de la modification"
|
|
title="@{vbmod-effet} Effet"></textarea>
|
|
<br>
|
|
<input type="text" style="width: 95%;" name="attr_vbmod-buffs" placeholder="Ex : RAP : +1" value=""
|
|
title="@{vbmod-buffs}" />
|
|
<input type="checkbox" name="attr_vbmod-on" value="1" title="@{vbmod-on} Active ?" />
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="col">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td></td>
|
|
<td class="sheet-text">Base</td>
|
|
<td class="sheet-text">Divers</td>
|
|
<td class="sheet-textfat">Total</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 25%;" title="Rapidité">RAP</td>
|
|
<td class="sheet-boxinput" style="width: 25%;"><input type="number" name="attr_vbrap_base"
|
|
value="0" /></td>
|
|
<td class="sheet-boxinputlight" style="width: 25%;">
|
|
<input type="hidden" name="attr_vbrap_div" value="0" />
|
|
<span name="attr_vbrap_div"></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight" style="width: 25%;">
|
|
<input type="hidden" name="attr_vbrap" value="0" />
|
|
<span name="attr_vbrap"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 25%;" title="Maniabilité">MAN</td>
|
|
<td class="sheet-boxinput" style="width: 25%;"><input type="number" name="attr_vbman_base"
|
|
value="0" /></td>
|
|
<td class="sheet-boxinputlight" style="width: 25%;">
|
|
<input type="hidden" name="attr_vbman_div" value="0" />
|
|
<span name="attr_vbman_div"></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight" style="width: 25%;">
|
|
<input type="hidden" name="attr_vbman" value="0" />
|
|
<span name="attr_vbman"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 25%;" title="Impact">IMP</td>
|
|
<td class="sheet-boxinput" style="width: 25%;"><input type="number" name="attr_vbimp_base"
|
|
value="0" /></td>
|
|
<td class="sheet-boxinputlight" style="width: 25%;">
|
|
<input type="hidden" name="attr_vbimp_div" value="0" />
|
|
<span name="attr_vbimp_div"></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight" style="width: 25%;">
|
|
<input type="hidden" name="attr_vbimp" value="0" />
|
|
<span name="attr_vbimp"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 25%;" title="Emplacements">EMP</td>
|
|
<td class="sheet-boxinput" style="width: 25%;"><input type="number" name="attr_vbemp_base"
|
|
value="0" /></td>
|
|
<td class="sheet-boxinputlight" style="width: 25%;">
|
|
<input type="hidden" name="attr_vbemp_div" value="0" />
|
|
<span name="attr_vbemp_div"></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight" style="width: 25%;">
|
|
<input type="hidden" name="attr_vbemp" value="0" />
|
|
<span name="attr_vbemp"></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 25%;" title="Défense">DEF</td>
|
|
<td class="sheet-boxinputlight" style="width: 10%;">10+</td>
|
|
<td class="sheet-boxinputlight" style="width: 15%;"><span name="attr_vbimp"></span></td>
|
|
<td class="sheet-boxinputlight" style="width: 15%;"><span name="attr_vbman"></span></td>
|
|
<td class="sheet-boxinput" style="width: 20%;"><input type="number" name="attr_vbdef_div" value="0" />
|
|
</td>
|
|
<td class="sheet-boxinputlight" style="width: 15%;">
|
|
<input type="hidden" name="attr_vbdef" value="0" />
|
|
<span name="attr_vbdef"></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button type="roll" class="sheet-nod20 sheet-boxtitre" name="roll_vbud"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Usure}} {{subtags=Test}} {{carac=[[d@{vbud}cf<3]] }}"> UD </button>
|
|
</td>
|
|
<td class="sheet-textfatleft">Dés d'Usure</td>
|
|
<td>
|
|
<select class="sheet-selectmin" style="width: 30px;" name="attr_vbudmax">
|
|
<option value="12">d12</option>
|
|
<option value="10">d10</option>
|
|
<option value="8">d8</option>
|
|
<option value="6">d6</option>
|
|
<option value="4">d4</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button type="roll" class="sheet-roll-d12 sheet-boxtitre" name="roll_vbud12"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Usure}} {{subtags=Test}} {{carac=[[d12cf<3]] }}">
|
|
Ud12</button>
|
|
</td>
|
|
<td class="sheet-textfatleft">
|
|
<input type="checkbox" name="attr_vbud12_1" value="1">
|
|
<input type="checkbox" name="attr_vbud12_2" value="1">
|
|
<input type="checkbox" name="attr_vbud12_3" value="1">
|
|
<input type="checkbox" name="attr_vbud12_4" value="1">|
|
|
<input type="checkbox" name="attr_vbud12_5" value="1">
|
|
<input type="checkbox" name="attr_vbud12_6" value="1">
|
|
<input type="checkbox" name="attr_vbud12_7" value="1">
|
|
<input type="checkbox" name="attr_vbud12_8" value="1">|
|
|
<input type="checkbox" name="attr_vbud12_9" value="1">
|
|
<input type="checkbox" name="attr_vbud12_10" value="1">
|
|
<input type="checkbox" name="attr_vbud12_11" value="1">
|
|
<input type="checkbox" name="attr_vbud12_12" value="1">
|
|
</td>
|
|
<td>
|
|
<input type="radio" name="attr_vbud" value="12" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button type="roll" class="sheet-roll-d10 sheet-boxtitre" name="roll_vbud10"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Usure}} {{subtags=Test}} {{carac=[[d10cf<3]] }}">
|
|
Ud10</button>
|
|
</td>
|
|
<td class="sheet-textfatleft">
|
|
<input type="checkbox" name="attr_vbud10_1 value=" 1">
|
|
<input type="checkbox" name="attr_vbud10_2 value=" 1">
|
|
<input type="checkbox" name="attr_vbud10_3 value=" 1">
|
|
<input type="checkbox" name="attr_vbud10_4 value=" 1">|
|
|
<input type="checkbox" name="attr_vbud10_5 value=" 1">
|
|
<input type="checkbox" name="attr_vbud10_6 value=" 1">
|
|
<input type="checkbox" name="attr_vbud10_7 value=" 1">
|
|
<input type="checkbox" name="attr_vbud10_8 value=" 1">|
|
|
<input type="checkbox" name="attr_vbud10_9 value=" 1">
|
|
<input type="checkbox" name="attr_vbud10_10 value=" 1">
|
|
</td>
|
|
<td>
|
|
<input type="radio" name="attr_vbud" value="10" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button type="roll" class="sheet-roll-d8 sheet-boxtitre" name="roll_vbud8"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Usure}} {{subtags=Test}} {{carac=[[d8cf<3]] }}">
|
|
Ud8</button>
|
|
</td>
|
|
<td class="sheet-textfatleft">
|
|
<input type="checkbox" name="attr_vbud8_1" value="1">
|
|
<input type="checkbox" name="attr_vbud8_2" value="1">
|
|
<input type="checkbox" name="attr_vbud8_3" value="1">
|
|
<input type="checkbox" name="attr_vbud8_4" value="1">|
|
|
<input type="checkbox" name="attr_vbud8_5" value="1">
|
|
<input type="checkbox" name="attr_vbud8_6" value="1">
|
|
<input type="checkbox" name="attr_vbud8_7" value="1">
|
|
<input type="checkbox" name="attr_vbud8_8" value="1">
|
|
</td>
|
|
<td>
|
|
<input type="radio" name="attr_vbud" value="8" selected />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button type="roll" class="sheet-roll-d6 sheet-boxtitre" name="roll_vbud6"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Usure}} {{subtags=Test}} {{carac=[[d6cf<3]] }}">
|
|
Ud6</button>
|
|
</td>
|
|
<td class="sheet-textfatleft">
|
|
<input type="checkbox" name="attr_vbud6_1" value="1">
|
|
<input type="checkbox" name="attr_vbud6_2" value="1">
|
|
<input type="checkbox" name="attr_vbud6_3" value="1">
|
|
<input type="checkbox" name="attr_vbud6_4" value="1">|
|
|
<input type="checkbox" name="attr_vbud6_5" value="1">
|
|
<input type="checkbox" name="attr_vbud6_6" value="1">
|
|
</td>
|
|
<td>
|
|
<input type="radio" name="attr_vbud" value="6" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button type="roll" class="sheet-roll-d4 sheet-boxtitre" name="roll_vbud4"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Usure}} {{subtags=Test}} {{carac=[[d4cf<3]] }}">
|
|
Ud4</button>
|
|
</td>
|
|
<td class="sheet-textfatleft">
|
|
<input type="checkbox" name="attr_vbud4_1" value="1">
|
|
<input type="checkbox" name="attr_vbud4_2" value="1">
|
|
<input type="checkbox" name="attr_vbud4_3" value="1">
|
|
<input type="checkbox" name="attr_vbud4_4" value="1">
|
|
</td>
|
|
<td>
|
|
<input type="radio" name="attr_vbud" value="4" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">Ud0</td>
|
|
<td></td>
|
|
<td>
|
|
<input type="radio" name="attr_vbud" value="0" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div class="sheet-row">
|
|
<span class="textfatleft">Jets du véhicule</span>
|
|
</div>
|
|
<fieldset class="repeating_jetv">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td>
|
|
<button type="roll" class="sheet-neutre" name="roll_vehicule"
|
|
title="%{repeating_jetv_$N_vehicule} Jet de véhicule"
|
|
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=@{jetvnom}}} {{subtags=@{VEHICULE}}} {{carac=[[@{jetvnbde}d@{jetvde}@{jetvtypjet} + [[@{jetvcaracp}]][Bonus] + [[@{jetvcarac}]][Véhicule] + @{jetvdiv}[Divers] ]]}} {{desc=@{jetvdesc}}}" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="min-width:200px;">
|
|
<input type="text" name="attr_jetvnom" title="@{jetvnom}" style="font-weight: bold;"
|
|
placeholder="Nom du Jet de véhicule" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="number" style="width:32px;" name="attr_jetvnbde" value="1"
|
|
title="@{jetvnbde} Nombre de dés" />
|
|
<select class="sheet-carac" style="width:50px;" name="attr_jetvde" size="1" title="@{jetvde} Dé">
|
|
<option value="4">d4</option>
|
|
<option value="6">d6</option>
|
|
<option value="8">d8</option>
|
|
<option value="10">d10</option>
|
|
<option value="12">d12</option>
|
|
<option value="@{ETATDE}" selected>d20 (ou d12 si Affaibli)</option>
|
|
</select>
|
|
(
|
|
<select class="sheet-carac" style="width:30px;" name="attr_jetvtypjet" size="1"
|
|
title="@{jetvtypjet} Option du jet : normal, meilleur dé, moins bon dé, sans limite">
|
|
<option value="">N - Normal / additionner tous les dés</option>
|
|
<option value="kh1">S - Garder le dé Supérieur / le plus haut score</option>
|
|
<option value="kl1">I - Garder le dé Inférieur / le plus bas score</option>
|
|
<option value="!">E - Explosif (jet ouvert / sans limite)</option>
|
|
</select>
|
|
) +
|
|
<select class="sheet-carac" style="width:50px;" name="attr_jetvcaracpil" size="1"
|
|
title="@{jetvcaracp} Mod. du personnage">
|
|
<option value="0" selected>-</option>
|
|
<optgroup label="Mod. de Base">
|
|
<option value="@{FOR}">FOR</option>
|
|
<option value="@{DEX}">DEX</option>
|
|
<option value="@{CON}">CON</option>
|
|
<option value="@{INT}">INT</option>
|
|
<option value="@{PER}">PER</option>
|
|
<option value="@{CHA}">CHA</option>
|
|
</optgroup>
|
|
<optgroup label="Mod. de Test">
|
|
<option value="@{FOR_TEST}">FOR</option>
|
|
<option value="@{DEX_TEST}">DEX</option>
|
|
<option value="@{CON_TEST}">CON</option>
|
|
<option value="@{INT_TEST}">INT</option>
|
|
<option value="@{PER_TEST}">PER</option>
|
|
<option value="@{CHA_TEST}">CHA</option>
|
|
</optgroup>
|
|
<optgroup label="Attaques">
|
|
<option value="@{ATKCAC}">ATC</option>
|
|
<option value="@{ATKTIR}">ATD</option>
|
|
<option value="@{ATKPIL}">PIL</option>
|
|
</optgroup>
|
|
</select>
|
|
+
|
|
<select class="sheet-carac" style="width:50px;" name="attr_jetvcarac" size="1"
|
|
title="@{jetvcarac} Mod. du véhicule">
|
|
<option value="0" selected>-</option>
|
|
<option value="@{vbrap}">RAP</option>
|
|
<option value="@{vbman}">MAN</option>
|
|
<option value="@{vbimp}">IMP</option>
|
|
</select>
|
|
+
|
|
<input type="number" style="width:32px;" name="attr_jetvdiv" value="0"
|
|
title="@{jetvdiv} Bonus divers" />
|
|
<input type="hidden" name="attr_jetvcaracp" value="" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width:100%;">
|
|
<textarea name="attr_jetvdesc" placeholder="Description" title="@{jetvdesc}"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
</div>
|
|
<div class="sheet-textfatleft">PARAMETRES</div>
|
|
<ul>
|
|
<li>Jets :
|
|
<select class="sheet-carac" style="width: 130px;" name="attr_togm" title="@{togm}" size="1">
|
|
<option value="" selected>Publics</option>
|
|
<option value="/w gm ">Chuchotés au MJ</option>
|
|
</select>
|
|
</li>
|
|
<li>Type des jets de véhicule :
|
|
<select class="sheet-carac" style="width: 90px;" name="attr_vehicle_type" size="1" title="@{vehicle_type} Type des jets de véhicule">
|
|
<option value="">Choisir</option>
|
|
<option value="sol">Terrestre</option>
|
|
<option value="mer">Maritime</option>
|
|
<option value="air">Aérien</option>
|
|
</select>
|
|
<button type="action" name="act_vehicle_rolls" class="sheet-flatbtn sheet-iconbtn" title="Ajouter les jets de véhicule de base">W</button>
|
|
</li>
|
|
<li>Bitume :
|
|
<input type="checkbox" name="attr_coc_setting_bitume" value="1">
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<!-- FIN Véhicule -->
|
|
</div>
|
|
<div class="sheet-tab-content sheet-fp3">
|
|
<input type="radio" name="attr_tab_pnj" class="sheet-tab sheet-tab1" value="caracs" checked="checked"><span
|
|
title="Caractéristiques"></span>
|
|
<input type="radio" name="attr_tab_pnj" class="sheet-tab sheet-tab2" value="config"><span
|
|
title="Configuration"></span>
|
|
<img class="sheet-imghr-up"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div class="sheet-tab-content sheet-tab1">
|
|
<div>
|
|
<div class="sheet-2colrow">
|
|
<div class="sheet-col">
|
|
<div class="sheet-row">
|
|
<span class="textfatleft">Attributs</span>
|
|
</div>
|
|
<div class="sheet-3colrow">
|
|
<div class="sheet-col" style="width: 27%;">
|
|
<div class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_pnj_for" title="%{pnj_for} Jet de Force"
|
|
value="@{pnj_togm}&{template:co1} {{perso=@{character_name}}} {{name=Force}} {{subtags=Test}} {{carac=[[@{pnj_jetfor}cs20cf1[Dé] + [[@{pnj_for}]][FOR] ]] }}">
|
|
FOR</div>
|
|
<div class="sheet-boxinput">
|
|
<input class="sheet-carac" name="attr_pnj_for" type="number" title="@{pnj_for}" />
|
|
<select class="sheet-carac" style="width: 30px;" size="1" name="attr_pnj_jetfor"
|
|
title="@{pnj_jetfor}">
|
|
<option value="1d20" selected>N - Normale</option>
|
|
<option value="2d20kh1">S - Supérieure</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col" style="width: 27%;">
|
|
<div class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_pnj_dex" title="%{pnj_dex} Jet de Dextérité"
|
|
value="@{pnj_togm}&{template:co1} {{perso=@{character_name}}} {{name=Dextérité}} {{subtags=Test}} {{carac=[[@{pnj_jetdex}cs20cf1[Dé] + [[@{pnj_dex}]][DEX] ]] }}">
|
|
DEX</div>
|
|
<div class="sheet-boxinput">
|
|
<input class="sheet-carac" name="attr_pnj_dex" type="number" title="@{pnj_dex}" />
|
|
<select class="sheet-carac" style="width: 30px;" size="1" name="attr_pnj_jetdex"
|
|
title="@{pnj_jetdex}">
|
|
<option value="1d20" selected>N - Normale</option>
|
|
<option value="2d20kh1">S - Supérieure</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col" style="width: 27%;">
|
|
<div class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_pnj_con" title="%{pnj_con} Jet de Constitution"
|
|
value="@{pnj_togm}&{template:co1} {{perso=@{character_name}}} {{name=Constitution}} {{subtags=Test}} {{carac=[[@{pnj_jetcon}cs20cf1[Dé] + [[@{pnj_con}]][CON] ]] }}">
|
|
CON</div>
|
|
<div class="sheet-boxinput">
|
|
<input class="sheet-carac" name="attr_pnj_con" type="number" title="@{pnj_con}" />
|
|
<select class="sheet-carac" style="width: 30px;" size="1" name="attr_pnj_jetcon"
|
|
title="@{pnj_jetcon}">
|
|
<option value="1d20" selected>N - Normale</option>
|
|
<option value="2d20kh1">S - Supérieure</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
<div class="sheet-3colrow">
|
|
<div class="sheet-col" style="width: 27%;">
|
|
<div class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="jet_pnj_int" title="%{pnj_int} Jet d'Intelligence"
|
|
value="@{pnj_togm}&{template:co1} {{perso=@{character_name}}} {{name=Intelligence}} {{subtags=Test}} {{carac=[[@{pnj_jetint}cs20cf1[Dé] + [[@{pnj_int}]][INT] ]] }}">
|
|
INT</div>
|
|
<div class="sheet-boxinput">
|
|
<input class="sheet-carac" name="attr_pnj_int" type="number" title="@{pnj_int}" />
|
|
<select class="sheet-carac" style="width: 30px;" size="1" name="attr_pnj_jetint"
|
|
title="@{pnj_jetint}">
|
|
<option value="1d20" selected>N - Normale</option>
|
|
<option value="2d20kh1">S - Supérieure</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col" style="width: 27%;">
|
|
<div class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="jet_pnj_per" title="%{pnj_per} Jet de Perception"
|
|
value="@{pnj_togm}&{template:co1} {{perso=@{character_name}}} {{name=Perception}} {{subtags=Test}} {{carac=[[@{pnj_jetper}cs20cf1[Dé] + [[@{pnj_per}]][PER] ]] }}">
|
|
PER</div>
|
|
<div class="sheet-boxinput">
|
|
<input class="sheet-carac" name="attr_pnj_per" type="number" title="@{pnj_per}" />
|
|
<select class="sheet-carac" style="width: 30px;" size="1" name="attr_pnj_jetper"
|
|
title="@{pnj_jetper}">
|
|
<option value="1d20" selected>N - Normale</option>
|
|
<option value="2d20kh1">S - Supérieure</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col" style="width: 27%;">
|
|
<div class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="jet_pnj_cha" title="%{pnj_cha} Jet de Charisme"
|
|
value="@{pnj_togm}&{template:co1} {{perso=@{character_name}}} {{name=Charisme}} {{subtags=Test}} {{carac=[[@{pnj_jetcha}cs20cf1[Dé] + [[@{pnj_cha}]][CHA] ]] }}">
|
|
CHA</div>
|
|
<div class="sheet-boxinput">
|
|
<input class="sheet-carac" name="attr_pnj_cha" type="number" title="@{pnj_cha}" />
|
|
<select class="sheet-carac" style="width: 30px;" size="1" name="attr_pnj_jetcha"
|
|
title="@{pnj_jetcha}">
|
|
<option value="1d20" selected>N - Normale</option>
|
|
<option value="2d20kh1">S - Supérieure</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
<div class="sheet-3colrow">
|
|
<div class="sheet-col" style="width: 27%;">
|
|
<div class="sheet-boxtitre">
|
|
<button class="sheet-boxtitre" type="roll" name="roll_pnj_init" title="%{pnj_init} Jet d'Initiative"
|
|
value="@{pnj_togm}&{template:co1} {{perso=@{character_name}}} {{name=Initiative}} {{subtags=Combat}} {{carac=[[@{pnj_init}[Init.] + @{pnj_init_var}[Dé(s)] &{tracker}]]}}">
|
|
Init.</div>
|
|
<div class="sheet-boxinput">
|
|
<input class="sheet-carac" name="attr_pnj_init" type="number" title="@{pnj_init}" />
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col" style="width: 27%;">
|
|
<div class="sheet-boxtitre">DEF / RD</div>
|
|
<div class="sheet-boxinput">
|
|
<input class="sheet-carac" name="attr_pnj_def" type="number" title="@{pnj_def}" /> /
|
|
<input class="sheet-carac" name="attr_pnj_rd" type="number" title="@{pnj_rd}" />
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col" style="width: 27%;">
|
|
<div class="sheet-boxtitre">PV</div>
|
|
<div class="sheet-boxinput">
|
|
<input class="sheet-carac" name="attr_pnj_pv" type="number" title="@{pnj_pv} PV courants" /> /
|
|
<input class="sheet-carac" name="attr_pnj_pv_max" type="number" title="@{pnj_pv|max} PV MAX" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<div class="sheet-row">
|
|
<span class="textfatleft">Divers</span>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<textarea name="attr_pnj_divers" style="border: 1px solid; height: 15em;"
|
|
title="@{pnj_divers}"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
<img class="sheet-imghr-up"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div class="sheet-row">
|
|
<div class="sheet-row">
|
|
<table>
|
|
<tr>
|
|
<td class="textfatleft" style="width: 250px;" title="repeating_pnjatk">Attaques</td>
|
|
<td class="textbase" style="width: 55px;">Toucher</td>
|
|
<td class="textbase" style="width: 55px;">Crit.</td>
|
|
<td class="textbase" style="width: 150px;">DM</td>
|
|
<td class="textbase" style="width: 50px;">Portée</td>
|
|
<td class="textbase">Spécial</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<fieldset class="repeating_pnjatk">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 30px;">
|
|
<button type="roll" class="sheet-neutre" style="width: 25px;" name="roll_pnjatk"
|
|
title="%{repeating_pnjatk_$N_pnjatk} Jet d'attaque PNJ"
|
|
value="@{pnj_togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Attaque}} {{name=@{atknom}}} {{portee=@{atkportee}}} {{@{atkatt}[[@{atkjet}cf1cs>@{atkcrit}[Dé] + [[@{atkbonus}]][Attaque] ]]}} {{@{atkdmg}[[@{atkdmnbde}d@{atkdmde}[Dé DM] + [[@{atkdmbonus}]][Mod.DM] ]]}} {{special=@{atkspec}}}" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 250px;">
|
|
<input type="checkbox" name="attr_atkatt" title="@{atkatt} Faire un jet d'attaque pour toucher"
|
|
value="attaque=" checked="checked" />
|
|
<input type="text" class="sheet-carac" style="width: 180px;" name="attr_atknom"
|
|
title="@{atknom} Nom de l'arme / attaque" />
|
|
<select class="sheet-carac" style="width: 30px;" name="attr_atkjet"
|
|
title="@{atkjet} Jet d'attaque normal (d20) ou expert (meilleur de deux d20)">
|
|
<option value="1d20" selected>N Normal</option>
|
|
<option value="2d20kh1">E Expert</option>
|
|
</select>
|
|
<input type="number" class="sheet-carac" style="width: 35px;" name="attr_atkbonus"
|
|
title="@{atkbonus} Bonus d'attaque" value="0" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 35px;">
|
|
<input type="number" class="sheet-carac" style="width: 35px;" name="attr_atkcrit"
|
|
title="@{atkcrit} Seuil de critique" value="20" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 130px;">
|
|
<input type="checkbox" name="attr_atkdmg" title="@{atkdmg} Faire un jet de dommages" value="degats="
|
|
checked="checked" />
|
|
<input type="number" class="sheet-carac" style="width: 35px;" name="attr_atkdmnbde"
|
|
title="@{atkdmnbde} Nombre de dés de DM" value="0" />
|
|
<select class="sheet-carac" style="width: 45px;" name="attr_atkdmde" title="@{atkdmde} Dé de DM">
|
|
<optgroup label="Normaux">
|
|
<option value="3">d3</option>
|
|
<option value="4">d4</option>
|
|
<option value="6">d6</option>
|
|
<option value="8">d8</option>
|
|
<option value="10">d10</option>
|
|
<option value="12">d12</option>
|
|
</optgroup>
|
|
<optgroup label="Sans limite">
|
|
<option value="3!">d3</option>
|
|
<option value="4!">d4</option>
|
|
<option value="6!" selected>d6</option>
|
|
<option value="8!">d8</option>
|
|
<option value="10!">d10</option>
|
|
<option value="12!">d12</option>
|
|
</optgroup>
|
|
</select>
|
|
+
|
|
<input type="number" class="sheet-carac" style="width: 35px;" name="attr_atkdmbonus"
|
|
title="@{atkdmbonus} Bonus aux DM" value="0" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 35px;">
|
|
<input type="text" class="sheet-carac" style="width: 35px;" name="attr_atkportee"
|
|
title="@{atkportee} Portée" value="" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<textarea class="sheet-carac" name="attr_atkspec" title="@{atkspec} Autres effets"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
<img class="sheet-imghr-up"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div class="sheet-row">
|
|
<div class="sheet-row">
|
|
<span class="textfatleft">Capacités</span>
|
|
</div>
|
|
<fieldset class="repeating_pnjcapas">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 30px;">
|
|
<button type="roll" class="sheet-neutre" style="width: 25px;" name="roll_pnjcapa"
|
|
title="%{repeating_pnjcapas_$N_pnjcapa} Jet de capacité PNJ"
|
|
value="@{pnj_togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Capacité}} {{name=@{capanom}}} {{text=@{capadesc}}}" />
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 200px;">
|
|
<input type="text" class="sheet-carac" style="width: 200px;" name="attr_capanom"
|
|
title="@{capanom} Nom de la capacité" />
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<textarea class="sheet-carac" name="attr_capadesc"
|
|
title="@{capadesc} Description de la capacité"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
<img class="sheet-imghr-up"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
<div class="sheet-row">
|
|
<input type="checkbox" class="sheet-block-switch"><span>Importer statblock</span>
|
|
<div class="sheet-block-hidden"></div>
|
|
<div class="sheet-block-show">
|
|
<div class="sheet-2colrow">
|
|
<div class="sheet-col">
|
|
<textarea class="sheet-boxinputleft" name="attr_statblock" style="height: 10em;"
|
|
placeholder="Coller ici un statblock copié depuis le PDF"></textarea>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<button type="action" name="act_sb_import" class="sheet-flatbtn sheet-iconbtn"
|
|
title="Importer le stat-block">W</button>
|
|
<!-- <button type="roll" name="roll_sb_import_help" class="sheet-neutre sheet-nod20 sheet-flatbtn" value="[Import de stat-block](https://stephaned68.github.io/ChroniquesContemporaines/import-statblock)">Aide</button> -->
|
|
<textarea class="sheet-boxinputleft" name="attr_sbresult" style="height: 5em;"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</diV>
|
|
</div>
|
|
<div class="sheet-tab-content sheet-tab2">
|
|
<ul>
|
|
<li>Jets
|
|
<select class="sheet-carac" style="width: 130px;" name="attr_pnj_togm" title="@{pnj_togm}" size="1">
|
|
<option value="" selected>Publics</option>
|
|
<option value="/w gm ">Murmurés au MJ</option>
|
|
</select>
|
|
</li>
|
|
<li>Initiative variable
|
|
<input type="checkbox" name="attr_pnj_init_var" title="@{pnj_init_var}" value="[[1d6!]]" />
|
|
</li>
|
|
<li>Bitume
|
|
<input type="checkbox" name="attr_coc_setting_bitume" value="1">
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- FIN FDP -->
|
|
<!-- TEMPLATES -->
|
|
<rolltemplate class="sheet-rolltemplate-co1">
|
|
<div class="sheet-roundtable">
|
|
<table>
|
|
<tr>
|
|
<th colspan="2" style="text-align: center;">{{perso}}</th>
|
|
</tr>
|
|
<tr>
|
|
<td class="subheader">{{subtags}}</td>
|
|
<th>{{name}}</th>
|
|
</tr>
|
|
{{#portee}}
|
|
<tr>
|
|
<td style="font-size: smaller; text-align: center;" colspan="2">Portée : {{portee}}</td>
|
|
</tr>
|
|
{{/portee}}
|
|
<tr>
|
|
<td colspan="2">
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<table>
|
|
{{#desc}}
|
|
<tr>
|
|
<td colspan="2" style="white-space:normal;">
|
|
<div class="desc">{{desc}}</div>
|
|
</td>
|
|
</tr>
|
|
{{/desc}}
|
|
{{#DV}}
|
|
<tr>
|
|
<td class="tcat">PV gagnés</td>
|
|
<td>{{DV}}</td>
|
|
</tr>
|
|
{{/DV}}
|
|
{{#carac}}
|
|
<tr>
|
|
{{#jet}}
|
|
<td class="tcat">{{jet}} </td>
|
|
{{/jet}}
|
|
{{^jet}}
|
|
<td class="tcat">Jet </td>
|
|
{{/jet}}
|
|
<td>{{carac}}</td>
|
|
</tr>
|
|
{{/carac}}
|
|
{{#test}}
|
|
<tr>
|
|
<td colspan="2" style="display: none;">{{test}}</td>
|
|
</tr>
|
|
{{#rollWasCrit() test}}
|
|
<tr>
|
|
<td colspan="2" style="color:green;">
|
|
<div class="desc"><b>{{test_crit}}</b></div>
|
|
</td>
|
|
</tr>
|
|
{{/rollWasCrit() test}}
|
|
{{#rollWasFumble() test}}
|
|
<tr>
|
|
<td colspan="2" style="color:red;">
|
|
<div class="desc"><b>{{test_fumble}}</b></div>
|
|
</td>
|
|
</tr>
|
|
{{/rollWasFumble() test}}
|
|
{{/test}}
|
|
{{#attaque}}
|
|
{{#rollWasCrit() attaque}}
|
|
<tr>
|
|
<td colspan="2" style="color:green;"><b>Critique !</b></td>
|
|
</tr>
|
|
{{/rollWasCrit() attaque}}
|
|
{{#rollWasFumble() attaque}}
|
|
<tr>
|
|
<td colspan="2" style="color:red;"><b>Fumble !</b></td>
|
|
</tr>
|
|
{{/rollWasFumble() attaque}}
|
|
<tr>
|
|
<td class="tcat">Jet </td>
|
|
<td>{{attaque}} contre DEF</td>
|
|
</tr>
|
|
{{#degats}}
|
|
<tr>
|
|
<td class="tcat">Dégâts </td>
|
|
<td>
|
|
{{degats}} {{#rollWasCrit() attaque}}
|
|
<span style="color:green;font-weight:bold;"> + {{degats}}</span> {{/rollWasCrit() attaque}} {{dmtype}}
|
|
</td>
|
|
</tr>
|
|
{{#degats2}}
|
|
<tr>
|
|
<td style="text-align: right;">+</td>
|
|
<td><span style="color: steelblue;">{{degats2}} {{dm2type}}</span></td>
|
|
</tr>
|
|
{{/degats2}}
|
|
{{/degats}}
|
|
{{/attaque}}
|
|
{{^attaque}}
|
|
{{#degats}}
|
|
<tr>
|
|
<td class="tcat">Dégâts </td>
|
|
<td>{{degats}} {{dmtype}}</td>
|
|
</tr>
|
|
{{#degats2}}
|
|
<tr>
|
|
<td style="text-align: right;">+</td>
|
|
<td><span style="color: steelblue;">{{degats2}} {{dm2type}}</span></td>
|
|
</tr>
|
|
{{/degats2}}
|
|
{{/degats}}
|
|
{{/attaque}}
|
|
{{#special}}
|
|
<tr>
|
|
<td colspan="2" style="white-space:normal;">
|
|
<div class="desc">{{special}}</div>
|
|
</td>
|
|
</tr>
|
|
{{/special}}
|
|
{{#text}}
|
|
<tr>
|
|
<td colspan="2" style="white-space:normal; margin: 1px;">
|
|
<div class="text">{{text}}</div>
|
|
</td>
|
|
</tr>
|
|
{{/text}}
|
|
<tr>
|
|
<td colspan="2">
|
|
<img class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesOublieesContemporain/coc_hr.jpg" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</rolltemplate>
|
|
<!-- FIN TEMPLATES -->
|
|
<!-- **** SCRIPTS / SHEET WORKERS -->
|
|
<script type="text/worker">
|
|
|
|
/**
|
|
* Log any type of data to the browser console
|
|
* @param {any} l
|
|
* @param {string} m
|
|
*/
|
|
function consoleLog(l, m) {
|
|
m = m || '';
|
|
if (m !== '') {
|
|
m = ' : ' + m;
|
|
}
|
|
if (typeof l === 'object') {
|
|
console.log(`[CO sheetworker${m}] <<<`);
|
|
console.log(l);
|
|
console.log(`[CO sheetworker${m}] >>>`);
|
|
} else {
|
|
console.log(`[CO sheetworker${m}] ${l}`);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns true if a 'debug' attribute exists with a truethy value
|
|
* @param {object} v List of values returned by getAttrs()
|
|
*/
|
|
function isDebug(v) {
|
|
const debug = v.debug || '';
|
|
if (['false', '0', 'n', ''].indexOf(debug.toLowerCase()) !== -1) return false;
|
|
else return true;
|
|
}
|
|
|
|
/**
|
|
* Generate a random number between 1 and max
|
|
* @param {integer} max Upper bound of range
|
|
* @returns {integer} Generated random number
|
|
*/
|
|
function getRandom(max) {
|
|
const min = 1;
|
|
max = Math.floor(max);
|
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
}
|
|
|
|
/**
|
|
* Compute caracteristic modifier
|
|
* @param {integer} value Characteristic value
|
|
* @returns modifier
|
|
*/
|
|
function getMod(value) {
|
|
value = parseInt(value) || 0;
|
|
return Math.floor((value - 10) / 2);
|
|
}
|
|
|
|
/**
|
|
* Parse a chunk of data into name & value
|
|
* @param {string} data Chunk of data to parse
|
|
* @param {string} delim Delimiter (defaults to ':')
|
|
* @returns an object with name and value properties
|
|
*/
|
|
function parseNameValue(data, delim) {
|
|
delim = delim || ':';
|
|
let parsed = {};
|
|
if (data.indexOf(delim) !== -1) {
|
|
const parts = data.split(delim);
|
|
let name = (parts[0] || '').trim();
|
|
let value = '';
|
|
if (parts.length > 1) {
|
|
value = (parts[1] || '').trim();
|
|
}
|
|
parsed = {
|
|
name: name,
|
|
value: value,
|
|
};
|
|
}
|
|
return parsed;
|
|
}
|
|
|
|
/**
|
|
* Remove all rows for a repeating section
|
|
* @param {string} sectionName Repeating section to clear
|
|
*/
|
|
function removeRepeating(sectionName) {
|
|
getSectionIDs(sectionName, function (ids) {
|
|
for (let id of ids) {
|
|
removeRepeatingRow(`repeating_${sectionName}_${id}`);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Add a trait/ability or extra to an NPC object
|
|
* @param {object} npcObj
|
|
* @param {object} traitObj
|
|
*/
|
|
function addTrait(npcObj, traitObj) {
|
|
if (traitObj.nom !== '' && traitObj.desc !== '') {
|
|
npcObj.Capas.push(`${traitObj.nom}~${traitObj.desc}`);
|
|
} else if (traitObj.desc !== '') {
|
|
npcObj.Extras.push(traitObj.desc.trim());
|
|
}
|
|
traitObj.nom = '';
|
|
traitObj.desc = '';
|
|
}
|
|
|
|
/**
|
|
* Import an NPC statblock text
|
|
* @param {string} text Statblock to parse
|
|
* @returns {object} NPC object
|
|
*/
|
|
function importStatblock(text) {
|
|
text = text.replace(/\r/g, '');
|
|
text = text.replace(/\n[ ]*\+/g, '+');
|
|
var npc = {
|
|
NC: 0,
|
|
PROFIL: '',
|
|
TAILLE: '',
|
|
FOR: '',
|
|
DEX: '',
|
|
CON: '',
|
|
INT: '',
|
|
PER: '',
|
|
SAG: '',
|
|
CHA: '',
|
|
INIT: 0,
|
|
PV: 0,
|
|
RD: 0,
|
|
DEF: 0,
|
|
ATC: '',
|
|
ATD: '',
|
|
PIL: '',
|
|
Atks: [],
|
|
Capas: [],
|
|
Extras: [],
|
|
};
|
|
var rows = text.split(/\n/);
|
|
var capacites = false;
|
|
var capacite = { nom: '', desc: '' };
|
|
console.log('** CO sheetworker : parsing text <<<');
|
|
rows.forEach(function (row, rownr) {
|
|
let dataRow = row.trim();
|
|
console.log(rownr, dataRow);
|
|
if (rownr === 0 && dataRow.toUpperCase().indexOf('NC') === -1) {
|
|
// assume first line is name
|
|
npc.character_name = dataRow;
|
|
return;
|
|
}
|
|
// reading attacks list
|
|
if (!capacites) {
|
|
const atkRow = dataRow.toUpperCase();
|
|
if (atkRow.indexOf('ATTAQUE') === 0 || atkRow.indexOf('DM') !== -1) {
|
|
// this is an attack line, handle CG statblocks
|
|
dataRow = dataRow.replace(/ \(DM/g, ' DM');
|
|
dataRow = dataRow.replace(/\)$/g, '');
|
|
npc.Atks.push(dataRow);
|
|
return;
|
|
}
|
|
}
|
|
// reading paths & ranks
|
|
if (dataRow.toUpperCase().startsWith('VOIE ')) {
|
|
if (capacites) addTrait(npc, capacite);
|
|
npc.Extras.push(dataRow);
|
|
return;
|
|
}
|
|
if (capacites) {
|
|
// reading abilities list
|
|
let s = dataRow.indexOf(':');
|
|
if (s !== -1) {
|
|
addTrait(npc, capacite);
|
|
capacite.nom = dataRow.substring(0, s - 1).trim();
|
|
if (capacite.nom.indexOf(' RD') !== -1) {
|
|
capacite.nom = capacite.nom.replace(' RD', ' (RD');
|
|
}
|
|
capacite.desc = dataRow.substring(s + 1).trim();
|
|
} else {
|
|
capacite.desc += ' ' + dataRow.trim();
|
|
}
|
|
return;
|
|
}
|
|
// start of abilities list
|
|
if (
|
|
dataRow.toUpperCase().startsWith('CAPACIT') ||
|
|
dataRow.startsWith('---') ||
|
|
dataRow.trim() === ''
|
|
) {
|
|
addTrait(npc, capacite);
|
|
capacites = !capacites;
|
|
return;
|
|
}
|
|
// reading statistics
|
|
dataRow = dataRow.replace(/\, /g, ' ');
|
|
dataRow = dataRow.replace(/ \(\+/g, ' +');
|
|
dataRow = dataRow.replace(/ \(RD/g, ' RD ');
|
|
dataRow = dataRow.replace(/ RD /g, ' RD ');
|
|
dataRow = dataRow.replace(/\) /g, ' ');
|
|
dataRow = dataRow.replace(/très /g, 'très~'); // handle 'très petite' size
|
|
dataRow = dataRow.replace(/créature /g, 'PROFIL créature~'); // handle 'créature' mention
|
|
var items = dataRow.split(' ');
|
|
console.log(items);
|
|
for (var item = 0; item < items.length; item++) {
|
|
if (item % 2 === 0) {
|
|
const k = items[item].toUpperCase().replace(/\./g, '');
|
|
if (Object.keys(npc).indexOf(k) === -1) {
|
|
items.splice(item, 1);
|
|
item--;
|
|
continue;
|
|
}
|
|
let v = items[item + 1];
|
|
if (v.trim() !== '') {
|
|
v = v.replace(/~/g, ' ');
|
|
npc[k] = v;
|
|
if (k === 'SAG') delete npc.PER;
|
|
if (k === 'PER') delete npc.SAG;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
if (capacites) addTrait(npc, capacite);
|
|
console.log('** CO sheetworker : parsing text >>>');
|
|
|
|
return npc;
|
|
}
|
|
|
|
/**
|
|
* Process base attributes from parsed NPC object
|
|
* @param {string} universe
|
|
* @param {object} pnjObj NPC object
|
|
* @returns {string} Result messsage
|
|
*/
|
|
function processBaseAttributes(universe, pnjObj) {
|
|
var result = '';
|
|
var pnj_sagorper = '';
|
|
var pnj_jetsagorper = '';
|
|
if (universe === 'COF') {
|
|
// COF uses SAG (Wisdom)
|
|
pnj_sagper = 'pnj_sag';
|
|
pnj_jetsagper = 'pnj_jetsag';
|
|
if (!pnjObj.hasOwnProperty('SAG') && pnjObj.hasOwnProperty('PER')) {
|
|
// in case a CG/COC statblock is pasted to COF
|
|
sagOrPer = pnjObj.PER;
|
|
result = 'Attention : PER trouvé à la place de SAG';
|
|
} else {
|
|
sagOrPer = pnjObj.SAG;
|
|
}
|
|
}
|
|
if (universe === 'COC' || universe === 'CG') {
|
|
// CG & COC uses PER (Perception)
|
|
pnj_sagper = 'pnj_per';
|
|
pnj_jetsagper = 'pnj_jetper';
|
|
if (!pnjObj.hasOwnProperty('PER') && pnjObj.hasOwnProperty('SAG')) {
|
|
// in case a COF statblock is pasted to CG/COC
|
|
sagOrPer = pnjObj.SAG;
|
|
result = 'Attention : SAG trouvé à la place de PER';
|
|
} else {
|
|
sagOrPer = pnjObj.PER;
|
|
}
|
|
}
|
|
var jnor = '1d20';
|
|
var jsup = '2d20kh1';
|
|
var pnjAttrs = {};
|
|
if (pnjObj.hasOwnProperty('character_name')) {
|
|
pnjAttrs.character_name = pnjObj.character_name;
|
|
delete pnjObj.character_name;
|
|
}
|
|
pnjAttrs.NIVEAU = parseInt(pnjObj.NC) || 0;
|
|
delete pnjObj.NC;
|
|
pnjAttrs.TAILLE = pnjObj.TAILLE || '';
|
|
delete pnjObj.TAILLE;
|
|
if (pnjObj.PROFIL !== '') {
|
|
pnjAttrs.PROFIL = pnjObj.PROFIL;
|
|
}
|
|
delete pnjObj.PROFIL;
|
|
pnjAttrs.pnj_for = parseInt(pnjObj.FOR.replace('*', ''));
|
|
pnjAttrs.pnj_jetfor =
|
|
pnjObj.FOR.charAt(pnjObj.FOR.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.FOR;
|
|
pnjAttrs.pnj_dex = parseInt(pnjObj.DEX.replace('*', ''));
|
|
pnjAttrs.pnj_jetdex =
|
|
pnjObj.DEX.charAt(pnjObj.DEX.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.DEX;
|
|
pnjAttrs.pnj_con = parseInt(pnjObj.CON.replace('*', ''));
|
|
pnjAttrs.pnj_jetcon =
|
|
pnjObj.CON.charAt(pnjObj.CON.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.CON;
|
|
pnjAttrs.pnj_int = parseInt(pnjObj.INT.replace('*', ''));
|
|
pnjAttrs.pnj_jetint =
|
|
pnjObj.INT.charAt(pnjObj.INT.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.INT;
|
|
pnjAttrs[pnj_sagper] = parseInt(sagOrPer.replace('*', ''));
|
|
pnjAttrs[pnj_jetsagper] =
|
|
sagOrPer.charAt(sagOrPer.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.SAG;
|
|
delete pnjObj.PER;
|
|
pnjAttrs.pnj_cha = parseInt(pnjObj.CHA.replace('*', ''));
|
|
pnjAttrs.pnj_jetcha =
|
|
pnjObj.CHA.charAt(pnjObj.CHA.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.CHA;
|
|
pnjAttrs.pnj_init = parseInt(pnjObj.INIT);
|
|
delete pnjObj.INIT;
|
|
pnjAttrs.pnj_def = parseInt(pnjObj.DEF);
|
|
delete pnjObj.DEF;
|
|
if (universe === 'CG') {
|
|
pnjAttrs.pnj_dep = parseInt(pnjObj.DEP);
|
|
}
|
|
delete pnjObj.DEP;
|
|
pnjAttrs.pnj_pv = parseInt(pnjObj.PV);
|
|
pnjAttrs.pnj_pv_max = parseInt(pnjObj.PV);
|
|
delete pnjObj.PV;
|
|
pnjAttrs.pnj_rd = parseInt(pnjObj.RD) || 0;
|
|
delete pnjObj.RD;
|
|
consoleLog(pnjAttrs, 'setting attributes');
|
|
pnjAttrs.statblock = '';
|
|
setAttrs(pnjAttrs);
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Process attacks from parsed NPC object
|
|
* @param {string} universe
|
|
* @param {object} pnjObj NPC object
|
|
* @returns {string} Result message
|
|
*/
|
|
function processAttacks(universe, pnjObj) {
|
|
removeRepeating('pnjatk');
|
|
let result = '';
|
|
|
|
for (const atk of pnjObj.Atks) {
|
|
const atkItems = atk.split(' ');
|
|
consoleLog(atkItems, 'attacks found');
|
|
if (atkItems[atkItems.length - 1] === 'DM') {
|
|
atkItems.push('-');
|
|
}
|
|
let atkAtt = 'attaque=';
|
|
let atkNom = '';
|
|
let atkBonus = -1;
|
|
let atkPortee = '';
|
|
let atkDM = '';
|
|
let atkSpec = '';
|
|
let parsed = '';
|
|
for (let atkItem of atkItems) {
|
|
if (atkItem === 'DM' && atkNom === '') {
|
|
atkNom = parsed;
|
|
parsed = 'DM';
|
|
continue;
|
|
}
|
|
if (atkItem.charAt(0) === '+' && atkItem !== '+' && atkNom === '') {
|
|
atkBonus = parseInt(atkItem.replace('+', '')) || 0;
|
|
atkNom = parsed;
|
|
parsed = '';
|
|
continue;
|
|
}
|
|
if (parsed.endsWith('DM')) {
|
|
atkDM = atkItem;
|
|
atkSpec = parsed.replace('DM', '');
|
|
parsed = '';
|
|
continue;
|
|
}
|
|
if (atkItem.charAt(0) === '(' && atkItem.endsWith('m)')) {
|
|
atkPortee = atkItem.substring(1, atkItem.length - 1);
|
|
continue;
|
|
}
|
|
parsed += parsed != '' ? ' ' : '';
|
|
parsed += atkItem;
|
|
}
|
|
consoleLog(atkNom + ' ' + atkBonus + ' ' + atkDM + ' ' + atkSpec);
|
|
if (atkBonus === -1) {
|
|
if (atkNom.endsWith(' /') && pnjObj.hasOwnProperty('ATD')) {
|
|
atkBonus = parseInt(pnjObj.ATD.replace('+', '')) || 0;
|
|
atkNom = atkNom.replace(' /', '');
|
|
} else {
|
|
atkAtt = '0'; // No attack bonus found, damage only
|
|
}
|
|
}
|
|
let atkDmg = atkDM !== '' ? 'degats=' : '0';
|
|
let atkNbDe = 0;
|
|
let atkDe = '';
|
|
let atkBonusDM = 0;
|
|
if (atkDM !== '') {
|
|
atkDM = atkDM.toLowerCase();
|
|
atkDM = atkDM.replace('d', '|');
|
|
atkDM = atkDM.replace('+', '|+');
|
|
atkDM = atkDM.replace('-', '|-');
|
|
let dm = atkDM.split('|');
|
|
atkNbDe = parseInt(dm[0]) || 0;
|
|
if (atkNbDe === 0) {
|
|
atkDmg = '0'; // No damage dice, attack only
|
|
}
|
|
atkDe = dm[1];
|
|
if (universe === 'COC') {
|
|
atkDe += '!';
|
|
}
|
|
atkBonusDM = parseInt(dm[2]) || 0;
|
|
}
|
|
if (atkNom !== '' && (atkAtt !== '0' || atkDmg !== '0')) {
|
|
newRowID = 'repeating_pnjatk_' + generateRowID();
|
|
let atkRow = {};
|
|
atkRow[`${newRowID}_atkatt`] = atkAtt;
|
|
atkRow[`${newRowID}_atknom`] = atkNom;
|
|
atkRow[`${newRowID}_atkjet`] = '1d20';
|
|
atkRow[`${newRowID}_atkbonus`] = atkBonus;
|
|
atkRow[`${newRowID}_atkcrit`] = '20';
|
|
atkRow[`${newRowID}_atkdmg`] = atkDmg;
|
|
atkRow[`${newRowID}_atkdmnbde`] = atkNbDe;
|
|
atkRow[`${newRowID}_atkdmde`] = atkDe;
|
|
atkRow[`${newRowID}_atkdmbonus`] = atkBonusDM;
|
|
atkRow[`${newRowID}_atkportee`] = atkPortee;
|
|
atkSpec += parsed;
|
|
atkSpec = atkSpec.replace(/\d+d\d+/g, '[[$&]]'); // search for <numbers>d<numbers> and replace with in-line roll
|
|
if (atkSpec !== '') {
|
|
atkRow[`${newRowID}_atkspec`] = atkSpec;
|
|
}
|
|
consoleLog(atkRow, 'adding attack');
|
|
setAttrs(atkRow);
|
|
} else {
|
|
result +=
|
|
(result.length > 0 ? '\n' : '') +
|
|
'Err: impossible d\'analyser le contenu de "' +
|
|
pnjObj.Atks[atk] +
|
|
'"';
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Process abilities/traits from parsed NPC object
|
|
* @param {string} universe
|
|
* @param {object} pnjObj NPC object
|
|
* @returns {string} Result message
|
|
*/
|
|
function processTraits(universe, pnjObj) {
|
|
removeRepeating('pnjcapas');
|
|
let result = '';
|
|
|
|
for (const capa of pnjObj.Capas) {
|
|
const capacite = capa.split('~');
|
|
if (capacite.length == 2) {
|
|
let name = capacite[0] || '';
|
|
let desc = capacite[1] || '';
|
|
if (name !== '' && desc !== '') {
|
|
newRowID = 'repeating_pnjcapas_' + generateRowID();
|
|
let capaRow = {};
|
|
capaRow[`${newRowID}_capanom`] = name;
|
|
['FOR', 'DEX', 'CON', 'INT', 'PER', 'SAG', 'CHA'].forEach((attr) => {
|
|
regExp = new RegExp(`Mod\. de ${attr}`, 'gi');
|
|
desc = desc.replace(regExp, `@{pnj_${attr.toLowerCase()}}`);
|
|
});
|
|
desc = desc.replace(/\d+d\d+[+-]*\d*/g, '{{$&}}'); // search for <numbers>d<numbers>+/-<number>
|
|
desc = desc.replace(/\[\d+d\d+[+-]*\d*\]/g, '{$&}'); // search for [<numbers>d<numbers>+/-<number>]
|
|
desc = desc.replace(/\[{{/g, '[[');
|
|
desc = desc.replace(/}}\]/g, ']]');
|
|
desc = desc.replace(/{{/g, '[[');
|
|
desc = desc.replace(/}}/g, ']]');
|
|
desc = desc.replace(/\]\] \+ /g, ' + ');
|
|
desc = desc.replace(/}\]/g, '} ]]');
|
|
capaRow[`${newRowID}_capadesc`] = desc;
|
|
consoleLog(capaRow, 'adding trait');
|
|
setAttrs(capaRow);
|
|
}
|
|
} else {
|
|
result +=
|
|
(result.length > 0 ? '\n' : '') +
|
|
'Err: impossible d\'analyser le contenu de "' +
|
|
capacite +
|
|
'"';
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* (Re-)Build the CARACS serialized objects
|
|
*/
|
|
function buildCaracs() {
|
|
getAttrs(
|
|
[
|
|
'FORCE',
|
|
'DEXTERITE',
|
|
'CONSTITUTION',
|
|
'INTELLIGENCE',
|
|
'PERCEPTION',
|
|
'CHARISME',
|
|
'NIVEAU',
|
|
'RANG_VOIE1',
|
|
'RANG_VOIE2',
|
|
'RANG_VOIE3',
|
|
'RANG_VOIE4',
|
|
'RANG_VOIE5',
|
|
'RANG_VOIE6',
|
|
'RANG_VOIE7',
|
|
'RANG_VOIE8',
|
|
'RANG_VOIE9',
|
|
'voie1nom',
|
|
'voie2nom',
|
|
'voie3nom',
|
|
'voie4nom',
|
|
'voie5nom',
|
|
'voie6nom',
|
|
'voie7nom',
|
|
'voie8nom',
|
|
'voie9nom',
|
|
'DEFARMUREON',
|
|
],
|
|
function (values) {
|
|
let caracs = {
|
|
FOR: 0,
|
|
DEX: 0,
|
|
CON: 0,
|
|
INT: 0,
|
|
PER: 0,
|
|
CHA: 0,
|
|
};
|
|
for (const car in values) {
|
|
let vcar = values[car];
|
|
if (vcar && !isNaN(vcar)) {
|
|
vcar = parseInt(vcar) || 0;
|
|
}
|
|
const mod = car.substring(0, 3);
|
|
if (caracs.hasOwnProperty(mod)) {
|
|
caracs[mod] = getMod(vcar);
|
|
}
|
|
if (car.startsWith('RANG_')) {
|
|
if (!caracs.hasOwnProperty('rangs')) {
|
|
caracs.rangs = [0, 0, 0, 0, 0, 0, 0, 0, 0];
|
|
}
|
|
let voie = parseInt(car.substring(car.length - 1)) || 0;
|
|
if (voie > 0) {
|
|
caracs[car] = vcar;
|
|
caracs.rangs[voie - 1] = vcar;
|
|
}
|
|
} else if (car.startsWith('voie') && car.endsWith('nom')) {
|
|
if (!caracs.hasOwnProperty('voies')) {
|
|
caracs.voies = ['', '', '', '', '', '', '', '', ''];
|
|
}
|
|
let voie = parseInt(car.substring(4, 5)) || 0;
|
|
if (voie > 0 && vcar) {
|
|
caracs.voies[voie - 1] = vcar.toUpperCase();
|
|
}
|
|
} else {
|
|
caracs[car] = vcar;
|
|
}
|
|
}
|
|
setAttrs({
|
|
CARACS: JSON.stringify(caracs),
|
|
});
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Rebuild the abilities attributes
|
|
* @param {int} vnum Path number
|
|
*/
|
|
function buildAbilities(vnum) {
|
|
return; // TODO : future dev
|
|
let vn = vnum || 0;
|
|
let attrs = [];
|
|
if (vn !== 0) {
|
|
attrs = attrRanks(vn);
|
|
} else {
|
|
let attrv = [];
|
|
for (let voie = 1; voie <= 9; voie++) {
|
|
attrv[voie - 1] = attrRanks(voie);
|
|
}
|
|
attrs = [
|
|
...attrv[0],
|
|
...attrv[1],
|
|
...attrv[2],
|
|
...attrv[3],
|
|
...attrv[4],
|
|
...attrv[5],
|
|
...attrv[6],
|
|
...attrv[7],
|
|
...attrv[8],
|
|
];
|
|
}
|
|
attrs.push('hors_fiche');
|
|
attrs.push('hors_fiche_pfx');
|
|
attrs.push('capacites');
|
|
|
|
getAttrs(attrs, function (v) {
|
|
if (v.hors_fiche === 'none') return;
|
|
let abilities = {};
|
|
if (vn != 0 && v.hors_fiche === 'serial' && v.capacites !== undefined) {
|
|
abilities = JSON.parse(v.capacites);
|
|
}
|
|
for (let voie = 1; voie <= 9; voie++) {
|
|
for (let rank = 1; rank <= 5; rank++) {
|
|
let ability = v[`voie${voie}-${rank}`] || '';
|
|
let checked = v[`v${voie}r${rank}`] || '0';
|
|
if (ability !== '') {
|
|
ability = ability.split('\n')[0];
|
|
ability = ability
|
|
.replace(/'/, ' ')
|
|
.split(/\s+/)
|
|
.map((word, ix) => {
|
|
word = word.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
return ix === 0
|
|
? word.toLowerCase()
|
|
: word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
})
|
|
.join('');
|
|
if (v.hors_fiche === 'direct' && v.hors_fiche_pfx !== '')
|
|
ability =
|
|
v.hors_fiche_pfx +
|
|
ability.charAt(0).toUpperCase() +
|
|
ability.slice(1);
|
|
abilities[ability] = checked === '0' ? '0' : '1';
|
|
}
|
|
}
|
|
}
|
|
console.log(abilities);
|
|
if (v.hors_fiche === 'serial') {
|
|
abilities = JSON.stringify(abilities);
|
|
abilities = { capacites: abilities };
|
|
}
|
|
setAttrs(abilities);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Sheet migrations
|
|
*/
|
|
function migrateSheet(verfdp) {
|
|
// version 1.x > 2.0
|
|
if (verfdp.major < 2) {
|
|
getAttrs(
|
|
[
|
|
'UNIVERS',
|
|
'FOR_BONUS',
|
|
'DEX_BONUS',
|
|
'CON_BONUS',
|
|
'INT_BONUS',
|
|
'PER_BONUS',
|
|
'CHA_BONUS',
|
|
'ATKCAC_DIV',
|
|
'ATKTIR_DIV',
|
|
'ATKMAG_DIV',
|
|
'ATKMEN_DIV',
|
|
'PSYINTUI_DIV',
|
|
'PSYINFLU_DIV',
|
|
'INIT_DIV',
|
|
'DEFDIV',
|
|
'DEPDIV',
|
|
],
|
|
function (values) {
|
|
let for_bonus = parseInt(values.FOR_BONUS) || 0;
|
|
let for_bonus_desc = for_bonus !== 0 ? 'Bonus FOR' : '';
|
|
let dex_bonus = parseInt(values.DEX_BONUS) || 0;
|
|
let dex_bonus_desc = dex_bonus !== 0 ? 'Bonus DEX' : '';
|
|
let con_bonus = parseInt(values.CON_BONUS) || 0;
|
|
let con_bonus_desc = con_bonus !== 0 ? 'Bonus CON' : '';
|
|
let int_bonus = parseInt(values.INT_BONUS) || 0;
|
|
let int_bonus_desc = int_bonus !== 0 ? 'Bonus INT' : '';
|
|
let per_bonus = parseInt(values.PER_BONUS) || 0;
|
|
let per_bonus_desc = per_bonus !== 0 ? 'Bonus PER' : '';
|
|
let cha_bonus = parseInt(values.CHA_BONUS) || 0;
|
|
let cha_bonus_desc = cha_bonus !== 0 ? 'Bonus CHA' : '';
|
|
let atkcac_div = parseInt(values.ATKCAC_DIV) || 0;
|
|
let atkcac_bonus_desc = atkcac_div !== 0 ? 'Bonus ATC' : '';
|
|
let atktir_div = parseInt(values.ATKTIR_DIV) || 0;
|
|
let atktir_bonus_desc = atktir_div !== 0 ? 'Bonus ATD' : '';
|
|
let atkmag_div = parseInt(values.ATKMAG_DIV) || 0;
|
|
let atkmag_bonus_desc = atkmag_div !== 0 ? 'Bonus MAG' : '';
|
|
let atkmen_div = parseInt(values.ATKMEN_DIV) || 0;
|
|
let atkmen_bonus_desc = atkmen_div !== 0 ? 'Bonus MEN' : '';
|
|
let psyinflu_div = parseInt(values.ATKPSYINFLU_DIV) || 0;
|
|
let psyinflu_bonus_desc = psyinflu_div !== 0 ? 'Bonus Psy Inf.' : '';
|
|
let psyintui_div = parseInt(values.ATKPSYINTUI_DIV) || 0;
|
|
let psyintui_bonus_desc = psyintui_div !== 0 ? 'Bonus Psy Int.' : '';
|
|
let init_div = parseInt(values.INIT_DIV) || 0;
|
|
let init_bonus_desc = init_div !== 0 ? 'Bonus Init.' : '';
|
|
let defdiv = parseInt(values.DEFDIV) || 0;
|
|
let def_bonus_desc = defdiv !== 0 ? 'Bonus DEF' : '';
|
|
let depdiv = parseInt(values.DEPDIV) || 0;
|
|
let dep_bonus_desc = depdiv !== 0 ? 'Bonus DEP' : '';
|
|
setAttrs({
|
|
FOR_BUFF1_DESC: for_bonus_desc,
|
|
FOR_BUFF1: for_bonus,
|
|
FOR_BUFF: for_bonus,
|
|
DEX_BUFF1_DESC: dex_bonus_desc,
|
|
DEX_BUFF1: dex_bonus,
|
|
DEX_BUFF: dex_bonus,
|
|
CON_BUFF1_DESC: con_bonus_desc,
|
|
CON_BUFF1: con_bonus,
|
|
CON_BUFF: con_bonus,
|
|
INT_BUFF1_DESC: int_bonus_desc,
|
|
INT_BUFF1: int_bonus,
|
|
INT_BUFF: int_bonus,
|
|
SAG_BUFF1_DESC: sag_bonus_desc,
|
|
SAG_BUFF1: sag_bonus,
|
|
SAG_BUFF: sag_bonus,
|
|
PER_BUFF1_DESC: per_bonus_desc,
|
|
PER_BUFF1: per_bonus,
|
|
PER_BUFF: per_bonus,
|
|
CHA_BUFF1_DESC: cha_bonus_desc,
|
|
CHA_BUFF1: cha_bonus,
|
|
CHA_BUFF: cha_bonus,
|
|
ATKCAC_BUFF1_DESC: atkcac_bonus_desc,
|
|
ATKCAC_BUFF1: atkcac_div,
|
|
ATKCAC_BUFF: atkcac_div,
|
|
ATKTIR_BUFF1_DESC: atktir_bonus_desc,
|
|
ATKTIR_BUFF1: atktir_div,
|
|
ATKTIR_BUFF: atktir_div,
|
|
ATKMAG_BUFF1_DESC: atkmag_bonus_desc,
|
|
ATKMAG_BUFF1: atkmag_div,
|
|
ATKMAG_BUFF: atkmag_div,
|
|
ATKMEN_BUFF1_DESC: atkmen_bonus_desc,
|
|
ATKMEN_BUFF1: atkmen_div,
|
|
ATKMEN_BUFF: atkmen_div,
|
|
PSYINFLU_BUFF1_DESC: psyinflu_bonus_desc,
|
|
PSYINFLU_BUFF1: psyinflu_div,
|
|
PSYINFLU_BUFF: psyinflu_div,
|
|
PSYINTUI_BUFF1_DESC: psyintui_bonus_desc,
|
|
PSYINTUI_BUFF1: psyintui_div,
|
|
PSYINTUI_BUFF: psyintui_div,
|
|
INIT_BUFF1_DESC: init_bonus_desc,
|
|
INIT_BUFF1: init_div,
|
|
INIT_BUFF: init_div,
|
|
DEF_BUFF1_DESC: def_bonus_desc,
|
|
DEF_BUFF1: defdiv,
|
|
DEF_BUFF: defdiv,
|
|
DEP_BUFF1_DESC: dep_bonus_desc,
|
|
DEP_BUFF1: depdiv,
|
|
DEP_BUFF: depdiv,
|
|
VERSION: '2.0',
|
|
});
|
|
}
|
|
);
|
|
}
|
|
// version 2.x > 2.5
|
|
if (verfdp.major == 2 && verfdp.minor < 5) {
|
|
const attrList = [
|
|
'FOR',
|
|
'DEX',
|
|
'CON',
|
|
'INT',
|
|
'PER',
|
|
'CHA',
|
|
'ATKCAC',
|
|
'ATKTIR',
|
|
'ATKMAG',
|
|
'ATKMEN',
|
|
'INIT',
|
|
'DEF',
|
|
];
|
|
for (let attr of attrList) {
|
|
let attrDesc = [];
|
|
let attrVals = [];
|
|
for (let b = 1; b < 6; b++) {
|
|
attrDesc.push(`${attr}_BUFF${b}_DESC`);
|
|
attrVals.push(`${attr}_BUFF${b}`);
|
|
}
|
|
getAttrs([attr, ...attrDesc, ...attrVals], function (values) {
|
|
let attr = Object.keys(values)[0];
|
|
let buffList = [];
|
|
for (let b = 1; b < 6; b++) {
|
|
let desc = values[`${attr}_BUFF${b}_DESC`] || '';
|
|
let buff = values[`${attr}_BUFF${b}`] || 0;
|
|
if (desc !== '') {
|
|
buffList.push(`${desc} : ${buff}`);
|
|
}
|
|
}
|
|
let buffAttr = {};
|
|
buffAttr[`${attr}_BUFF_LIST`] = buffList.join(';');
|
|
setAttrs(buffAttr);
|
|
});
|
|
}
|
|
setAttrs({
|
|
VERSION: '2.5',
|
|
});
|
|
}
|
|
// version 2.x > 2.9
|
|
if (verfdp.major == 2 && verfdp.minor < 9) {
|
|
getAttrs(['PC_DESC'], function (value) {
|
|
const pc_desc = value.PC_DESC || 'Points de Chance';
|
|
setAttrs({
|
|
PC_DESC_PLUR: pc_desc,
|
|
PC_DESC_SNGL: pc_desc,
|
|
PC_DESC_ABRV: 'PC',
|
|
PC_DESC: `${pc_desc},${pc_desc},PC`,
|
|
});
|
|
});
|
|
}
|
|
// version 2.9 > 3.0
|
|
if (verfdp.major < 3) {
|
|
getAttrs(
|
|
[
|
|
'FOR_BUFF_LIST',
|
|
'DEX_BUFF_LIST',
|
|
'CON_BUFF_LIST',
|
|
'INT_BUFF_LIST',
|
|
'PER_BUFF_LIST',
|
|
'CHA_BUFF_LIST',
|
|
'ATKCAC_BUFF_LIST',
|
|
'ATKTIR_BUFF_LIST',
|
|
'ATKMEN_BUFF_LIST',
|
|
'ATKPIL_BUFF_LIST',
|
|
'ATKMAG_BUFF_LIST',
|
|
'INIT_BUFF_LIST',
|
|
'DEF_BUFF_LIST',
|
|
'PV_BUFF_LIST',
|
|
],
|
|
function (values) {
|
|
const aliases = {
|
|
FOR_BUFF_LIST: 'FOR',
|
|
DEX_BUFF_LIST: 'DEX',
|
|
CON_BUFF_LIST: 'CON',
|
|
INT_BUFF_LIST: 'INT',
|
|
PER_BUFF_LIST: 'PER',
|
|
CHA_BUFF_LIST: 'CHA',
|
|
ATKCAC_BUFF_LIST: 'ATC',
|
|
ATKTIR_BUFF_LIST: 'ATD',
|
|
ATKMEN_BUFF_LIST: 'MEN',
|
|
ATKPIL_BUFF_LIST: 'PIL',
|
|
ATKMAG_BUFF_LIST: 'MAG',
|
|
INIT_BUFF_LIST: 'INIT',
|
|
DEF_BUFF_LIST: 'DEF',
|
|
PV_BUFF_LIST: 'PV',
|
|
};
|
|
buffRepeat = [];
|
|
for (const buffs of Object.keys(values)) {
|
|
const buffList = values[buffs] || '';
|
|
if (buffList == '') {
|
|
continue;
|
|
}
|
|
for (const buff of buffList.split(';')) {
|
|
let buffName = buff.split(':')[0] || '';
|
|
let buffVal = buff.split(':')[1] || '';
|
|
if (buffName != '' && buffVal != '') {
|
|
buffName = buffName.trim().toLowerCase();
|
|
buffEnabled = !buffName.startsWith('-');
|
|
if (!buffEnabled) buffName = buffName.substring(1);
|
|
buffVal = buffVal.trim();
|
|
const newItem = {
|
|
name: buffName,
|
|
value: `${aliases[buffs]} : ${buffVal}`,
|
|
enabled: buffEnabled,
|
|
};
|
|
const foundItem = buffRepeat.findIndex(
|
|
(item) => item.name == newItem.name
|
|
);
|
|
if (foundItem == -1) {
|
|
buffRepeat.push(newItem);
|
|
} else {
|
|
buffRepeat[foundItem].value += `; ${newItem.value}`;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (const buffItem of buffRepeat) {
|
|
const rowId = 'repeating_buffs_' + generateRowID();
|
|
let newRow = {};
|
|
newRow[`${rowId}_buffon`] = buffItem.enabled ? '1' : '0';
|
|
newRow[`${rowId}_buffnom`] =
|
|
buffItem.name.substring(0, 1).toUpperCase() +
|
|
buffItem.name.substring(1);
|
|
newRow[`${rowId}_buffmods`] = buffItem.value;
|
|
setAttrs(newRow);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
// version 3.0 > 3.1
|
|
if (verfdp.major == 3 && verfdp.minor < 1) {
|
|
getSectionIDs('repeating_materiel', function (ids) {
|
|
for (const id of ids) {
|
|
getAttrs([`repeating_materiel_${id}_mat-desc`], function (value) {
|
|
const rowId = 'repeating_equipement_' + generateRowID();
|
|
let newRow = {};
|
|
newRow[`${rowId}_equip-desc`] = value[Object.keys(value)[0]];
|
|
newRow[`${rowId}_equip-enc`] = 0;
|
|
newRow[`${rowId}_equip-qte`] = 1;
|
|
newRow[`${rowId}_equip-on`] = '0';
|
|
setAttrs(newRow);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
// version 3.1 > 3.2
|
|
if (verfdp.major == 3 && verfdp.minor < 2) {
|
|
// version 3.1 > 3.2
|
|
const vrNames = [];
|
|
for (v = 1; v < 10; v++) {
|
|
for (r = 1; r < 6; r++) {
|
|
vrNames.push(`voie${v}-${r}`);
|
|
}
|
|
}
|
|
getAttrs(vrNames, function (values) {
|
|
const vrFlags = {};
|
|
Object.keys(values).forEach((name) => {
|
|
const flag = name.replace('oie', '').replace('-', 'r');
|
|
if (values[name] !== '') {
|
|
vrFlags[flag] = '1';
|
|
} else {
|
|
vrFlags[flag] = '0';
|
|
}
|
|
});
|
|
setAttrs(vrFlags);
|
|
});
|
|
}
|
|
// version 3.2 > 3.9
|
|
if (verfdp.major == 3 && verfdp.minor < 9) {
|
|
const abilities = [];
|
|
for (v = 1; v < 10; v++) {
|
|
for (r = 1; r < 6; r++) {
|
|
abilities.push(`voie${v}-${r}`);
|
|
}
|
|
}
|
|
getAttrs(abilities, function (values) {
|
|
const abilityAttrs = {};
|
|
Object.keys(values).forEach((ability) => {
|
|
if (!values[ability] || values[ability] === '') return;
|
|
const data = values[ability].split('\n');
|
|
const title = data.shift();
|
|
let desc = '';
|
|
if (data.length > 0) desc = data.join('\n');
|
|
abilityAttrs[ability] = desc;
|
|
abilityAttrs[ability.replace('-', '-t')] = title;
|
|
});
|
|
consoleLog(abilityAttrs);
|
|
setAttrs(abilityAttrs);
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Parse semantic version label
|
|
* @param {string} version
|
|
*/
|
|
function parseSemVer(version) {
|
|
version += '.0.0';
|
|
if (version.toLowerCase().startsWith('v')) version = version.slice(1);
|
|
const semVer = version.split('.');
|
|
return {
|
|
major: parseInt(semVer[0]) || 0,
|
|
minor: parseInt(semVer[1]) || 0,
|
|
patch: parseInt(semVer[2]) || 0,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* On opening the character sheet :
|
|
* - Perform sheet version updates
|
|
* - Update some default attribute values
|
|
* - One-time setup some new attribute values
|
|
* - Rebuild derived attributes
|
|
*/
|
|
on('sheet:opened', function () {
|
|
// **** Gestion transition de version
|
|
getAttrs(['VERSION', 'VERFDP'], function (values) {
|
|
const verfdp = parseSemVer(values.VERSION);
|
|
const newver = parseSemVer(values.VERFDP);
|
|
if (
|
|
verfdp.major < newver.major ||
|
|
verfdp.minor < newver.minor ||
|
|
verfdp.patch < newver.patch
|
|
) {
|
|
migrateSheet(verfdp);
|
|
}
|
|
});
|
|
// check type
|
|
getAttrs(
|
|
['type_personnage', 'lib_profil', 'lib_famille', 'lib_origine'],
|
|
function (values) {
|
|
const isVehicle = values.type_personnage === 'vehicule';
|
|
const lib_profil = isVehicle ? 'Type' : values.lib_profil;
|
|
const lib_famille = isVehicle ? ' ' : values.lib_famille;
|
|
const lib_origine = isVehicle ? ' ' : values.lib_origine;
|
|
const physical_traits = isVehicle ? '0' : '1';
|
|
setAttrs({
|
|
lib_profil: lib_profil,
|
|
lib_famille: lib_famille,
|
|
lib_origine: lib_origine,
|
|
physical_traits: physical_traits,
|
|
});
|
|
}
|
|
);
|
|
// MAJ Version, LAST_PV
|
|
getAttrs(['VERFDP', 'PV'], function (values) {
|
|
setAttrs({
|
|
VERSION: values.VERFDP,
|
|
LAST_PV: values.PV,
|
|
});
|
|
});
|
|
// seuil_enc (if needed)
|
|
getAttrs(['seuil_enc', 'FORCE'], function (values) {
|
|
let seuil_enc = parseInt(values.seuil_enc) || 0;
|
|
if (seuil_enc === 0) {
|
|
setAttrs({
|
|
seuil_enc: parseInt(values.FORCE) || 0,
|
|
});
|
|
}
|
|
});
|
|
// rebuild derived attributes
|
|
rebuildAll();
|
|
// update INIT
|
|
updateINIT();
|
|
// update DEF
|
|
updateDEF();
|
|
});
|
|
|
|
/**
|
|
* Parse a buff text
|
|
* @param {string} v Buff text
|
|
* @param {object} caracs CARACS attribute deserialized as an object
|
|
* @returns Buff value as number
|
|
*/
|
|
function buffValue(v, caracs) {
|
|
v = v.trim();
|
|
let bv = 0;
|
|
let bm = 1;
|
|
if (v.startsWith('-')) {
|
|
bm = -1;
|
|
}
|
|
if (v.indexOf('2[') !== -1) {
|
|
v = v.replace('2[', '[');
|
|
bm *= 2;
|
|
}
|
|
v = v.replace(/[\+\-\[\]]/g, '');
|
|
if (isNaN(v)) {
|
|
// c'est une référence d'attribut
|
|
if (v.length === 5 && v.toUpperCase().startsWith('VOIE')) {
|
|
// c'est un rang dans une voie identifiée par son no
|
|
let rv = parseInt(v.substring(4).trim()) || 0;
|
|
if (rv > 0) {
|
|
bv = caracs.rangs[rv - 1];
|
|
}
|
|
} else if (v.toUpperCase().startsWith('RANG ')) {
|
|
// c'est un rang dans une voie identifiée par son nom
|
|
const vname = v.substring(4).trim().toUpperCase();
|
|
const vfound = caracs.voies.findIndex((item) => item === vname);
|
|
if (vfound > -1) {
|
|
bv = caracs.rangs[vfound];
|
|
}
|
|
} else {
|
|
if (caracs.hasOwnProperty(v)) {
|
|
// c'est un mod. de carac
|
|
bv = caracs[v];
|
|
} else {
|
|
// c'est une expression numérique
|
|
for (const attr of Object.keys(caracs)) {
|
|
const re = new RegExp(`${attr}`, 'g');
|
|
v = v.replace(re, "caracs['$&']");
|
|
}
|
|
bv = eval(v);
|
|
}
|
|
}
|
|
} else {
|
|
// c'est une valeur fixe
|
|
bv = v;
|
|
}
|
|
return parseInt(bv) * bm || 0;
|
|
}
|
|
|
|
/**
|
|
* Parse an attribute list of buffs and sets its value
|
|
* @param {string} buffAttr Name of attribute buff list to parse
|
|
*/
|
|
function parseBuff(buffAttr) {
|
|
getAttrs([`${buffAttr}_BUFF_LIST`, 'CARACS'], function (v) {
|
|
let buffAttr = Object.keys(v)[0];
|
|
let buffList = v[buffAttr];
|
|
let caracs = JSON.parse(v.CARACS);
|
|
let buffSum = 0;
|
|
if (buffList && buffList !== '') {
|
|
let buffs = buffList.split(';');
|
|
for (const buff of buffs) {
|
|
if (buff && buff !== '') {
|
|
let delim = buff.indexOf(':') !== -1 ? ':' : ' ';
|
|
let buffv = buff.split(delim);
|
|
let buffName = '';
|
|
let buffVal = 0;
|
|
if (delim === ' ') {
|
|
buffVal = buffValue(buffv[buffv.length - 1], caracs);
|
|
buffv.pop();
|
|
buffName = buffv.join(' ').trim();
|
|
} else {
|
|
buffName = buffv[0].trim();
|
|
buffVal = buffValue(buffv[1], caracs);
|
|
}
|
|
if (!buffName.startsWith('-')) buffSum += buffVal;
|
|
}
|
|
}
|
|
}
|
|
let attr = {};
|
|
attr[buffAttr.replace('_LIST', '')] = buffSum;
|
|
setAttrs(attr);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Update buffs after an attribute value change
|
|
* @param {object} e eventInfo object
|
|
*/
|
|
function updateBuffs(e) {
|
|
const caracs = ['FOR', 'DEX', 'CON', 'INT', 'PER', 'CHA'];
|
|
let ref = e.sourceAttribute;
|
|
let mod = ref.substring(0, 3);
|
|
if (caracs.includes(mod.toUpperCase())) {
|
|
ref = mod;
|
|
}
|
|
const attrs = [
|
|
...caracs,
|
|
'ATKCAC',
|
|
'ATKTIR',
|
|
'ATKMAG',
|
|
'ATKMEN',
|
|
'ATKPIL',
|
|
'INIT',
|
|
'DEF',
|
|
'PV',
|
|
];
|
|
for (let a = 0; a < attrs.length; a++) {
|
|
attrs[a] = `${attrs[a]}_BUFF_LIST`;
|
|
}
|
|
attrs.unshift(ref);
|
|
getAttrs(attrs, function (values) {
|
|
let props = Object.keys(values);
|
|
for (let p = 1; p < props.length; p++) {
|
|
let ref = props[0];
|
|
if (props[p].startsWith(ref)) continue;
|
|
if (values[props[p]].toLowerCase().indexOf(ref) !== -1) {
|
|
parseBuff(props[p].replace('_BUFF_LIST', ''));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On changing an attribute serialized in the CARACS attribute
|
|
*/
|
|
on(
|
|
[
|
|
'change:force',
|
|
'change:dexterite',
|
|
'change:constitution',
|
|
'change:intelligence',
|
|
'change:perception',
|
|
'change:charisme',
|
|
'change:niveau',
|
|
'change:defarmureon',
|
|
'change:voie1nom',
|
|
'change:voie2nom',
|
|
'change:voie3nom',
|
|
'change:voie4nom',
|
|
'change:voie5nom',
|
|
'change:voie6nom',
|
|
'change:voie7nom',
|
|
'change:voie8nom',
|
|
'change:voie9nom',
|
|
'change:rang_voie1',
|
|
'change:rang_voie2',
|
|
'change:rang_voie3',
|
|
'change:rang_voie4',
|
|
'change:rang_voie5',
|
|
'change:rang_voie6',
|
|
'change:rang_voie7',
|
|
'change:rang_voie8',
|
|
'change:rang_voie9',
|
|
].join(' '),
|
|
function (eventInfo) {
|
|
// on reconstruit d'abord l'attribut caché CARACS...
|
|
buildCaracs();
|
|
// ... puis on met à jour les buffs qui contiennent une référence à la caractéristique modifiée
|
|
updateBuffs(eventInfo);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Update the INIT(iative) attribute
|
|
*/
|
|
function updateINIT() {
|
|
getAttrs(
|
|
['DEXTERITE', 'INIT_BUFF', 'DEFARMUREON', 'DEFARMUREMALUS'],
|
|
function (values) {
|
|
let initVal = 0;
|
|
initVal += parseInt(values.DEXTERITE) || 0;
|
|
initVal += parseInt(values.INIT_BUFF) || 0;
|
|
initVal -=
|
|
(parseInt(values.DEFARMUREON) || 0) *
|
|
(parseInt(values.DEFARMUREMALUS) || 0);
|
|
setAttrs({ INIT: initVal });
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* On changing the relevant attributes
|
|
* Update the INIT(iative) attribute
|
|
*/
|
|
on(
|
|
[
|
|
'change:dexterite',
|
|
'change:init_buff',
|
|
'change:defarmureon',
|
|
'change:defarmuremalus',
|
|
].join(' '),
|
|
function () {
|
|
updateINIT();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Update the DEF(ense) attribute
|
|
*/
|
|
function updateDEF() {
|
|
getAttrs(
|
|
['DEFARMURE', 'DEFARMUREON', 'DEXTERITE', 'DEF_BUFF', 'DEFACT'],
|
|
function (values) {
|
|
let defVal = 10;
|
|
defVal +=
|
|
(parseInt(values.DEFARMURE) || 0) * (parseInt(values.DEFARMUREON) || 0);
|
|
defVal += getMod(values.DEXTERITE);
|
|
defVal += parseInt(values.DEF_BUFF) || 0;
|
|
defVal += parseInt(values.DEFACT) || 0;
|
|
setAttrs({ DEF: defVal });
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* On changing the relevant attributes
|
|
* Update the DEF(ense) attribute
|
|
*/
|
|
on(
|
|
[
|
|
'change:defarmure',
|
|
'change:defarmureon',
|
|
'change:dexterite',
|
|
'change:def_buff',
|
|
'change:defact',
|
|
].join(' '),
|
|
function () {
|
|
updateDEF();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* On changing the buff lists
|
|
*/
|
|
on('change:for_buff_list', function () {
|
|
parseBuff('FOR');
|
|
});
|
|
|
|
on('change:dex_buff_list', function () {
|
|
parseBuff('DEX');
|
|
});
|
|
|
|
on('change:con_buff_list', function () {
|
|
parseBuff('CON');
|
|
});
|
|
|
|
on('change:int_buff_list', function () {
|
|
parseBuff('INT');
|
|
});
|
|
|
|
on('change:per_buff_list', function () {
|
|
parseBuff('PER');
|
|
});
|
|
|
|
on('change:cha_buff_list', function () {
|
|
parseBuff('CHA');
|
|
});
|
|
|
|
on('change:atkcac_buff_list', function () {
|
|
parseBuff('ATKCAC');
|
|
});
|
|
|
|
on('change:atktir_buff_list', function () {
|
|
parseBuff('ATKTIR');
|
|
});
|
|
|
|
on('change:atkmen_buff_list', function () {
|
|
parseBuff('ATKMEN');
|
|
});
|
|
|
|
on('change:atkpil_buff_list', function () {
|
|
parseBuff('ATKPIL');
|
|
});
|
|
|
|
on('change:atkmag_buff_list', function () {
|
|
parseBuff('ATKMAG');
|
|
});
|
|
|
|
on('change:init_buff_list', function () {
|
|
parseBuff('INIT');
|
|
});
|
|
|
|
on('change:def_buff_list', function () {
|
|
parseBuff('DEF');
|
|
});
|
|
|
|
on('change:pv_buff_list', function () {
|
|
parseBuff('PV');
|
|
});
|
|
|
|
/**
|
|
* Rebuild the buff lists from the buffs repeating section
|
|
*/
|
|
function rebuildBuffs() {
|
|
getSectionIDs('buffs', function (ids) {
|
|
const aliases = {
|
|
atc: 'atkcac',
|
|
atd: 'atktir',
|
|
cac: 'atkcac',
|
|
contact: 'atkcac',
|
|
cad: 'atktir',
|
|
distance: 'atktir',
|
|
mag: 'atkmag',
|
|
magie: 'atkmag',
|
|
magique: 'atkmag',
|
|
men: 'atkmen',
|
|
mental: 'atkmen',
|
|
mentale: 'atkmen',
|
|
pil: 'atkpil',
|
|
pilotage: 'atkpil',
|
|
tir: 'atktir',
|
|
initiative: 'init',
|
|
};
|
|
let buffs = {
|
|
for: '',
|
|
dex: '',
|
|
con: '',
|
|
int: '',
|
|
per: '',
|
|
cha: '',
|
|
atkcac: '',
|
|
atktir: '',
|
|
atkmen: '',
|
|
atkpil: '',
|
|
atkmag: '',
|
|
init: '',
|
|
def: '',
|
|
pv: '',
|
|
};
|
|
for (const id of ids) {
|
|
getAttrs(
|
|
[
|
|
`repeating_buffs_${id}_buffon`,
|
|
`repeating_buffs_${id}_buffnom`,
|
|
`repeating_buffs_${id}_buffmods`,
|
|
],
|
|
function (values) {
|
|
const enabled = parseInt(values[Object.keys(values)[0]]) || 0;
|
|
const buffName = values[Object.keys(values)[1]];
|
|
const buffMods = values[Object.keys(values)[2]];
|
|
if (enabled == 1 && buffName !== '' && buffMods !== '') {
|
|
const mods = buffMods.split(';');
|
|
for (const mod of mods) {
|
|
const parsed = parseNameValue(mod);
|
|
let attrName = parsed.name.toLowerCase();
|
|
let attrBuff = parsed.value;
|
|
if (Object.keys(aliases).indexOf(attrName) != -1) {
|
|
attrName = aliases[attrName];
|
|
}
|
|
if (attrName !== '' && attrBuff !== '') {
|
|
buffs[attrName] += `${buffName} : ${attrBuff}; `;
|
|
}
|
|
}
|
|
}
|
|
let setBuffs = {};
|
|
for (const attr in buffs) {
|
|
setBuffs[`${attr.toUpperCase()}_BUFF_LIST`] = buffs[attr];
|
|
}
|
|
setAttrs(setBuffs);
|
|
}
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On changing or removing an entry in the buff repeating section
|
|
* - Rebuild the buff lists
|
|
*/
|
|
on('change:repeating_buffs', function () {
|
|
rebuildBuffs();
|
|
});
|
|
|
|
on('remove:repeating_buffs', function () {
|
|
rebuildBuffs();
|
|
});
|
|
|
|
/**
|
|
* On changing the 'Blessure' checkbox
|
|
* - Set the ETATDE attribute (roll d20 or d12)
|
|
* - Or enable POISSE in the 'Monstres' setting
|
|
*/
|
|
on('change:blessure', function () {
|
|
getAttrs(['coc_setting', 'BLESSURE'], function (values) {
|
|
let attrs = {};
|
|
if (values.coc_setting === 'monstres') {
|
|
attrs.ETATDE = '12';
|
|
attrs.POISSE = values.BLESSURE;
|
|
} else {
|
|
attrs.ETATDE = values.BLESSURE === '1' ? '12' : '20';
|
|
}
|
|
setAttrs(attrs);
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing the 'POISSE' checkbox
|
|
* - Set the standard rolls
|
|
*/
|
|
on('change:poisse', function () {
|
|
getAttrs(['POISSE'], function (values) {
|
|
const jetn = values.POISSE === '1' ? '2d@{ETATDE}kl1' : '1d@{ETATDE}';
|
|
const jets = values.POISSE === '1' ? '1d@{ETATDE}' : '2d@{ETATDE}kh1';
|
|
const jetsh =
|
|
values.POISSE === '1' ? '2d@{ETATDE}kh1' : '{2d@{ETATDE}kh1, 0d20+10}kh1';
|
|
const jetr = values.POISSE === '1' ? '2d12kl1' : '1d12';
|
|
setAttrs({
|
|
JETNORMAL: jetn,
|
|
JETSUP: jets,
|
|
JETSUPHERO: jetsh,
|
|
JETRISQUE: jetr,
|
|
JDEX: jetn,
|
|
JDEXSUP: jets,
|
|
JDEXSUPHERO: jetsh,
|
|
JDEXRISQUE: jetr,
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing the 'PV' value
|
|
* - Set the 'BLESSURE' attribute
|
|
*/
|
|
on('change:pv', function () {
|
|
getAttrs(
|
|
['PV', 'PV_max', 'LAST_PV', 'SEUILBG', 'BLESSURE'],
|
|
function (values) {
|
|
const seuilbg = parseInt(values.SEUILBG) || 0;
|
|
const max_pv = parseInt(values.PV_max) || 0;
|
|
const last_pv = parseInt(values.LAST_PV) || max_pv;
|
|
const curr_pv = parseInt(values.PV) || 0;
|
|
let blessure = values.BLESSURE;
|
|
if (seuilbg > 0) {
|
|
if (last_pv - curr_pv >= seuilbg || curr_pv === 0) {
|
|
blessure = '1';
|
|
}
|
|
}
|
|
setAttrs({
|
|
LAST_PV: values.PV,
|
|
BLESSURE: blessure,
|
|
});
|
|
}
|
|
);
|
|
});
|
|
|
|
/**
|
|
* On changing (pasting) an NPC statblock
|
|
* - Parse the statblock text
|
|
* - Create the NPC character sheet
|
|
*/
|
|
on('clicked:sb_import', function () {
|
|
getAttrs(['UNIVERS', 'statblock'], function (values) {
|
|
if (values.statblock.trim() === '') return;
|
|
let messages = '';
|
|
// parse statblock text
|
|
pnjObj = importStatblock(values.statblock);
|
|
if (pnjObj) {
|
|
consoleLog(pnjObj, 'NPC object');
|
|
// process base characteristics & combat attributes
|
|
messages = processBaseAttributes(values.UNIVERS, pnjObj);
|
|
// process attack lines
|
|
if (pnjObj.Atks.length > 0) {
|
|
result = processAttacks(values.UNIVERS, pnjObj);
|
|
if (result != '' && messages != '') {
|
|
result = '\n' + result;
|
|
}
|
|
messages += result;
|
|
}
|
|
delete pnjObj.Atks;
|
|
// process trait/ability lines
|
|
if (pnjObj.Capas.length > 0) {
|
|
result = processTraits(values.UNIVERS, pnjObj);
|
|
if (result != '' && messages != '') {
|
|
result = '\n' + result;
|
|
}
|
|
messages += result;
|
|
}
|
|
delete pnjObj.Capas;
|
|
// Other attributes go to DIVERS field
|
|
let divers = '';
|
|
if (pnjObj.Extras.length > 0) {
|
|
divers = pnjObj.Extras.join('\n');
|
|
}
|
|
delete pnjObj.Extras;
|
|
const otherAttrs = Object.keys(pnjObj);
|
|
consoleLog(otherAttrs, 'additional data');
|
|
for (const other of otherAttrs) {
|
|
divers += '\n' + other + ' ' + pnjObj[other];
|
|
}
|
|
setAttrs({
|
|
pnj_divers: divers,
|
|
sbresult: messages,
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Convert an NPC to a PC character sheet
|
|
*/
|
|
function convertToPC() {
|
|
const npcAtkAttribs = [
|
|
'atkatt',
|
|
'atknom',
|
|
'atkjet',
|
|
'atkbonus',
|
|
'atkcrit',
|
|
'atkdmg',
|
|
'atkdmnbde',
|
|
'atkdmde',
|
|
'atkdmbonus',
|
|
'atkportee',
|
|
'atkspec',
|
|
];
|
|
|
|
getAttrs(
|
|
[
|
|
'pnj_for',
|
|
'pnj_dex',
|
|
'pnj_con',
|
|
'pnj_int',
|
|
'pnj_per',
|
|
'pnj_cha',
|
|
'pnj_jetfor',
|
|
'pnj_jetdex',
|
|
'pnj_jetcon',
|
|
'pnj_jetint',
|
|
'pnj_jetper',
|
|
'pnj_jetcha',
|
|
'pnj_init',
|
|
'pnj_def',
|
|
'pnj_pv',
|
|
'pnj_pv_max',
|
|
],
|
|
function (values) {
|
|
let attrs = {};
|
|
for (let attr of [
|
|
'FORCE',
|
|
'DEXTERITE',
|
|
'CONSTITUTION',
|
|
'INTELLIGENCE',
|
|
'PERCEPTION',
|
|
'CHARISME',
|
|
]) {
|
|
let attrv =
|
|
parseInt(values[`pnj_${attr.substring(0, 3).toLowerCase()}`]) || 0;
|
|
attrs[attr] = 10 + 2 * attrv;
|
|
if (attr === 'DEXTERITE') {
|
|
let init = parseInt(values.pnj_init) || 0;
|
|
if (init === attrv + 1) {
|
|
attrs[attr]++;
|
|
} else {
|
|
attrs.INIT_BUFF = init - attrs[attr];
|
|
}
|
|
let defb = 10 + attrv;
|
|
let def = parseInt(values.pnj_def) || 0;
|
|
if (def !== defb) {
|
|
attrs.DEF_BUFF = def - defb;
|
|
}
|
|
attrs.DEX_SUP =
|
|
values.pnj_jetdex === '2d20kh1' ? '@{JDEXSUP}' : '@{JDEX}';
|
|
} else {
|
|
attrs[`${attr.substring(0, 3)}_SUP`] =
|
|
values[`pnj_jet${attr.substring(0, 3).toLowerCase()}`] === '2d20kh1'
|
|
? '@{JETSUP}'
|
|
: '@{JETNORMAL}';
|
|
}
|
|
}
|
|
attrs.PV = parseInt(values.pnj_pv) || 0;
|
|
attrs.PV_max = parseInt(values.pnj_pv_max) || 0;
|
|
getSectionIDs('repeating_armes', function (ids) {
|
|
for (let id of ids) {
|
|
removeRepeatingRow(`repeating_armes_${id}`);
|
|
}
|
|
});
|
|
getSectionIDs('repeating_pnjatk', function (ids) {
|
|
for (let id of ids) {
|
|
getAttrs(
|
|
[
|
|
...npcAtkAttribs.map((attr) => `repeating_pnjatk_${id}_${attr}`),
|
|
'pnj_for',
|
|
'pnj_dex',
|
|
'pnj_cha',
|
|
],
|
|
function (values) {
|
|
consoleLog(values);
|
|
let v = {};
|
|
for (const attr of npcAtkAttribs) {
|
|
v[attr] = values[`repeating_pnjatk_${id}_${attr}`] || '';
|
|
}
|
|
newRowID = 'repeating_armes_' + generateRowID();
|
|
let atkRow = {};
|
|
atkRow[`${newRowID}_armeatt`] = v.atkatt;
|
|
atkRow[`${newRowID}_armenom`] = v.atknom;
|
|
let magic = v.atknom.toLowerCase().includes('attaque magique');
|
|
let tohit = parseInt(v.atkbonus) || 0;
|
|
let atk = 0;
|
|
let bdm = 0;
|
|
if (v.atkportee && v.atkportee !== '') {
|
|
atk = magic ? values.pnj_cha || 0 : values.pnj_dex || 0;
|
|
atkRow[`${newRowID}_armeatk`] = magic
|
|
? '@{ATKMAG}'
|
|
: '@{ATKTIR}';
|
|
} else {
|
|
atk = magic ? values.pnj_cha || 0 : values.pnj_for || 0;
|
|
bdm = magic ? 0 : atk;
|
|
atkRow[`${newRowID}_armeatk`] = magic
|
|
? '@{ATKMAG}'
|
|
: '@{ATKCAC}';
|
|
atkRow[`${newRowID}_armedmcar`] = magic ? '' : '@{FOR}';
|
|
}
|
|
if (tohit !== atk) {
|
|
atkRow[`${newRowID}_armeatkdiv`] = tohit - atk;
|
|
}
|
|
atkRow[`${newRowID}_armejetd`] = v.atkjet;
|
|
atkRow[`${newRowID}_armecrit`] = v.atkcrit;
|
|
atkRow[`${newRowID}_armedmg`] = v.atkdmg;
|
|
atkRow[`${newRowID}_armedmnbde`] = v.atkdmnbde;
|
|
atkRow[`${newRowID}_armedmde`] = v.atkdmde;
|
|
let dmdiv = parseInt(v.atkdmbonus) || 0;
|
|
if (dmdiv !== bdm) {
|
|
atkRow[`${newRowID}_armedmdiv`] = dmdiv - bdm;
|
|
}
|
|
atkRow[`${newRowID}_armeportee`] = v.atkportee;
|
|
atkRow[`${newRowID}_armespec`] = v.atkspec;
|
|
setAttrs(atkRow);
|
|
}
|
|
);
|
|
}
|
|
});
|
|
setAttrs(attrs);
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* On changing the sheet type
|
|
* - Convert an NPC to a PC
|
|
*/
|
|
on('change:type_personnage', function (eventInfo) {
|
|
if (eventInfo.previousValue === 'pnj' && eventInfo.newValue === 'pj') {
|
|
convertToPC();
|
|
}
|
|
// if (eventInfo.previousValue === 'pj' && eventInfo.newValue === 'pnj') convertToNPC();
|
|
getAttrs(
|
|
['type_personnage', 'lib_profil', 'lib_famille', 'lib_origine'],
|
|
function (values) {
|
|
const isVehicle = values.type_personnage === 'vehicule';
|
|
setAttrs({
|
|
type_fiche: values.type_personnage,
|
|
lib_profil: isVehicle ? 'Type' : values.lib_profil,
|
|
lib_famille: isVehicle ? ' ' : values.lib_famille,
|
|
lib_origine: isVehicle ? ' ' : values.lib_origine,
|
|
physical_traits: isVehicle ? '0' : '1',
|
|
});
|
|
}
|
|
);
|
|
});
|
|
|
|
/**
|
|
* Initialize an array of abilities
|
|
* @param {string} voie path #
|
|
* @returns Array of attribute names
|
|
*/
|
|
function attrRanks(voie) {
|
|
let attrs = [];
|
|
for (let r = 1; r < 6; r++) {
|
|
attrs.push(`v${voie}r${r}`);
|
|
attrs.push(`voie${voie}-${r}`);
|
|
}
|
|
return attrs;
|
|
}
|
|
|
|
/**
|
|
* Determine current rank in a path
|
|
* @param {string} voie path #
|
|
*/
|
|
function setRank(voie) {
|
|
getAttrs(attrRanks(voie), function (v) {
|
|
let vr = 0;
|
|
for (let r = 1; r < 6; r++) {
|
|
const flag = parseInt(v[`v${voie}r${r}`]) || 0;
|
|
const title = v[`voie${voie}-t${r}`] || '';
|
|
const text = v[`voie${voie}-${r}`] || '';
|
|
if (flag === 1 && (title !== '' || text !== '')) {
|
|
vr = r;
|
|
}
|
|
}
|
|
let attrs = {};
|
|
attrs[`RANG_VOIE${voie}`] = vr;
|
|
setAttrs(attrs);
|
|
buildCaracs();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On changing any of the paths info (title or abilities)
|
|
* - Determine the current rank in the path
|
|
* - Rebuild the CARACS attribute
|
|
*/
|
|
on(
|
|
[
|
|
'change:voie1nom',
|
|
'change:voie1-t1',
|
|
'change:voie1-t2',
|
|
'change:voie1-t3',
|
|
'change:voie1-t4',
|
|
'change:voie1-t5',
|
|
'change:voie1-1',
|
|
'change:voie1-2',
|
|
'change:voie1-3',
|
|
'change:voie1-4',
|
|
'change:voie1-5',
|
|
'change:v1r1',
|
|
'change:v1r2',
|
|
'change:v1r3',
|
|
'change:v1r4',
|
|
'change:v1r5',
|
|
].join(' '),
|
|
function () {
|
|
setRank('1');
|
|
buildAbilities(1);
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:voie2nom',
|
|
'change:voie2-t1',
|
|
'change:voie2-t2',
|
|
'change:voie2-t3',
|
|
'change:voie2-t4',
|
|
'change:voie2-t5',
|
|
'change:voie2-1',
|
|
'change:voie2-2',
|
|
'change:voie2-3',
|
|
'change:voie2-4',
|
|
'change:voie2-5',
|
|
'change:v2r1',
|
|
'change:v2r2',
|
|
'change:v2r3',
|
|
'change:v2r4',
|
|
'change:v2r5',
|
|
].join(' '),
|
|
function () {
|
|
setRank('2');
|
|
buildAbilities(2);
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:voie3nom',
|
|
'change:voie3-t1',
|
|
'change:voie3-t2',
|
|
'change:voie3-t3',
|
|
'change:voie3-t4',
|
|
'change:voie3-t5',
|
|
'change:voie3-1',
|
|
'change:voie3-2',
|
|
'change:voie3-3',
|
|
'change:voie3-4',
|
|
'change:voie3-5',
|
|
'change:v3r1',
|
|
'change:v3r2',
|
|
'change:v3r3',
|
|
'change:v3r4',
|
|
'change:v3r5',
|
|
].join(' '),
|
|
function () {
|
|
setRank('3');
|
|
buildAbilities(3);
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:voie4nom',
|
|
'change:voie4-t1',
|
|
'change:voie4-t2',
|
|
'change:voie4-t3',
|
|
'change:voie4-t4',
|
|
'change:voie4-t5',
|
|
'change:voie4-1',
|
|
'change:voie4-2',
|
|
'change:voie4-3',
|
|
'change:voie4-4',
|
|
'change:voie4-5',
|
|
'change:v4r1',
|
|
'change:v4r2',
|
|
'change:v4r3',
|
|
'change:v4r4',
|
|
'change:v4r5',
|
|
].join(' '),
|
|
function () {
|
|
setRank('4');
|
|
buildAbilities(4);
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:voie5nom',
|
|
'change:voie5-t1',
|
|
'change:voie5-t2',
|
|
'change:voie5-t3',
|
|
'change:voie5-t4',
|
|
'change:voie5-t5',
|
|
'change:voie5-1',
|
|
'change:voie5-2',
|
|
'change:voie5-3',
|
|
'change:voie5-4',
|
|
'change:voie5-5',
|
|
'change:v5r1',
|
|
'change:v5r2',
|
|
'change:v5r3',
|
|
'change:v5r4',
|
|
'change:v5r5',
|
|
].join(' '),
|
|
function () {
|
|
setRank('5');
|
|
buildAbilities(5);
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:voie6nom',
|
|
'change:voie6-t1',
|
|
'change:voie6-t2',
|
|
'change:voie6-t3',
|
|
'change:voie6-t4',
|
|
'change:voie6-t5',
|
|
'change:voie6-1',
|
|
'change:voie6-2',
|
|
'change:voie6-3',
|
|
'change:voie6-4',
|
|
'change:voie6-5',
|
|
'change:v6r1',
|
|
'change:v6r2',
|
|
'change:v6r3',
|
|
'change:v6r4',
|
|
'change:v6r5',
|
|
].join(' '),
|
|
function () {
|
|
setRank('6');
|
|
buildAbilities(6);
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:voie7nom',
|
|
'change:voie7-t1',
|
|
'change:voie7-t2',
|
|
'change:voie7-t3',
|
|
'change:voie7-t4',
|
|
'change:voie7-t5',
|
|
'change:voie7-1',
|
|
'change:voie7-2',
|
|
'change:voie7-3',
|
|
'change:voie7-4',
|
|
'change:voie7-5',
|
|
'change:v7r1',
|
|
'change:v7r2',
|
|
'change:v7r3',
|
|
'change:v7r4',
|
|
'change:v7r5',
|
|
].join(' '),
|
|
function () {
|
|
setRank('7');
|
|
buildAbilities(7);
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:voie8nom',
|
|
'change:voie8-t1',
|
|
'change:voie8-t2',
|
|
'change:voie8-t3',
|
|
'change:voie8-t4',
|
|
'change:voie8-t5',
|
|
'change:voie8-1',
|
|
'change:voie8-2',
|
|
'change:voie8-3',
|
|
'change:voie8-4',
|
|
'change:voie8-5',
|
|
'change:v8r1',
|
|
'change:v8r2',
|
|
'change:v8r3',
|
|
'change:v8r4',
|
|
'change:v8r5',
|
|
].join(' '),
|
|
function () {
|
|
setRank('8');
|
|
buildAbilities(8);
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:voie9nom',
|
|
'change:voie9-t1',
|
|
'change:voie9-t2',
|
|
'change:voie9-t3',
|
|
'change:voie9-t4',
|
|
'change:voie9-t5',
|
|
'change:voie9-1',
|
|
'change:voie9-2',
|
|
'change:voie9-3',
|
|
'change:voie9-4',
|
|
'change:voie9-5',
|
|
'change:v9r1',
|
|
'change:v9r2',
|
|
'change:v9r3',
|
|
'change:v9r4',
|
|
'change:v9r5',
|
|
].join(' '),
|
|
function () {
|
|
setRank('9');
|
|
buildAbilities(9);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* On changing the 2nd damage info
|
|
* - Set the roll macro for the 2nd damage
|
|
*/
|
|
on(
|
|
[
|
|
'change:repeating_armes:armedm2_de',
|
|
'change:repeating_armes:armedm2_desc',
|
|
].join(' '),
|
|
function () {
|
|
getAttrs(
|
|
['repeating_armes_armedm2_de', 'repeating_armes_armedm2_desc'],
|
|
function (values) {
|
|
let dm2_de = values.repeating_armes_armedm2_de || '';
|
|
let dm2_desc = values.repeating_armes_armedm2_desc || '';
|
|
let dmg2 = '';
|
|
if (dm2_desc !== '') {
|
|
dm2_desc = `[${dm2_desc}] `;
|
|
}
|
|
if (dm2_de !== '') {
|
|
dmg2 = `[[${dm2_de}${dm2_desc}]]`;
|
|
}
|
|
setAttrs({
|
|
repeating_armes_armedmg2: dmg2,
|
|
});
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* On changing the attack range
|
|
* - Set the ranged attack text for the roll template
|
|
*/
|
|
on('change:repeating_armes:armeportee', function () {
|
|
getAttrs(['repeating_armes_armeportee'], function (value) {
|
|
let um = '';
|
|
if (value.repeating_armes_armeportee.indexOf(' m') !== -1) {
|
|
um = ' m';
|
|
} else if (value.repeating_armes_armeportee.indexOf('m') !== -1) {
|
|
um = 'm';
|
|
}
|
|
let portee = value.repeating_armes_armeportee;
|
|
if (um !== '') {
|
|
portee = portee.replace(um, '');
|
|
}
|
|
let portees = parseInt(portee) || 0;
|
|
if (portees !== 0) {
|
|
setAttrs({
|
|
repeating_armes_armeportees: `${portees}m | ${portees * 2}m (-5) | ${
|
|
portees * 3
|
|
}m (-10)`,
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Process a limited action checkbox attribute
|
|
* @param {object} v Attributes object
|
|
* @returns (L) if limited action
|
|
*/
|
|
function actionLimitee(v) {
|
|
return (parseInt(v[Object.keys(v)[0]]) || 0) === 1 ? '(L)' : '';
|
|
}
|
|
|
|
/**
|
|
* On changing an attack limited action checkbox
|
|
* - Set the limited action portion of the roll macro
|
|
*/
|
|
on('change:repeating_armes:arme_al', function () {
|
|
getAttrs(['repeating_armes_arme_al'], function (value) {
|
|
setAttrs({
|
|
repeating_armes_armelim: actionLimitee(value),
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing an ability limited action checkbox
|
|
* - Set the limited action portion of the roll macro
|
|
*/
|
|
on('change:repeating_jetcapas:jetcapa_al', function () {
|
|
getAttrs(['repeating_jetcapas_jetcapa_al'], function (value) {
|
|
setAttrs({
|
|
repeating_jetcapas_jetcapalim: actionLimitee(value),
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing ranks modifier attributes
|
|
* - Set the ability/skill description
|
|
*/
|
|
on(
|
|
[
|
|
'change:repeating_jetcapas:jetcapavoie',
|
|
'change:repeating_jetcapas:jetcapacoeff',
|
|
'change:repeating_jetcapas:jetcaparang',
|
|
].join(' '),
|
|
function () {
|
|
getAttrs(
|
|
[
|
|
'repeating_jetcapas_jetcapavoie',
|
|
'repeating_jetcapas_jetcapacoeff',
|
|
'repeating_jetcapas_jetcaparang',
|
|
'CARACS',
|
|
],
|
|
function (values) {
|
|
const caracs = JSON.parse(values.CARACS);
|
|
const voierang = values.repeating_jetcapas_jetcapavoie || '';
|
|
const coeff = parseInt(values.repeating_jetcapas_jetcapacoeff) || 0;
|
|
let vn = 0;
|
|
let rang = values.repeating_jetcapas_jetcaparang || '';
|
|
if (rang.startsWith('@{') && rang.endsWith('}')) {
|
|
vn = parseInt(rang.slice(rang.length - 2, rang.length - 1)) || -1;
|
|
if (vn >= 0) {
|
|
voie = caracs.voies[vn - 1] || '';
|
|
if (voie !== '') {
|
|
voie = voie.slice(0, 1) + voie.slice(1).toLowerCase();
|
|
}
|
|
rang = caracs.rangs[vn - 1] || 0;
|
|
}
|
|
}
|
|
let skill = voierang;
|
|
if (voie !== '' && coeff !== 0 && rang !== 0) {
|
|
skill = `Bonus ${voie}, rang ${rang} : [[${coeff}[Bonus]*${rang}[rang ${voie}] ]]`;
|
|
}
|
|
setAttrs({
|
|
repeating_jetcapas_jetcapaskill: skill,
|
|
});
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* On changing path & rank number attributes
|
|
* - Set the path & rank identifier (v?r?)
|
|
*/
|
|
on(
|
|
[
|
|
'change:repeating_jetcapas:jetcapavoieno',
|
|
'change:repeating_jetcapas:jetcapavoierang',
|
|
].join(' '),
|
|
function () {
|
|
getAttrs(
|
|
[
|
|
'repeating_jetcapas_jetcapavoieno',
|
|
'repeating_jetcapas_jetcapavoierang',
|
|
],
|
|
function (values) {
|
|
const vr = `${values.repeating_jetcapas_jetcapavoieno}${values.repeating_jetcapas_jetcapavoierang}`;
|
|
if (vr.length !== 4) return;
|
|
const rankData = [];
|
|
rankData.push(vr.replace('v', 'voie').replace('r', '-t'));
|
|
rankData.push(vr.replace('v', 'voie').replace('r', '-'));
|
|
getAttrs(rankData, function (values) {
|
|
const rankName = values[Object.keys(values)[0]];
|
|
const rankDesc = values[Object.keys(values)[1]];
|
|
const updated = {
|
|
repeating_jetcapas_jetcapanom: rankName,
|
|
repeating_jetcapas_jetcapadesc: rankDesc,
|
|
repeating_jetcapas_jetcapavr: vr,
|
|
};
|
|
setAttrs(updated);
|
|
});
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Return a pilot-qualified characteristic name
|
|
* @param {string} pilote Character name of vehicle pilot
|
|
* @param {string} carac Vehicle pilot characteristic name
|
|
*/
|
|
function pilotStat(pilote, carac) {
|
|
let pilote_carac = '0';
|
|
if (carac !== '0') {
|
|
if (pilote !== '') {
|
|
pilote += '|';
|
|
}
|
|
pilote_carac = carac.replace('@{', `@{${pilote}`);
|
|
}
|
|
return pilote_carac;
|
|
}
|
|
|
|
/**
|
|
* On changing a vehicle 'PILOTE' attribute
|
|
* - Update the vehicle rolls
|
|
*/
|
|
on('change:pilote', function () {
|
|
getAttrs(['PILOTE'], function (value) {
|
|
const pilote = value.PILOTE.trim() || '';
|
|
if (pilote === '') {
|
|
return;
|
|
}
|
|
getSectionIDs('repeating_jetv', function (ids) {
|
|
for (let id = 0; id < ids.length; id++) {
|
|
getAttrs(
|
|
[
|
|
`repeating_jetv_${ids[id]}_jetvcaracpil`,
|
|
`repeating_jetv_${ids[id]}_jetvcaracp`,
|
|
],
|
|
function (values) {
|
|
let attr = values[Object.keys(values)[0]];
|
|
let pilote_carac = '0';
|
|
if (attr !== '0') pilote_carac = pilotStat(pilote, attr);
|
|
let rattr = {};
|
|
rattr[Object.keys(values)[1]] = pilote_carac;
|
|
setAttrs(rattr);
|
|
}
|
|
);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing a pilot characteristic in a vehicle roll
|
|
* - Update the vehicle roll
|
|
*/
|
|
on('change:repeating_jetv:jetvcaracpil', function () {
|
|
getAttrs(['PILOTE', 'repeating_jetv_jetvcaracpil'], function (values) {
|
|
const pilote = values.PILOTE || '';
|
|
const carac = values.repeating_jetv_jetvcaracpil || '';
|
|
let pilote_carac = '0';
|
|
if (carac !== '0') pilote_carac = pilotStat(pilote, carac);
|
|
setAttrs({
|
|
repeating_jetv_jetvcaracp: pilote_carac,
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Compute character encumbrance
|
|
*/
|
|
function encumbrance() {
|
|
getSectionIDs('repeating_equipement', function (ids) {
|
|
setAttrs({ total_enc: 0 });
|
|
const encombrement = {
|
|
total: 0,
|
|
zeros: 0,
|
|
};
|
|
for (const id of ids) {
|
|
getAttrs(
|
|
[
|
|
`repeating_equipement_${id}_equip-qte`,
|
|
`repeating_equipement_${id}_equip-enc`,
|
|
`repeating_equipement_${id}_equip-on`,
|
|
],
|
|
function (values) {
|
|
const qte = parseInt(values[Object.keys(values)[0]]) || 0;
|
|
const enc = parseInt(values[Object.keys(values)[1]]) || 0;
|
|
const equipe = parseInt(values[Object.keys(values)[2]]) || 0;
|
|
if (equipe === 1) {
|
|
if (enc === 0) {
|
|
encombrement.zeros += qte;
|
|
if (encombrement.zeros >= 3) {
|
|
encombrement.total += Math.floor(encombrement.zeros / 3);
|
|
encombrement.zeros %= 3;
|
|
}
|
|
} else {
|
|
encombrement.total += qte * enc;
|
|
}
|
|
setAttrs({ total_enc: encombrement.total });
|
|
}
|
|
}
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Rebuild the list of equipments with Udie
|
|
*/
|
|
function rebuildUD() {
|
|
getAttrs(['coc_setting'], function (v) {
|
|
if (v.coc_setting !== 'bitume') return;
|
|
getSectionIDs('repeating_equipement', function (ids) {
|
|
var uds = [];
|
|
ids.forEach((id, ix) => {
|
|
const rowId = `repeating_equipement_${id}_`;
|
|
getAttrs(
|
|
[`${rowId}equip-desc`, `${rowId}equip-props`],
|
|
function (values) {
|
|
const desc = values[Object.keys(values)[0]];
|
|
const props = (values[Object.keys(values)[1]] || '').split(',');
|
|
const uD = props.find((prop) => {
|
|
return (
|
|
prop !== '' && parseNameValue(prop).name.toUpperCase() === 'UD'
|
|
);
|
|
});
|
|
let dU = 0;
|
|
if (uD !== undefined) {
|
|
dU = parseInt(parseNameValue(uD).value.replace(/d/g, '')) || 0;
|
|
}
|
|
if (dU !== 0) {
|
|
uds.push(`${desc},d${dU}`);
|
|
}
|
|
if (ix == ids.length - 1) {
|
|
let qryud = '';
|
|
if (uds.length == 1) {
|
|
qryud = uds[0].split(',')[1];
|
|
} else if (uds.length > 1) {
|
|
qryud = `?{Dé d'usure ?|${uds.join('|')}}`;
|
|
}
|
|
setAttrs({ QRYUD: qryud });
|
|
}
|
|
}
|
|
);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On changing character equipment
|
|
* - Recompute character encumbrance
|
|
*/
|
|
on(
|
|
['change:repeating_equipement', 'remove:repeating_equipement'].join(' '),
|
|
function () {
|
|
encumbrance();
|
|
rebuildUD();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* On changing equipment properties
|
|
* - Change DEF & RD for armor
|
|
* - Add or remove attack line for a weapon
|
|
*/
|
|
on(
|
|
[
|
|
'change:repeating_equipement:equip-props',
|
|
'change:repeating_equipement:equip-on',
|
|
'change:repeating_equipement:equip-atk',
|
|
].join(' '),
|
|
function (eventInfo) {
|
|
getAttrs(
|
|
[
|
|
'repeating_equipement_equip-props',
|
|
'repeating_equipement_equip-on',
|
|
'repeating_equipement_equip-atk',
|
|
'repeating_equipement_equip-atkid',
|
|
'repeating_equipement_equip-desc',
|
|
'DEFARMURE',
|
|
'DEFARMUREON',
|
|
'DEFARMUREMALUS',
|
|
'RDS',
|
|
],
|
|
function (values) {
|
|
const props = values[Object.keys(values)[0]];
|
|
const eqpon = parseInt(values[Object.keys(values)[1]]) || 0;
|
|
|
|
const attrs = {};
|
|
|
|
const hasAtk = parseInt(values[Object.keys(values)[2]]) || 0;
|
|
let atkId = values[Object.keys(values)[3]];
|
|
if (eventInfo.sourceAttribute.endsWith('equip-atk') && !hasAtk) {
|
|
if (atkId) {
|
|
removeRepeatingRow(`repeating_armes_${atkId}`);
|
|
attrs['repeating_equipement_equip-atkid'] = '';
|
|
setAttrs(attrs);
|
|
}
|
|
return;
|
|
}
|
|
|
|
const atkName = values[Object.keys(values)[4]];
|
|
let atkInfo = {};
|
|
|
|
for (const prop of props.split(',')) {
|
|
const parsed = parseNameValue(prop);
|
|
const propName = parsed.name ? parsed.name.toUpperCase() : '';
|
|
// Armor DEF modifier
|
|
if (propName === 'DEF') {
|
|
const propVal = parseInt(parsed.value) || 0;
|
|
attrs.DEFARMUREON = eqpon;
|
|
if (eqpon === 1) {
|
|
if (propVal !== parseInt(values.DEFARMURE)) {
|
|
attrs.DEFARMURE = propVal;
|
|
}
|
|
if (propVal !== parseInt(values.DEFARMUREMALUS)) {
|
|
attrs.DEFARMUREMALUS = propVal;
|
|
}
|
|
}
|
|
}
|
|
// Armor malus
|
|
if (propName === 'DEF-') {
|
|
const defmalus = parseInt(values.DEFARMUREMALUS) || 0;
|
|
if (propVal !== defmalus) {
|
|
attrsDEFARMUREMALUS = propVal;
|
|
}
|
|
}
|
|
// Damage reduction
|
|
if (propName === 'RD') {
|
|
const rds = values.RDS;
|
|
const propVal = parseInt(parsed.value) || 0;
|
|
if (eqpon === 1) {
|
|
if (propVal !== rds) {
|
|
attrs.RDS = propVal;
|
|
}
|
|
}
|
|
}
|
|
// Damage dice 1 & 2
|
|
if (propName === 'DM') {
|
|
atkInfo.dm = [];
|
|
if (parsed.value) {
|
|
if (parsed.value.indexOf(' ') !== -1) {
|
|
atkInfo.dmtype = parsed.value.split(' ')[1];
|
|
parsed.value = parsed.value.split(' ')[0];
|
|
}
|
|
atkInfo.dm = parsed.value.toLowerCase().split('d');
|
|
}
|
|
}
|
|
if (propName === 'DM2') {
|
|
atkInfo.dm2 = [];
|
|
if (parsed.value) {
|
|
if (parsed.value.indexOf(' ') !== -1) {
|
|
atkInfo.dm2type = parsed.value.split(' ')[1];
|
|
parsed.value = parsed.value.split(' ')[0];
|
|
}
|
|
atkInfo.dm2 = parsed.value;
|
|
}
|
|
}
|
|
// Attack range
|
|
if (propName === 'ATD') {
|
|
atkInfo.portee = parsed.value;
|
|
atkInfo.type = '@{ATKTIR}';
|
|
} else {
|
|
atkInfo.type = '@{ATKCAC}';
|
|
}
|
|
}
|
|
if (hasAtk) {
|
|
if (!atkId) {
|
|
atkId = generateRowID();
|
|
}
|
|
attrs['repeating_equipement_equip-atkid'] = atkId;
|
|
atkId = `repeating_armes_${atkId}`;
|
|
attrs[`${atkId}_armenom`] = atkName;
|
|
attrs[`${atkId}_armeatt`] = 'attaque=';
|
|
attrs[`${atkId}_armeatk`] = atkInfo.type;
|
|
attrs[`${atkId}_armeportee`] = atkInfo.portee || '';
|
|
if (atkInfo.dm.length) {
|
|
attrs[`${atkId}_armedmg`] = 'degats=';
|
|
attrs[`${atkId}_armedmnbde`] = atkInfo.dm[0];
|
|
attrs[`${atkId}_armedmde`] = atkInfo.dm[1].replace('+', '!');
|
|
if (atkInfo.type === '@{ATKTIR}') {
|
|
attrs[`${atkId}_armedmcar`] = '0';
|
|
}
|
|
if (atkInfo.dmtype) {
|
|
attrs[`${atkId}_armedmtype`] = atkInfo.dmtype;
|
|
}
|
|
if (atkInfo.dm2) attrs[`${atkId}_armedm2_de`] = atkInfo.dm2;
|
|
if (atkInfo.dm2type)
|
|
attrs[`${atkId}_armedm2_desc`] = atkInfo.dm2type;
|
|
} else {
|
|
attrs[`${atkId}_armedmg`] = '';
|
|
}
|
|
}
|
|
if (Object.keys(attrs).length > 0) {
|
|
setAttrs(attrs);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* On changing the total character's encumbrance
|
|
* - Set character's conditions
|
|
*/
|
|
on('change:total_enc', function () {
|
|
getAttrs(
|
|
['use_encombrement', 'coc_setting', 'total_enc', 'seuil_enc'],
|
|
function (values) {
|
|
const use_encombrement = values.use_encombrement === 1 ? true : false;
|
|
if (!use_encombrement) {
|
|
return;
|
|
}
|
|
const seuil_enc = parseInt(values.seuil_enc) || 0;
|
|
const encombrement = parseInt(values.total_enc) || 0;
|
|
if (seuil_enc > 0 && encombrement > 0) {
|
|
let cond = {};
|
|
if (encombrement > seuil_enc * 3) {
|
|
cond.CONDITION = 'I'; // Immobilisé
|
|
} else if (encombrement > seuil_enc * 2) {
|
|
cond.CONDITION = 'L'; // Ralenti
|
|
// +Affaibli
|
|
if (values.coc_setting === 'monstres') {
|
|
cond.POISSE = '1';
|
|
} else {
|
|
cond.ETATDE = '12';
|
|
}
|
|
} else if (encombrement > seuil_enc) {
|
|
cond.CONDITION = '';
|
|
cond.JDEX = values.coc_setting === 'monstres' ? '2d20kl1' : '1d12';
|
|
cond.JDEXSUP = values.coc_setting === 'monstres' ? '1d20' : '2d12kh1';
|
|
cond.JDEXSUPHERO =
|
|
values.coc_setting === 'monstres'
|
|
? '{1d20, 0d20+10}kh1'
|
|
: '{2d12kh1, 0d12+10}kh1';
|
|
cond.JDEXRISQUE =
|
|
values.coc_setting === 'monstres' ? '2d20kl1' : '2d12kl1';
|
|
cond.ETATDE = '20';
|
|
} else {
|
|
cond.CONDITION = '';
|
|
cond.JDEX = '1d@{ETATDE}';
|
|
cond.JDEXSUP = '2d@{ETATDE}kh1';
|
|
cond.JDEXSUPHERO = '{2d@{ETATDE}kh1, 0d20+10}kh1';
|
|
cond.JDEXRISQUE = '1d12';
|
|
cond.ETATDE = '20';
|
|
}
|
|
if (cond !== null) {
|
|
setAttrs(cond);
|
|
}
|
|
}
|
|
}
|
|
);
|
|
});
|
|
|
|
/**
|
|
* Rebuild derived attributes
|
|
* - Reset the CARACS attribute
|
|
* - Reset characters encumbrance
|
|
* - Rebuild the general buffs
|
|
* - Rebuild the attack and DM modifiers
|
|
*/
|
|
function rebuildAll() {
|
|
for (let v = 1; v <= 9; v++) {
|
|
setRank(v.toString());
|
|
}
|
|
buildCaracs();
|
|
buildAbilities();
|
|
encumbrance();
|
|
rebuildBuffs();
|
|
rebuildModAtkDM('repeating_modatk', 'armebuff');
|
|
rebuildModAtkDM('repeating_moddm', 'armebuffdm');
|
|
rebuildUD();
|
|
}
|
|
|
|
/**
|
|
* On clicking the Reset button
|
|
* - Rebuild derived attributes
|
|
*/
|
|
on('clicked:reset_btn', function () {
|
|
rebuildAll();
|
|
});
|
|
|
|
/**
|
|
* Search for a general buff to synchronize with an attack modifier
|
|
* @param {string} buffName Name of buff to synchronize
|
|
* @param {string} buffOn State of buff to synchronize
|
|
*/
|
|
function updateMatchBuffs(buffName, buffOn) {
|
|
getSectionIDs('repeating_buffs', function (ids) {
|
|
const attrs = {};
|
|
for (const id of ids) {
|
|
getAttrs([`repeating_buffs_${id}_buffnom`], function (v) {
|
|
const name = v[Object.keys(v)[0]] || '';
|
|
if (name.toLowerCase() === buffName.toLowerCase()) {
|
|
attrs[`repeating_buffs_${id}_buffon`] = buffOn;
|
|
}
|
|
setAttrs(attrs);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Rebuild the attack/dm modifiers
|
|
* @param {string} section Repeating section name
|
|
* @param {string} buffAttr Attack modifier attribute being rebuilt
|
|
*/
|
|
function rebuildModAtkDM(section, buffAttr) {
|
|
getSectionIDs(section, function (ids) {
|
|
const sectId = section.split('_')[1];
|
|
let armebuff = '';
|
|
for (const id of ids) {
|
|
getAttrs(
|
|
[
|
|
`${section}_${id}_${sectId}on`,
|
|
`${section}_${id}_${sectId}nom`,
|
|
`${section}_${id}_${sectId}val`,
|
|
'CARACS',
|
|
],
|
|
function (values) {
|
|
let caracs = JSON.parse(values.CARACS);
|
|
const modOn = values[Object.keys(values)[0]] || '0';
|
|
const modNom = values[Object.keys(values)[1]] || '';
|
|
let modVal = values[Object.keys(values)[2]] || '';
|
|
if (modOn === '1' && modNom !== '' && modVal !== '') {
|
|
if (modVal.search(/\d+[dD]\d+/) !== -1) {
|
|
modVal = `[[${modVal}]]`;
|
|
} else {
|
|
modVal = buffValue(modVal, caracs);
|
|
}
|
|
armebuff += ` ${modVal}[${modNom}]`;
|
|
}
|
|
updateMatchBuffs(modNom, modOn);
|
|
}
|
|
);
|
|
}
|
|
getSectionIDs('repeating_armes', function (ids) {
|
|
const attrs = {};
|
|
for (const id of ids) {
|
|
attrs[`repeating_armes_${id}_${buffAttr}`] = armebuff;
|
|
}
|
|
setAttrs(attrs, { silent: true });
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On changing or removing attack modifiers
|
|
* - Rebuild attack buffs from modifiers
|
|
*/
|
|
on(
|
|
['change:repeating_modatk', 'remove:repeating_modatk'].join(' '),
|
|
function () {
|
|
rebuildModAtkDM('repeating_modatk', 'armebuff');
|
|
}
|
|
);
|
|
|
|
/**
|
|
* On changing or removing damage modifiers
|
|
* - Rebuild damage buffs from modifiers
|
|
*/
|
|
on(['change:repeating_moddm', 'remove:repeating_moddm'].join(' '), function () {
|
|
rebuildModAtkDM('repeating_moddm', 'armebuffdm');
|
|
});
|
|
|
|
/**
|
|
*
|
|
*/
|
|
on('change:distance change:couvert change:visibilite', function () {
|
|
getAttrs(['distance', 'couvert', 'visibilite'], function (values) {
|
|
let tir = [];
|
|
if (values.distance.startsWith('+3')) tir.push('courte portée');
|
|
if (values.distance.startsWith('-5')) tir.push('portée double');
|
|
if (values.distance.startsWith('-10')) tir.push('portée triple');
|
|
if (values.couvert.startsWith('-2')) tir.push('couverture partielle');
|
|
if (values.couvert.startsWith('-5')) tir.push('couverture importante');
|
|
if (values.visibilite.startsWith('-2')) tir.push('cible au contact');
|
|
if (values.visibilite.startsWith('-5')) tir.push('cible masquée par allié');
|
|
if (tir.length != 0) {
|
|
setAttrs({ tir_special: 'Tir : ' + tir.join(', ') });
|
|
}
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Condition codes
|
|
*/
|
|
const conditions = {
|
|
aveugle: 'A',
|
|
effraye: 'F',
|
|
etourdi: 'E',
|
|
immobilise: 'I',
|
|
panique: 'P',
|
|
ralenti: 'L',
|
|
renverse: 'R',
|
|
surpris: 'S',
|
|
};
|
|
|
|
/**
|
|
* Condition modifiers
|
|
*/
|
|
const conditions_data = {
|
|
'': {
|
|
atc: 0,
|
|
atd: 0,
|
|
def: 0,
|
|
init: 0,
|
|
title: '',
|
|
},
|
|
A: {
|
|
atc: 5,
|
|
atd: 10,
|
|
def: 5,
|
|
init: 5,
|
|
title: 'Aveuglé',
|
|
},
|
|
E: {
|
|
atc: 0,
|
|
atd: 0,
|
|
def: 5,
|
|
init: 0,
|
|
title: 'Etourdi',
|
|
},
|
|
F: {
|
|
atc: 5,
|
|
atd: 5,
|
|
def: 0,
|
|
init: 0,
|
|
title: 'Effrayé',
|
|
},
|
|
I: {
|
|
atc: 0,
|
|
atd: 0,
|
|
def: 0,
|
|
init: 0,
|
|
title: 'Immobilisé',
|
|
},
|
|
P: {
|
|
atc: 0,
|
|
atd: 0,
|
|
def: 2,
|
|
init: 0,
|
|
title: 'Paniqué',
|
|
},
|
|
L: {
|
|
atc: 0,
|
|
atd: 0,
|
|
def: 0,
|
|
init: 0,
|
|
title: 'Ralenti',
|
|
},
|
|
R: {
|
|
atc: 5,
|
|
atd: 5,
|
|
def: 5,
|
|
init: 0,
|
|
title: 'Renversé',
|
|
},
|
|
S: {
|
|
atc: 0,
|
|
atd: 0,
|
|
def: 5,
|
|
init: 0,
|
|
title: 'Surpris',
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Apply condition(s) as buffs to combat stats
|
|
* @param {object} buffs Buff object
|
|
* @param {string} conditionAttr Name of attribute storing conditions
|
|
* @param {integer} s Sign (-1/+1)
|
|
*/
|
|
function applyConditions(buffs, conditionAttr, s) {
|
|
if (conditionAttr === '') {
|
|
return;
|
|
}
|
|
for (const cond of conditionAttr) {
|
|
buffs.atc += s * conditions_data[cond].atc;
|
|
buffs.atd += s * conditions_data[cond].atd;
|
|
buffs.def += s * conditions_data[cond].def;
|
|
buffs.init += s * conditions_data[cond].init;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* On changing the enabled condition(s)
|
|
* - Set/Unset combat stats buffs
|
|
*/
|
|
on(
|
|
[
|
|
'clicked:cond_aveugle',
|
|
'clicked:cond_effraye',
|
|
'clicked:cond_etourdi',
|
|
'clicked:cond_immobilise',
|
|
'clicked:cond_panique',
|
|
'clicked:cond_ralenti',
|
|
'clicked:cond_renverse',
|
|
'clicked:cond_surpris',
|
|
].join(' '),
|
|
function (eventInfo) {
|
|
var clickedCondition =
|
|
conditions[eventInfo.triggerName.replace('clicked:cond_', '')];
|
|
getAttrs(
|
|
[
|
|
'coc_setting',
|
|
'PCONDITION',
|
|
'CONDITION',
|
|
'ATKCAC_BUFF',
|
|
'ATKTIR_BUFF',
|
|
'INIT_BUFF',
|
|
'DEF_BUFF',
|
|
'ETATDE',
|
|
],
|
|
function (values) {
|
|
let buffs = {
|
|
atc: parseInt(values.ATKCAC_BUFF) || 0,
|
|
atd: parseInt(values.ATKTIR_BUFF) || 0,
|
|
def: parseInt(values.DEF_BUFF) || 0,
|
|
init: parseInt(values.INIT_BUFF) || 0,
|
|
};
|
|
// debuffs prior condition
|
|
let pcondition = values.PCONDITION || '';
|
|
applyConditions(buffs, pcondition, +1);
|
|
// change condition
|
|
let condition = values.CONDITION || '';
|
|
if (condition.includes(clickedCondition)) {
|
|
condition = condition.replace(clickedCondition, '');
|
|
} else {
|
|
condition += clickedCondition;
|
|
}
|
|
// buff new condition
|
|
applyConditions(buffs, condition, -1);
|
|
// check prior condition for die roll
|
|
let etatde = values.ETATDE;
|
|
let poisse = values.POISSE;
|
|
if (
|
|
pcondition !== '' &&
|
|
(pcondition.includes(conditions.immobilise) ||
|
|
pcondition.includes(conditions.panique))
|
|
) {
|
|
etatde = '20';
|
|
poisse = '0';
|
|
}
|
|
// check condition for die roll
|
|
if (
|
|
condition !== '' &&
|
|
(condition.includes(conditions.immobilise) ||
|
|
condition.includes(conditions.panique))
|
|
) {
|
|
etatde = values.coc_settings === 'monstres' ? '20' : '12';
|
|
poisse = values.coc_settings === 'monstres' ? '1' : '0';
|
|
}
|
|
//
|
|
let displayConditions = '';
|
|
if (condition !== '') {
|
|
for (const cond of Object.keys(conditions)) {
|
|
if (condition.includes(conditions[cond])) {
|
|
displayConditions +=
|
|
(displayConditions === '' ? '' : ', ') +
|
|
conditions_data[conditions[cond]].title;
|
|
}
|
|
}
|
|
}
|
|
if (displayConditions === '') {
|
|
displayConditions = ' ';
|
|
}
|
|
setAttrs({
|
|
ATKCAC_BUFF: buffs.atc,
|
|
ATKTIR_BUFF: buffs.atd,
|
|
DEF_BUFF: buffs.def,
|
|
INIT_BUFF: buffs.init,
|
|
ETATDE: etatde,
|
|
POISSE: poisse,
|
|
CONDITION: condition,
|
|
PCONDITION: condition,
|
|
conditions: displayConditions,
|
|
});
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Adjust total hit points based on attribute value change
|
|
* @param {string} attr Attribute name
|
|
*/
|
|
function hitPoints(attr) {
|
|
getAttrs(
|
|
['NIVEAU', 'DV', 'CONSTITUTION', 'PV_NIVEAU', 'PV_BUFF', 'prog_pv'],
|
|
function (values) {
|
|
const niveau = parseInt(values.NIVEAU) || 0;
|
|
if (niveau === 0) {
|
|
return;
|
|
}
|
|
const dv = parseInt(values.DV) || 0;
|
|
if (dv === 0) {
|
|
return;
|
|
}
|
|
const constitution = parseInt(values.CONSTITUTION) || 0;
|
|
let modcon = 0;
|
|
if (constitution > 0) {
|
|
modcon = getMod(constitution);
|
|
}
|
|
let pv_niveau = values.PV_NIVEAU || '';
|
|
let pv = [];
|
|
if (attr === 'niveau' || attr === 'constitution' || attr === 'pv_buff') {
|
|
if (pv_niveau !== '') {
|
|
pv = JSON.parse(pv_niveau);
|
|
}
|
|
}
|
|
let average = parseInt(values.prog_pv) || 0 === 1 ? 1 + dv / 2 : 0;
|
|
let pv_buff = parseInt(values.PV_BUFF) || 0;
|
|
let pv_max = 0;
|
|
for (let n = 1; n <= niveau; n++) {
|
|
let pvie = 0;
|
|
if (n === 1) {
|
|
pvie = dv + modcon; // niveau 1 : Max. DV + Mod. CON
|
|
} else {
|
|
if (n > 10) {
|
|
// niveaux > 10 : 1 ou 2 PV selon DV
|
|
if (dv >= 10) {
|
|
pvie = 2;
|
|
} else {
|
|
pvie = 1;
|
|
}
|
|
} else {
|
|
// niveaux <= 10
|
|
if (n % 2 === 0) {
|
|
// niveau pair
|
|
if (n > pv.length) {
|
|
// nouveau niveau
|
|
if (average !== 0) {
|
|
pvie = average; // ... soit moyenne du DV + 1
|
|
} else {
|
|
pvie = getRandom(dv); // ... soit tirage de DV
|
|
}
|
|
if (modcon < 0) {
|
|
pvie += modcon; // ... + Mod. CON si négative
|
|
}
|
|
if (pvie < 0) {
|
|
pvie = 0; // ... mais on ne perd pas de PV
|
|
}
|
|
} else {
|
|
// niveau existant
|
|
pvie = pv[n - 1];
|
|
}
|
|
} else {
|
|
// niveau impair
|
|
if (modcon > 0) {
|
|
pvie = modcon; // Mod. CON si positif
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (n > pv.length) {
|
|
pv.push(pvie);
|
|
} else {
|
|
pv[n - 1] = pvie;
|
|
}
|
|
pv_max += pvie;
|
|
}
|
|
pv_max += pv_buff;
|
|
setAttrs({
|
|
PV_NIVEAU: JSON.stringify(pv),
|
|
PV_max: pv_max,
|
|
PV: pv_max,
|
|
});
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* On changing any attribute related to hit points
|
|
* - Re-compute the total hit points
|
|
*/
|
|
on(
|
|
[
|
|
'change:niveau',
|
|
'change:dv',
|
|
'change:constitution',
|
|
'change:pv_buff',
|
|
'change:prog_pv',
|
|
].join(' '),
|
|
function (eventInfo) {
|
|
hitPoints(eventInfo.sourceAttribute);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* On Hit Dice button click
|
|
* - Increase character level
|
|
*/
|
|
on('clicked:dv_btn', function () {
|
|
getAttrs(['NIVEAU'], function (value) {
|
|
const niveau = parseInt(value.NIVEAU) || 0;
|
|
if (niveau > 0 && niveau <= 20) {
|
|
setAttrs({
|
|
NIVEAU: niveau + 1,
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing Bitume vehicle RAP components
|
|
* - Recompute total RAP
|
|
*/
|
|
on('change:vbrap_base change:vbrap_div', function () {
|
|
getAttrs(['vbrap_base', 'vbrap_div'], function (values) {
|
|
let vbrap = parseInt(values.vbrap_base) || 0;
|
|
vbrap += parseInt(values.vbrap_div) || 0;
|
|
setAttrs({
|
|
vbrap: vbrap,
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing Bitume vehicle MAN components
|
|
* - Recompute total MAN
|
|
* - Recompute vehicle DEF
|
|
*/
|
|
on('change:vbman_base change:vbman_div', function () {
|
|
getAttrs(['vbman_base', 'vbman_div', 'vbimp'], function (values) {
|
|
let vbman = parseInt(values.vbman_base) || 0;
|
|
vbman += parseInt(values.vbman_div) || 0;
|
|
let vbimp = parseInt(values.vbimp) || 0;
|
|
setAttrs({
|
|
vbman: vbman,
|
|
vbdef: 10 + vbimp + vbman,
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing Bitume vehicle IMP components
|
|
* - Recompute total IMP
|
|
* - Recompute vehicle DEF
|
|
*/
|
|
on('change:vbimp_base change:vbimp_div', function () {
|
|
getAttrs(['vbimp_base', 'vbimp_div', 'vbman'], function (values) {
|
|
let vbimp = parseInt(values.vbimp_base) || 0;
|
|
vbimp += parseInt(values.vbimp_div) || 0;
|
|
let vbman = parseInt(values.vbman) || 0;
|
|
setAttrs({
|
|
vbimp: vbimp,
|
|
vbdef: 10 + vbimp + vbman,
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing Bitume vehicle EMP components
|
|
* - Recompute total EMP
|
|
*/
|
|
on('change:vbemp_base change:vbemp_div', function () {
|
|
getAttrs(['vbemp_base', 'vbemp_div'], function (values) {
|
|
let vbemp = parseInt(values.vbemp_base) || 0;
|
|
vbemp += parseInt(values.vbemp_div) || 0;
|
|
setAttrs({
|
|
vbemp: vbemp,
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Rebuild Bitume vehicle used EMP
|
|
*/
|
|
function rebuildUsedSlots() {
|
|
getAttrs(['coc_setting'], function (value) {
|
|
if (value.coc_setting !== 'bitume') return;
|
|
getSectionIDs('vbmods', function (ids) {
|
|
setAttrs({ vbemp_total: 0 });
|
|
let used = 0;
|
|
ids.forEach((id) => {
|
|
getAttrs([`repeating_vbmods_${id}_vbmod-emp`], function (value) {
|
|
used += parseInt(value[Object.keys(value)[0]]) || 0;
|
|
setAttrs({ vbemp_total: used });
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On changing Bitume vehicle mods
|
|
* - Rebuild vehicle buffs if any
|
|
* - Rebuild used slots
|
|
* - Check if installed mods do not use more slots than the max
|
|
*/
|
|
on('change:repeating_vbmods remove:repeating_vbmods', function (eventInfo) {
|
|
const attrs = {
|
|
vbrap_div: 0,
|
|
vbman_div: 0,
|
|
vbimp_div: 0,
|
|
vbemp_div: 0,
|
|
vbdef_div: 0,
|
|
};
|
|
const eventRowId = eventInfo.sourceAttribute.split('_')[2];
|
|
getSectionIDs('vbmods', function (ids) {
|
|
setAttrs({ vbemp_total: 0 });
|
|
let used = 0;
|
|
ids.forEach((id, ix) => {
|
|
const rowId = `repeating_vbmods_${id}_`;
|
|
getAttrs(
|
|
[
|
|
`${rowId}vbmod-on`,
|
|
`${rowId}vbmod-buffs`,
|
|
`${rowId}vbmod-emp`,
|
|
'vbemp',
|
|
],
|
|
function (values) {
|
|
const enabled = parseInt(values[Object.keys(values)[0]]) || 0;
|
|
const buffs = values[Object.keys(values)[1]] || '';
|
|
if (enabled === 1 && buffs !== '') {
|
|
buffs.split(';').forEach((b) => {
|
|
const buff = parseNameValue(b);
|
|
const div = `vb${buff.name.toLowerCase()}_div`;
|
|
if (Object.keys(attrs).indexOf(div) !== -1) {
|
|
attrs[div] += parseInt(buff.value) || 0;
|
|
}
|
|
});
|
|
}
|
|
used += parseInt(values[Object.keys(values)[2]]) || 0;
|
|
if ((ix = ids.length - 1)) {
|
|
empmax = parseInt(values.vbemp) || 0;
|
|
if (used > empmax) {
|
|
attrs[`repeating_vbmods_${eventRowId}_vbmod-emp`] = 0;
|
|
} else {
|
|
attrs.vbemp_total = used;
|
|
}
|
|
}
|
|
setAttrs(attrs);
|
|
}
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing Ud max for vehicle
|
|
* - Reset current Ud
|
|
*/
|
|
on('change:vbudmax', function () {
|
|
getAttrs(['vbudmax'], function (value) {
|
|
setAttrs({ vbud: value.vbudmax });
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On checking Ud boxes
|
|
* - Adjust the current Ud value
|
|
*/
|
|
[12, 10, 8, 6, 4].forEach((udie) => {
|
|
const udboxes = [];
|
|
for (let cb = 1; cb <= udie; cb++) {
|
|
udboxes.push(`change:vbud${udie}_${cb}`);
|
|
}
|
|
on(udboxes.join(' '), function (eventInfo) {
|
|
const box = eventInfo.sourceAttribute.split('_')[0];
|
|
let maxcb = parseInt(box.slice(4));
|
|
const boxes = [];
|
|
for (let cb = 1; cb <= maxcb; cb++) {
|
|
boxes.push(`${box}_${cb}`);
|
|
}
|
|
getAttrs(['vbudmax', ...boxes], function (v) {
|
|
const vbudmax = parseInt(v.vbudmax) || 0;
|
|
delete v.vbudmax;
|
|
values = [];
|
|
for (const k of Object.keys(v)) {
|
|
values.push(v[k]);
|
|
}
|
|
if (values.findIndex((cb) => cb === '1') === -1) {
|
|
if (maxcb < vbudmax) maxcb += 2;
|
|
}
|
|
setAttrs({ vbud: maxcb });
|
|
});
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing COC setting
|
|
* - Set character sheet options to default values for setting
|
|
*/
|
|
on(['change:coc_setting', 'change:coc_surh'].join(' '), function () {
|
|
getAttrs(['coc_setting', 'coc_surh'], function (values) {
|
|
defaultConfig = {
|
|
base: {
|
|
lib_profil: 'Profil',
|
|
lib_famille: 'Famille',
|
|
lib_origine: 'Origine',
|
|
origine: '',
|
|
coc_surh: '',
|
|
INIT_JET: '@{INIT}',
|
|
option_atkmen: '0',
|
|
option_atkpsi: '0',
|
|
option_atkpil: '0',
|
|
option_defpsi: '0',
|
|
option_atkmag: '0',
|
|
option_pm: '0',
|
|
option_pc: '1',
|
|
option_pr: '0',
|
|
use_encombrement: '0',
|
|
PC_DESC_PLUR: 'Points de Choc',
|
|
PC_DESC_SNGL: 'Point de Choc',
|
|
PC_DESC_ABRV: 'PC',
|
|
PC_BONUS: '+10',
|
|
coc_setting_bitume: '0',
|
|
option_cpt1: '0',
|
|
cpt1_desc_plur: '',
|
|
cpt1_desc_sngl: '',
|
|
cpt1_desc_abrv: '',
|
|
pm_desc: 'Magie',
|
|
pm_abrv: 'PM',
|
|
},
|
|
cthulhu: {
|
|
lib_profil: 'Profil',
|
|
lib_famille: 'Famille',
|
|
lib_origine: 'Origine',
|
|
origine: '',
|
|
coc_surh: '',
|
|
INIT_JET: '@{INIT}',
|
|
option_atkmen: '0',
|
|
option_atkpsi: '0',
|
|
option_atkpil: '0',
|
|
option_defpsi: '0',
|
|
option_atkmag: '1',
|
|
option_pm: '0',
|
|
option_pc: '1',
|
|
option_pr: '0',
|
|
use_encombrement: '0',
|
|
PC_DESC_PLUR: 'Points de Choc',
|
|
PC_DESC_SNGL: 'Point de Choc',
|
|
PC_DESC_ABRV: 'PC',
|
|
PC_BONUS: '+10',
|
|
coc_setting_bitume: '0',
|
|
option_cpt1: '1',
|
|
cpt1_desc_plur: 'Points de Folie',
|
|
cpt1_desc_sngl: 'Point de Folie',
|
|
cpt1_desc_abrv: 'PF',
|
|
pm_desc: 'Magie',
|
|
pm_abrv: 'PM',
|
|
},
|
|
pulp: {
|
|
lib_profil: 'Profil',
|
|
lib_famille: 'Famille',
|
|
lib_origine: 'Origine',
|
|
origine: '',
|
|
coc_surh: '',
|
|
INIT_JET: '@{INIT}',
|
|
option_atkmen: '0',
|
|
option_atkpsi: '0',
|
|
option_atkpil: '0',
|
|
option_defpsi: '0',
|
|
option_atkmag: '1',
|
|
option_pm: '1',
|
|
option_pc: '1',
|
|
option_pr: '1',
|
|
use_encombrement: '0',
|
|
PC_DESC_PLUR: 'Points de Chance',
|
|
PC_DESC_SNGL: 'Point de Chance',
|
|
PC_DESC_ABRV: 'PC',
|
|
PC_BONUS: '+10',
|
|
coc_setting_bitume: '0',
|
|
option_cpt1: '0',
|
|
cpt1_desc_plur: '',
|
|
cpt1_desc_sngl: '',
|
|
cpt1_desc_abrv: '',
|
|
pm_desc: 'Magie',
|
|
pm_abrv: 'PM',
|
|
},
|
|
postapo: {
|
|
lib_profil: 'Profil',
|
|
lib_famille: 'Famille',
|
|
lib_origine: 'Origine',
|
|
origine: '',
|
|
coc_surh: '',
|
|
INIT_JET: '@{INIT}',
|
|
option_atkmen: '0',
|
|
option_atkpsi: '0',
|
|
option_atkpil: '0',
|
|
option_defpsi: '0',
|
|
option_atkmag: '0',
|
|
option_pm: '0',
|
|
option_pc: '1',
|
|
option_pr: '1',
|
|
use_encombrement: '0',
|
|
PC_DESC_PLUR: 'Points de Chance',
|
|
PC_DESC_SNGL: 'Point de Chance',
|
|
PC_DESC_ABRV: 'PC',
|
|
PC_BONUS: '+10',
|
|
coc_setting_bitume: '0',
|
|
option_cpt1: '0',
|
|
cpt1_desc_plur: '',
|
|
cpt1_desc_sngl: '',
|
|
cpt1_desc_abrv: '',
|
|
pm_desc: 'Magie',
|
|
pm_abrv: 'PM',
|
|
},
|
|
surhumain: {
|
|
lib_profil: 'Profil',
|
|
lib_famille: 'Famille',
|
|
lib_origine: 'Surhumain',
|
|
INIT_JET: '@{INIT}',
|
|
option_atkmen: '0',
|
|
option_atkpsi: '0',
|
|
option_atkpil: '0',
|
|
option_defpsi: '0',
|
|
option_atkmag: '1',
|
|
option_pm: '1',
|
|
option_pc: '1',
|
|
option_pr: '1',
|
|
use_encombrement: '0',
|
|
PC_DESC_PLUR: 'Points de Chance',
|
|
PC_DESC_SNGL: 'Point de Chance',
|
|
PC_DESC_ABRV: 'PC',
|
|
PC_BONUS: '+10',
|
|
coc_setting_bitume: '0',
|
|
option_cpt1: '0',
|
|
cpt1_desc_plur: '',
|
|
cpt1_desc_sngl: '',
|
|
cpt1_desc_abrv: '',
|
|
pm_desc: 'Magie',
|
|
pm_abrv: 'PM',
|
|
},
|
|
cyberpunk: {
|
|
lib_profil: 'Profil',
|
|
lib_famille: 'Famille',
|
|
lib_origine: 'Origine',
|
|
origine: '',
|
|
coc_surh: '',
|
|
INIT_JET: '{[[@{INIT}]]+1d6!, ([[@{INIT}]]*2)+0d6}kl1',
|
|
option_atkmen: '1',
|
|
option_atkpsi: '0',
|
|
option_atkpil: '0',
|
|
option_defpsi: '0',
|
|
option_atkmag: '0',
|
|
option_pm: '0',
|
|
option_pc: '1',
|
|
option_pr: '1',
|
|
use_encombrement: '0',
|
|
PC_DESC_PLUR: 'Points de Cash',
|
|
PC_DESC_SNGL: 'Point de Cash',
|
|
PC_DESC_ABRV: 'PC',
|
|
PC_BONUS: '+[[1d6]]',
|
|
coc_setting_bitume: '0',
|
|
option_cpt1: '0',
|
|
cpt1_desc_plur: '',
|
|
cpt1_desc_sngl: '',
|
|
cpt1_desc_abrv: '',
|
|
pm_desc: 'Magie',
|
|
pm_abrv: 'PM',
|
|
},
|
|
shadowrun: {
|
|
lib_profil: 'Profil',
|
|
lib_famille: 'Famille',
|
|
lib_origine: 'Méta-type',
|
|
origine: '',
|
|
coc_surh: '',
|
|
INIT_JET: '{[[@{INIT}]]+1d6!, ([[@{INIT}]]*2)+0d6}kl1',
|
|
option_atkmen: '1',
|
|
option_atkpsi: '0',
|
|
option_atkpil: '0',
|
|
option_defpsi: '0',
|
|
option_atkmag: '1',
|
|
option_pm: '1',
|
|
option_pc: '1',
|
|
option_pr: '1',
|
|
use_encombrement: '0',
|
|
PC_DESC_PLUR: 'Points de Cash',
|
|
PC_DESC_SNGL: 'Point de Cash',
|
|
PC_DESC_ABRV: 'PC',
|
|
PC_BONUS: '+[[1d6]]',
|
|
coc_setting_bitume: '0',
|
|
option_cpt1: '0',
|
|
cpt1_desc_plur: '',
|
|
cpt1_desc_sngl: '',
|
|
cpt1_desc_abrv: '',
|
|
pm_desc: 'Magie',
|
|
pm_abrv: 'PM',
|
|
},
|
|
menacex: {
|
|
lib_profil: 'Profil',
|
|
lib_famille: 'Famille',
|
|
lib_origine: 'Origine',
|
|
origine: '',
|
|
coc_surh: '',
|
|
INIT_JET: '@{INIT}',
|
|
option_atkmen: '0',
|
|
option_atkpsi: '1',
|
|
option_atkpil: '0',
|
|
option_defpsi: '1',
|
|
option_atkmag: '0',
|
|
option_pm: '1',
|
|
option_pc: '1',
|
|
option_pr: '0',
|
|
use_encombrement: '0',
|
|
PC_DESC_PLUR: 'Points de Chance',
|
|
PC_DESC_SNGL: 'Point de Chance',
|
|
PC_DESC_ABRV: 'PC',
|
|
PC_BONUS: '+10',
|
|
coc_setting_bitume: '0',
|
|
option_cpt1: '1',
|
|
cpt1_desc_plur: 'Points de Tension',
|
|
cpt1_desc_sngl: 'Point de Tension',
|
|
cpt1_desc_abrv: 'PT',
|
|
pm_desc: 'Energie PSI',
|
|
pm_abrv: 'EP',
|
|
},
|
|
bitume: {
|
|
lib_profil: 'Tribu',
|
|
lib_famille: 'Famille',
|
|
lib_origine: 'Origine',
|
|
origine: '',
|
|
coc_surh: '',
|
|
INIT_JET: '{[[@{INIT}]]+1d6!, ([[@{INIT}]]*2)+0d6}kl1',
|
|
option_atkmen: '0',
|
|
option_atkpsi: '0',
|
|
option_atkpil: '1',
|
|
option_defpsi: '0',
|
|
option_atkmag: '0',
|
|
option_pm: '0',
|
|
option_pc: '1',
|
|
option_pr: '0',
|
|
use_encombrement: '0',
|
|
PC_DESC_PLUR: 'Points de Style',
|
|
PC_DESC_SNGL: 'Point de Style',
|
|
PC_DESC_ABRV: 'PS',
|
|
PC_BONUS: 'effet Waouh, réussite héroïque, juste une égratignure',
|
|
coc_setting_bitume: '1',
|
|
option_cpt1: '0',
|
|
cpt1_desc_plur: '',
|
|
cpt1_desc_sngl: '',
|
|
cpt1_desc_abrv: '',
|
|
pm_desc: 'Magie',
|
|
pm_abrv: 'PM',
|
|
},
|
|
monstres: {
|
|
lib_profil: 'Espèce',
|
|
lib_famille: 'Classe',
|
|
lib_origine: 'Origine',
|
|
origine: '',
|
|
coc_surh: '',
|
|
INIT_JET: '@{INIT}',
|
|
option_atkmen: '0',
|
|
option_atkpsi: '0',
|
|
option_atkpil: '0',
|
|
option_defpsi: '0',
|
|
option_atkmag: '1',
|
|
option_pm: '0',
|
|
option_pc: '1',
|
|
option_pr: '0',
|
|
use_encombrement: '0',
|
|
PC_DESC_PLUR: "Points d'Humanité",
|
|
PC_DESC_SNGL: "Point d'Humanité",
|
|
PC_DESC_ABRV: 'PH',
|
|
PC_BONUS: '+10',
|
|
coc_setting_bitume: '0',
|
|
option_cpt1: '1',
|
|
cpt1_desc_plur: 'Points de Pulsion',
|
|
cpt1_desc_sngl: 'Point de Pulsion',
|
|
cpt1_desc_abrv: 'PP',
|
|
pm_desc: 'Magie',
|
|
pm_abrv: 'PM',
|
|
},
|
|
};
|
|
|
|
let attrs = {};
|
|
if (values.coc_setting === '') {
|
|
attrs = defaultConfig.base;
|
|
} else {
|
|
attrs = defaultConfig[values.coc_setting];
|
|
}
|
|
|
|
if (values.coc_setting === 'postapo') {
|
|
removeRepeating('ressources');
|
|
const resources = [
|
|
'Points de Provisions',
|
|
'Points de Munitions',
|
|
'Points de Transport',
|
|
];
|
|
for (const resource of resources) {
|
|
let rowId = 'repeating_ressources_' + generateRowID();
|
|
attrs[`${rowId}_res-desc`] = resource;
|
|
attrs[`${rowId}_res-val`] = '0';
|
|
}
|
|
}
|
|
|
|
if (
|
|
values.coc_setting === 'cyberpunk' ||
|
|
values.coc_setting === 'shadowrun'
|
|
) {
|
|
removeRepeating('ressources');
|
|
const resources = ['Cyberlose'];
|
|
for (const resource of resources) {
|
|
let rowId = 'repeating_ressources_' + generateRowID();
|
|
attrs[`${rowId}_res-desc`] = resource;
|
|
attrs[`${rowId}_res-val`] = '0';
|
|
}
|
|
}
|
|
|
|
if (values.coc_setting === 'surhumain') {
|
|
attrs.origine = '';
|
|
attrs.option_cpt1 = '0';
|
|
attrsattrs.cpt1_desc = '';
|
|
if (values.coc_surh && values.coc_surh !== '') {
|
|
//const rowId = 'repeating_ressources_' + generateRowID();
|
|
switch (values.coc_surh) {
|
|
case 'ange':
|
|
attrsattrs.origine = 'Ange';
|
|
attrsattrs.ATKMAG_CARAC = '@{CHA}';
|
|
attrsattrs.option_pr = '1';
|
|
break;
|
|
case 'demon':
|
|
attrsattrs.origine = 'Démon';
|
|
attrsattrs.ATKMAG_CARAC = '@{CHA}';
|
|
attrsattrs.option_pr = '0';
|
|
attrsattrs.option_cpt1 = '1';
|
|
attrsattrs.cpt1_desc_plur = "Points d'âme";
|
|
attrsattrs.cpt1_desc_sngl = "Point d'âme";
|
|
attrsattrs.cpt1_desc_abrv = 'PdA';
|
|
break;
|
|
case 'fee-dragon':
|
|
attrsattrs.origine = 'Dragon (être féérique)';
|
|
attrsattrs.DV = '10';
|
|
attrsattrs.ATKCAC_BASE = '2';
|
|
attrsattrs.ATKTIR_BASE = '0';
|
|
attrsattrs.ATKMAG_CARAC = '@{CHA}';
|
|
attrsattrs.ATKMAG_BASE = '0';
|
|
attrsattrs.option_pr = '0';
|
|
break;
|
|
case 'fee-dryade':
|
|
attrsattrs.origine = 'Dryade (être féérique)';
|
|
attrsattrs.DV = '6';
|
|
attrsattrs.ATKCAC_BASE = '0';
|
|
attrsattrs.ATKTIR_BASE = '0';
|
|
attrsattrs.ATKMAG_CARAC = '@{CHA}';
|
|
attrsattrs.ATKMAG_BASE = '2';
|
|
attrsattrs.option_pr = '0';
|
|
break;
|
|
case 'fee-dwergar':
|
|
attrsattrs.origine = 'Dwergar (être féérique)';
|
|
attrsattrs.DV = '8';
|
|
attrsattrs.ATKCAC_BASE = '1';
|
|
attrsattrs.ATKTIR_BASE = '1';
|
|
attrsattrs.ATKMAG_CARAC = '@{CHA}';
|
|
attrsattrs.ATKMAG_BASE = '0';
|
|
attrsattrs.option_pr = '0';
|
|
break;
|
|
case 'fee-gobelin':
|
|
attrsattrs.origine = 'Gobelin (être féérique)';
|
|
attrsattrs.DV = '8';
|
|
attrsattrs.ATKCAC_BASE = '1';
|
|
attrsattrs.ATKTIR_BASE = '1';
|
|
attrsattrs.ATKMAG_CARAC = '@{CHA}';
|
|
attrsattrs.ATKMAG_BASE = '0';
|
|
attrsattrs.option_pr = '0';
|
|
break;
|
|
case 'fee-lutin':
|
|
attrsattrs.origine = 'Lutin (être féérique)';
|
|
attrsattrs.DV = '6';
|
|
attrsattrs.ATKCAC_BASE = '0';
|
|
attrsattrs.ATKTIR_BASE = '1';
|
|
attrsattrs.ATKMAG_CARAC = '@{CHA}';
|
|
attrsattrs.ATKMAG_BASE = '1';
|
|
attrsattrs.option_pr = '0';
|
|
break;
|
|
case 'fee-ogre':
|
|
attrsattrs.origine = 'Ogre (être féérique)';
|
|
attrsattrs.DV = '10';
|
|
attrsattrs.ATKCAC_BASE = '2';
|
|
attrsattrs.ATKTIR_BASE = '0';
|
|
attrsattrs.ATKMAG_CARAC = '@{CHA}';
|
|
attrsattrs.ATKMAG_BASE = '0';
|
|
attrsattrs.option_pr = '0';
|
|
break;
|
|
case 'garou':
|
|
attrsattrs.origine = 'Loup-garou';
|
|
attrsattrs.ATKMAG_CARAC = '@{PER}';
|
|
attrsattrs.option_pr = '0';
|
|
attrsattrs.option_cpt1 = '1';
|
|
attrsattrs.cpt1_desc_plur = 'Points de Rage';
|
|
attrsattrs.cpt1_desc_sngl = 'Point de Rage';
|
|
attrsattrs.cpt1_desc_abrv = 'PdR';
|
|
break;
|
|
case 'vampire':
|
|
attrsattrs.origine = 'Vampire';
|
|
attrsattrs.ATKMAG_CARAC = '@{INT}';
|
|
attrsattrs.option_pr = '0';
|
|
attrsattrs.option_cpt1 = '1';
|
|
attrsattrs.cpt1_desc = 'Points de Sang';
|
|
attrsattrs.cpt1_desc = 'Point de Sang';
|
|
attrsattrs.cpt1_desc = 'PdS';
|
|
break;
|
|
case 'mutant-endo':
|
|
attrsattrs.origine = 'Mutant endogène';
|
|
attrsattrs.ATKMAG_CARAC = '@{CHA}';
|
|
attrsattrs.option_pr = '0';
|
|
break;
|
|
case 'mutant-exo':
|
|
attrsattrs.origine = 'Mutant exogène';
|
|
attrsattrs.ATKMAG_CARAC = '@{PER}';
|
|
attrsattrs.option_pr = '0';
|
|
break;
|
|
case 'mutant-psycho':
|
|
attrsattrs.origine = 'Mutant psychogène';
|
|
attrsattrs.ATKMAG_CARAC = '@{INT}';
|
|
attrsattrs.option_pr = '0';
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
setAttrs(attrs);
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing the hors-fiche settings
|
|
* - Rebuild the hors-fiche attributes
|
|
*/
|
|
on(['change:hors_fiche', 'change:hors_fiche_pfx'].join(' '), function () {
|
|
buildAbilities();
|
|
});
|
|
|
|
/**
|
|
* On clicking JSON profile import button
|
|
* - parse and update profile's path & abilities
|
|
*/
|
|
on('clicked:json_import', function () {
|
|
getAttrs(['json_profile'], function (value) {
|
|
if (value.json_profile.trim() === '') return;
|
|
const jsonData = JSON.parse(value.json_profile);
|
|
const attrs = {
|
|
json_profile: '',
|
|
PROFIL: jsonData.profile,
|
|
FAMILLE: jsonData.family,
|
|
};
|
|
jsonData.paths.forEach((path, ix) => {
|
|
attrs[`voie${ix + 1}nom`] = path.name;
|
|
path.abilities.forEach((ability, rank) => {
|
|
if (typeof ability === 'string') {
|
|
attrs[`voie${ix + 1}-t${rank + 1}`] = ability;
|
|
} else {
|
|
attrs[`voie${ix + 1}-t${rank + 1}`] = ability.name;
|
|
attrs[`voie${ix + 1}-${rank + 1}`] = ability.description;
|
|
}
|
|
});
|
|
});
|
|
consoleLog(attrs);
|
|
setAttrs(attrs);
|
|
});
|
|
});
|
|
|
|
/**
|
|
* On changing level and charisma mod
|
|
* - recalculate the max. PM / EP for settings with magic or psi
|
|
*/
|
|
on(
|
|
['change:coc_setting', 'change:niveau', 'change:charisme'].join(' '),
|
|
function () {
|
|
getAttrs(['coc_setting', 'NIVEAU', 'charisme'], function (values) {
|
|
const setting = values.coc_setting;
|
|
const niveau = values.NIVEAU || 1;
|
|
const modcha = getMod(values.charisme || 0);
|
|
let attrs = {};
|
|
if (
|
|
setting === 'pulp' ||
|
|
setting === 'shadowrun' ||
|
|
setting === 'menacex'
|
|
) {
|
|
attrs.PMmax = niveau + modcha;
|
|
attrs.PM = attrs.PMmax;
|
|
} else {
|
|
attrs.PM = 0;
|
|
attrs.PMmax = 0;
|
|
}
|
|
setAttrs(attrs);
|
|
});
|
|
}
|
|
);
|
|
|
|
/**
|
|
* On clicking the default vehicle rolls button
|
|
* - Add default vehicle rolls based on type
|
|
*/
|
|
on('clicked:vehicle_rolls', function () {
|
|
getAttrs(['vehicle_type'], function (v) {
|
|
let rolls = [];
|
|
if (v.vehicle_type === 'sol') {
|
|
rolls = [
|
|
{
|
|
jetvnom: 'Pilotage',
|
|
jetvnbde: '1',
|
|
jetvde: '@{ETATDE}',
|
|
jetvtypejet: '',
|
|
jetvcaracpil: '@{DEX_TEST}',
|
|
jetvcarac: '@{AGI}',
|
|
},
|
|
{
|
|
jetvnom: 'Sortie de route',
|
|
jetvnbde: '4',
|
|
jetvde: '6',
|
|
jetvtypejet: '!',
|
|
jetvcaracpil: '0',
|
|
jetvcarac: '0',
|
|
jetvdesc: 'DM Véhicule',
|
|
},
|
|
{
|
|
jetvnom: 'Sortie de route',
|
|
jetvnbde: '2',
|
|
jetvde: '6',
|
|
jetvtypejet: '!',
|
|
jetvcaracpil: '0',
|
|
jetvcarac: '0',
|
|
jetvdesc: 'DM Passagers',
|
|
},
|
|
{
|
|
jetvnom: 'Percussion',
|
|
jetvnbde: '1',
|
|
jetvde: '6',
|
|
jetvtypejet: '!',
|
|
jetvcaracpil: '0',
|
|
jetvcarac: '@{FOV}',
|
|
jetvdesc: 'DM subis : [[1d6!]]',
|
|
},
|
|
];
|
|
} else if (v.vehicle_type === 'air') {
|
|
rolls = [
|
|
{
|
|
jetvnom: 'Pilotage',
|
|
jetvnbde: '1',
|
|
jetvde: '@{ETATDE}',
|
|
jetvtypejet: '',
|
|
jetvcaracpil: '@{DEX_TEST}',
|
|
jetvcarac: '@{AGI}',
|
|
},
|
|
{
|
|
jetvnom: 'Crash',
|
|
jetvnbde: '8',
|
|
jetvde: '6',
|
|
jetvtypejet: '!',
|
|
jetvcaracpil: '0',
|
|
jetvcarac: '0',
|
|
jetvdesc: 'DM Véhicule',
|
|
},
|
|
{
|
|
jetvnom: 'Crash',
|
|
jetvnbde: '4',
|
|
jetvde: '6',
|
|
jetvtypejet: '!',
|
|
jetvcaracpil: '0',
|
|
jetvcarac: '0',
|
|
jetvdesc: 'DM Passagers',
|
|
},
|
|
];
|
|
}
|
|
if (rolls.length !== 0) {
|
|
addRolls = {};
|
|
for (const roll of rolls) {
|
|
newRowID = 'repeating_jetv_' + generateRowID();
|
|
for (const attr of Object.keys(roll)) {
|
|
addRolls[`${newRowID}_${attr}`] = roll[attr];
|
|
}
|
|
}
|
|
setAttrs(addRolls);
|
|
}
|
|
});
|
|
});
|
|
|
|
</script>
|
|
<!-- FIN SCRIPTS / SHEET WORKERS -->
|