Files
roll20-character-sheets/ChroniquesGalactiques/cog.html
T
2021-04-28 10:18:24 +02:00

6760 lines
292 KiB
HTML

<div class="sheet-mainBg">
<!-- FDP -->
<!-- INPUT HIDDEN Version FdP -->
<input type="hidden" name="attr_verfdp" value="3.114.1" />
<input type="hidden" name="attr_VERSION" value="3.114.1" />
<!-- INPUT HIDDEN Univers (COF, CG, COC) -->
<input type="hidden" name="attr_UNIVERS" value="CG" />
<!-- 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 jets -->
<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_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_SAG_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_ATKMAG_BUFF" value="0" />
<input type="hidden" name="attr_ATKMEN_BUFF" value="0" />
<input type="hidden" name="attr_PSYINTUI_BUFF" value="0" />
<input type="hidden" name="attr_PSYINFLU_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 Malus Armure -->
<input type="hidden" name="attr_ARMURE_MALUS" value="0" />
<!-- INPUT HIDDEN Buffs vaisseau -->
<input type="hidden" name="attr_ATKTIRV_BUFF" value="0" />
<input type="hidden" name="attr_DEFVPIL_BUFF" value="0" />
<input type="hidden" name="attr_DEFVSEN_BUFF" value="0" />
<input type="hidden" name="attr_PEV_BUFF" value="0" />
<!-- INPUT HIDDEN Etats préjudiciable précédent -->
<input type="hidden" name="attr_CONDITION" value="" />
<input type="hidden" name="attr_PCONDITION" value="" />
<!-- INPUT HIDDEN PE -->
<input type="hidden" name="attr_PE_ONCE" value="Points énergie" />
<!-- INPUT HIDDEN Précédent nombre de PV -->
<input type="hidden" name="attr_LAST_PV" 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 Postes de combat vaisseaux -->
<input type="hidden" name="attr_POSTE_PIL" value="" />
<input type="hidden" name="attr_POSTE_MOT" value="" />
<input type="hidden" name="attr_POSTE_SEN" value="" />
<input type="hidden" name="attr_POSTE_ORD" value="" />
<!-- INPUT HIDDEN DEFs vaisseau -->
<input type="hidden" name="attr_DEFRAP" value="0" />
<input type="hidden" name="attr_DEFSOL" value="0" />
<!-- 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 type="hidden" name="attr_chatmsg" value="" />
<!-- FIN Hidden -->
<div style="display: none;">
<button type="roll" name="roll_incident_tir"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Attaque}} {{name=Incident de tir}} {{test=[[1d20cf1cs>2]]}} {{test_crit=Surchauffe ! Tir au prochain tour}} {{test_fumble=Batterie déchargée !}}" />
</div>
<div class="sheet-container">
<!-- Identité -->
<div style="width: 420px; vertical-align: middle; text-align: center;">
<img width="340" title="Version 3.114.1 - 28/04/2021"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_logo.png" />
</div>
<div style="width: 270px;">
<table>
<tr>
<td class="sheet-textfatleft">Nom</td>
<td colspan="3"><input class="sheet-nobox" name="attr_character_name" type="text" title="@{character_name}" />
</td>
</tr>
<tr>
<td class="sheet-textfatleft"><span class="sheet-textfatleft sheet-label" name="attr_lib_profil"></span></td>
<td colspan="3"><input class="sheet-nobox" name="attr_PROFIL" type="text" title="@{PROFIL}" /></td>
</tr>
<tr>
<td class="sheet-textfatleft"><span class="sheet-textfatleft sheet-label" name="attr_lib_famille"></span></td>
<td colspan="3"><input class="sheet-nobox" name="attr_FAMILLE" type="text" title="@{FAMILLE}" /></td>
</tr>
<tr>
<td class="sheet-textfatleft"><span class="sheet-textfatleft sheet-label" name="attr_lib_origine"></span></td>
<td colspan="3"><input class="sheet-nobox" name="attr_RACE" type="text" title="@{RACE}" /></td>
</tr>
<tr>
<td class="sheet-textfatleft">Niveau</td>
<td style="text-align:left;"><input class="sheet-nobox" name="attr_NIVEAU" type="number" value="1" min="0"
title="@{NIVEAU}" /></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="vaisseau">Vaisseau</option>
</select>
</td>
</tr>
</table>
</div>
<div style="width: 120px; margin-left: 10px;">
<input type="checkbox" class="optional-block-switch" name="attr_physical" value="1" ><span></span>
<div class="optional-block">
<table>
<tr>
<td class="sheet-textfatleft">Sexe</td>
<td><input class="sheet-nobox" name="attr_SEXE" type="text" title="@{SEXE}" /></td>
</tr>
<tr>
<td class="sheet-textfatleft">Âge</td>
<td><input class="sheet-nobox" name="attr_AGE" type="text" title="@{AGE}" /></td>
</tr>
<tr>
<td class="sheet-textfatleft">Taille</td>
<td><input class="sheet-nobox" name="attr_TAILLE" type="text" title="@{TAILLE}" /></td>
</tr>
<tr>
<td class="sheet-textfatleft">Poids</td>
<td><input class="sheet-nobox" name="attr_POIDS" type="text" title="@{POIDS}" /></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="vaisseau"><span
title="Vaisseau"></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/ChroniquesGalactiques/cog_hr.png" />
<div class="sheet-tab-content sheet-tab1">
<div>
<!-- Caracs + combat + PV + défense -->
<table>
<tr>
<td style="width:250px; vertical-align: top;">
<!-- Caracs + Chance -->
<table class="sheet-tabsep">
<!-- Caracs -->
<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"
title="@{FOR_BONUS} Bonus au Test" value="@{FOR_BUFF}" 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&eacute;rit&eacute;"
value="@(togm}&{template:co1} {{perso=@{character_name}}} {{name=Dext&eacute;rit&eacute;}} {{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"
title="@{DEX_BONUS} Bonus au Test" value="@{DEX_BUFF}" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEX_TEST" title="@{DEX_TEST}"
value="@{DEX}+@{DEX_BONUS}" 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"
title="@{CON_BONUS} Bonus au Test" value="@{CON_BUFF}" 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"
title="@{INT_BONUS} Bonus au Test" value="@{INT_BUFF}" 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"
title="@{PER_BONUS} Bonus au Test" value="@{PER_BUFF}" 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"
title="@{CHA_BONUS} Bonus au Test" value="@{CHA_BUFF}" 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">
&nbsp;
<input type="radio" name="attr_ETATDE" value="20" title="@{ETATDE} Jet d'un d20 pour tous les tests"
checked>&nbsp;Normal</input>
&nbsp;
<input type="radio" name="attr_ETATDE" value="12"
title="@{ETATDE} Jet d'un d12 pour tous les tests">&nbsp;Affaibli</input>
&nbsp;
<input type="checkbox" name="attr_POISSE"
title="@{POISSE} Moins bon de deux d20 pour tous les tests" value="1" />&nbsp;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/ChroniquesGalactiques/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/ChroniquesGalactiques/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/ChroniquesGalactiques/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/ChroniquesGalactiques/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/ChroniquesGalactiques/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/ChroniquesGalactiques/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/ChroniquesGalactiques/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/ChroniquesGalactiques/master/cond_surpris.png" />
</button>
<br /><span name="attr_conditions" value=""></span>
</td>
</tr>
</table> <!-- FIN Caracs -->
<table class="sheet-tabsep" style="margin-top: 20px;">
<!-- Chance -->
<tr>
<td class="sheet-boxtitre" title="Points de Chance">
<button type="roll" class="sheet-boxtitre"
name="roll_jet_pc" title="%{jet_pc} Utilisation d'un PC"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Bonus}} {{name=Point de Chance}} {{desc=@{character_name} utilise un Point de Chance et obtient un bonus de +10}}" />PC
</td>
<td class="sheet-boxinput"><input type="number" style="width: 35px;" name="attr_PC" value="0"
title="@{PC} Points de Chance utilisés ou courants" /></td>
<td>/</td>
<td class="sheet-boxinput"><input type="number" style="width: 35px;" name="attr_PCRACE"
title="@{PCRACE}Points de Chance de Race" value="0" /></td>
<td>+</td>
<td class="sheet-boxinput"><input type="number" style="width: 35px;" name="attr_PCDIV"
title="@{PCDIV} Points de Chance additionnels" value="0" /></td>
<td>+</td>
<td class="sheet-boxinputlight"><INPUT type="number" style="width: 35px;" name="attr_PCCAR"
value="@{CHA}" title="@{PCCAR} Modificateur de Charisme" disabled /></td>
<td>=</td>
<td class="sheet-boxinputlight"><input type="number" style="width: 35px;" name="attr_PC_max"
value="@{PCRACE}+@{PCDIV}+@{PCCAR}" title="@{PC|max} Points de Chance maximums" disabled /></td>
</tr>
</table> <!-- FIN Chance -->
</td> <!-- FIN Caracs + Chance -->
<td style="width:100%; vertical-align: top;">
<!-- Combat + PV + défense -->
<table>
<tr>
<td style="vertical-align: top;">
<!-- 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: 120px;">
<button class="sheet-boxtitre" type="roll" name="roll_jet_init" title="%{jet_init} Jet d'initiative"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Initiative}} {{subtags=Combat}} {{carac=[[@{INIT}[Init.] + @{INIT_VAR}[Dé(s)] &{tracker}]]}}">
INITIATIVE</button></td>
<td>&nbsp;</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">
<input type="number" name="attr_INIT" value="0" hidden />
<span name="attr_INIT" style="font-style: italic;" title="@{INIT}"></span>
</td>
</tr>
<tr>
<td class="sheet-boxtitre" style="width: 120px;">
<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-boxinputlight"><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" size="1" title="@{ATKCAC_CARAC}">
<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: 120px;">
<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=&Agrave; Distance}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKTIR}]][Bonus] ]] }}">
&Agrave; DISTANCE</button></td>
<td class="sheet-boxinputlight"><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" size="1" title="@{ATKTIR_CARAC}">
<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>
<tr>
<td class="sheet-boxtitre" style="width: 120px;">
<button class="sheet-boxtitre" type="roll" name="roll_jet_psyinf" title="%{jet_psyinf} Jet d'attaque psychique : Influence"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Psychique (Influence)}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKPSYINFLU}]][Bonus] ]]}}">
PSY Influence</button></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_ATKPSY_BASE" value="0"
title="@{ATKPSY_BASE} Score de base" /></td>
<td class="sheet-boxinput">
<select class="sheet-carac" name="attr_ATKPSYINFLU_CARAC" title="@{ATKPSYINFLU_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_ATKPSYINFLU_DIV"
title="@{ATKPSYINFLU_DIV} Bonus divers" value="@{PSYINFLU_BUFF}" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_ATKPSYINFLU"
title="@{ATKPSYINFLU}" value="@{ATKPSY_BASE}+@{ATKPSYINFLU_CARAC}+@{ATKPSYINFLU_DIV}"
disabled /></td>
</tr>
<tr>
<td class="sheet-boxtitre" style="width: 120px;">
<button class="sheet-boxtitre" type="roll" name="roll_jet_psyint" title="%{jet_psyint} Jet d'attaque psychique : Intuition"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Psychique (Intuition)}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKPSYINTUI}]][Bonus] ]]}}">
PSY Intuition</button></td>
<td class="sheet-boxinputlight"><span name="attr_ATKPSY_BASE"
title="@{ATKPSY_BASE} Score de base"></span></td>
<td class="sheet-boxinput">
<select class="sheet-carac" name="attr_ATKPSYINTUI_CARAC" title="@{ATKPSYINTUI_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_ATKPSYINTUI_DIV"
title="@{ATKPSYINTUI_DIV} Bonus divers" value="@{PSYINTUI_BUFF}" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_ATKPSYINTUI"
title="@{ATKPSYINTUI}" value="@{ATKPSY_BASE}+@{ATKPSYINTUI_CARAC}+@{ATKPSYINTUI_DIV}"
disabled /></td>
</tr>
</table>
<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: 120px;">
<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 style="vertical-align: top;">
<!-- PV -->
<table class="sheet-tabsep">
<tr>
<td class="sheet-textfat" colspan="2">VITALIT&Eacute;</td>
</tr>
<tr>
<td class="sheet-boxtitre" style="width: 65px;">
<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&eacute; 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" style="width: 65px;">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 MAX" value="0" />
</td>
</tr>
<tr>
<td class="sheet-boxtitre" style="width: 65px;" title="Points de Récupération">
<button class="sheet-boxtitre" type="roll" name="roll_jet_pr" title="%{jet_pr} Jet de Récupération"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Récupération}} {{subtags=Vitalit&eacute;}} {{RECUP=[[1d@{DV}[DV] + @{NIVEAU}[Niveau] + [[@{CON}]][Mod. CON] ]]}}">
PR</button></td>
<td class="sheet-boxinput">
<input type="number" name="attr_PR" title="@{PR} Points de Récupération restants" value="0" />
/<input type="number" name="attr_PR_max" title="@{PR|max} Points de Récupération MAX" value="0" />
</td>
</tr>
<tr>
<td class="sheet-boxinputleft" colspan="2">
<span class="textbase">&nbsp;DM temporaires</span>&nbsp;
<input type="number" name="attr_DMTEMP" style="float: right;" title="@{DMTEMP} Dommages Temporaires" value="0" />
</td>
</tr>
<tr>
<td class="sheet-boxinputleft" colspan="2">
&nbsp;<input type="checkbox" name="attr_BLESSURE" title="@{BLESSURE} Gravement blessé"
value="1" />
<span class="textbase">Blessure grave</span>&nbsp;
<input type="number" name="attr_SEUILBG" style="float: right;" title="@{SEUILBG} Seuil de blessure grave"
value="0" />
</td>
</tr>
</table>
<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">Magie</td>
</tr>
<tr>
<td class="sheet-boxtitre" style="width: 65px;" title="Points de Mana (PM)">PM</td>
<td class="sheet-boxinput">
<input type="number" name="attr_PM" value="0" title="@{PM} Points de Mana" />
/<input type="number" name="attr_PM_max" value="0" title="@{PM|max} Points de Mana MAX" />
</td>
</tr>
</table>
</div>
</div>
</td> <!-- FIN PV -->
</tr>
<tr>
<td colspan="2" style="vertical-align: top;">
<!-- Défense -->
<table class="sheet-tabsep">
<tr>
<td colspan="2" class="sheet-textfat">D&Eacute;FENSES</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">
Bouclier
<input type="checkbox" name="attr_DEFBOUCLIERON" value="1" checked
title="@{DEFBOUCLIERON} Champ de force activé" />
</td>
<td class="sheet-textbase">Mod.</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">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-boxinput"><input type="number" name="attr_DEFBOUCLIER"
title="@{DEFBOUCLIER} Champ de force" value="0" /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEFCAR" value="@{DEX}"
title="@{DEFCAR} Modificateur de Dext&eacute;rit&eacute;" 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" style="font-style: italic;" title="@{DEF} Défense physique"></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 à toutes les actions et à l'Init. quand l'armure est portée."
min="0" value="0" /></td>
<td class="sheet-textbase" colspan="3">&nbsp;</td>
</tr>
<tr>
<td class="sheet-boxtitre">DEP</td>
<td class="sheet-boxinputlight">10+</td>
<td class="sheet-textbase">&nbsp;</td>
<td class="sheet-textbase">&nbsp;</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEPCAR" value="@{CHA}"
title="@{DEPCAR}Modificateur de Charisme" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEPDIV"
title="@{DEPDIV} Bonus divers" value="@{DEP_BUFF}" disabled /></td>
<td class="sheet-textbase">&nbsp;</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEP"
value="10+@{DEPCAR}+@{DEPDIV}" title="@{DEP} Défense Psychique" disabled /></td>
</tr>
<tr>
<td class="sheet-boxtitre" style="width: 70px;" title="Réduction(s) des DM">RD</td>
<td class="sheet-boxinput" colspan="7">
<textarea name="attr_RD" title="@{RD} Réduction des DM"
placeholder="Réduction des DM"></textarea>
</td>
</tr>
</table>
</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/ChroniquesGalactiques/cog_hr.png" />
<div>
<!-- Armes -->
<table class="sheet-tabsep" title="repeating_armes">
<tr>
<td class="sheet-textfatleft" style="width: 155px;">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: 210px;">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="attack">
<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}}} {{@{armeatt}[[@{armejetd}cs>@{armecrit}cf<@{armeinct}[Dé] + [[@{armeatk}]][Attaque] + [[@{armeatkdiv}]][Bonus] + (@{distance}) + (@{couvert}) + (@{visibilite}) + (@{armebuff}) ]]}} {{@{armedmg}[[[[@{armedmnbde}d@{armedmde}@{armedmrel}@{armedmvrel}]][Dé DM] + ([[@{tirhp}d@{armedmde}]])[Tir HP] + ([[@{armedmcar}]])[Mod.DM] + (@{armedmdiv})[Bonus DM] + (@{armebuffdm})]]}} {{dmtype=@{armedmtype}}} {{degats2=@{armedmg2}}} {{dm2type=@{armedm2_desc}}} {{special=@{armespec}}}" />
</td>
<td class="sheet-boxinputleft" style="min-width: 130px;">
<input type="text" name="attr_armenom" title="@{armenom}" style="font-weight: bold;"
placeholder="Arme/attaque" />
</td>
<td class="sheet-boxinputleft" style="min-width: 150px;">
<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="@{ATKPSYINFLU}">PSY Inf.</option>
<option value="@{ATKPSYINTUI}">PSY Int.</option>
<option value="@{ATKMAG}">MAGIQUE</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="Normaux">
<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>
<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">-</option>
<optgroup label="Mod. de base">
<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>
</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" title="@{armespec}"
placeholder="Notes, capacités spéciales, effet ..."
title="Notes, capacités spéciales, effet ..."></textarea>
</td>
</tr>
</table>
</div>
<div class="options">
<table class="sheet-tabsep">
<tr>
<td style="width: 18px;">&nbsp;</td>
<td class="sheet-boxinputleft" style="width: 270px;">
<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" style="width: 230px; font-weight: bold;"
placeholder="Nom de l'attaque" title="@{armejetn}" />
<select class="sheet-carac" style="width: 30px;" name="attr_armejetd" size="1"
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="@{JETSUP}">E - Expert (2 d20)</option>
</select>
</td>
<td class="sheet-boxinputleft" style="width: 32px;">
<input type="number" 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: 200px">
<input type="text" class="sheet-carac" style="width: 106px;" name="attr_armedmtype"
title="@{armedmtype}" placeholder="Type DM">
<select class="sheet-carac" style="width: 40px;" name="attr_armedmrel" size="1"
title="@{armedmrel} Relance dés de DM = (r)eroll -- 1 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" style="width: 50px;" name="attr_armedmvrel"
title="@{armedmvrel} Seuil de relance (relance les 1 si non indiqué)" />
</td>
<td class="sheet-boxinputleft" style="width: 200px;" colspan="2">
<input type="text" style="width: 50px;" name="attr_armedm2_de" placeholder="1d6"
title="@{armedm2_de}" />
<input type="text" style="width: 150px;" name="attr_armedm2_desc" placeholder="Electro-impact"
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/ChroniquesGalactiques/cog_hr.png" />
<div>
<table>
<tr>
<td class="sheet-textfat">Modificateurs d'Attaque</td>
<td class="sheet-textfat">Modificateurs de Dommages</td>
</tr>
<tr>
<td>
<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>
<input type="checkbox" name="attr_tirhp" title="@{tirhp}" value="1" />
&nbsp;<span>Tir à haute puissance (L)</span>
</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/ChroniquesGalactiques/cog_hr.png" />
</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&nbsp;<input type="checkbox" name="attr_setup_abilities"
title="Editer les capacités"></span>
</td>
</tr>
<tr>
<td class="sheet-boxtitresmall" style="width: 20px;">&nbsp;</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;">&nbsp;</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;">&nbsp;</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&nbsp;<input type="checkbox" name="attr_setup_abilities"
title="Editer les capacités"></span>
</td>
</tr>
<tr>
<td class="sheet-boxtitresmall" style="width: 20px;">&nbsp;</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;">&nbsp;</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;">&nbsp;</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%;">&nbsp;</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>&nbsp;(
<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>)&nbsp;+
<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>+&nbsp;(
<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>&nbsp;x&nbsp;
<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>)&nbsp;+
<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%;">
&nbsp;Voie :&nbsp;
<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>
&nbsp;Rang :&nbsp;
<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>&nbsp;</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>
<img class="sheet-imghr"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png" />
<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" title="%{repeating_traits_$N_pjtrait}" class="sheet-output"
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/ChroniquesGalactiques/cog_hr.png" />
<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%;"><input class="sheet-buff" type="text" name="attr_FOR_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;"><input class="sheet-buff" type="text" name="attr_DEX_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;"><input class="sheet-buff" type="text" name="attr_CON_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;"><input class="sheet-buff" type="text" name="attr_INT_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;"><input class="sheet-buff" type="text" name="attr_PER_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;"><input class="sheet-buff" type="text" name="attr_CHA_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;"><input class="sheet-buff" type="text" name="attr_ATKCAC_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;"><input class="sheet-buff" type="text" name="attr_ATKTIR_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;">PSYInf.:</td>
<td style="width: 90%;"><input class="sheet-buff" type="text" name="attr_PSYINFLU_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></td>
<td style="width: 5%;"><input class="sheet-buff" type="number" name="attr_PSYINFLU_BUFFS"
value="@{PSYINFLU_BUFF}" disabled /></td>
</tr>
<tr>
<td style="width: 5%;">PSYInt.:</td>
<td style="width: 90%;"><input class="sheet-buff" type="text" name="attr_PSYINTUI_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></td>
<td style="width: 5%;"><input class="sheet-buff" type="number" name="attr_PSYINTUI_BUFFS"
value="@{PSYINTUI_BUFF}" disabled /></td>
</tr>
<tr>
<td style="width: 5%;">MAG.:</td>
<td style="width: 90%;"><input class="sheet-buff" type="text" name="attr_ATKMAG_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;"><input class="sheet-buff" type="text" name="attr_INIT_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;"><input class="sheet-buff" type="text" name="attr_DEF_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></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%;">DEFPsy:</td>
<td style="width: 90%;"><input class="sheet-buff" type="text" name="attr_DEP_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." /></td>
<td style="width: 5%;"><input class="sheet-buff" type="number" name="attr_DEP_BUFFS" value="@{DEP_BUFF}"
disabled />
</td>
</tr>
<tr>
<td style="width: 5%;">PV:</td>
<td style="width: 90%;">
<input class="sheet-buff" type="text" name="attr_PV_BUFF_LIST"
placeholder="<Type> : <Valeur>; <Type> <Valeur>..." />
</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/ChroniquesGalactiques/cog_hr.png" />
</div>
<div class="sheet-tab-content sheet-tab3">
<div>
<!-- Equipement et règles optionnelles -->
<div class="sheet-2colrow">
<div class="sheet-col" title="repeating_equipement">
<div class="sheet-boxtitre">&Eacute;QUIPEMENT</div>
<div class="sheet-boxinputleft">
<span class="textbase">Crédits&nbsp;:</span>&nbsp;
<input type="text" style="width:180px;" name="attr_BOURSE" title="@{BOURSE}" placeholder="Rien ? C'est la pauvreté !" />
Enc. Total :&nbsp;
<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>
<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}" /> &nbsp;
<span class="sheet-textbase">Valeur :</span>
<input type="number" name="attr_res-nbr" value="1" title="@{res-val}" />
</div>
</fieldset>
</div>
</div>
<img class="sheet-imghr"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png" />
<div class="sheet-2colrow">
<div class="sheet-col">
<table>
<tr>
<td class="sheet-boxtitre">&Eacute;QUIPEMENT : Divers</td>
</tr>
<tr>
<td class="sheet-boxinputleft"><textarea name="attr_equip-div" style="height:15em;"
title="@{equip-div}"></textarea></td>
</tr>
</table>
</div>
<div class="sheet-col">
<table>
<tr>
<td class="sheet-boxtitre">Notes</td>
</tr>
<tr>
<td class="sheet-boxinputleft"><textarea name="attr_notes" style="height:15em;"
title="@{notes}"></textarea></td>
</tr>
</table>
</div>
</div>
<img class="sheet-imghr"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png" />
</div> <!-- FIN Equipement et règles optionnelles -->
</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>Initiative variable :
<input type="checkbox" name="attr_INIT_VAR" title="@{INIT_VAR}" value="[[1d6!]]" />
</li>
<li>Compteur PC :
<select class="sheet-carac" style="width: 80px;" name="attr_pc_count" title="@{pc_count}">
<option value="R" selected>Restants</option>
<option value="U">Utilisés</option>
</select>
</li>
<li>Encombrement :
<input type="checkbox" name="attr_use_encombrement" title="@{use_encombrement} Gérer l'encombrement" value="1" />
</li>
<li>Progression 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>Magie (Space Fantasy) :
<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>
</ul>
</div> <!-- FIN Config -->
<img class="sheet-imghr"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png" />
</div>
</div>
<div class="sheet-tab-content sheet-fp2">
<input type="radio" name="attr_tabvaiss" class="sheet-tab sheet-tab1" value="caracs" checked="checked"><span
title="Caractéristiques"></span>
<input type="radio" name="attr_tabvaiss" 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/ChroniquesGalactiques/cog_hr.png" />
<div class="sheet-tab-content sheet-tab1">
<div>
<!-- Caracs + combat + PV + défense -->
<table>
<tr>
<td style="width:250px; vertical-align: top;">
<!-- Caracs + Chance -->
<table class="sheet-tabsep">
<!-- Caracs -->
<tr>
<td class="sheet-textfat">CARAC.</td>
<td class="sheet-textbase">Valeur</td>
<td class="sheet-textfat">Mod.</td>
<td class="sheet-textbase">PE</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_forv"
title="%{jet_forv} Jet de Puissance"
value="@(togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Test}} {{name=Salle des Machines (MOT)}} {{carac=[[1d20cs20cf1[Dé] +[[@{FOR_TEST}]][Puissance] +@{POSTE_MOT} ]] }} {{jet=Puissance}} {{desc=Mécano : @{POSTE_MOT_NOM}}}">
FOR</button></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 style="width: 20px;">
<input type="checkbox" class="sheet-ship-epbox" name="attr_for_1pe" title="@{for_1pe}" value="1" />
<input type="checkbox" class="sheet-ship-epbox" name="attr_for_2pe" title="@{for_2pe}" value="1" />
</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_FOR_BONUS"
title="@{FOR_BONUS} Bonus au Test" value="@{FOR_BUFF}" 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_dexv"
title="%{jet_dexv} Jet de Manoeuvrabilit&eacute;"
value="@(togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Test}} {{name= Poste de Pilotage (PIL)}} {{carac=[[1d20cs20cf1[Dé] +[[@{DEX_TEST}]][Manoeuvrabilit&eacute;] +@{POSTE_PIL} ]] }} {{jet=Manoeuvrabilit&eacute;}} {{desc=Pilote : @{POSTE_PIL_NOM}}}">
DEX</button></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 style="width: 20px;">
<input type="checkbox" class="sheet-ship-epbox" name="attr_dex_1pe" title="@{dex_1pe}" value="1" />
<input type="checkbox" class="sheet-ship-epbox" name="attr_dex_2pe" title="@{dex_2pe}" value="1" />
</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEX_BONUS"
title="@{DEX_BONUS} Bonus au Test" value="@{DEX_BUFF}" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEX_TEST" title="@{DEX_TEST}"
value="@{DEX}+@{DEX_BONUS}" disabled /></td>
</tr>
<tr>
<td class="sheet-boxtitre"><button class="sheet-boxtitre" type="roll" name="roll_jet_conv"
title="%{jet_conv} Jet de Coque"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Test}} {{name=Coque}} {{carac=[[1d20cs20cf1[Dé] + [[@{CON_TEST}]][Bonus] ]] }}">
CON</button></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>&nbsp;</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_CON_BONUS"
title="@{CON_BONS} Bonus au Test" value="@{CON_BUFF}" 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_intv"
title="%{jet_intv} Jet d'Ordinateurs de Vis&eacute;e"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Test}} {{name=Ordinateur de Visée}} {{carac=[[1d20cs20cf1[Dé] +[[@{INT_TEST}]][Bonus] ]] }}">
INT</button></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 style="width: 20px;">
<input type="checkbox" class="sheet-ship-epbox" name="attr_int_1pe" title="@{int_1pe}" value="1" />
<input type="checkbox" class="sheet-ship-epbox" name="attr_int_2pe" title="@{int_2pe}" value="1" />
</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_INT_BONUS"
title="@{INT_BONUS} Bonus au Test" value="@{INT_BUFF}" 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_perv"
title="%{jet_perv} Jet de Senseurs"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Test}} {{name=Senseurs (SEN)}} {{carac=[[1d20cs20cf1[Dé] +[[@{PER_TEST}]][Senseurs] +@{POSTE_SEN} ]] }} {{jet=Détection}} {{desc=Opérateur : @{POSTE_SEN_NOM}}}">
PER</button></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 style="width: 20px;">
<input type="checkbox" class="sheet-ship-epbox" name="attr_per_1pe" title="@{per_1pe}" value="1" />
<input type="checkbox" class="sheet-ship-epbox" name="attr_per_2pe" title="@{per_2pe}" value="1" />
</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_PER_BONUS"
title="@{PER_BONUS} Bonus au Test" value="@{PER_BUFF}" 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_chav"
title="%{jet_chav} Jet de Communications"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Test}} {{name=Communications (CHA)}} {{carac=[[1d20cs20cf1[Dé] + [[@{CHA_TEST}]][Comm.Systèmes] +@{POSTE_ORD} ]] }} {{jet=Ordinateur}} {{desc=Opérateur : @{POSTE_ORD_NOM}}}">
CHA</button></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 style="width: 20px;">
<input type="checkbox" class="sheet-ship-epbox" name="attr_cha_1pe" title="@{cha_1pe}" value="1" />
<input type="checkbox" class="sheet-ship-epbox" name="attr_cha_2pe" title="@{cha_2pe}" value="1" />
</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_CHA_BONUS"
title="@{CHA_BONUS} Bonus au Test" value="@{CHA_BUFF}" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_CHA_TEST" title="@{CHA_TEST}"
value="@{CHA}+@{CHA_BONUS}" disabled /></td>
</tr>
</table> <!-- FIN Caracs -->
<table class="sheet-tabsep" style="margin-top: 20px;">
<!-- Energie -->
<tr>
<td class="sheet-boxtitre" title="Points d'énergie">
<button class="sheet-boxtitre" type="roll" name="roll_jet_pe"
title="%{jet_pe} Jet de Répartition d'Energie"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Test}} {{name=Répartition d'Energie}} {{carac=[[1d20cs20cf1[Dé] + [[@{CHA_TEST}]][Comm.Systèmes] +@{POSTE_ORD} ]] vs [[10+@{PEV}]] | [[15+@{PEV}]] }} {{jet=Répartition}} {{desc=Opérateur : @{POSTE_ORD_NOM}}}">
PE</button>
</td>
<td class="sheet-boxinput"><input type="number" style="width: 35px;" name="attr_PEV" value="0"
title="@{PEV} Points d'énergie utilisés ou courants" /></td>
<td>/</td>
<td class="sheet-boxinputlight" style="min-width: 35px;">
<input type="hidden" name="attr_PEV_max" value="0">
<span name="attr_PEV_max" title="@{PEV_max} Points d'énergie maximums"></span>
</td>
<td>=</td>
<td class="sheet-boxinputlight">
<input type="number" name="attr_PEVBASE" style="width: 30px;" title="@{PEVBASE} Points d'énergie de base" value="@{NIVEAU}" disabled />
</td>
<td>+</td>
<td class="sheet-boxinputlight">
<input type="number" name="attr_PEVDIV" style="width: 30px;" title="@{PEVDIV} Points d'énergie additionnels" value="@{PEV_BUFF}" disabled /></td>
<td>+</td>
<td class="sheet-boxinputlight">
<input type="number" name="attr_PEVCAR" style="width: 30px;" title="@{PEVCAR} Mod. de puissance (FOR)" value="@{FOR}" disabled />
</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td colspan="4">- PE perdus</td>
<td class="sheet-boxinputlight">
<input type="number" style="width: 30px;" name="attr_PEV_DMG" value="0"
title="@{PEV_DMG} Points d'énergie perdus"/>
</td>
</tr>
</table> <!-- FIN Energie -->
</td> <!-- FIN Caracs + Chance -->
<td style="width:100%; vertical-align: top;">
<!-- Combat + PV + défense -->
<table>
<tr>
<td style="vertical-align: top;">
<!-- 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"><button class="sheet-boxtitre" type="roll" name="roll_jet_tirv"
title="%{jet_tirv} Jet d'attaque à distance"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=&Agrave; Distance}} {{subtags=Attaque}} {{attaque=[[1d20cs20cf1[Dé] + [[@{ATKTIRV}]][Bonus] ]] }}">
&Agrave; DISTANCE</button></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_ATKTIRV_BASE" value="@{NIVEAU}"
title="@{ATKTIRV_BASE} Score de base" disabled /></td>
<td class="sheet-boxinput">
<select class="sheet-carac" name="attr_ATKTIRV_CARAC" size="1" title="@{ATKTIRV_CARAC}">
<option value="@{INT}" selected>INT</option>
</select>
</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_ATKTIRV_DIV"
title="@{ATKTIRV_DIV} Bonus divers" value="@{ATKTIRV_BUFF}" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_ATKTIRV" title="@{ATKTIRV}"
value="@{ATKTIRV_BASE}+@{ATKTIRV_CARAC}+@{ATKTIRV_DIV}" disabled /></td>
</tr>
<tr>
<td class="sheet-boxtitre" title="Poste de pilotage (PIL)">Pilotage
<input type="checkbox" style="float: right;" name="attr_POSTE_PIL_OQP" title="@{POSTE_PIL_OQP} Poste PIL occupé" value="1">
</td>
<td class="sheet-boxinput" colspan="4">
<input type="text" style="width: 220px;" name="attr_POSTE_PIL_NOM" title="@{POSTE_PIL_NOM}"
placeholder="Nom du pilote" />
<input type="number" name="attr_POSTE_PIL_BONUS"
title="@{POSTE_PIL_BONUS} Rangs dans la Voie du Pilotage" />
</td>
</tr>
<tr>
<td class="sheet-boxtitre" title="Salle des machines (MOT)">Machines&nbsp;
<input type="checkbox" style="float: right;" name="attr_POSTE_MOT_OQP" title="@{POSTE_MOT_OQP} Salle MOT occupée" value="1">
</td>
<td class="sheet-boxinput" colspan="4">
<input type="text" style="width: 220px;" name="attr_POSTE_MOT_NOM" title="@{POSTE_MOT_NOM}"
placeholder="Nom du mécanicien" />
<input type="number" name="attr_POSTE_MOT_BONUS"
title="@{POSTE_MOT_BONUS} Rangs dans la Voie des Moteurs" />
</td>
</tr>
<tr>
<td class="sheet-boxtitre" title="Console des senseurs (SEN)">Senseurs&nbsp;
<input type="checkbox" style="float: right;" name="attr_POSTE_SEN_OQP" title="@{POSTE_SEN_OQP} Poste SEN occupé" value="1">
</td>
<td class="sheet-boxinput" colspan="4">
<input type="text" style="width: 220px;" name="attr_POSTE_SEN_NOM" title="@{POSTE_SEN_NOM}"
placeholder="Nom du scantech" />
<input type="number" name="attr_POSTE_SEN_BONUS"
title="@{POSTE_SEN_BONUS} Rangs dans la Voie de l'Electronique" />
</td>
</tr>
<tr>
<td class="sheet-boxtitre" title="Console du système (ORD)">Ordinateurs&nbsp;
<input type="checkbox" style="float: right;" name="attr_POSTE_ORD_OQP" title="@{POSTE_ORD_OQP} Poste ORD occupé" value="1">
</td>
<td class="sheet-boxinput" colspan="4">
<input type="text" style="width: 220px;" name="attr_POSTE_ORD_NOM" title="@{POSTE_ORD_NOM}"
placeholder="Nom de l'infotech" />
<input type="number" name="attr_POSTE_ORD_BONUS"
title="@{POSTE_ORD_BONUS} Rangs dans la Voie de l'Electronique" />
</td>
</tr>
<tr>
<td class="sheet-boxtitre"><button class="sheet-boxtitre" type="roll" name="roll_jet_initv"
title="%{jet_initv} Initiative"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{name=Initiative}} {{subtags=Combat}} {{carac=[[@{POSTE_PIL_OQP}[Pilote]*(@{INITV} + @{INIT_VAR})[Dé(s)] &{tracker}]]}}">
INITIATIVE</button></td>
<td>&nbsp;</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_INITV_CARAC"
title="@{INITV_CARAC}" value="@{DEX_TEST}" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_INITV_PIL"
title="@{INITV_PIL} Valeur de DEX du pilote" value="@{INIT_BUFF}" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_INITV" title="@{INITV}"
value="([[@{INITV_CARAC}]][Manoeuvrabilité]+[[@{INITV_PIL}]][DEX pilote])*[[@{POSTE_PIL_OQP}]][Poste de pilotage occupé]" disabled /></td>
</tr>
</table>
</td> <!-- FIN Combat -->
<td style="vertical-align: top;">
<!-- PV -->
<table class="sheet-tabsep">
<tr>
<td class="sheet-textfat" colspan="2">STRUCTURE</td>
</tr>
<tr>
<td class="sheet-boxtitre">DV</td>
<td class="sheet-boxinput">
<select class="sheet-carac" name="attr_DV" size="1" title="@{DV} D&eacute; de Structure">
<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_max"
title="@{PV|max} Points de Structure maximum" value="0" /></td>
</tr>
<tr>
<td class="sheet-boxinput" colspan="2">
<span class="textbase">PV restants</span>&nbsp;
<input type="number" name="attr_PV" title="@{PV} Points de Structure restants" value="0" />
</td>
</tr>
<tr>
<td class="sheet-boxinput" colspan="2">
<span class="textbase">DM temp.</span>&nbsp;
<input type="number" name="attr_DMTEMP" title="@{DMTEMP} Dommages EMP" value="0" />
</td>
</tr>
<tr>
<td class="sheet-boxtitre" title="Boucliers (réduction des dommages)">RD</td>
<td class="sheet-boxinput">
<input type="hidden" name="attr_RDE" value="0" />
(<span name="attr_RDE" title="@{RDE} Réduction des DM effective"></span>)
<input type="checkbox" name="attr_rd_1pe" title="@{rd_1pe} Ecrans chargés" value="1" />
<input type="number" name="attr_RD" style="width: 30px;"
title="@{RD} Ecrans déflecteurs" value="0" />
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
</td> <!-- FIN PV -->
</tr>
<tr>
<td colspan="2" style="vertical-align: top;">
<!-- Défense -->
<table class="sheet-tabsep">
<tr>
<td class="sheet-textfat">D&Eacute;FENSES</td>
<td>&nbsp;</td>
<td class="sheet-textbase">Mod.</td>
<td class="sheet-textbase">Pilote</td>
<td class="sheet-textbase">Mod. PER</td>
<td class="sheet-textbase">Scantech</td>
<td class="sheet-textfat">Total</td>
</tr>
<tr>
<td class="sheet-boxtitre">DEF (rapidité)</td>
<td class="sheet-boxinputlight">10+</td>
<td class="sheet-boxinputlight">DEX : <input type="number" name="attr_DEFVDEX" value="@{DEX_TEST}"
title="@{DEFVDEX} Bonus de Manoeuvrabilit&eacute;" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEFVPIL" value="@{POSTE_PIL_OQP}*(@{DEFVPIL_BUFF}+@{POSTE_PIL_BONUS})"
title="@{DEFVPIL} Bonus du Pilote" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEFVPER" value="@{PER_TEST}"
title="@{DEFVPER} Bonus de Senseurs" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEFVSEN" value="@{POSTE_SEN_OQP}*(@{DEFVSEN_BUFF}+@{POSTE_SEN_BONUS})"
title="@{DEFVSEN} Bonus du Scantech" disabled /></td>
<td class="sheet-boxinputlight"><span name="attr_DEFRAP" title="@{DEFRAP} D&eacute;fense (rapidit&eacute;)" /></td>
</tr>
<tr>
<td class="sheet-boxtitre">DEF (solidité)</td>
<td class="sheet-boxinputlight">10+</td>
<td class="sheet-boxinputlight">CON : <input type="number" name="attr_DEFVCON" value="@{CON}"
title="@{DEFVCON} Bonus de Coque" disabled /></td>
<td class="sheet-textbase">&nbsp;</td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEFVPER" value="@{PER_TEST}"
title="@{DEFVPER} Bonus de Senseurs" disabled /></td>
<td class="sheet-boxinputlight"><input type="number" name="attr_DEFVSEN" value="@{POSTE_SEN_OQP}*(@{DEFVSEN_BUFF}+@{POSTE_SEN_BONUS})"
title="@{DEFVSEN} Bonus du Scantech" disabled /></td>
<td class="sheet-boxinputlight"><span name="attr_DEFSOL" title="@{DEFSOL} D&eacute;fense (solidit&eacute;)" /></td>
</tr>
</table>
</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/ChroniquesGalactiques/cog_hr.png" />
<div>
<!-- Armes -->
<table class="sheet-tabsep" title="repeating_armesv">
<tr>
<td class="sheet-textfatleft" style="width:155px;">ARMES / ATTAQUES</td>
<td class="sheet-textbase" style="width:160px;">ATTAQUE</td>
<td class="sheet-textbase" style="width:20px;">CRIT.</td>
<td class="sheet-textbase" style="width:185px;">DM</td>
<td class="sheet-textbase">SPÉCIAL</td>
</tr>
</table>
<fieldset class="repeating_armesv">
<div class="attack">
<input class="options-flag" name="attr_armeoptflag" type="checkbox"
title="Montrer/cacher les options"><span>y</span>
<div>
<input type="hidden" name="attr_armecan" value="0" />
<table class="sheet-tabsep">
<tr>
<td>
<button type="roll" class="sheet-neutre" name="roll_vatk" title="%{repeating_armesv_$N_vatk}"
value="@{togm}&{template:co1} {{perso=@{character_name}}} {{subtags=Tir}} {{name=@{armenom}}} {{desc=@{armecan_nom}}} {{text=@{armejetn}}} {{@{armeatt}[[@{armejetd}cs>@{armecrit}cf<@{armeinct}[Dé] + [[@{armeatk}]][Attaque] + @{armecan} + @{armeatkdiv}[Bonus] ]]}} {{@{armedmg}[[@{armedmnbde}d@{armedmde}[Dé DM] + [[@{armedmcar}]][Mod.DM] + @{armedmdiv}[Bonus DM] ]]}} {{special=@{armespec}}}" />
</td>
<td class="sheet-boxinputleft" style="min-width: 140px;">
<input type="text" name="attr_armenom" title="@{armenom}" style="font-weight: bold;"
placeholder="Arme/attaque" />
</td>
<td class="sheet-boxinputleft" style="min-width: 135px;">
<input type="checkbox" name="attr_armeatt" title="@{armeatt}" value="attaque=" checked="checked" />
<select class="sheet-carac" style="width: 87px;" name="attr_armeatk" title="@{armeatk}" size="1">
<option value="@{ATKTIRV}" selected>DISTANCE</option>
</select>+<input type="number" style="width:32px;" name="attr_armeatkdiv" value="0"
title="@{armeatkdiv} Bonus d'attaque divers" />
</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}" 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">
<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>
</select>+<select class="sheet-carac" style="width:52px;" name="attr_armedmcar" size="1"
title="@{armedmcar} Modificateur aux dommages">
<option value="0">-</option>
<option value="@{FOR_TEST}" selected>FOR</option>
</select>+<input type="number" style="width:32px;" name="attr_armedmdiv" value="0"
title="@{armedmdiv} Bonus de dommage divers" />
</td>
<td class="sheet-boxinputleft" style="width:100%;">
<textarea name="attr_armespec" title="@{armespec}"
placeholder="Notes, capacités spéciales, effet ..."
title="@{armespec} Notes, capacités spéciales, effet ..."></textarea>
</td>
</tr>
</table>
</div>
<div class="options">
<table class="sheet-tabsep">
<tr>
<td style="width: 18px;">&nbsp;</td>
<td class="sheet-boxinputleft" style="width: 272px;">
<input type="text" name="attr_armejetn" style="width: 255px; font-weight: bold;"
placeholder="Nom de l'attaque" title="@{armejetn}" />
<select class="sheet-carac" style="width: 30px;" name="attr_armejetd" size="1"
title="@{armejetd} Jet d'attaque : 'Risque' = avec d12, 'Expert' = meilleur de deux d20">
<option value="1d20" selected>Normal</option>
<option value="1d12">Risque (d12)</option>
<option value="2d20kh1">Expert (2 d20)</option>
</select>
</td>
<td class="sheet-boxinputleft" style="width: 32px;">
<input type="number" 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: 250px;">
<input type="checkbox" name="attr_armecan_oqp" title="@{armecan_oqp} Poste CAN occupé" value="1" />
<input type="text" style="width: 220px;" name="attr_armecan_nom"
title="@{armecan_nom} Nom du canonnier (CAN)" />
<input type="number" style="width: 32px;" name="attr_armecan_bonus"
title="@{armecan_bonus} Rang armes lourdes (CAN)" value="0" />
</td>
<td>&nbsp;</td>
</tr>
</table>
</div>
</div>
</fieldset>
</div>
<img class="sheet-imghr"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png" />
<div class="sheet-2colrow">
<div class="sheet-col">
<table>
<tr>
<td class="sheet-boxtitre">Equipage</td>
</tr>
<tr>
<td class="sheet-boxinputleft"><textarea name="attr_equipage" style="height:10em;"
title="@{equipage}"></textarea></td>
</tr>
</table>
</div>
<div class="sheet-col">
<table>
<tr>
<td class="sheet-boxtitre">Cargo
<input style="float: right;" type="number" name="attr_cargo" value="0" />
</td>
</tr>
<tr>
<td class="sheet-boxinputleft"><textarea name="attr_cargo_notes" style="height:10em;"
title="@{cargo_notes}"></textarea></td>
</tr>
</table>
</div>
</div>
<img class="sheet-imghr"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png" />
</div>
<div class="sheet-tab-content sheet-tab2">
<div class="sheet-row">
<!-- Config -->
<ul>
<li><span class="textbase">Jets</span>&nbsp;
<select class="sheet-carac" style="width: 90px;" name="attr_togm" title="@{togm}">
<option value="" selected>Publics</option>
<option value="/w gm ">Cachés</option>
</select>
</li>
<li><span class="textbase">Initiative variable</span>&nbsp;
<input type="checkbox" name="attr_INIT_VAR" title="@{INIT_VAR}" value="[[1d6!]]" />
</li>
</ul>
</div> <!-- FIN Config -->
<img class="sheet-imghr"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png" />
<div class="sheet-row">
<!-- BUFFS -->
<div class="sheet-textfatleft">BUFFS</div>
<table class="sheet-tabsep">
<tr>
<td style="width: 5%;">FOR:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_FOR_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_FOR_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_FOR_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_FOR_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_FOR_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_FOR_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_FOR_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_FOR_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_FOR_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_FOR_BUFF5" />
</td>
</tr>
<tr>
<td style="width: 5%;">DEX:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEX_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_DEX_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEX_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_DEX_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEX_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_DEX_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEX_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_DEX_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEX_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_DEX_BUFF5" />
</td>
</tr>
<tr>
<td style="width: 5%;">CON:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_CON_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_CON_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_CON_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_CON_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_CON_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_CON_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_CON_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_CON_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_CON_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_CON_BUFF5" />
</td>
</tr>
<tr>
<td style="width: 5%;">INT:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_INT_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_INT_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_INT_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_INT_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_INT_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_INT_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_INT_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_INT_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_INT_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_INT_BUFF5" />
</td>
</tr>
<tr>
<td style="width: 5%;">PER:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_PER_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_PER_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_PER_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_PER_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_PER_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_PER_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_PER_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_PER_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_PER_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_PER_BUFF5" />
</td>
</tr>
<tr>
<td style="width: 5%;">CHA:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_CHA_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_CHA_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_CHA_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_CHA_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_CHA_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_CHA_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_CHA_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_CHA_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_CHA_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_CHA_BUFF5" />
</td>
</tr>
<tr>
<td style="width: 5%;">ATD:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_ATKTIRV_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_ATKTIRV_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_ATKTIRV_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_ATKTIRV_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_ATKTIRV_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_ATKTIRV_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_ATKTIRV_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_ATKTIRV_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_ATKTIRV_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_ATKTIRV_BUFF5" />
</td>
</tr>
<tr>
<td style="width: 5%;">INIT:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_INIT_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_INIT_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_INIT_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_INIT_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_INIT_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_INIT_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_INIT_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_INIT_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_INIT_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_INIT_BUFF5" />
</td>
</tr>
<tr>
<td style="width: 5%;">PIL:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEFVPIL_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_DEFVPIL_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEFVPIL_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_DEFVPIL_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEFVPIL_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_DEFVPIL_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEFVPIL_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_DEFVPIL_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEFVPIL_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_DEFVPIL_BUFF5" />
</td>
</tr>
<tr>
<td style="width: 5%;">SEN:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEFVSEN_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_DEFVSEN_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEFVSEN_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_DEFVSEN_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEFVSEN_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_DEFVSEN_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEFVSEN_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_DEFVSEN_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_DEFVSEN_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_DEFVSEN_BUFF5" />
</td>
</tr>
<tr>
<td style="width: 5%;">PE:</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_PEV_BUFF1_DESC" /><input
class="sheet-buff" type="number" name="attr_PEV_BUFF1" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_PEV_BUFF2_DESC" /><input
class="sheet-buff" type="number" name="attr_PEV_BUFF2" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_PEV_BUFF3_DESC" /><input
class="sheet-buff" type="number" name="attr_PEV_BUFF3" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_PEV_BUFF4_DESC" /><input
class="sheet-buff" type="number" name="attr_PEV_BUFF4" />
</td>
<td style="width: 19%;">
<input class="sheet-buff" style="width: 70%;" type="text" name="attr_PEV_BUFF5_DESC" /><input
class="sheet-buff" type="number" name="attr_PEV_BUFF5" />
</td>
</tr>
</table>
</div>
</div>
</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/ChroniquesGalactiques/cog_hr.png" />
<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: 25%;">
<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;" 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: 25%;">
<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;" 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: 25%;">
<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;" 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">&nbsp;</div>
<div class="sheet-3colrow">
<div class="sheet-col" style="width: 25%;">
<div class="sheet-boxtitre"><button class="sheet-boxtitre" type="roll" name="roll_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;" 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: 25%;">
<div class="sheet-boxtitre"><button class="sheet-boxtitre" type="roll" name="roll_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;" 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: 25%;">
<div class="sheet-boxtitre"><button class="sheet-boxtitre" type="roll" name="roll_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;" 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">&nbsp;</div>
<div class="sheet-3colrow">
<div class="sheet-col" style="width: 25%;">
<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: 25%;">
<div class="sheet-boxtitre">DEF / DEP</div>
<div class="sheet-boxinput">
<input class="sheet-carac" name="attr_pnj_def" type="number" title="@{pnj_def}" />&nbsp;/
<input class="sheet-carac" name="attr_pnj_dep" type="number" title="@{pnj_dep}" />
</div>
</div>
<div class="sheet-col" style="width: 25%;">
<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">&nbsp;</div>
<img class="sheet-imghr-up"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png" />
<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}"
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" selected>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!">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">&nbsp;</div>
<img class="sheet-imghr-up"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png" />
<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}"
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">&nbsp;</div>
<img class="sheet-imghr-up"
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png" />
<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>
<textarea name="attr_sbresult" style="border: 1px solid; height: 5em;"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-tab-content sheet-tab2">
<div class="sheet-3colrow">
<div class="sheet-col">
<span class="textbase">Jets</span>&nbsp;
<select class="sheet-carac" style="width: 80px;" name="attr_pnj_togm" title="@{pnj_togm}" size="1">
<option value="" selected>Normaux</option>
<option value="/w gm ">Cachés</option>
</select>
</div>
<div class="sheet-col">
<span class="textbase">Initiative variable</span>&nbsp;<input type="checkbox" name="attr_pnj_init_var"
title="@{pnj_init_var}" value="[[1d6!]]" />
</div>
</div>
<div class="sheet-col"></div>
</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/ChroniquesGalactiques/cog_hr.png" />
</td>
</tr>
{{#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}}
{{#RECUP}}
<tr>
<td class="tcat">PV récupérés</td>
<td>{{RECUP}}</td>
</tr>
{{/RECUP}}
{{#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>&nbsp;[Incident de tir](~target|incident_tir)
</td>
</tr>
{{/rollWasFumble() attaque}}
<tr>
<td class="tcat">Jet </td>
<td>{{attaque}}</td>
</tr>
{{#degats}}
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<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/ChroniquesGalactiques/cog_hr.png" />
</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}`);
}
}
/**
* 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 to an NPC object
* @param {object} npcObj
* @param {object} traitObj
*/
function addTrait(npcObj, traitObj) {
if (traitObj['nom'] !== '' && traitObj['desc'] !== '') {
if (!npcObj['Capas']) npcObj['Capas'] = [];
npcObj['Capas'].push(`${traitObj['nom']}~${traitObj['desc']}`);
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,
DEF: 0,
DEP: 0,
Atks: [],
Capas: [],
Extras: [],
};
npc['ATP-PER'] = 0;
npc['ATP-CHA'] = 0;
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(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 ')) {
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(/ATP \(/g, 'ATP-');
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.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) {
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.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] +
'"';
}
}
for (let attr of ['ATP-PER', 'ATP-CHA']) {
if (pnjObj[attr] !== 0) {
newRowID = generateRowID();
let atkRow = {};
atkRow[`repeating_pnjatk_${newRowID}_atkatt`] = 'attaque=';
if (attr === 'ATP-PER') {
atkRow[`repeating_pnjatk_${newRowID}_atknom`] = 'Psy Intuition';
} else if (attr === 'ATP-CHA') {
atkRow[`repeating_pnjatk_${newRowID}_atknom`] = 'Psy Influence';
} else {
continue;
}
atkRow[`repeating_pnjatk_${newRowID}_atkjet`] = '1d20';
atkRow[`repeating_pnjatk_${newRowID}_atkbonus`] = parseInt(pnjObj[attr]);
atkRow[`repeating_pnjatk_${newRowID}_atkcrit`] = '20';
atkRow[`repeating_pnjatk_${newRowID}_atkdmg`] = '0';
atkRow[`repeating_pnjatk_${newRowID}_atkdmnbde`] = 0;
atkRow[`repeating_pnjatk_${newRowID}_atkdmde`] = '';
atkRow[`repeating_pnjatk_${newRowID}_atkdmbonus`] = 0;
consoleLog(atkRow, 'adding attack');
setAttrs(atkRow);
}
delete pnjObj[attr];
}
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',
],
function (values) {
let caracs = {
FOR: 0,
DEX: 0,
CON: 0,
INT: 0,
PER: 0,
CHA: 0,
};
for (let car in values) {
let vcar = values[car];
if (vcar && !isNaN(vcar)) vcar = parseInt(vcar) || 0;
let mod = car.substring(0, 3);
if (caracs.hasOwnProperty(mod))
caracs[mod] = Math.floor((vcar - 10) / 2);
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.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),
});
}
);
}
/**
* Sheet migrations
*/
function migrateSheet(verfdp) {
if (verfdp.major === 0) {
// Version 1.6 vers 1.7
getAttrs(
['FOR_SUP', 'DEX_SUP', 'CON_SUP', 'INT_SUP', 'PER_SUP', 'CHA_SUP'],
function (jets) {
var sfor,
sdex,
scon,
sint,
sper,
scha = '';
if (jets.FOR_SUP == '2') {
sfor = '@{JETSUP}';
} else {
sfor = '@{JETNORMAL}';
}
if (jets.DEX_SUP == '2') {
sdex = '@{JETSUP}';
} else {
sdex = '@{JETNORMAL}';
}
if (jets.CON_SUP == '2') {
scon = '@{JETSUP}';
} else {
scon = '@{JETNORMAL}';
}
if (jets.INT_SUP == '2') {
sint = '@{JETSUP}';
} else {
sint = '@{JETNORMAL}';
}
if (jets.PER_SUP == '2') {
sper = '@{JETSUP}';
} else {
sper = '@{JETNORMAL}';
}
if (jets.CHA_SUP == '2') {
scha = '@{JETSUP}';
} else {
scha = '@{JETNORMAL}';
}
setAttrs({
FOR_SUP: sfor,
DEX_SUP: sdex,
CON_SUP: scon,
INT_SUP: sint,
PER_SUP: sper,
CHA_SUP: scha,
VERSION: '2.0',
});
}
);
}
if (verfdp.major < 3) {
// version 2.0 > 3.0
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,
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,
ATKTIRV_BUFF: 0,
VERSION: '3.0',
});
}
);
}
if (verfdp.major == 3 && verfdp.minor < 4) {
// version 3.3 > 3.4
getAttrs(['TRAITS'], function (values) {
var traits = values.TRAITS.split(':');
if (traits.length >= 2) {
newRowID = generateRowID();
var traitRow = {};
traitRow[
'repeating_traits_' + newRowID + '_traitnom'
] = traits[0].trim();
traitRow['repeating_traits_' + newRowID + '_traittype'] =
'Race / Humain';
traits.splice(0, 1);
traitRow['repeating_traits_' + newRowID + '_traitdesc'] = traits
.join(':')
.trim();
setAttrs(traitRow);
setAttrs({ VERSION: '3.4' });
}
});
}
if (verfdp.major == 3 && verfdp.minor < 5) {
// version 3.4 > 3.5
const attrList = [
'FOR',
'DEX',
'CON',
'INT',
'PER',
'CHA',
'ATKCAC',
'ATKTIR',
'PSYINFLU',
'PSYINTUI',
'INIT',
'DEF',
'DEP',
];
for (let a = 0; a < attrList.length; a++) {
let attr = attrList[a];
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: '3.5' });
}
if (verfdp.major == 3 && verfdp.minor < 9) {
// version 3.50 > 3.90
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',
'PSYINFLU_BUFF_LIST',
'PSYINTUI_BUFF_LIST',
'INIT_BUFF_LIST',
'DEF_BUFF_LIST',
'DEP_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',
PSYINFLU_BUFF_LIST: 'PSYINF',
PSYINTUI_BUFF_LIST: 'PSYINT',
INIT_BUFF_LIST: 'INIT',
DEF_BUFF_LIST: 'DEF',
DEP_BUFF_LIST: 'DEP',
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 (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);
}
}
);
}
if (verfdp.major == 3 && verfdp.minor < 91) {
// version 3.90 > 3.91
getSectionIDs('repeating_materiel', function (ids) {
for (const id of ids) {
getAttrs([`repeating_materiel_${id}_mater-nom`], 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);
});
}
});
}
if (verfdp.major == 3 && verfdp.minor < 92) {
// version 3.91 > 3.92
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);
});
}
if (verfdp.major == 3 && verfdp.minor < 110) {
getAttrs(['type_personnage'], function (value) {
const physical = value.type_personnage === 'vaisseau' ? '0' : '1';
attrs = { physical: physical };
if (value.type_personnage === 'vaisseau') attrs.lib_profil = 'Classe';
if (value.type_personnage === 'vaisseau') attrs.lib_famille = 'Taille';
setAttrs(attrs);
});
}
if (verfdp.major == 3 && verfdp.minor < 112) {
getAttrs(['type_personnage'], function (value) {
if (value.type_personnage === 'vaisseau') updateShipDEF();
});
}
if (verfdp.major == 3 && verfdp.minor < 114) {
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 == 2020 && verfdp == 525) {
const verfdp = parseSemVer(values.VERFDP);
}
if (
verfdp.major < newver.major ||
verfdp.minor < newver.minor ||
verfdp.patch < newver.patch
) {
migrateSheet(verfdp);
}
});
// Activer Buffs PSY ou de vaisseau
getAttrs(
[
'UNIVERS',
'type_personnage',
'PE_ONCE',
'FOR_BUFF1_DESC',
'DEX_BUFF1_DESC',
'INT_BUFF1_DESC',
'PER_BUFF1_DESC',
'CHA_BUFF1_DESC',
'ATKTIRV_BUFF1_DESC',
'INIT_BUFF1_DESC',
'DEFVPIL_BUFF1_DESC',
'DEFVPIL_BUFF2_DESC',
'DEFVSEN_BUFF1_DESC',
'DEFVSEN_BUFF2_DESC',
],
function (values) {
if (values.UNIVERS == 'CG') {
if (values.type_personnage == 'vaisseau' && values.PE_ONCE !== '') {
const for_buff_desc = values.FOR_BUFF1_DESC || values.PE_ONCE;
const dex_buff_desc = values.DEX_BUFF1_DESC || values.PE_ONCE;
const int_buff_desc = values.INT_BUFF1_DESC || values.PE_ONCE;
const per_buff_desc = values.PER_BUFF1_DESC || values.PE_ONCE;
const cha_buff_desc = values.CHA_BUFF1_DESC || values.PE_ONCE;
const atktirv_buff_desc = values.ATKTIRV_BUFF1_DESC || values.PE_ONCE;
const init_buff_desc = values.INIT_BUFF1_DESC || 'Valeur DEX pilote';
const defvpil_buff1_desc =
values.DEFVPIL_BUFF1_DESC || 'Mod. DEX Pilote';
const defvsen_buff1_desc =
values.DEFVSEN_BUFF1_DESC || 'Mod. INT Scantech';
setAttrs({
FOR_BUFF1_DESC: for_buff_desc,
DEX_BUFF1_DESC: dex_buff_desc,
INT_BUFF1_DESC: int_buff_desc,
PER_BUFF1_DESC: per_buff_desc,
CHA_BUFF1_DESC: cha_buff_desc,
ATKTIRV_BUFF1_DESC: atktirv_buff_desc,
INIT_BUFF1_DESC: init_buff_desc,
DEFVPIL_BUFF1_DESC: defvpil_buff1_desc,
DEFVSEN_BUFF1_DESC: defvsen_buff1_desc,
PE_ONCE: '',
type_personnage: 'vaisseau',
});
}
}
}
);
// MAJ Version, LAST_PV
getAttrs(['verfdp', 'PV'], function (values) {
setAttrs({
VERSION: values.verfdp,
LAST_PV: values.PV,
});
});
// ARMURE_MALUS
getAttrs(['ARMURE_MALUS'], function (value) {
if (!value.ARMURE_MALUS) {
setArmorMalus();
}
});
// RANG_VOIE#
for (let voie = 1; voie <= 9; voie++) {
setRank(voie.toString());
}
// 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,
});
}
});
// encombrement (refresh)
encumbrance();
// CARACS
buildCaracs();
// update INIT
updateINIT();
// update DEF
updateDEF();
// update ship EP
updateShipEP();
});
/**
* On changing character name :
* - replace double quotes with guillemets
*/
on('change:character_name', function () {
getAttrs(['character_name'], function (values) {
var charName = values.character_name;
charName = charName.replace(/ "/g, ' «');
charName = charName.replace(/" /g, '» ');
setAttrs({ character_name: charName });
});
});
/**
* 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 bm = 1;
if (v.startsWith('-')) bm = -1;
if (v.indexOf('2[') !== -1) {
v = v.replace('2[', '[');
bm *= 2;
}
v = v.replace(/[\+\-\[\]]/g, '');
consoleLog(v);
if (isNaN(v)) {
// c'est une référence d'attribut
if (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
let vname = v.substring(5).toUpperCase();
let vfound = -1;
for (let vn = 0; vn < caracs.voies.length; vn++) {
if (caracs.voies[vn] === vname) {
vfound = vn;
break;
}
}
if (vfound > -1) bv = caracs.rangs[vfound];
} else {
// c'est un mod. de carac
bv = caracs[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 (let b = 0; b < buffs.length; b++) {
let buff = buffs[b];
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);
}
consoleLog(buffName);
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 mod = e.sourceAttribute.substring(0, 3).toUpperCase();
if (!caracs.includes(mod)) return;
const attrs = [
...caracs,
'ATKCAC',
'ATKTIR',
'PSYINTUI',
'PSYINFLU',
'INIT',
'DEF',
'DEP',
];
for (let a = 0; a < attrs.length; a++) {
attrs[a] = `${attrs[a]}_BUFF_LIST`;
}
attrs.unshift(mod);
getAttrs(attrs, function (values) {
let props = Object.keys(values);
for (let p = 1; p < props.length; p++) {
if (props[p].startsWith(props[0])) continue;
if (values[props[p]].indexOf(`[${props[0]}]`) !== -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', 'ARMURE_MALUS'], function (values) {
let initVal = 0;
initVal += parseInt(values.DEXTERITE) || 0;
initVal += parseInt(values.INIT_BUFF) || 0;
initVal -= parseInt(values.ARMURE_MALUS) || 0;
setAttrs({ INIT: initVal });
});
}
/**
* On changing the relevant attributes
* Update the INIT(iative) attribute
*/
on(
['change:dexterite', 'change:init_buff', 'change:armure_malus'].join(' '),
function () {
updateINIT();
}
);
/**
* Update the DEF(ense) attribute
*/
function updateDEF() {
getAttrs(
[
'DEFARMURE',
'DEFARMUREON',
'DEFBOUCLIER',
'DEFBOUCLIERON',
'DEXTERITE',
'DEF_BUFF',
'DEFACT',
],
function (values) {
let defVal = 10;
defVal +=
(parseInt(values.DEFARMURE) || 0) * (parseInt(values.DEFARMUREON) || 0);
defVal +=
(parseInt(values.DEFBOUCLIER) || 0) *
(parseInt(values.DEFBOUCLIERON) || 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:defbouclier',
'change:defbouclieron',
'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:psyinflu_buff_list', function () {
parseBuff('PSYINFLU');
});
on('change:psyintui_buff_list', function () {
parseBuff('PSYINTUI');
});
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:dep_buff_list', function () {
parseBuff('DEP');
});
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',
atm: 'atkmag',
cac: 'atkcac',
contact: 'atkcac',
cad: 'atktir',
distance: 'atktir',
mag: 'atkmag',
magie: 'atkmag',
psyint: 'psyintui',
psyinf: 'psyinflu',
tir: 'atktir',
initiative: 'init',
};
let buffs = {
for: '',
dex: '',
con: '',
int: '',
per: '',
cha: '',
atkcac: '',
atktir: '',
psyintui: '',
psyinflu: '',
atkmag: '',
init: '',
def: '',
dep: '',
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();
});
/**
* Spaceships Buffs
*/
function attrBuff(attr) {
let attrs = [];
for (let b = 1; b < 6; b++) {
attrs.push(`${attr}_BUFF${b}`);
}
return attrs;
}
function setBuff(v, buffAttr) {
let buffVal = 0;
for (let attr = 1; attr < 6; attr++) {
buffVal += parseInt(v[`${buffAttr}_BUFF${attr}`]) || 0;
}
let buff = {};
buff[`${buffAttr}_BUFF`] = buffVal;
setAttrs(buff);
}
on(
[
'change:for_buff1',
'change:for_buff2',
'change:for_buff3',
'change:for_buff4',
'change:for_buff5',
].join(' '),
function () {
getAttrs(attrBuff('FOR'), function (values) {
setBuff(values, 'FOR');
});
}
);
on(
[
'change:dex_buff1',
'change:dex_buff2',
'change:dex_buff3',
'change:dex_buff4',
'change:dex_buff5',
].join(' '),
function () {
getAttrs(attrBuff('DEX'), function (values) {
setBuff(values, 'DEX');
});
}
);
on(
[
'change:con_buff1',
'change:con_buff2',
'change:con_buff3',
'change:con_buff4',
'change:con_buff5',
].join(' '),
function () {
getAttrs(attrBuff('CON'), function (values) {
setBuff(values, 'CON');
});
}
);
on(
[
'change:int_buff1',
'change:int_buff2',
'change:int_buff3',
'change:int_buff4',
'change:int_buff5',
].join(' '),
function () {
getAttrs(attrBuff('INT'), function (values) {
setBuff(values, 'INT');
});
}
);
on(
[
'change:per_buff1',
'change:per_buff2',
'change:per_buff3',
'change:per_buff4',
'change:per_buff5',
].join(' '),
function () {
getAttrs(attrBuff('PER'), function (values) {
setBuff(values, 'PER');
});
}
);
on(
[
'change:cha_buff1',
'change:cha_buff2',
'change:cha_buff3',
'change:cha_buff4',
'change:cha_buff5',
].join(' '),
function () {
getAttrs(attrBuff('CHA'), function (values) {
setBuff(values, 'CHA');
});
}
);
on(
[
'change:atktirv_buff1',
'change:atktirv_buff2',
'change:atktirv_buff3',
'change:atktirv_buff4',
'change:atktirv_buff5',
].join(' '),
function () {
getAttrs(attrBuff('ATKTIRV'), function (values) {
setBuff(values, 'ATKTIRV');
});
}
);
on(
[
'change:init_buff1',
'change:init_buff2',
'change:init_buff3',
'change:init_buff4',
'change:init_buff5',
].join(' '),
function () {
getAttrs(attrBuff('INIT'), function (values) {
setBuff(values, 'INIT');
});
}
);
on(
[
'change:defvpil_buff1',
'change:defvpil_buff2',
'change:defvpil_buff3',
'change:defvpil_buff4',
'change:defvpil_buff5',
].join(' '),
function () {
getAttrs(attrBuff('DEFVPIL'), function (values) {
setBuff(values, 'DEFVPIL');
});
}
);
on(
[
'change:defvsen_buff1',
'change:defvsen_buff2',
'change:defvsen_buff3',
'change:defvsen_buff4',
'change:defvsen_buff5',
].join(' '),
function () {
getAttrs(attrBuff('DEFVSEN'), function (values) {
setBuff(values, 'DEFVSEN');
});
}
);
on(
[
'change:pev_buff1',
'change:pev_buff2',
'change:pev_buff3',
'change:pev_buff4',
'change:pev_buff5',
].join(' '),
function () {
getAttrs(attrBuff('PEV'), function (values) {
setBuff(values, 'PEV');
});
}
);
/**
* On changing the 'Blessure' checkbox
* - Set the ETATDE attribute (roll d20 or d12)
*/
on('change:blessure', function () {
getAttrs(['BLESSURE'], function (values) {
var etatde = values.BLESSURE == '1' ? '12' : '20';
setAttrs({
ETATDE: etatde,
});
});
});
/**
* On changing the 'POISSE' checkbox
* - Set the standard rolls
*/
on('change:poisse', function () {
getAttrs(['POISSE'], function (values) {
var jetn = values.POISSE == '1' ? '2d@{ETATDE}kl1' : '1d@{ETATDE}';
var jets = values.POISSE == '1' ? '1d@{ETATDE}' : '2d@{ETATDE}kh1';
var jetsh =
values.POISSE == '1' ? '2d@{ETATDE}kh1' : '{2d@{ETATDE}kh1, 0d20+10}kh1';
var 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) {
var seuilbg = parseInt(values.SEUILBG) || 0;
var max_pv = parseInt(values.PV_max) || 0;
var last_pv = parseInt(values.LAST_PV) || max_pv;
var curr_pv = parseInt(values.PV) || 0;
var 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 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'];
let otherAttrs = Object.keys(pnjObj);
consoleLog(otherAttrs, 'additional data');
for (const other in otherAttrs) {
divers += other + ' ' + pnjObj[other] + '\n';
}
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_dep',
'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_LIST'] = 'Bonus Init.';
attrs['INIT_BUFF'] = init - attrs[attr];
}
let defb = 10 + attrv;
let def = parseInt(values.pnj_def) || 0;
if (def !== defb) {
attrs['DEF_BUFF_LIST'] = 'Bonus DEF';
attrs['DEF_BUFF'] = def - defb;
}
attrs['DEX_SUP'] =
values['pnj_jetdex'] === '2d20kh1' ? '@{JDEXSUP}' : '@{JDEX}';
} else if (attr === 'CHARISME') {
let depb = 10 + attrv;
let dep = parseInt(values.pnj_dep) || 0;
if (dep !== depb) {
attrs['DEP_BUFF_LIST'] = 'Bonus DEP';
attrs['DEP_BUFF'] = dep - depb;
}
} 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 (let attr of npcAtkAttribs) {
v[attr] = values[`repeating_pnjatk_${id}_${attr}`] || '';
}
newRowID = generateRowID();
let atkRow = {};
atkRow[`repeating_armes_${newRowID}_armeatt`] = v['atkatt'];
atkRow[`repeating_armes_${newRowID}_armenom`] = v['atknom'];
let psyint = v['atknom'].toLowerCase().includes('psy intuition');
let psyinf = v['atknom'].toLowerCase().includes('psy influence');
let tohit = parseInt(v['atkbonus']) || 0;
let atk = 0;
let bdm = 0;
if (v['atkportee'] && v['atkportee'] !== '') {
atk = values.pnj_dex || 0;
if (psyint) atk = values.pnj_int || 0;
if (psyinf) atk = values.pnj_cha || 0;
atkRow[`repeating_armes_${newRowID}_armeatk`] = '@{ATKTIR}';
if (psyint)
atkRow[`repeating_armes_${newRowID}_armeatk`] =
'@{ATKPSYINTUI}';
if (psyinf)
atkRow[`repeating_armes_${newRowID}_armeatk`] =
'@{ATKPSYINFLU}';
atkRow[`repeating_armes_${newRowID}_armedmcar`] = '0';
} else {
atk = values.pnj_for || 0;
if (psyint) atk = values.pnj_int || 0;
if (psyinf) atk = values.pnj_cha || 0;
bdm = psyint || psyinf ? 0 : atk;
atkRow[`repeating_armes_${newRowID}_armeatk`] = '@{ATKCAC}';
if (psyint)
atkRow[`repeating_armes_${newRowID}_armeatk`] =
'@{ATKPSYINTUI}';
if (psyinf)
atkRow[`repeating_armes_${newRowID}_armeatk`] =
'@{ATKPSYINFLU}';
atkRow[`repeating_armes_${newRowID}_armedmcar`] =
psyint || psyinf ? '0' : '@{FOR}';
}
if (tohit !== atk)
atkRow[`repeating_armes_${newRowID}_armeatkdiv`] = tohit - atk;
atkRow[`repeating_armes_${newRowID}_armejetd`] = v['atkjet'];
atkRow[`repeating_armes_${newRowID}_armecrit`] = v['atkcrit'];
atkRow[`repeating_armes_${newRowID}_armedmg`] = v['atkdmg'];
atkRow[`repeating_armes_${newRowID}_armedmnbde`] = v['atkdmnbde'];
atkRow[`repeating_armes_${newRowID}_armedmde`] = v['atkdmde'];
let dmdiv = parseInt(v['atkdmbonus']) || 0;
if (dmdiv !== bdm)
atkRow[`repeating_armes_${newRowID}_armedmdiv`] = dmdiv - bdm;
atkRow[`repeating_armes_${newRowID}_armeportee`] = v['atkportee'];
atkRow[`repeating_armes_${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'], function (value) {
let attrs = { physical: '1' };
attrs.type_fiche = value.type_personnage;
if (value.type_personnage === 'pnj') attrs.pnj_togm = '/w gm ';
if (value.type_personnage === 'vaisseau') {
attrs.physical = '0';
attrs.lib_profil = 'Classe';
attrs.lib_famille = 'Taille';
}
setAttrs(attrs);
consoleLog(attrs);
});
});
/**
* Return attributes array for a starship station
* @param {string} attr Spaceship station shortname
*/
function attrStation(attr) {
return [`POSTE_${attr}_OQP`, `POSTE_${attr}_NOM`, `POSTE_${attr}_BONUS`];
}
/**
* Build hidden macro formulas for spaceship stations
* @param {array} v Attributes list
* @param {string} attr Spaceship station shortname
* @param {array} fill Fillers for attribute formulas
*/
function setStation(v, attr, fill) {
let station = {};
let attrx = '';
let attrn = '';
let attrb = '';
if (attr === 'CAN') {
attrx = 'repeating_armesv_armecan_oqp';
attrn = 'repeating_armesv_armecan_nom';
attrb = 'repeating_armesv_armecan_bonus';
} else {
attrx = `POSTE_${attr}_OQP`;
attrn = `POSTE_${attr}_NOM`;
attrb = `POSTE_${attr}_BONUS`;
}
let station_held = parseInt(v[attrx]) || 0;
let station_name = v[attrn] || '';
station_name = station_name != '' ? `@{${station_name}|${fill[0]}}` : '0';
let station_bonus = parseInt(v[attrb]) || 0;
let station_attr = '';
if (attr === 'CAN') {
station_attr = 'repeating_armesv_armecan';
} else {
station_attr = `POSTE_${attr}`;
}
station[
station_attr
] = `[[${station_name}*${station_held}]][${fill[1]}] + [[${station_bonus}*${station_held}]][${fill[2]}]`;
setAttrs(station);
}
/**
* On change of spaceship stations character names of bonus
* - Rebuild hidden macro formulas
*/
on(
[
'change:poste_pil_oqp',
'change:poste_pil_nom',
'change:poste_pil_bonus',
].join(' '),
function () {
getAttrs(attrStation('PIL'), function (values) {
setStation(values, 'PIL', ['DEX', 'DEX pilote', 'Pilotage']);
});
}
);
on(
[
'change:poste_mot_oqp',
'change:poste_mot_nom',
'change:poste_mot_bonus',
].join(' '),
function () {
getAttrs(attrStation('MOT'), function (values) {
setStation(values, 'MOT', ['INT', 'INT mécano', 'Moteurs']);
});
}
);
on(
[
'change:poste_sen_oqp',
'change:poste_sen_nom',
'change:poste_sen_bonus',
].join(' '),
function () {
getAttrs(attrStation('SEN'), function (values) {
setStation(values, 'SEN', [
'INT',
'INT scan',
'Electronique/Investigation',
]);
});
}
);
on(
[
'change:poste_ord_oqp',
'change:poste_ord_nom',
'change:poste_ord_bonus',
].join(' '),
function () {
getAttrs(attrStation('ORD'), function (values) {
setStation(values, 'ORD', ['INT', 'INT info', 'Electronique']);
});
}
);
on(
[
'change:repeating_armesv:armecan_oqp',
'change:repeating_armesv:armecan_nom',
'change:repeating_armesv:armecan_bonus',
].join(' '),
function () {
getAttrs(
[
'repeating_armesv_armecan_oqp',
'repeating_armesv_armecan_nom',
'repeating_armesv_armecan_bonus',
],
function (values) {
setStation(values, 'CAN', ['DEX', 'DEX canonnier', 'Armes lourdes']);
}
);
}
);
/**
* Rebuild starship DEFenses
*/
function updateShipDEF() {
getAttrs(
[
'DEXTERITE',
'DEX_BUFF',
'POSTE_PIL_OQP',
'DEFVPIL_BUFF',
'POSTE_PIL_BONUS',
'PERCEPTION',
'PER_BUFF',
'POSTE_SEN_OQP',
'DEFVSEN_BUFF',
'POSTE_SEN_BONUS',
'CONSTITUTION',
],
function (values) {
let defrap = 0;
let defsol = 0;
const mod_dex = getMod(values.DEXTERITE);
const dex_buff = parseInt(values.DEX_BUFF) || 0;
const poste_pil_oqp = parseInt(values.POSTE_PIL_OQP) || 0;
const defvpil_buff = parseInt(values.DEFVPIL_BUFF) || 0;
const poste_pil_bonus = parseInt(values.POSTE_PIL_BONUS) || 0;
const mod_per = getMod(values.PERCEPTION);
const per_buff = parseInt(values.PER_BUFF) || 0;
const poste_sen_oqp = parseInt(values.POSTE_SEN_OQP) || 0;
const poste_sen_bonus = parseInt(values.POSTE_SEN_BONUS) || 0;
const defvsen_buff = parseInt(values.DEFVSEN_BUFF) || 0;
const con = getMod(values.CONSTITUTION);
if (poste_pil_oqp !== 0) {
defrap =
10 +
mod_dex +
dex_buff +
defvpil_buff +
poste_pil_bonus +
mod_per +
per_buff +
poste_sen_oqp * (defvsen_buff + poste_sen_bonus);
}
defsol =
10 +
con +
mod_per +
per_buff +
poste_sen_oqp * (defvsen_buff + poste_sen_bonus);
setAttrs({ DEFRAP: defrap, DEFSOL: defsol });
}
);
}
on(
[
'change:dexterite',
'change:dex_buff',
'change:poste_pil_oqp',
'change:defvpil_buff',
'change:poste_pil_bonus',
'change:perception',
'change:per_buff',
'change:poste_sen_oqp',
'change:defvsen_buff',
'change:poste_sen_bonus',
'change:constitution',
].join(' '),
function () {
updateShipDEF();
}
);
/**
* Energy points management functions
*/
function updateShipEP() {
getAttrs(
['type_fiche', 'NIVEAU', 'PEV_BUFF', 'FORCE', 'PEV_DMG', 'PEV'],
function (values) {
if (values.type_fiche !== 'vaisseau') return;
const pev = parseInt(values.PEV) || 0;
let pev_max = 0;
pev_max += parseInt(values.NIVEAU) || 0;
pev_max += parseInt(values.PEV_BUFF) || 0;
pev_max += getMod(values.FORCE) || 0;
pev_max -= parseInt(values.PEV_DMG) || 0;
let chatmsg = '';
if (pev > pev_max) {
chatmsg = JSON.stringify({
template: {
id: 'co1',
props: [{ name: 'text', value: 'Trop de PE répartis' }],
},
});
}
setAttrs({ PEV_max: pev_max, chatmsg: chatmsg });
}
);
}
on(
['change:niveau', 'change:pev_buff', 'change:force', 'change:pev_dmg'].join(
' '
),
function () {
updateShipEP();
}
);
on(
[
'change:for_1pe',
'change:for_2pe',
'change:dex_1pe',
'change:dex_2pe',
'change:int_1pe',
'change:int_2pe',
'change:per_1pe',
'change:per_2pe',
'change:cha_1pe',
'change:cha_2pe',
'change:rd_1pe',
].join(' '),
function (eventInfo) {
getAttrs(
[
'RD',
'PEV_max',
'for_1pe',
'for_2pe',
'dex_1pe',
'dex_2pe',
'int_1pe',
'int_2pe',
'per_1pe',
'per_2pe',
'cha_1pe',
'cha_2pe',
'rd_1pe',
],
function (values) {
const pev_max = parseInt(values.PEV_max) || 0;
if (pev_max == 0) return;
delete values.PEV_max;
const base_rd = parseInt(values.RD) || 0;
delete values.RD;
let epts = { FOR: 0, DEX: 0, INT: 0, PER: 0, CHA: 0, RD: 0 };
let ep_total = 0;
for (const attr in values) {
const ep = parseInt(values[attr]) || 0;
ep_total += ep;
epts[attr.split('_')[0].toUpperCase()] += ep;
}
let attrs = {};
if (ep_total <= pev_max) {
attrs.PEV = ep_total;
} else {
const attr = eventInfo.sourceAttribute;
attrs[attr] = '0';
epts[attr.split('_')[0].toUpperCase()]--;
}
for (const attr in epts) {
attrs[`${attr}_BUFF1`] = epts[attr];
}
attrs.RDE = base_rd * epts.RD;
attrs.ATKTIRV_BUFF1 = attrs.INT_BUFF1;
setAttrs(attrs);
}
);
}
);
/**
* 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 rank = {};
rank[`RANG_VOIE${voie}`] = vr;
setAttrs(rank);
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');
}
);
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');
}
);
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');
}
);
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');
}
);
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');
}
);
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');
}
);
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');
}
);
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');
}
);
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');
}
);
/**
* Compute the armor malus
*/
function setArmorMalus() {
getAttrs(['DEFARMUREON', 'DEFARMUREMALUS'], function (values) {
let armure_on = values.DEFARMUREON || 0;
let armure_malus = values.DEFARMUREMALUS || 0;
setAttrs({
ARMURE_MALUS: armure_on * armure_malus,
});
});
}
/**
* On changing the armor attributes
* - Re-compute the armor malus
*/
on(
['change:defarmureon', 'change:defarmuremalus'].join(' '),
function (eventInfo) {
setArmorMalus();
}
);
/**
* 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 (eventInfo) {
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 (DM/2) | ${
portees * 3
}m (DM/3)`,
});
}
});
});
/**
* 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);
});
}
);
}
);
/**
* 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 });
}
}
);
}
});
}
/**
* On changing character equipment
* - Recompute character encumbrance
*/
on(
['change:repeating_equipement', 'remove:repeating_equipement'].join(' '),
function () {
encumbrance();
}
);
/**
* On changing equipment properties
* - Change DEF & RD for armor & shield
* - Add or remove attack line for a weapon
*/
on(
[
'change:repeating_equipement:equip-desc',
'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',
'DEFBOUCLIER',
'DEFBOUCLIERON',
'RD',
],
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 = {};
// parse properties
for (const prop of props.split(',')) {
const parsed = parseNameValue(prop);
const propName = parsed.name ? parsed.name.toUpperCase() : '';
// Armor DEF modifier
if (propName === 'DEF') {
const defAttr =
atkName.toUpperCase().indexOf('BOUCLIER') !== -1
? 'DEFBOUCLIER'
: 'DEFARMURE';
const propVal = parseInt(parsed.value) || 0;
attrs[`${defAttr}ON`] = eqpon;
if (eqpon === 1) {
if (propVal !== parseInt(values[defAttr])) {
attrs[defAttr] = propVal;
}
if (values[`${defAttr}MALUS`]) {
const defmalus = parseInt(values[`${defAttr}MALUS`]) || 0;
if (propVal !== defmalus) {
attrs[`${defAttr}MALUS`] = propVal;
}
}
}
}
// Armor malus
if (propName === 'DEF-') {
const defmalus = parseInt(values['DEFARMUREMALUS']) || 0;
if (propVal !== defmalus) {
attrs['DEFARMUREMALUS'] = propVal;
}
}
// Damage reduction
if (propName === 'RD') {
const rd = values['RD'];
const propVal = parseInt(parsed.value) || 0;
if (eqpon === 1) {
if (propVal !== rd) {
attrs['RD'] = 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}';
}
}
// Add/update attack line
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`] = '';
}
}
// Set all attributes
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', 'total_enc', 'seuil_enc'], function (values) {
let use_encombrement = values.use_encombrement === 1 ? true : false;
if (!use_encombrement) return;
let seuil_enc = parseInt(values.seuil_enc) || 0;
let 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
cond.ETATDE = '12'; // +Affaibli
} else if (encombrement > seuil_enc) {
cond.CONDITION = '';
cond.JDEX = '1d12';
cond.JDEXSUP = '2d12kh1';
cond.JDEXSUPHERO = '{2d12kh1, 0d12+10}kh1';
cond.JDEXRISQUE = '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();
encumbrance();
rebuildBuffs();
rebuildModAtkDM('repeating_modatk', 'armebuff');
rebuildModAtkDM('repeating_moddm', 'armebuffdm');
}
/**
* 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');
});
/**
* 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 (let 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(
[
'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;
if (
pcondition !== '' &&
(pcondition.includes(conditions.immobilise) ||
pcondition.includes(conditions.panique))
)
etatde = '20';
// check condition for die roll
if (
condition !== '' &&
(condition.includes(conditions.immobilise) ||
condition.includes(conditions.panique))
)
etatde = '12';
//
let displayConditions = '';
if (condition !== '') {
for (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,
CONDITION: condition,
PCONDITION: condition,
conditions: displayConditions,
});
}
);
}
);
/**
* Adjust total hit points based on attribute value change
* @param {string} attr Attribute name
*/
function hitPoints(attr) {
getAttrs(
[
'type_fiche',
'NIVEAU',
'DV',
'CONSTITUTION',
'PV_NIVEAU',
'PV_BUFF',
'prog_pv',
],
function (values) {
let niveau = parseInt(values.NIVEAU) || 0;
if (niveau === 0) return;
let dv = parseInt(values.DV) || 0;
if (dv === 0) return;
let constitution = parseInt(values.CONSTITUTION) || 0;
let modcon = 0;
if (constitution > 0) modcon = Math.floor((constitution - 10) / 2);
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;
if (values.type_fiche == 'vaisseau') {
pv_max = (dv + modcon) * niveau;
} else {
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) {
let niveau = parseInt(value.NIVEAU) || 0;
if (niveau > 0 && niveau <= 20) {
setAttrs({
NIVEAU: niveau + 1,
});
}
});
});
</script>
<!-- FIN SCRIPTS / SHEET WORKERS -->