12358 lines
434 KiB
HTML
12358 lines
434 KiB
HTML
<div class="sheet-mainBg">
|
|
<!-- FDP -->
|
|
<!-- INPUT HIDDEN Version FdP -->
|
|
<input type="hidden" name="attr_VERFDP" value="4.0" />
|
|
<input type="hidden" name="attr_VERSION" value="4.0" />
|
|
<!-- INPUT HIDDEN Univers (COF, CG, COC) -->
|
|
<input type="hidden" name="attr_UNIVERS" value="COG" />
|
|
<input type="hidden" name="attr_token_url" value="" />
|
|
<input type="hidden" name="attr_token_dsp" value="" />
|
|
<!-- 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_PHYSDE" value="20" />
|
|
<input type="hidden" name="attr_MENTDE" value="20" />
|
|
<!-- INPUT HIDDEN jets caracs physiques (FOR,CON)-->
|
|
<input type="hidden" name="attr_JPNORMAL" value="1d@{PHYSDE}" />
|
|
<input type="hidden" name="attr_JPSUP" value="2d@{PHYSDE}kh1" />
|
|
<input
|
|
type="hidden"
|
|
name="attr_JPSUPHERO"
|
|
value="{2d@{PHYSDE}kh1, 0d20+10}kh1"
|
|
/>
|
|
<input type="hidden" name="attr_JPRISQUE" value="1d12" />
|
|
<!-- INPUT HIDDEN jets DEX-->
|
|
<input type="hidden" name="attr_JDEX" value="1d@{PHYSDE}" />
|
|
<input type="hidden" name="attr_JDEXSUP" value="2d@{PHYSDE}kh1" />
|
|
<input
|
|
type="hidden"
|
|
name="attr_JDEXSUPHERO"
|
|
value="{2d@{PHYSDE}kh1, 0d20+10}kh1"
|
|
/>
|
|
<input type="hidden" name="attr_JDEXRISQUE" value="1d12" />
|
|
<!-- INPUT HIDDEN jets caracs mentales (INT,PER,CHA)-->
|
|
<input type="hidden" name="attr_JMNORMAL" value="1d@{MENTDE}" />
|
|
<input type="hidden" name="attr_JMSUP" value="2d@{MENTDE}kh1" />
|
|
<input
|
|
type="hidden"
|
|
name="attr_JMSUPHERO"
|
|
value="{2d@{MENTDE}kh1, 0d20+10}kh1"
|
|
/>
|
|
<input type="hidden" name="attr_JMRISQUE" 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_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 type="hidden" name="attr_POSTES_EQ" value="" />
|
|
<input type="hidden" name="attr_EQUIP_PIL" value="" />
|
|
<input type="hidden" name="attr_EQUIP_MOT" value="" />
|
|
<input type="hidden" name="attr_EQUIP_SEN" value="" />
|
|
<input type="hidden" name="attr_EQUIP_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="" />
|
|
<!-- INPUT HIDDEN Mecha crew bonus -->
|
|
<input type="hidden" name="attr_mec_crew_dex" value="0" />
|
|
<input type="hidden" name="attr_mec_crew_cha" value="0" />
|
|
<input type="hidden" name="attr_mec_crew_per" value="0" />
|
|
<!-- FIN Hidden -->
|
|
<div style="display: none">
|
|
<button
|
|
type="roll"
|
|
name="roll_incident_tir"
|
|
value="@{togm}&{template:co1} @{token_dsp} {{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="320px"
|
|
title="Version 4.0.0 - 30/12/2022"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog2_logo.png"
|
|
/>
|
|
<img width="90px" height="90px" name="attr_character_token" />
|
|
</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 class="sheet-txt-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>
|
|
<option value="mecha">Mécha</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div style="width: 120px; margin-left: 10px">
|
|
<input
|
|
type="checkbox"
|
|
class="sheet-block-switch"
|
|
style="display: none"
|
|
name="attr_physical"
|
|
value="1"
|
|
/>
|
|
<div class="sheet-block-hidden">
|
|
<div>
|
|
<input
|
|
type="checkbox"
|
|
class="sheet-block-switch"
|
|
style="display: none"
|
|
name="attr_vehicle_starship"
|
|
value="1"
|
|
/>
|
|
<div class="sheet-block-hidden">
|
|
<img
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/mecha.png"
|
|
/>
|
|
</div>
|
|
<div class="sheet-block-show">
|
|
<img
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/starship.png"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-block-show">
|
|
<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>
|
|
<input
|
|
type="radio"
|
|
name="attr_type_fiche"
|
|
class="sheet-hidden-tab sheet-fp4"
|
|
value="mecha"
|
|
/><span title="Mécha"></span>
|
|
<div class="sheet-tab-content sheet-fp1">
|
|
<img
|
|
class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png"
|
|
/>
|
|
<div class="sheet-3colrow">
|
|
<input type="hidden" name="attr_rof4" value="" />
|
|
<div class="sheet-col" style="text-align: center">
|
|
<input type="hidden" name="attr_sitbonus" value="" />
|
|
Situation :
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 150px"
|
|
name="attr_sitmod"
|
|
size="1"
|
|
>
|
|
<option value="-5">Défavorable (-5)</option>
|
|
<option value="-2">Gênante (-2)</option>
|
|
<option value="0" selected>Normale (+0)</option>
|
|
<option value="+2">Avantageuse (+2)</option>
|
|
<option value="+5">Favorable (+5)</option>
|
|
</select>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<input type="hidden" name="attr_matmod_desc" value="" />
|
|
<input type="hidden" name="attr_matmod" value="0" />
|
|
<input type="hidden" name="attr_matbonus" value="" />
|
|
Matériel : <span name="attr_matmod_desc"></span> / <span
|
|
name="attr_matmod"
|
|
></span>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<input type="hidden" name="attr_chcbonus" value="" />
|
|
Chance : <input type="checkbox" name="attr_chcmod" value="1" />
|
|
</div>
|
|
</div>
|
|
<br />
|
|
<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="min-width: 280px; vertical-align: top">
|
|
<!-- Caracs + Chance -->
|
|
<table class="sheet-tabsep">
|
|
<!-- Caracs -->
|
|
<tr>
|
|
<td class="sheet-textfat">CARAC.</td>
|
|
<td></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} @{token_dsp} {{perso=@{character_name}}} {{name=Force}} {{subtags=Test}} {{carac=[[@{FOR_SUP}[Dé] + [[@{FOR_TEST}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
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="@{JPNORMAL}" selected>N Normale</option>
|
|
<option value="@{JPSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JPSUPHERO}">
|
|
H Supérieure ET Héroïque
|
|
</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input
|
|
type="number"
|
|
name="attr_FOR"
|
|
title="@{FOR}"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_FOR_BUFF"
|
|
title="@{FOR_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_FOR_TEST" value="0" />
|
|
<span name="attr_FOR_TEST" title="@{FOR_TEST}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button
|
|
class="sheet-boxtitre"
|
|
type="roll"
|
|
name="roll_jet_dex"
|
|
title="%{jet_dex} Jet de Dextérité"
|
|
value="@{togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{name=Dextérité}} {{subtags=Test}} {{carac=[[@{DEX_SUP}[Dé] + [[@{DEX_TEST}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
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-boxinputlight">
|
|
<input
|
|
type="number"
|
|
name="attr_DEX"
|
|
title="@{DEX}"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_DEX_BUFF"
|
|
title="@{DEX_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_DEX_TEST" value="0" />
|
|
<span name="attr_DEX_TEST" title="@{DEX_TEST}"></span>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{name=Constitution}} {{subtags=Test}} {{carac=[[@{CON_SUP}[Dé] + [[@{CON_TEST}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
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="@{JPNORMAL}" selected>N Normale</option>
|
|
<option value="@{JPSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JPSUPHERO}">
|
|
H Supérieure ET Héroïque
|
|
</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input
|
|
type="number"
|
|
name="attr_CON"
|
|
title="@{CON}"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_CON_BUFF"
|
|
title="@{CON_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_CON_TEST" value="0" />
|
|
<span name="attr_CON_TEST" title="@{CON_TEST}"></span>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{name=Intelligence}} {{subtags=Test}} {{carac=[[@{INT_SUP}[Dé] + [[@{INT_TEST}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
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="@{JMNORMAL}" selected>N Normale</option>
|
|
<option value="@{JMSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JMSUPHERO}">
|
|
H Supérieure ET Héroïque
|
|
</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input
|
|
type="number"
|
|
name="attr_INT"
|
|
title="@{INT}"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_INT_BUFF"
|
|
title="@{INT_BONUS} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_INT_TEST" value="0" />
|
|
<span name="attr_INT_TEST" title="@{INT_TEST}"></span>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{name=Perception}} {{subtags=Test}} {{carac=[[@{PER_SUP}[Dé] + [[@{PER_TEST}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
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="@{JMNORMAL}" selected>N Normale</option>
|
|
<option value="@{JMSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JMSUPHERO}">
|
|
H Supérieure ET Héroïque
|
|
</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input
|
|
type="number"
|
|
name="attr_PER"
|
|
title="@{PER}"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_PER_BUFF"
|
|
title="@{PER_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_PER_TEST" value="0" />
|
|
<span name="attr_PER_TEST" title="@{PER_TEST}"></span>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{name=Charisme}} {{subtags=Test}} {{carac=[[@{CHA_SUP}[Dé] + [[@{CHA_TEST}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
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="@{JMNORMAL}" selected>N Normale</option>
|
|
<option value="@{JMSUP}">S Supérieure OU Héroïque</option>
|
|
<option value="@{JMSUPHERO}">
|
|
H Supérieure ET Héroïque
|
|
</option>
|
|
</select>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input
|
|
type="number"
|
|
name="attr_CHA"
|
|
title="@{CHA}"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_CHA_BUFF"
|
|
title="@{CHA_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_CHA_TEST" value="0" />
|
|
<span name="attr_CHA_TEST" title="@{CHA_TEST}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfat" colspan="6">
|
|
ÉTATS PRÉJUDICIABLES
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxinputlight" colspan="6">
|
|
|
|
<input
|
|
type="radio"
|
|
name="attr_ETATDE"
|
|
value="20"
|
|
title="@{ETATDE} Jet d'un d20 pour tous les tests"
|
|
checked
|
|
/> Normal
|
|
<input
|
|
type="radio"
|
|
name="attr_ETATDE"
|
|
value="12"
|
|
title="@{ETATDE} Jet d'un d12 pour tous les tests"
|
|
/> Affaibli
|
|
<input
|
|
type="checkbox"
|
|
name="attr_POISSE"
|
|
title="@{POISSE} Moins bon de deux d20 pour tous les tests"
|
|
value="1"
|
|
/> Poisse
|
|
<br />
|
|
<span name="attr_conditions" value=""></span>
|
|
<input
|
|
type="checkbox"
|
|
class="sheet-toggle-show sheet-align-right"
|
|
name="attr_conditions_shown"
|
|
title="Ajouter/Retirer des états préjudiciables"
|
|
/>
|
|
<div class="sheet-toggle-body">
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_aveugle"
|
|
title="Aveuglé"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_aveugle.png"
|
|
/>
|
|
</button>
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_blesse"
|
|
title="Blessé"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_blesse.png"
|
|
/>
|
|
</button>
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_confus"
|
|
title="Confus"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_confus.png"
|
|
/>
|
|
</button>
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_effraye"
|
|
title="Effrayé"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_effraye.png"
|
|
/>
|
|
</button>
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_epuise"
|
|
title="Epuisé"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_epuise.png"
|
|
/>
|
|
</button>
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_etourdi"
|
|
title="Etourdi"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_etourdi.png"
|
|
/>
|
|
</button>
|
|
<br />
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_fatigue"
|
|
title="Fatigué"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_fatigue.png"
|
|
/>
|
|
</button>
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_immobilise"
|
|
title="Immobilisé"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_immobilise.png"
|
|
/>
|
|
</button>
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_panique"
|
|
title="Paniqué"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_panique.png"
|
|
/>
|
|
</button>
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_ralenti"
|
|
title="Ralenti"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_ralenti.png"
|
|
/>
|
|
</button>
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_renverse"
|
|
title="Renversé"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_renverse.png"
|
|
/>
|
|
</button>
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_surpris"
|
|
title="Surpris"
|
|
>
|
|
<img
|
|
class="sheet-iconimg"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cond_surpris.png"
|
|
/>
|
|
</button>
|
|
</div>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{subtags=Bonus}} {{name=Point de Chance}} {{text=@{character_name} utilise un Point de Chance et obtient un bonus de +[[5]] }}"
|
|
/>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" colspan="7">
|
|
<input type="hidden" name="attr_PC_max" />
|
|
<span
|
|
style="width: 35px"
|
|
name="attr_PC_max"
|
|
title="@{PC|max} Points de Chance maximums"
|
|
></span>
|
|
=
|
|
<input
|
|
type="number"
|
|
style="width: 35px"
|
|
name="attr_PCBASE"
|
|
title="@{PCBASE} Points de Chance de Base"
|
|
value="2"
|
|
/>
|
|
+
|
|
<span
|
|
style="width: 35px"
|
|
name="attr_CHA"
|
|
title="@{CHA} Charisme"
|
|
></span>
|
|
+
|
|
<input
|
|
type="number"
|
|
style="width: 35px"
|
|
name="attr_PCDIV"
|
|
title="@{PCDIV} Points de Chance additionnels"
|
|
value="0"
|
|
/>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{name=Initiative}} {{subtags=Combat}} {{carac=[[@{INIT}[Init.] + @{INIT_VAR}[Dé(s)] &{tracker}]]}}"
|
|
>
|
|
INITIATIVE
|
|
</button>
|
|
</td>
|
|
<td class="sheet-boxinputlight">10</td>
|
|
<td class="sheet-boxinputlight">
|
|
+
|
|
<span name="attr_DEX" title="@{DEX}"></span>
|
|
+
|
|
<span name="attr_PER" title="@{PER}"></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_INIT_BUFF"
|
|
title="@{INIT_BUFF} Bonus divers"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input
|
|
type="number"
|
|
name="attr_INIT"
|
|
value="0"
|
|
hidden
|
|
/>
|
|
<span
|
|
name="attr_INIT"
|
|
class="sheet-txt-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} @{token_dsp} {{perso=@{character_name}}} {{name=Au Contact}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKCAC}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
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} @{token_dsp} {{perso=@{character_name}}} {{name=À Distance}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKTIR}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
À 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} @{token_dsp} {{perso=@{character_name}}} {{name=Psychique (Influence)}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKPSYINFLU}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
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} @{token_dsp} {{perso=@{character_name}}} {{name=Psychique (Intuition)}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKPSYINTUI}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
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="sheet-optional-block-switch"
|
|
name="attr_option_atkmag"
|
|
value="1"
|
|
/><span></span>
|
|
<div class="sheet-optional-block">
|
|
<table class="sheet-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} @{token_dsp} {{perso=@{character_name}}} {{name=Magique}} {{subtags=Attaque}} {{attaque=[[@{JETNORMAL}cs20cf1[Dé] + [[@{ATKMAG}]][Bonus] @{rof4} ]] }}"
|
|
>
|
|
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É
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" style="width: 65px">
|
|
<button
|
|
class="sheet-boxtitre"
|
|
type="action"
|
|
name="act_hitdice"
|
|
title="Progression d'un niveau"
|
|
>
|
|
DV
|
|
</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<select
|
|
class="sheet-carac"
|
|
name="attr_DV"
|
|
size="1"
|
|
title="@{DV} Dé de Vie"
|
|
>
|
|
<option value="0" selected>-</option>
|
|
<option value="4">d4</option>
|
|
<option value="6">d6</option>
|
|
<option value="8">d8</option>
|
|
<option value="10">d10</option>
|
|
<option value="12">d12</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" 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-boxinputleft" colspan="2">
|
|
<span class="sheet-textbase"
|
|
> DM temporaires</span
|
|
>
|
|
<input
|
|
type="number"
|
|
name="attr_DMTEMP"
|
|
class="sheet-align-right"
|
|
title="@{DMTEMP} Dommages Temporaires"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre" colspan="2">
|
|
Blessures Graves
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxinputleft" colspan="2">
|
|
<input type="hidden" name="attr_SEUILBG" />
|
|
<div class="sheet-txt-center">
|
|
Seuil :
|
|
<span
|
|
name="attr_SEUILBG"
|
|
title="@{SEUILBG} 10 + CON + FOR"
|
|
></span>
|
|
<br />
|
|
<input
|
|
type="checkbox"
|
|
name="attr_BLESSURE"
|
|
title="@{BLESSURE} Gravement blessé"
|
|
value="1"
|
|
/>
|
|
<input
|
|
type="checkbox"
|
|
name="attr_BLGRAVE2"
|
|
title="@{BLGRAVE2}"
|
|
value="1"
|
|
/>
|
|
<input
|
|
type="checkbox"
|
|
name="attr_BLGRAVE3"
|
|
title="@{BLGRAVE3}"
|
|
value="1"
|
|
/>
|
|
<input
|
|
type="checkbox"
|
|
name="attr_BLGRAVE4"
|
|
title="@{BLGRAVE4}"
|
|
value="1"
|
|
/>
|
|
<input
|
|
type="checkbox"
|
|
name="attr_BLGRAVE5"
|
|
title="@{BLGRAVE5}"
|
|
value="1"
|
|
/>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div>
|
|
<input
|
|
type="checkbox"
|
|
class="sheet-optional-block-switch"
|
|
name="attr_option_pm"
|
|
value="1"
|
|
/><span></span>
|
|
<div class="sheet-optional-block">
|
|
<table class="sheet-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É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">DEX</td>
|
|
<td class="sheet-textbase">Div.</td>
|
|
<td class="sheet-textbase">Action défensive</td>
|
|
<td class="sheet-textfat">Total</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">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">
|
|
<span
|
|
name="attr_DEX"
|
|
title="@{DEX} Dextérité"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_DEF_BUFF"
|
|
title="@{DEF_BUFF} Bonus divers"
|
|
></span>
|
|
</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"
|
|
class="sheet-txt-italic"
|
|
title="@{DEF} Défense physique"
|
|
></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-textfat sheet-txt-right" colspan="2">
|
|
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"> </td>
|
|
<td class="sheet-textbase">CHA</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">DEP</td>
|
|
<td class="sheet-boxinputlight">10+</td>
|
|
<td class="sheet-textbase"> </td>
|
|
<td class="sheet-textbase"> </td>
|
|
<td class="sheet-boxinputlight">
|
|
<span name="attr_CHA" title="@{CHA} Charisme"></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_DEP_BUFF"
|
|
title="@{DEP_BUFF} Bonus divers"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-textbase"> </td>
|
|
<td class="sheet-boxinputlight">
|
|
<input
|
|
type="number"
|
|
name="attr_DEP"
|
|
value="10"
|
|
hidden
|
|
/>
|
|
<span
|
|
name="attr_DEP"
|
|
class="sheet-txt-italic"
|
|
title="@{DEp} Défense psychique"
|
|
></span>
|
|
</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="sheet-attack">
|
|
<input
|
|
class="sheet-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} @{token_dsp} {{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}) @{rof4} ]] }} {{@{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}"
|
|
class="sheet-txt-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 sheet-txt-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 disabled class="sheet-optgroup">
|
|
Normaux
|
|
</option>
|
|
<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 disabled class="sheet-optgroup">
|
|
Sans limite
|
|
</option>
|
|
<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 disabled class="sheet-optgroup">
|
|
Mod. de base
|
|
</option>
|
|
<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 disabled class="sheet-optgroup">
|
|
Mod. de test
|
|
</option>
|
|
<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="sheet-options">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 18px"> </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 disabled class="sheet-optgroup"> Portée</option>
|
|
<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 disabled class="sheet-optgroup"> Couvert</option>
|
|
<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 disabled class="sheet-optgroup"> Cible</option>
|
|
<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"
|
|
/>
|
|
<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="sheet-block-switch"
|
|
name="attr_setup_abilities"
|
|
type="checkbox"
|
|
/>
|
|
<div class="sheet-block-hidden">
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-textfatleft" colspan="5">
|
|
CAPACITÉS DU PERSONNAGE
|
|
<span class="sheet-setup-abilities sheet-textbase"
|
|
>Edition <input
|
|
type="checkbox"
|
|
name="attr_setup_abilities"
|
|
title="Editer les capacités"
|
|
/></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px"> </td>
|
|
<td class="sheet-boxtitresmall">Voie culturelle</td>
|
|
<td class="sheet-boxtitresmall">Voie professionnelle</td>
|
|
<td class="sheet-boxtitresmall">Voie professionnelle</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="checkbox" name="attr_cp1mod" value="1" />
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
style="width: 90%"
|
|
name="attr_voie1nom"
|
|
title="@{voie1nom}"
|
|
placeholder="Nom de la voie culturelle"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="checkbox" name="attr_cp2mod" value="1" />
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
style="width: 90%"
|
|
name="attr_voie2nom"
|
|
title="@{voie2nom}"
|
|
placeholder="Nom de la voie professionnelle 1"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="checkbox" name="attr_cp3mod" value="1" />
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
style="width: 90%"
|
|
name="attr_voie3nom"
|
|
title="@{voie3nom}"
|
|
placeholder="Nom de la voie professionnelle 2"
|
|
/>
|
|
</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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v1r1"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v2r1"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v3r1"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v1r2"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v2r2"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v3r2"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v1r3"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v2r3"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v3r3"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v1r4"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v2r4"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v3r4"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v1r5"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v2r5"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v3r5"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
title="@{voie3-5}"
|
|
></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px"> </td>
|
|
<td class="sheet-boxtitresmall">Voie d'espèce</td>
|
|
<td class="sheet-boxtitresmall">Voie de hobby</td>
|
|
<td class="sheet-boxtitresmall">Voie de prestige</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="checkbox" name="attr_cp4mod" value="1" />
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
style="width: 90%"
|
|
name="attr_voie4nom"
|
|
title="@{voie4nom}"
|
|
placeholder="Nom de la voie d'espèce"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="checkbox" name="attr_cp5mod" value="1" />
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
style="width: 90%"
|
|
name="attr_voie5nom"
|
|
title="@{voie5nom}"
|
|
placeholder="Nom de la voie de hobby"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="checkbox" name="attr_cp6mod" value="1" />
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
style="width: 90%"
|
|
name="attr_voie6nom"
|
|
title="@{voie6nom}"
|
|
placeholder="Nom de la voie de prestige"
|
|
/>
|
|
</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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v4r1"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v5r1"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v6r1"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v4r2"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v5r2"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v6r2"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v4r3"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v5r3"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v6r3"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v4r4"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v5r4"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v6r4"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v4r5"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v5r5"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v6r5"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
title="@{voie6-5}"
|
|
></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div>
|
|
<input
|
|
type="checkbox"
|
|
class="sheet-block-switch"
|
|
name="attr_voies789"
|
|
/><span>Plus de voies</span>
|
|
<div class="sheet-block-hidden"></div>
|
|
<div class="sheet-block-show">
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px">
|
|
|
|
</td>
|
|
<td class="sheet-boxtitresmall">Voie 7</td>
|
|
<td class="sheet-boxtitresmall">Voie 8</td>
|
|
<td class="sheet-boxtitresmall">Voie 9</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input type="checkbox" name="attr_cp7mod" value="1" />
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
style="width: 90%"
|
|
name="attr_voie7nom"
|
|
title="@{voie7nom}"
|
|
placeholder="Nom de la Voie n°7"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="checkbox" name="attr_cp8mod" value="1" />
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
style="width: 90%"
|
|
name="attr_voie8nom"
|
|
title="@{voie8nom}"
|
|
placeholder="Nom de la Voie n°8"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input type="checkbox" name="attr_cp9mod" value="1" />
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
style="width: 90%"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v7r1"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v8r1"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v9r1"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v7r2"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v8r2"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v9r2"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v7r3"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v8r3"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v9r3"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v7r4"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v8r4"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v9r4"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v7r5"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v8r5"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
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 class="sheet-align-right">
|
|
<button
|
|
type="roll"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="roll_v9r5"
|
|
title=""
|
|
value="&{template:co1} @{token_dsp} {{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 sheet-boxability-scroll"
|
|
title="@{voie9-5}"
|
|
></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-block-show">
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-textfatleft" colspan="5">
|
|
CAPACITÉS DU PERSONNAGE
|
|
<span class="sheet-setup-abilities"
|
|
>Affichage <input
|
|
type="checkbox"
|
|
name="attr_setup_abilities"
|
|
title="Editer les capacités"
|
|
/></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px"> </td>
|
|
<td class="sheet-boxtitresmall">Voie 1</td>
|
|
<td class="sheet-boxtitresmall">Voie 2</td>
|
|
<td class="sheet-boxtitresmall">Voie 3</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
name="attr_voie1nom"
|
|
title="@{voie1nom}"
|
|
placeholder="Nom de la Voie n°1"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
name="attr_voie2nom"
|
|
title="@{voie2nom}"
|
|
placeholder="Nom de la Voie n°2"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
name="attr_voie3nom"
|
|
title="@{voie3nom}"
|
|
placeholder="Nom de la Voie n°3"
|
|
/>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">1</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v1r1" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie1-t1"
|
|
class="sheet-boxability"
|
|
title="@{voie1-t1}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie1-1"
|
|
class="sheet-boxability"
|
|
title="@{voie1-1}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v2r1" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie2-t1"
|
|
class="sheet-boxability"
|
|
title="@{voie2-t1}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie2-1"
|
|
class="sheet-boxability"
|
|
title="@{voie2-1}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v3r1" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie3-t1"
|
|
class="sheet-boxability"
|
|
title="@{voie3-t1}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie3-1"
|
|
class="sheet-boxability"
|
|
title="@{voie3-1}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">2</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v1r2" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie1-t2"
|
|
class="sheet-boxability"
|
|
title="@{voie1-t2}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie1-2"
|
|
class="sheet-boxability"
|
|
title="@{voie1-2}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v2r2" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie2-t2"
|
|
class="sheet-boxability"
|
|
title="@{voie2-t2}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie2-2"
|
|
class="sheet-boxability"
|
|
title="@{voie2-2}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v3r2" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie3-t2"
|
|
class="sheet-boxability"
|
|
title="@{voie3-t2}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie3-2"
|
|
class="sheet-boxability"
|
|
title="@{voie3-2}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">3</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v1r3" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie1-t3"
|
|
class="sheet-boxability"
|
|
title="@{voie1-t3}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie1-3"
|
|
class="sheet-boxability"
|
|
title="@{voie1-3}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v2r3" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie2-t3"
|
|
class="sheet-boxability"
|
|
title="@{voie2-t3}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie2-3"
|
|
class="sheet-boxability"
|
|
title="@{voie2-3}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v3r3" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie3-t3"
|
|
class="sheet-boxability"
|
|
title="@{voie3-t3}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie3-3"
|
|
class="sheet-boxability"
|
|
title="@{voie3-3}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">4</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v1r4" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie1-t4"
|
|
class="sheet-boxability"
|
|
title="@{voie1-t4}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie1-4"
|
|
class="sheet-boxability"
|
|
title="@{voie1-4}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v2r4" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie2-t4"
|
|
class="sheet-boxability"
|
|
title="@{voie2-t4}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie2-4"
|
|
class="sheet-boxability"
|
|
title="@{voie2-4}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v3r4" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie3-t4"
|
|
class="sheet-boxability"
|
|
title="@{voie3-t4}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie3-4"
|
|
class="sheet-boxability"
|
|
title="@{voie3-4}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">5</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v1r5" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie1-t5"
|
|
class="sheet-boxability"
|
|
title="@{voie1-t5}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie1-5"
|
|
class="sheet-boxability"
|
|
title="@{voie1-5}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v2r5" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie2-t5"
|
|
class="sheet-boxability"
|
|
title="@{voie2-t5}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie2-5"
|
|
class="sheet-boxability"
|
|
title="@{voie2-5}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v3r5" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie3-t5"
|
|
class="sheet-boxability"
|
|
title="@{voie3-t5}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie3-5"
|
|
class="sheet-boxability"
|
|
title="@{voie3-5}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px"> </td>
|
|
<td class="sheet-boxtitresmall">Voie 4</td>
|
|
<td class="sheet-boxtitresmall">Voie 5</td>
|
|
<td class="sheet-boxtitresmall">Voie 6</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
name="attr_voie4nom"
|
|
title="@{voie4nom}"
|
|
placeholder="Nom de la Voie n°4"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
name="attr_voie5nom"
|
|
title="@{voie5nom}"
|
|
placeholder="Nom de la Voie n°5"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
name="attr_voie6nom"
|
|
title="@{voie6nom}"
|
|
placeholder="Nom de la Voie n°6"
|
|
/>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">1</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v4r1" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie4-t1"
|
|
class="sheet-boxability"
|
|
title="@{voie4-t1}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie4-1"
|
|
class="sheet-boxability"
|
|
title="@{voie4-1}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v5r1" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie5-t1"
|
|
class="sheet-boxability"
|
|
title="@{voie5-t1}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie5-1"
|
|
class="sheet-boxability"
|
|
title="@{voie5-1}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v6r1" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie6-t1"
|
|
class="sheet-boxability"
|
|
title="@{voie6-t1}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie6-1"
|
|
class="sheet-boxability"
|
|
title="@{voie6-1}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">2</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v4r2" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie4-t2"
|
|
class="sheet-boxability"
|
|
title="@{voi41-t2}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie4-2"
|
|
class="sheet-boxability"
|
|
title="@{voie4-2}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v5r2" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie5-t2"
|
|
class="sheet-boxability"
|
|
title="@{voie5-t2}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie5-2"
|
|
class="sheet-boxability"
|
|
title="@{voie5-2}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v6r2" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie6-t2"
|
|
class="sheet-boxability"
|
|
title="@{voie6-t2}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie6-2"
|
|
class="sheet-boxability"
|
|
title="@{voie6-2}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">3</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v4r3" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie4-t3"
|
|
class="sheet-boxability"
|
|
title="@{voie4-t3}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie4-3"
|
|
class="sheet-boxability"
|
|
title="@{voie4-3}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v5r3" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie5-t3"
|
|
class="sheet-boxability"
|
|
title="@{voie5-t3}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie5-3"
|
|
class="sheet-boxability"
|
|
title="@{voie5-3}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v6r3" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie6-t3"
|
|
class="sheet-boxability"
|
|
title="@{voie6-t3}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie6-3"
|
|
class="sheet-boxability"
|
|
title="@{voie6-3}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">4</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v4r4" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie4-t4"
|
|
class="sheet-boxability"
|
|
title="@{voie4-t4}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie4-4"
|
|
class="sheet-boxability"
|
|
title="@{voie4-4}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v5r4" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie5-t4"
|
|
class="sheet-boxability"
|
|
title="@{voie5-t4}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie5-4"
|
|
class="sheet-boxability"
|
|
title="@{voie5-4}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v6r4" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie6-t4"
|
|
class="sheet-boxability"
|
|
title="@{voie6-t4}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie6-4"
|
|
class="sheet-boxability"
|
|
title="@{voie6-4}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">5</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v4r5" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie4-t5"
|
|
class="sheet-boxability"
|
|
title="@{voie4-t5}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie4-5"
|
|
class="sheet-boxability"
|
|
title="@{voie4-5}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v5r5" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie5-t5"
|
|
class="sheet-boxability"
|
|
title="@{voie5-t5}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie5-5"
|
|
class="sheet-boxability"
|
|
title="@{voie5-5}"
|
|
></textarea>
|
|
</td>
|
|
<td class="sheet-boxvoie">
|
|
<input type="checkbox" name="attr_v6r5" value="1" />
|
|
<input
|
|
type="text"
|
|
name="attr_voie6-t5"
|
|
class="sheet-boxability"
|
|
title="@{voie6-t5}"
|
|
/>
|
|
<br /><textarea
|
|
name="attr_voie6-5"
|
|
class="sheet-boxability"
|
|
title="@{voie6-5}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div>
|
|
<input
|
|
type="checkbox"
|
|
class="sheet-block-switch"
|
|
name="attr_voies789"
|
|
/><span>Plus de voies</span>
|
|
<div class="sheet-block-hidden"></div>
|
|
<div class="sheet-block-show">
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall" style="width: 20px">
|
|
|
|
</td>
|
|
<td class="sheet-boxtitresmall">Voie 7</td>
|
|
<td class="sheet-boxtitresmall">Voie 8</td>
|
|
<td class="sheet-boxtitresmall">Voie 9</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitresmall">R</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
name="attr_voie7nom"
|
|
title="@{voie7nom}"
|
|
placeholder="Nom de la Voie n°7"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-center"
|
|
name="attr_voie8nom"
|
|
title="@{voie8nom}"
|
|
placeholder="Nom de la Voie n°8"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-bold sheet-txt-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/ChroniquesGalactiques/cog_hr.png"
|
|
/>
|
|
<table class="sheet-tabsep" title="repeating_jetcapas">
|
|
<tr>
|
|
<td class="sheet-textfatleft" style="min-width: 245px">
|
|
Jets de Capacités
|
|
</td>
|
|
<td class="sheet-textbase" style="width: 100%"> </td>
|
|
</tr>
|
|
</table>
|
|
<fieldset class="repeating_jetcapas">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td>
|
|
<button
|
|
type="roll"
|
|
class="sheet-neutre"
|
|
name="roll_pjcapa"
|
|
title="%{repeating_jetcapas_$N_pjcapa}"
|
|
value="@{togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{subtags=Capacité}} {{name=@{jetcapanom} @{jetcapalim}}} {{carac=[[@{jetcapanbde}d@{jetcapade}@{jetcapatypjet}[Jet] + [[@{jetcapacarac}]][Bonus Carac] + [[(@{jetcapacoeff}*@{jetcaparang})]][Bonus rang] + @{jetcapadiv}[Bonus divers] @{rof4} ]] }} {{jet=@{jetcapatitre}}} {{desc=@{jetcapaskill}}} {{text=@{jetcapadesc}}}"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="min-width: 200px">
|
|
<input
|
|
type="text"
|
|
name="attr_jetcapanom"
|
|
title="@{jetcapanom}"
|
|
class="sheet-txt-bold"
|
|
placeholder="Nom du Jet de capacité"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input
|
|
type="checkbox"
|
|
name="attr_jetcapa_al"
|
|
style="width: 12px"
|
|
title="@{jetcapalim} Action limitée (L)"
|
|
value="1"
|
|
/>
|
|
<input type="hidden" name="attr_jetcapalim" value="" />
|
|
<input
|
|
type="number"
|
|
style="width: 32px"
|
|
name="attr_jetcapanbde"
|
|
value="1"
|
|
title="@{jetcapanbde} Nombre de dés"
|
|
/>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 50px"
|
|
name="attr_jetcapade"
|
|
size="1"
|
|
title="@{jetcapade} Dé"
|
|
>
|
|
<option value="4">d4</option>
|
|
<option value="6">d6</option>
|
|
<option value="8">d8</option>
|
|
<option value="10">d10</option>
|
|
<option value="12">d12</option>
|
|
<option value="@{ETATDE}" selected>
|
|
d20 (ou d12 si Affaibli)
|
|
</option></select
|
|
> (
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_jetcapatypjet"
|
|
size="1"
|
|
title="@{jetcapatypjet} Option du jet : normal, meilleur dé, moins bon dé, sans limite"
|
|
>
|
|
<option value="">
|
|
N - Normal / additionner tous les dés
|
|
</option>
|
|
<option value="kh1">S - Garder le meilleur dé</option>
|
|
<option value="kl1">I - Garder le moins bon dé</option>
|
|
<option value="!">
|
|
E - Explosif (jet sans limite)
|
|
</option></select
|
|
>) +
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 60px"
|
|
name="attr_jetcapacarac"
|
|
size="1"
|
|
title="@{jetcapacarac} Modificateur du jet"
|
|
>
|
|
<option value="0" selected>-</option>
|
|
<option value="@{NIVEAU}">NIV</option>
|
|
<optgroup label="Mod. de Base">
|
|
<option disabled class="sheet-optgroup">
|
|
Mod. de base
|
|
</option>
|
|
<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 base</option>
|
|
</optgroup>
|
|
<optgroup label="Mod. de Test"
|
|
<option disabled class="sheet-optgroup">
|
|
Mod. de test
|
|
</option>
|
|
<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 test</option>
|
|
</optgroup>
|
|
<optgroup label="Attaques">
|
|
<option disabled class="sheet-optgroup">
|
|
Attaques
|
|
</option>
|
|
<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
|
|
>+ (
|
|
<input type="hidden" name="attr_jetcapacoeff" value="1" />
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 60px"
|
|
name="attr_jetcaparang"
|
|
size="1"
|
|
title="@{jetcaparang} Rang dans la voie"
|
|
>
|
|
<option value="0" selected>-</option>
|
|
<option value="@{RANG_VOIE1}">Voie 1</option>
|
|
<option value="@{RANG_VOIE2}">Voie 2</option>
|
|
<option value="@{RANG_VOIE3}">Voie 3</option>
|
|
<option value="@{RANG_VOIE4}">Voie 4</option>
|
|
<option value="@{RANG_VOIE5}">Voie 5</option>
|
|
<option value="@{RANG_VOIE6}">Voie 6</option>
|
|
<option value="@{RANG_VOIE7}">Voie 7</option>
|
|
<option value="@{RANG_VOIE8}">Voie 8</option>
|
|
<option value="@{RANG_VOIE9}">Voie 9</option></select
|
|
>) +
|
|
<input type="hidden" name="attr_jetcapaskill" value="" />
|
|
<input
|
|
type="number"
|
|
style="width: 32px"
|
|
name="attr_jetcapadiv"
|
|
value="0"
|
|
title="@{jetcapadiv} Bonus divers"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 25%">
|
|
Voie :
|
|
<select
|
|
class="sheet-selectmin"
|
|
name="attr_jetcapavoieno"
|
|
title="@{jetcapavoieno}"
|
|
>
|
|
<option value="">-</option>
|
|
<option value="v1">1</option>
|
|
<option value="v2">2</option>
|
|
<option value="v3">3</option>
|
|
<option value="v4">4</option>
|
|
<option value="v5">5</option>
|
|
<option value="v6">6</option>
|
|
<option value="v7">7</option>
|
|
<option value="v8">8</option>
|
|
<option value="v9">9</option>
|
|
</select>
|
|
Rang :
|
|
<select
|
|
class="sheet-selectmin"
|
|
name="attr_jetcapavoierang"
|
|
title="@{jetcapavoierang}"
|
|
>
|
|
<option value="">-</option>
|
|
<option value="r1">1</option>
|
|
<option value="r2">2</option>
|
|
<option value="r3">3</option>
|
|
<option value="r4">4</option>
|
|
<option value="r5">5</option>
|
|
</select>
|
|
<input type="hidden" name="attr_jetcapavr" value="" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td> </td>
|
|
<td class="sheet-boxinputleft" style="width: 25%">
|
|
<input
|
|
type="text"
|
|
name="attr_jetcapatitre"
|
|
style="width: 100%"
|
|
placeholder="Compétence (CARAC)"
|
|
title="@{jetcapatitre}"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft" colspan="3">
|
|
<textarea
|
|
name="attr_jetcapadesc"
|
|
placeholder="Description"
|
|
title="@{jetcapadesc}"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
<img
|
|
class="sheet-imghr"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png"
|
|
/>
|
|
<div>
|
|
<span class="sheet-textfatleft">Traits, Avantages, Relations</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} @{token_dsp} {{perso=@{character_name}}} {{name=@{traitnom}}} {{subtags=@{traittype}}} {{text=@{traitdesc}}}"
|
|
>
|
|
w
|
|
</button>
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 200px">
|
|
<input
|
|
type="text"
|
|
class="sheet-txt-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%">DEP:</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">ÉQUIPEMENT</div>
|
|
<div class="sheet-boxinputleft">
|
|
<span class="sheet-textbase">Crédits :</span>
|
|
<input
|
|
type="text"
|
|
style="width: 180px"
|
|
name="attr_BOURSE"
|
|
title="@{BOURSE}"
|
|
placeholder="Rien ? C'est la pauvreté !"
|
|
/>
|
|
Enc. Total :
|
|
<input type="hidden" name="attr_total_enc" value="0" />
|
|
<span
|
|
name="attr_total_enc"
|
|
title="@{total_enc} Encombrement total"
|
|
></span>
|
|
/
|
|
<input
|
|
type="number"
|
|
name="attr_seuil_enc"
|
|
title="@{seuil_enc} Seuil d'encombrement (FOR)"
|
|
value="0"
|
|
/>
|
|
</div>
|
|
<fieldset class="repeating_equipement">
|
|
<div class="sheet-boxvoie">
|
|
<input
|
|
type="checkbox"
|
|
name="attr_equip-use"
|
|
value="1"
|
|
title="@{equip-use} Equipement utilisé"
|
|
/>
|
|
<input
|
|
type="text"
|
|
style="width: 220px"
|
|
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, MOD, 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>
|
|
<div class="sheet-boxinputleft">
|
|
<span class="sheet-textbase">Niveau de vie :</span>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 90px"
|
|
name="attr_niveau_vie"
|
|
title="@{niveau_vie}"
|
|
>
|
|
<option>Miséreux</option>
|
|
<option>Pauvre</option>
|
|
<option selected>Modeste</option>
|
|
<option>Aisé</option>
|
|
<option>Fortuné</option>
|
|
<option>Nanti</option>
|
|
</select>
|
|
</div>
|
|
<fieldset class="repeating_ressources">
|
|
<div class="sheet-boxvoie">
|
|
<input
|
|
type="text"
|
|
style="width: 280px"
|
|
name="attr_res-desc"
|
|
title="@{res-desc}"
|
|
/>
|
|
|
|
<span class="sheet-textbase">Valeur :</span>
|
|
<input
|
|
type="number"
|
|
name="attr_res-nbr"
|
|
value="1"
|
|
title="@{res-val}"
|
|
/>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<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">É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">
|
|
<span class="sheet-align-right">
|
|
<button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_resetattrib"
|
|
title="Re-calculer attributs (rangs, encombrement)"
|
|
>
|
|
r
|
|
</button>
|
|
</span>
|
|
<div class="sheet-2colrow">
|
|
<!-- Config -->
|
|
<div class="sheet-col">
|
|
<div>
|
|
<span class="sheet-textfatleft">PARAMETRES</span>
|
|
</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
|
|
>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 130px"
|
|
name="attr_token_dsp"
|
|
title="@{token_dsp}"
|
|
size="1"
|
|
>
|
|
<option value="" selected>Sans token</option>
|
|
<option value=" {{token=[x](@{token_url}) }} ">
|
|
Avec token
|
|
</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>
|
|
<!-- Release notes -->
|
|
<div class="sheet-col">
|
|
<div>
|
|
<span class="sheet-textfatleft">NOTES DE VERSION</span> (v<span
|
|
name="attr_VERSION"
|
|
></span
|
|
>)
|
|
</div>
|
|
<div class="sheet-scroll-300">
|
|
<ul>
|
|
<li>
|
|
<strong>Version 4.0.0</strong> (2022.12.??)
|
|
<ul>
|
|
<em>Fiches de personnage et de vaisseau</em>
|
|
<li>Chroniques Oubliées Galactiques v2</li>
|
|
<li>Mod. de caracs</li>
|
|
<li>Règle des 4</li>
|
|
<em>Fiche de mécha</em>
|
|
<li>Nouveau type de fiche</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<strong>Version 3.114</strong> (2021.04.12)
|
|
<ul>
|
|
<li>
|
|
Ajout d'un champ titre pour chaque capacité (attributs
|
|
@{voieN-tR} où N = no de voie et R = rang)
|
|
</li>
|
|
<li>
|
|
Correction d'un bug après suppression du seul modificateur
|
|
d'attaque ou de DM de la liste (le modificateur n'est plus
|
|
pris en compte dans les jets d'attaque)
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<strong>Version 3.113</strong> (2021.03.07)
|
|
<ul>
|
|
<em>Fiche de vaisseau</em>
|
|
<li>
|
|
Correction d'un bug sur les jets d'attaque (en cas d'ajout
|
|
d'une nouvelle ligne d'arme sans renseigner de canonnier)
|
|
</li>
|
|
<li>
|
|
Correction du calcul de l'Initiative pour prise en compte
|
|
d'un vaisseau sans pilote
|
|
</li>
|
|
<li>
|
|
Ajout d'un champ d'attribut pour les points d'énergie perdus
|
|
(@{PEV_DMG}) et modification du calcul des PEV max
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<strong>Version 3.112</strong> (2021.03.01)
|
|
<ul>
|
|
<em>Fiche de PJ</em>
|
|
<li>
|
|
Ajout de l'attaque magique dans la liste des armes/attaques
|
|
</li>
|
|
<li>
|
|
Correction mise en page PV et PR : restants / max et non
|
|
l'inverse
|
|
</li>
|
|
<li>
|
|
Suppression du code de remise en forme des textes de
|
|
capacités par élimination des retours à la ligne
|
|
</li>
|
|
<em>Fiche de vaisseau</em>
|
|
<li>Correction du calcul des DEFenses</li>
|
|
<li>
|
|
Ajout de deux attributs @{DEFRAP} (DEF Rapidité) et
|
|
@{DEFSOL} (DEF Solidité) calculés pouvant être liés à un
|
|
token
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<strong>Version 3.111</strong> (2021.02.22)
|
|
<ul>
|
|
<li>
|
|
Déplacement de l'initiative sur la 1ère ligne de la section
|
|
combat
|
|
</li>
|
|
<li>Réorganisation des champs PV et PV max, RD</li>
|
|
<li>
|
|
Ajout des Points de Récupération avec PR max et courants
|
|
</li>
|
|
<li>
|
|
Cases à cocher "Space Fantasy" sur l'onglet Configuration
|
|
pour faire apparaître optionnellement :
|
|
<ul>
|
|
<li>
|
|
l'Attaque Magique, avec score de base, bonus de
|
|
caractéristique, bonus divers et total.
|
|
</li>
|
|
<li>les Points de Mana, avec PM max et courants.</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Amélioration de la reconnaissance des propriétés
|
|
d'équipement
|
|
<ul>
|
|
<li>
|
|
DEF : x pour indiquer le bonus de DEFense d'une armure
|
|
</li>
|
|
<li>
|
|
DEF- : x pour indiquer le malus d'encombrement d'une
|
|
armure
|
|
</li>
|
|
<li>
|
|
RD : x pour indiquer la réduction des DM d'une armure
|
|
</li>
|
|
<li>
|
|
DM : {dm} {type} pour indiquer les dés et le type de
|
|
DM<br />
|
|
Où dm est {nombre}d{faces} (suffixe + ou ! pour DM
|
|
explosifs)
|
|
</li>
|
|
<li>
|
|
DM2 : {dm2} {type2} pour indiquer un second type et dés
|
|
de DM
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</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">
|
|
<input type="checkbox" class="sheet-block-switch" /><span
|
|
>Importer profil</span
|
|
>
|
|
<div class="sheet-block-hidden"></div>
|
|
<div class="sheet-block-show">
|
|
<div class="sheet-2colrow">
|
|
<div class="sheet-col">
|
|
<textarea
|
|
class="sheet-boxinputleft"
|
|
name="attr_json_profile"
|
|
style="height: 10em; white-space: pre-wrap"
|
|
></textarea>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<button
|
|
type="roll"
|
|
name="roll_exportcomob"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
title="Exporter le profil"
|
|
value="[Export Chroniques Mobiles](http://comob-data.rpgapps.net)">
|
|
c
|
|
</button>Composez votre profil avec l'application Export Chroniques Mobiles et insérez le code JSON dans le champ ci-contre
|
|
<br>
|
|
<button
|
|
type="action"
|
|
name="act_importprofile"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
title="Importer le profil"
|
|
>
|
|
W
|
|
</button>Importer
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</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-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} @{token_dsp} {{perso=@{character_name}}} {{subtags=Test}} {{name=Salle Machines (MOT)}} {{carac=[[1d20cs20cf1[Dé] +[[@{FOR_TEST}]][Puissance] +[[@{POSTE_MOT_INT}]][INT Mécano] ]] + [[ [[@{POSTE_MOT_BONUS}]][Rangs Moteurs] ]] }} {{jet=Puissance}} {{desc=Mécano : @{EQUIP_MOT}}}"
|
|
>
|
|
FOR
|
|
</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="number"
|
|
name="attr_FOR"
|
|
title="@{FOR}"
|
|
value="0"
|
|
/>
|
|
</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">
|
|
<span
|
|
name="attr_FOR_BUFF"
|
|
title="@{FOR_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_FOR_TEST" value="0" />
|
|
<span name="attr_FOR_TEST" title="@{FOR_TEST}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxtitre">
|
|
<button
|
|
class="sheet-boxtitre"
|
|
type="roll"
|
|
name="roll_jet_dexv"
|
|
title="%{jet_dexv} Jet de Manoeuvrabilité"
|
|
value="@{togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{subtags=Test}} {{name=Poste de Pilotage (PIL)}} {{carac=[[1d20cs20cf1[Dé] +[[@{DEX_TEST}]][Manoeuvrabilité] +[[@{POSTE_PIL_DEX}]][DEX Pilote] ]] + [[ [[@{POSTE_PIL_BONUS}]][Rangs Pilotage] ]] }} {{jet=Manoeuvrabilité}} {{desc=Pilote : @{EQUIP_PIL}}}"
|
|
>
|
|
DEX
|
|
</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="number"
|
|
name="attr_DEX"
|
|
title="@{DEX}"
|
|
value="0"
|
|
/>
|
|
</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">
|
|
<span
|
|
name="attr_DEX_BUFF"
|
|
title="@{DEX_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_DEX_TEST" value="0" />
|
|
<span name="attr_DEX_TEST" title="@{DEX_TEST}"></span>
|
|
</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} @{token_dsp} {{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_CON"
|
|
title="@{CON}"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td> </td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_CON_BUFF"
|
|
title="@{CON_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_CON_TEST" value="0" />
|
|
<span name="attr_CON_TEST" title="@{CON_TEST}"></span>
|
|
</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ée"
|
|
value="@{togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{subtags=Test}} {{name=Ordinateurs de Tir}} {{carac=[[1d20cs20cf1[Dé] +[[@{INT_TEST}]][Bonus] ]] }}"
|
|
>
|
|
INT
|
|
</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="number"
|
|
name="attr_INT"
|
|
title="@{INT}"
|
|
value="0"
|
|
/>
|
|
</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">
|
|
<span
|
|
name="attr_INT_BUFF"
|
|
title="@{INT_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_INT_TEST" value="0" />
|
|
<span name="attr_INT_TEST" title="@{INT_TEST}"></span>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{subtags=Test}} {{name=Senseurs (SEN)}} {{carac=[[1d20cs20cf1[Dé] +[[@{PER_TEST}]][Senseurs] +[[@{POSTE_SEN_INT}]][INT Opérateur] ]] + [[@{POSTE_SEN_BONUS}]][Rangs Electronique] }} {{jet=Détection}} {{desc=Opérateur : @{EQUIP_SEN}}}"
|
|
>
|
|
PER
|
|
</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="number"
|
|
name="attr_PER"
|
|
title="@{PER}"
|
|
value="0"
|
|
/>
|
|
</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-boxinput">
|
|
<span
|
|
name="attr_PER_BUFF"
|
|
title="@{PER_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_PER_TEST" value="0" />
|
|
<span name="attr_PER_TEST" title="@{PER_TEST}"></span>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{subtags=Test}} {{name=Communications (CHA)}} {{carac=[[1d20cs20cf1[Dé] + [[@{CHA_TEST}]][Comm.Systèmes] +[[@{POSTE_ORD_INT}]][INT Opérateur] ]] + [[@{POSTE_ORD_BONUS}]][Rangs Electronique] }} {{jet=Ordinateur}} {{desc=Opérateur : @{EQUIP_ORD}}}"
|
|
>
|
|
CHA
|
|
</button>
|
|
</td>
|
|
<td class="sheet-boxinput">
|
|
<input
|
|
type="number"
|
|
name="attr_CHA"
|
|
title="@{CHA}"
|
|
value="0"
|
|
/>
|
|
</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">
|
|
<span
|
|
name="attr_CHA_BUFF"
|
|
title="@{CHA_BUFF} Bonus au Test"
|
|
></span>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_CHA_TEST" value="0" />
|
|
<span name="attr_CHA_TEST" title="@{CHA_TEST}"></span>
|
|
</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} @{token_dsp} {{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" colspan="5">
|
|
<input
|
|
type="number"
|
|
name="attr_PEVBASE"
|
|
style="width: 30px"
|
|
title="@{PEVBASE} Points d'énergie de base"
|
|
value="@{NIVEAU}"
|
|
disabled
|
|
/>
|
|
+
|
|
<input
|
|
type="number"
|
|
name="attr_PEVDIV"
|
|
style="width: 30px"
|
|
title="@{PEVDIV} Points d'énergie additionnels"
|
|
value="@{PEV_BUFF}"
|
|
disabled
|
|
/>
|
|
+
|
|
<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} @{token_dsp} {{perso=@{character_name}}} {{name=À Distance}} {{subtags=Attaque}} {{attaque=[[1d20cs20cf1[Dé] + [[@{ATKTIRV}]][Bonus] ]] }}"
|
|
>
|
|
À 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">
|
|
<button
|
|
class="sheet-boxtitre"
|
|
type="roll"
|
|
name="roll_jet_initv"
|
|
title="%{jet_initv} Initiative"
|
|
value="@{togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{name=Initiative}} {{subtags=Combat}} {{carac=[[@{POSTE_PIL_OQP}[Pilote]*(@{INITV} + @{INIT_VAR})[Dé(s)] &{tracker}]]}}"
|
|
>
|
|
INITIATIVE
|
|
</button>
|
|
</td>
|
|
<td class="sheet-boxinputlight">10</td>
|
|
<td class="sheet-boxinputlight" colspan="2">
|
|
+
|
|
<input
|
|
type="number"
|
|
name="attr_DEXV"
|
|
value="@{DEX}+@{POSTE_PIL_DEX}"
|
|
title="@{DEX} Manoeuvrabilité + @{POSTE_PIL_DEX} DEX Pilote"
|
|
disabled
|
|
/>
|
|
+
|
|
<input
|
|
type="number"
|
|
name="attr_PERV"
|
|
value="@{PER}+@{POSTE_SEN_INT}"
|
|
title="@{PER} Senseurs + @{POSTE_SEN_INT} INT Scantech"
|
|
disabled
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input type="hidden" name="attr_INITV" value="0" />
|
|
<span name="attr_INITV" title="@{INITV}"></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td
|
|
class="sheet-boxtitre"
|
|
title="Poste de pilotage (PIL)"
|
|
>
|
|
Pilotage
|
|
<input
|
|
type="checkbox"
|
|
class="sheet-align-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: 200px"
|
|
name="attr_POSTE_PIL_NOM"
|
|
title="@{POSTE_PIL_NOM}"
|
|
placeholder="Nom du pilote"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-buff"
|
|
style="width: 30px"
|
|
name="attr_POSTE_PIL_DEX"
|
|
title="@{POSTE_PIL_DEX} DEX pilote"
|
|
value="0"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-buff"
|
|
style="width: 30px"
|
|
name="attr_POSTE_PIL_BONUS"
|
|
title="@{POSTE_PIL_BONUS} Rangs de Pilotage"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td
|
|
class="sheet-boxtitre"
|
|
title="Salle des machines (MOT)"
|
|
>
|
|
Machines
|
|
<input
|
|
type="checkbox"
|
|
class="sheet-align-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: 200px"
|
|
name="attr_POSTE_MOT_NOM"
|
|
title="@{POSTE_MOT_NOM}"
|
|
placeholder="Nom du mécanicien"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-buff"
|
|
style="width: 30px"
|
|
name="attr_POSTE_MOT_INT"
|
|
title="@{POSTE_MOT_INT} INT mécanicien"
|
|
value="0"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-buff"
|
|
style="width: 30px"
|
|
name="attr_POSTE_MOT_BONUS"
|
|
title="@{POSTE_MOT_BONUS} Rangs de Moteurs"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td
|
|
class="sheet-boxtitre"
|
|
title="Console des senseurs (SEN)"
|
|
>
|
|
Senseurs
|
|
<input
|
|
type="checkbox"
|
|
class="sheet-align-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: 200px"
|
|
name="attr_POSTE_SEN_NOM"
|
|
title="@{POSTE_SEN_NOM}"
|
|
placeholder="Nom du scantech"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-buff"
|
|
style="width: 30px"
|
|
name="attr_POSTE_SEN_INT"
|
|
title="@{POSTE_SEN_INT} INT scantech"
|
|
value="0"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-buff"
|
|
style="width: 30px"
|
|
name="attr_POSTE_SEN_BONUS"
|
|
title="@{POSTE_SEN_BONUS} Rangs d'Electronique"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td
|
|
class="sheet-boxtitre"
|
|
title="Console du système (ORD)"
|
|
>
|
|
Ordinateurs
|
|
<input
|
|
type="checkbox"
|
|
class="sheet-align-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: 200px"
|
|
name="attr_POSTE_ORD_NOM"
|
|
title="@{POSTE_ORD_NOM}"
|
|
placeholder="Nom de l'infotech"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-buff"
|
|
style="width: 30px"
|
|
name="attr_POSTE_ORD_INT"
|
|
title="@{POSTE_ORD_INT} INT infotech"
|
|
value="0"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-buff"
|
|
style="width: 30px"
|
|
name="attr_POSTE_ORD_BONUS"
|
|
title="@{POSTE_ORD_BONUS} Rangs d'Electronique"
|
|
value="0"
|
|
/>
|
|
</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é 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>
|
|
<input
|
|
type="number"
|
|
name="attr_PV"
|
|
title="@{PV} Points de Structure restants"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<input type=""hidden" name="attr_seuil_avarie" value=""
|
|
/>
|
|
<td class="sheet-boxinput" colspan="2">
|
|
<span class="textbase">Seuil Avarie :</span>
|
|
<span
|
|
name="attr_seuil_avarie"
|
|
title="@{seuil_avarie} Seuil d'avarie"
|
|
></span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-boxinput" colspan="2">
|
|
<span class="textbase">DM temp.</span>
|
|
<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" />
|
|
<input
|
|
type="number"
|
|
name="attr_RD"
|
|
style="width: 30px"
|
|
title="@{RD} Ecrans déflecteurs"
|
|
value="0"
|
|
/>
|
|
<input
|
|
type="checkbox"
|
|
name="attr_rd_1pe"
|
|
title="@{rd_1pe} Ecrans chargés"
|
|
value="1"
|
|
/>
|
|
(<span
|
|
name="attr_RDE"
|
|
title="@{RDE} Réduction des DM effective"
|
|
></span
|
|
>)
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td> </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ÉFENSES</td>
|
|
<td> </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é"
|
|
disabled
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<input
|
|
type="number"
|
|
name="attr_DEFVPIL"
|
|
value="@{POSTE_PIL_OQP}*@{POSTE_PIL_DEX}"
|
|
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}*@{POSTE_SEN_INT}"
|
|
title="@{DEFVSEN} Bonus du Scantech"
|
|
disabled
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_DEFRAP"
|
|
title="@{DEFRAP} Défense (rapidité)"
|
|
/>
|
|
</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"> </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}*@{POSTE_SEN_INT}"
|
|
title="@{DEFVSEN} Bonus du Scantech"
|
|
disabled
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputlight">
|
|
<span
|
|
name="attr_DEFSOL"
|
|
title="@{DEFSOL} Défense (solidité)"
|
|
/>
|
|
</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="sheet-attack">
|
|
<input
|
|
class="sheet-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} @{token_dsp} {{perso=@{character_name}}} {{subtags=Tir}} {{name=@{armenom}}} {{desc=Canonnier : @{armecan_nom}}} {{text=@{armejetn}}} {{@{armeatt}[[@{armejetd}cs>@{armecrit}cf<@{armeinct}[Dé] + [[@{armeatk}]][Attaque] + @{armecan_dex}[DEX canonnier] + @{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}"
|
|
class="sheet-txt-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 sheet-txt-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="sheet-options">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 18px"> </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)"
|
|
placeholder="Nom du canonnier"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-buff"
|
|
style="width: 32px"
|
|
name="attr_armecan_dex"
|
|
title="@{armecan_dex} DEX canonnier"
|
|
value="0"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-buff"
|
|
style="width: 32px"
|
|
name="attr_armecan_bonus"
|
|
title="@{armecan_bonus} Rangs Armes lourdes"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td> </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
|
|
class="sheet-align-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">
|
|
<span class="sheet-align-right"
|
|
><button
|
|
type="action"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
name="act_resetattrib"
|
|
title="Re-calculer bonus équipage"
|
|
>
|
|
r
|
|
</button>
|
|
</span>
|
|
<!-- Config -->
|
|
<ul>
|
|
<li>
|
|
<span class="textbase">Jets</span>
|
|
<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
|
|
>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 130px"
|
|
name="attr_token_dsp"
|
|
title="@{token_dsp}"
|
|
size="1"
|
|
>
|
|
<option value="" selected>Sans token</option>
|
|
<option value=" {{token=[x](@{token_url}) }} ">Avec token</option>
|
|
</select>
|
|
</li>
|
|
<li>
|
|
<span class="textbase">Initiative variable</span>
|
|
<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%">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="sheet-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} @{token_dsp} {{perso=@{character_name}}} {{name=Force}} {{subtags=Test}} {{carac=[[@{pnj_jetfor}cs20cf1[Dé] + [[@{pnj_for}]][FOR] ]] }}"
|
|
>
|
|
FOR
|
|
</button>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{name=Dextérité}} {{subtags=Test}} {{carac=[[@{pnj_jetdex}cs20cf1[Dé] + [[@{pnj_dex}]][DEX] ]] }}"
|
|
>
|
|
DEX
|
|
</button>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{name=Constitution}} {{subtags=Test}} {{carac=[[@{pnj_jetcon}cs20cf1[Dé] + [[@{pnj_con}]][CON] ]] }}"
|
|
>
|
|
CON
|
|
</button>
|
|
</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"> </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} @{token_dsp} {{perso=@{character_name}}} {{name=Intelligence}} {{subtags=Test}} {{carac=[[@{pnj_jetint}cs20cf1[Dé] + [[@{pnj_int}]][INT] ]] }}"
|
|
>
|
|
INT
|
|
</button>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{name=Perception}} {{subtags=Test}} {{carac=[[@{pnj_jetper}cs20cf1[Dé] + [[@{pnj_per}]][PER] ]] }}"
|
|
>
|
|
PER
|
|
</button>
|
|
</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} @{token_dsp} {{perso=@{character_name}}} {{name=Charisme}} {{subtags=Test}} {{carac=[[@{pnj_jetcha}cs20cf1[Dé] + [[@{pnj_cha}]][CHA] ]] }}"
|
|
>
|
|
CHA
|
|
</button>
|
|
</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"> </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} @{token_dsp} {{perso=@{character_name}}} {{name=Initiative}} {{subtags=Combat}} {{carac=[[@{pnj_init}[Init.] + @{pnj_init_var}[Dé(s)] &{tracker}]]}}"
|
|
>
|
|
Init.
|
|
</button>
|
|
</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
|
|
<input
|
|
type="number"
|
|
class="sheet-carac sheet-align-right"
|
|
style="width: 30px"
|
|
name="attr_pnj_rd"
|
|
title="@{pnj_rd} Réduction DM"
|
|
/>
|
|
</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_pnj_def"
|
|
type="number"
|
|
title="@{pnj_def}"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col" style="width: 25%">
|
|
<div class="sheet-boxtitre">DEP</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_pnj_dep"
|
|
type="number"
|
|
title="@{pnj_dep}"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
<div class="sheet-3colrow">
|
|
<div class="sheet-col" style="width: 25%">
|
|
<div class="sheet-boxtitre">
|
|
PV
|
|
<input
|
|
type="number"
|
|
class="sheet-carac sheet-align-right"
|
|
style="width: 35px"
|
|
name="attr_pnj_sbg"
|
|
title="@{pnj_sbg} Seuil de Blessure Grave"
|
|
/>
|
|
</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 class="sheet-col" style="width: 25%"></div>
|
|
<div class="sheet-col" style="width: 25%"></div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<div class="sheet-row">
|
|
<span class="sheet-textfatleft">Bio</span>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<textarea
|
|
name="attr_pnj_bio"
|
|
style="border: 1px solid; height: 8em"
|
|
title="@{pnj_bio}"
|
|
></textarea>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-textfatleft">Divers</span>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<textarea
|
|
name="attr_pnj_divers"
|
|
style="border: 1px solid; height: 12em"
|
|
title="@{pnj_divers}"
|
|
></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
<img
|
|
class="sheet-imghr-up"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png"
|
|
/>
|
|
<div class="sheet-row">
|
|
<div class="sheet-row">
|
|
<table>
|
|
<tr>
|
|
<td
|
|
class="sheet-textfatleft"
|
|
style="width: 250px"
|
|
title="repeating_pnjatk"
|
|
>
|
|
Attaques
|
|
</td>
|
|
<td class="sheet-textbase" style="width: 55px">Toucher</td>
|
|
<td class="sheet-textbase" style="width: 55px">Crit.</td>
|
|
<td class="sheet-textbase" style="width: 150px">DM</td>
|
|
<td class="sheet-textbase" style="width: 50px">Portée</td>
|
|
<td class="sheet-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} @{token_dsp} {{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 disabled class="sheet-optgroup">
|
|
Normaux
|
|
</option>
|
|
<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 disabled class="sheet-optgroup">
|
|
Sans limite
|
|
</option>
|
|
<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"> </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="sheet-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} @{token_dsp} {{perso=@{character_name}}} {{subtags=Capacité}} {{name=@{capanom}}} {{text=@{capadesc}}}"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 200px">
|
|
<input
|
|
type="text"
|
|
class="sheet-carac"
|
|
style="width: 200px"
|
|
name="attr_capanom"
|
|
title="@{capanom} Nom de la capacité"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<textarea
|
|
class="sheet-carac"
|
|
name="attr_capadesc"
|
|
title="@{capadesc} Description de la capacité"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-tab-content sheet-tab2">
|
|
<div class="sheet-3colrow">
|
|
<div class="sheet-col">
|
|
<span class="sheet-textbase">Jets</span>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 80px"
|
|
name="attr_pnj_togm"
|
|
title="@{pnj_togm}"
|
|
size="1"
|
|
>
|
|
<option value="" selected>Publics</option>
|
|
<option value="/w gm ">Cachés</option></select
|
|
>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 130px"
|
|
name="attr_token_dsp"
|
|
title="@{token_dsp}"
|
|
size="1"
|
|
>
|
|
<option value="" selected>Sans token</option>
|
|
<option value=" {{token=[x](@{token_url}) }} ">Avec token</option>
|
|
</select>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<span class="sheet-textbase">Initiative variable</span> <input
|
|
type="checkbox"
|
|
name="attr_pnj_init_var"
|
|
title="@{pnj_init_var}"
|
|
value="[[1d6!]]"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col"></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 un 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: 15em"
|
|
placeholder="Coller ici un statblock copié depuis le PDF"
|
|
></textarea>
|
|
</div>
|
|
<div class="sheet-col">
|
|
Attention de supprimer les sauts de ligne dans les descriptions des capacités avant d'importer !<br>
|
|
<button
|
|
type="action"
|
|
name="act_statblockimport"
|
|
class="sheet-flatbtn sheet-iconbtn"
|
|
title="Importer le stat-block"
|
|
>
|
|
W
|
|
</button>Import
|
|
<textarea
|
|
name="attr_sbresult"
|
|
style="border: 1px solid; height: 10em"
|
|
></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-tab-content sheet-fp4">
|
|
<input
|
|
type="radio"
|
|
name="attr_tab_mecha"
|
|
class="sheet-tab sheet-tab1"
|
|
value="caracs"
|
|
checked="checked"
|
|
/><span title="Caractéristiques"></span>
|
|
<input
|
|
type="radio"
|
|
name="attr_tab_mecha"
|
|
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="sheet-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_mec_for"
|
|
title="%{mec_for} Jet de Puissance"
|
|
value="@{mec_togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{name=Puissance (FOR)}} {{subtags=Test}} {{carac=[[@{mec_jetfor}cs20cf1[Dé] + [[@{mec_for}]][FOR] ]] }}"
|
|
>
|
|
FOR
|
|
</button>
|
|
</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_for"
|
|
type="number"
|
|
title="@{mec_for}"
|
|
value="0"
|
|
/>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_mec_jetfor"
|
|
title="@{mec_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_mec_dex"
|
|
title="%{mec_dex} Jet de Mobilité"
|
|
value="@{mec_togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{name=Mobilité (DEX)}} {{subtags=Test}} {{carac=[[@{mec_jetdex}cs20cf1[Dé] + [[@{mec_dex}]][DEX] + [[@{mec_crew_dex}]][Bonus équipage] ]] }}"
|
|
>
|
|
DEX
|
|
</button>
|
|
</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_mec_dex"
|
|
type="number"
|
|
title="@{mec_dex}"
|
|
value="0"
|
|
/>
|
|
(+<span
|
|
name="attr_mec_crew_dex"
|
|
title="@{mec_crew_dex} Bonus d'équipage (FOR/Pilotage)"
|
|
></span
|
|
>)
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_mec_jetdex"
|
|
title="@{mec_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_mec_con"
|
|
title="%{mec_con} Jet de Châssis"
|
|
value="@{mec_togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{name=Châssis (CON)}} {{subtags=Test}} {{carac=[[@{mec_jetcon}cs20cf1[Dé] + [[@{mec_con}]][CON] ]] }}"
|
|
>
|
|
CON
|
|
</button>
|
|
</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_con"
|
|
type="number"
|
|
title="@{mec_con}"
|
|
value="0"
|
|
/>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_mec_jetcon"
|
|
title="@{mec_jetcon}"
|
|
>
|
|
<option value="1d20" selected>N - Normale</option>
|
|
<option value="2d20kh1">S - Supérieure</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
<div class="sheet-3colrow">
|
|
<div class="sheet-col" style="width: 25%">
|
|
<div class="sheet-boxtitre">
|
|
<button
|
|
class="sheet-boxtitre"
|
|
type="roll"
|
|
name="roll_mec_int"
|
|
title="%{mec_int} Jet d'Ordinateur de Visée"
|
|
value="@{mec_togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{name=Ord. Visée (INT)}} {{subtags=Test}} {{carac=[[@{mec_jetint}cs20cf1[Dé] + [[@{mec_int}]][INT] ]] }}"
|
|
>
|
|
INT
|
|
</button>
|
|
</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_mec_int"
|
|
type="number"
|
|
title="@{mec_int}"
|
|
value="0"
|
|
/>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_mec_jetint"
|
|
title="@{mec_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_mec_per"
|
|
title="%{mec_per} Jet de Senseurs"
|
|
value="@{mec_togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{name=Senseurs (PER)}} {{subtags=Test}} {{carac=[[@{mec_jetper}cs20cf1[Dé] + [[@{mec_per}]][PER] + [[@{mec_crew_per}]][Bonus équipage] ]] }}"
|
|
>
|
|
PER
|
|
</button>
|
|
</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_mec_per"
|
|
type="number"
|
|
title="@{mec_per}"
|
|
value="0"
|
|
/>
|
|
(+<span
|
|
name="attr_mec_crew_per"
|
|
title="@{mec_crew_per} Bonus d'équipage (INT/Electronique)"
|
|
></span
|
|
>)
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_mec_jetper"
|
|
title="@{mec_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_mec_cha"
|
|
title="%{mec_cha} Jet de Gestion de Chaleur"
|
|
value="@{mec_togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{name=Gest. Chaleur (CHA)}} {{subtags=Test}} {{carac=[[@{mec_jetcha}cs20cf1[Dé] + [[@{mec_cha}]][CHA] + [[@{mec_crew_cha}]][Bonus équipage] ]] }}"
|
|
>
|
|
CHA
|
|
</button>
|
|
</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_mec_cha"
|
|
type="number"
|
|
title="@{mec_cha}"
|
|
value="0"
|
|
/>
|
|
(+<span
|
|
name="attr_mec_crew_cha"
|
|
title="@{mec_crew_cha} Bonus d'équipage (INT/Moteurs)"
|
|
></span
|
|
>)
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 30px"
|
|
name="attr_mec_jetcha"
|
|
title="@{mec_jetcha}"
|
|
>
|
|
<option value="1d20" selected>N - Normale</option>
|
|
<option value="2d20kh1">S - Supérieure</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
<div class="sheet-3colrow">
|
|
<div class="sheet-col" style="width: 25%">
|
|
<div class="sheet-boxtitre">
|
|
<button
|
|
class="sheet-boxtitre"
|
|
type="roll"
|
|
name="roll_mec_init"
|
|
title="%{mec_init} Jet d'Initiative"
|
|
value="@{mec_togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{name=Initiative}} {{subtags=Combat}} {{carac=[[@{mec_init}[Init.] + @{mec_init_var}[Dé(s)] &{tracker}]]}}"
|
|
>
|
|
Init.
|
|
</button>
|
|
</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_init"
|
|
type="number"
|
|
title="@{mec_init}"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col" style="width: 25%">
|
|
<div class="sheet-boxtitre">DEF</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_defrap"
|
|
type="number"
|
|
title="@{mec_defrap} DEF (rapidité)"
|
|
/> /
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_defsol"
|
|
type="number"
|
|
title="@{mec_defsol} DEF (solidité)"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col" style="width: 25%">
|
|
<div class="sheet-boxtitre">
|
|
PV
|
|
<select
|
|
class="sheet-selectmin sheet-align-right"
|
|
style="width: 25px"
|
|
name="attr_mec_dv"
|
|
title="@{mec_dv} Dé de structure"
|
|
>
|
|
<option value="4">d4</option>
|
|
<option value="8">d8</option>
|
|
<option value="10">d10</option>
|
|
</select>
|
|
</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_pv"
|
|
type="number"
|
|
title="@{mec_pv} PV courants"
|
|
/>
|
|
/
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_pv_max"
|
|
type="number"
|
|
title="@{mec_pv|max} PV MAX"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<div class="sheet-row">
|
|
<span class="textfatleft">Mécanique</span>
|
|
</div>
|
|
<div class="sheet-2colrow">
|
|
<div class="sheet-col">
|
|
<div class="sheet-boxtitre">Vitesse</div>
|
|
<div class="sheet-boxinput">
|
|
<select
|
|
class="sheet-carac"
|
|
name="attr_mec_vitesse_base"
|
|
title="@{mec_vitesse_base} Vitesse de base"
|
|
>
|
|
<option value="5">5 m</option>
|
|
<option value="15">15 m</option>
|
|
<option value="30">30 m</option>
|
|
</select>
|
|
/
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_vitesse"
|
|
type="number"
|
|
title="@{mec_vitesse} Vitesse"
|
|
value="0"
|
|
/> m
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<div class="sheet-boxtitre">Refroidissement</div>
|
|
<div class="sheet-boxinput">
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_froid"
|
|
type="number"
|
|
title="@{mec_froid} Capacité de refroidissement"
|
|
/>
|
|
/
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_froid_max"
|
|
type="number"
|
|
title="@{mec_froid|MAX} Capacité de refroidissement MAX"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-textfatleft">Attaques</span>
|
|
</div>
|
|
<div class="sheet-2colrow">
|
|
<div class="sheet-col">
|
|
<div class="sheet-boxtitre">Contact</div>
|
|
<div class="sheet-boxinput">
|
|
Base :
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_atc"
|
|
type="number"
|
|
title="@{mec_atc} Attaque au contact"
|
|
/>
|
|
+ Div :
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_atcdiv"
|
|
type="number"
|
|
title="@{mec_atcdiv} Bonus divers"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-col">
|
|
<div class="sheet-boxtitre">Distance</div>
|
|
<div class="sheet-boxinput">
|
|
Base :
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_atd"
|
|
type="number"
|
|
title="@{mec_atd} Attaque à distance"
|
|
/>
|
|
+ Div :
|
|
<input
|
|
class="sheet-carac"
|
|
name="attr_mec_atddiv"
|
|
type="number"
|
|
title="@{mec_atddiv} Bonus divers"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<span class="sheet-textfatleft">Equipage</span>
|
|
</div>
|
|
<div class="sheet-row">
|
|
<div class="sheet-col" style="width: 100%">
|
|
<ol>
|
|
<li style="padding: 2px">
|
|
<input
|
|
type="text"
|
|
class="sheet-carac"
|
|
style="width: 50%"
|
|
name="attr_mec_crew1_name"
|
|
title="@{mec_crew1_name}"
|
|
placeholder="Nom"
|
|
/>
|
|
<select
|
|
class="sheet-carac"
|
|
name="attr_mec_crew1_car"
|
|
title="@{mec_crew1_car} Carac. du mécha ajustée"
|
|
>
|
|
<option value="dex" selected>DEX</option>
|
|
<option value="cha">CHA</option>
|
|
<option value="per">PER</option>
|
|
</select>
|
|
<input
|
|
type="number"
|
|
name="attr_mec_crew1_bonus"
|
|
class="sheet-carac"
|
|
title="@{mec_crew1_bonus} Carac. du méchanaute"
|
|
/>
|
|
<input
|
|
type="number"
|
|
name="attr_mec_crew1_rank"
|
|
class="sheet-carac"
|
|
title="@{mec_crew1_rank} Rang de voie prérequise"
|
|
/>
|
|
<input
|
|
type="checkbox"
|
|
name="attr_mec_crew1_status"
|
|
title="@{mec_crew1_status} Membre d'équipage valide"
|
|
value="1"
|
|
checked
|
|
/>
|
|
</li>
|
|
<li style="padding: 2px">
|
|
<input
|
|
type="text"
|
|
class="sheet-carac"
|
|
style="width: 50%"
|
|
name="attr_mec_crew2_name"
|
|
title="@{mec_crew2_name}"
|
|
placeholder="Nom"
|
|
/>
|
|
<select
|
|
class="sheet-carac"
|
|
name="attr_mec_crew2_car"
|
|
title="@{mec_crew2_car} Carac. du mécha ajustée"
|
|
>
|
|
<option value="dex">DEX</option>
|
|
<option value="cha">CHA</option>
|
|
<option value="per">PER</option>
|
|
</select>
|
|
<input
|
|
type="number"
|
|
name="attr_mec_crew2_bonus"
|
|
class="sheet-carac"
|
|
title="@{mec_crew2_bonus} Carac. du méchanaute"
|
|
/>
|
|
<input
|
|
type="number"
|
|
name="attr_mec_crew2_rank"
|
|
class="sheet-carac"
|
|
title="@{mec_crew2_rank} Rang de voie prérequise"
|
|
/>
|
|
<input
|
|
type="checkbox"
|
|
name="attr_mec_crew2_status"
|
|
title="@{mec_crew2_status} Membre d'équipage valide"
|
|
value="1"
|
|
/>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-row"> </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: 300px"
|
|
title="repeating_mecatk"
|
|
>
|
|
Attaques
|
|
</td>
|
|
<td class="textbase" style="width: 60px">Toucher</td>
|
|
<td class="textbase" style="width: 60px">Crit.</td>
|
|
<td class="textbase" style="width: 150px">DM</td>
|
|
<td class="textbase" style="width: 40px">Portée</td>
|
|
<td class="textbase">Spécial</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<fieldset class="repeating_mecatk">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 30px">
|
|
<button
|
|
type="roll"
|
|
class="sheet-neutre"
|
|
style="width: 25px"
|
|
name="roll_mecatk"
|
|
title="%{repeating_mecatk_$N_mecatk}"
|
|
value="@{mec_togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{subtags=Attaque}} {{name=@{atknom}}} {{portee=@{atkportee}}} {{@{atkatt}[[@{atkjet}cf<@{atkinct}cs>@{atkcrit}[Dé] + [[@{atktype}]][Attaque mecha] + [[@{crewint}]][Artilleur] + [[@{atkbonus}]][Bonus] ]]}} {{@{atkdmg}[[@{atkdmnbde}d@{atkdmde}[Dé DM] + [[@{atkdmbonus}]][Mod.DM] ]]}} {{special=@{atkspec}}} {{text=@{atkopts}}}"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 280px">
|
|
<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: 200px"
|
|
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="1d12">R Risque</option>
|
|
<option value="1d20" selected>N Normal</option>
|
|
<option value="2d20kh1">E Expert</option>
|
|
</select>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 35px"
|
|
name="attr_atktype"
|
|
title="@{atktype} Attaque au (C)ontact ou à (D)istance"
|
|
>
|
|
<option value="@{mec_atc}+@{mec_atcdiv}+" selected>
|
|
C Contact
|
|
</option>
|
|
<option value="@{mec_atd}+@{mec_atddiv}">D Distance</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 disabled class="sheet-optgroup">
|
|
Normaux
|
|
</option>
|
|
<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 disabled class="sheet-optgroup">
|
|
Sans limite
|
|
</option>
|
|
<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}"
|
|
placeholder="Autres effets"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="width: 30px"> </td>
|
|
<td class="sheet-boxinputleft" style="width: 280px">
|
|
<input
|
|
type="text"
|
|
class="sheet-carac"
|
|
style="width: 210px"
|
|
name="attr_atkcrew"
|
|
title="@{atkcrew} Nom de l'artilleur"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-carac"
|
|
name="attr_crewint_bonus"
|
|
title="@{crewint_bonus} Bonus artilleur (PER)"
|
|
/>
|
|
<input
|
|
type="number"
|
|
class="sheet-carac"
|
|
name="attr_crewint_rank"
|
|
title="@{crewint_rank} Bonus artilleur (Armes lourdes)"
|
|
/>
|
|
<input
|
|
type="checkbox"
|
|
name="attr_crewint_status"
|
|
title="@{mec_crewint_status} Membre d'équipage valide"
|
|
value="1"
|
|
checked
|
|
/>
|
|
<input
|
|
type="hidden"
|
|
class="sheet-carac"
|
|
name="attr_crewint"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<input
|
|
type="number"
|
|
style="width: 32px"
|
|
name="attr_atkinct"
|
|
min="0"
|
|
max="19"
|
|
value="1"
|
|
title="@{atkinct} Seuil d'incident de tir (par défaut 1)"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft" colspan="3">
|
|
<textarea
|
|
class="sheet-carac"
|
|
name="attr_atkopts"
|
|
title="@{atkopts}"
|
|
placeholder="Options, équipement spécial"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
<div class="sheet-row"> </div>
|
|
<img
|
|
class="sheet-imghr-up"
|
|
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/cog_hr.png"
|
|
/>
|
|
<div class="sheet-row">
|
|
<div class="sheet-row">
|
|
<span class="sheet-textfatleft">Options / Equipement</span>
|
|
</div>
|
|
<fieldset class="repeating_mecopt">
|
|
<table class="sheet-tabsep">
|
|
<tr>
|
|
<td style="width: 30px">
|
|
<button
|
|
type="roll"
|
|
class="sheet-neutre"
|
|
style="width: 25px"
|
|
name="roll_mecopt"
|
|
title="%{repeating_mecopt_$N_mecopt}"
|
|
value="@{mec_togm}&{template:co1} @{token_dsp} {{perso=@{character_name}}} {{subtags=Option}} {{name=@{opt_nom}}} {{text=@{opt_desc}}}"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft" style="width: 200px">
|
|
<input
|
|
type="text"
|
|
class="sheet-carac"
|
|
style="width: 200px"
|
|
name="attr_opt_nom"
|
|
title="@{opt_nom} Nom de l'option"
|
|
/>
|
|
</td>
|
|
<td class="sheet-boxinputleft">
|
|
<textarea
|
|
class="sheet-carac"
|
|
name="attr_opt_desc"
|
|
title="@{opt_desc} Description de l'option"
|
|
></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-tab-content sheet-tab2">
|
|
<div class="sheet-2colrow">
|
|
<div class="sheet-col">
|
|
<ul>
|
|
<li>
|
|
Jets
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 80px"
|
|
name="attr_mec_togm"
|
|
title="@{mec_togm}"
|
|
size="1"
|
|
>
|
|
<option value="" selected>Publics</option>
|
|
<option value="/w gm ">Cachés</option></select
|
|
>
|
|
<select
|
|
class="sheet-carac"
|
|
style="width: 130px"
|
|
name="attr_token_dsp"
|
|
title="@{token_dsp}"
|
|
size="1"
|
|
>
|
|
<option value="" selected>Sans token</option>
|
|
<option value=" {{token=[x](@{token_url}) }} ">
|
|
Avec token
|
|
</option>
|
|
</select>
|
|
</li>
|
|
<li>
|
|
Initiative variable
|
|
<input
|
|
type="checkbox"
|
|
name="attr_mec_init_var"
|
|
title="@{mec_init_var}"
|
|
value="[[1d6!]]"
|
|
/>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="sheet-col"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- FIN FDP -->
|
|
<!-- TEMPLATES -->
|
|
<rolltemplate class="sheet-rolltemplate-co1">
|
|
<div class="sheet-roundtable">
|
|
<table>
|
|
{{^token}}
|
|
<tr>
|
|
<th colspan="2" style="text-align: center">{{perso}}</th>
|
|
</tr>
|
|
{{/token}}
|
|
{{#token}}
|
|
<tr>
|
|
<th style="height: 50px; width: 50px">{{token}}</th>
|
|
<th style="text-align: center">{{perso}}</th>
|
|
</tr>
|
|
{{/token}}
|
|
</table>
|
|
<table>
|
|
<tr>
|
|
<td class="sheet-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="sheet-desc">{{desc}}</div>
|
|
</td>
|
|
</tr>
|
|
{{/desc}}
|
|
{{#DV}}
|
|
<tr>
|
|
<td class="sheet-tcat">PV gagnés</td>
|
|
<td>{{DV}}</td>
|
|
</tr>
|
|
{{/DV}}
|
|
{{#RECUP}}
|
|
<tr>
|
|
<td class="sheet-tcat">PV récupérés</td>
|
|
<td>{{RECUP}}</td>
|
|
</tr>
|
|
{{/RECUP}}
|
|
{{#carac}}
|
|
<tr>
|
|
{{#jet}}
|
|
<td class="sheet-tcat">{{jet}}</td>
|
|
{{/jet}}
|
|
{{^jet}}
|
|
<td class="sheet-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="sheet-desc"><b>{{test_crit}}</b></div>
|
|
</td>
|
|
</tr>
|
|
{{/rollWasCrit() test}}
|
|
{{#rollWasFumble() test}}
|
|
<tr>
|
|
<td colspan="2" style="color: red">
|
|
<div class="sheet-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> [Incident de tir](~target|incident_tir)
|
|
</td>
|
|
</tr>
|
|
{{/rollWasFumble() attaque}}
|
|
<tr>
|
|
<td class="sheet-tcat">Jet</td>
|
|
<td>{{attaque}}</td>
|
|
</tr>
|
|
{{#degats}}
|
|
<tr>
|
|
<td colspan="2"> </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="sheet-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 class="sheet-txt-right">+</td>
|
|
<td><span style="color: steelblue">{{degats2}} {{dm2type}}</span></td>
|
|
</tr>
|
|
{{/degats2}}
|
|
{{/degats}}
|
|
{{/attaque}}
|
|
{{^attaque}}
|
|
{{#degats}}
|
|
<tr>
|
|
<td class="sheet-tcat">Dégâts</td>
|
|
<td>{{degats}} {{dmtype}}</td>
|
|
</tr>
|
|
{{#degats2}}
|
|
<tr>
|
|
<td class="sheet-txt-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="sheet-desc">{{special}}</div>
|
|
</td>
|
|
</tr>
|
|
{{/special}}
|
|
{{#text}}
|
|
<tr>
|
|
<td colspan="2" style="white-space: normal; margin: 1px">
|
|
<div class="sheet-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 ²ERS -->
|
|
<script type="text/worker">
|
|
|
|
const SHEET_PC = 'pj';
|
|
const SHEET_STARSHIP = 'vaisseau';
|
|
const SHEET_NPC = 'pnj';
|
|
const SHEET_MECHA = 'mecha';
|
|
|
|
/**
|
|
* settings global object
|
|
*/
|
|
const wkrSettings = {
|
|
debugMode: false,
|
|
};
|
|
|
|
/**
|
|
* Convert to integer
|
|
* @param {string} value value to cast
|
|
* @param {int} onError default value on error
|
|
* @returns integer value
|
|
*/
|
|
function int(value, onError = 0) {
|
|
return parseInt(value) || onError;
|
|
}
|
|
|
|
/**
|
|
* Convert to float
|
|
* @param {string} value value to cast
|
|
* @param {float} onError default value on error
|
|
* @returns float value
|
|
*/
|
|
function float(value, onError = 0) {
|
|
return parseFloat(value) || onError;
|
|
}
|
|
|
|
/**
|
|
* Get string or empty value
|
|
* @param {string} value value to cast
|
|
* @param {string} onError default value on null/undefined
|
|
* @returns string value
|
|
*/
|
|
function stringOrDefault(value, onError = "") {
|
|
return value || onError;
|
|
}
|
|
|
|
/**
|
|
* Log to JS console with color & style
|
|
* @param {any} data data to log
|
|
* @param {string} title title of logged data
|
|
* @param {string} color color name for log line
|
|
* @param {string} style CSS style for log line
|
|
* @param {string} headerStyle CSS style for log title
|
|
*/
|
|
function clog(
|
|
data,
|
|
title = "",
|
|
color = { text:"green", back:"" },
|
|
style = "font-size:12px; font-weight:normal;",
|
|
headerStyle = "font-size:13px; font-weight:bold;") {
|
|
|
|
title = stringOrDefault(title, "");
|
|
if (title !== "") title = ` Sheet-Worker : ${title} `;
|
|
const titleStyle = `color:${color.text}; background-color:${color.back}; ${headerStyle} text-decoration:underline;`;
|
|
const textStyle = `color:${color.text}; background-color:${color.back}; ${style}`;
|
|
|
|
if (title) {
|
|
if (typeof data === "object") {
|
|
const output = `%c${title}`;
|
|
console.log(output, titleStyle, data);
|
|
} else {
|
|
const output = `%c${title} %c${data}`;
|
|
console.log(output, titleStyle, textStyle);
|
|
}
|
|
} else {
|
|
if (typeof data === "object") {
|
|
console.log(data);
|
|
} else {
|
|
const output = `%c${data}`;
|
|
console.log(output, textStyle);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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 = int(value);
|
|
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 = stringOrDefault(delim, ':');
|
|
let parsed = {};
|
|
if (data.indexOf(delim) !== -1) {
|
|
const parts = data.split(delim);
|
|
let name = stringOrDefault(parts[0]).trim();
|
|
let value = '';
|
|
if (parts.length > 1) {
|
|
value = stringOrDefault(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}`);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Check if sheet is a vehicle
|
|
* @param {string} sheetTypeValue sheet type
|
|
* @returns {boolean}
|
|
*/
|
|
function isVehicle(sheetTypeValue) {
|
|
return [ SHEET_STARSHIP, SHEET_MECHA ].includes(sheetTypeValue);
|
|
}
|
|
|
|
/**
|
|
* Add a trait/ability to an NPC object
|
|
* @param {object} npcObj
|
|
* @param {object} traitObj
|
|
*/
|
|
function addTrait(npcObj, traitObj) {
|
|
if (traitObj.name !== '' && traitObj.desc !== '') {
|
|
if (!npcObj.abilities) npcObj.abilities = [];
|
|
npcObj.abilities.push({ name: traitObj.name , desc: traitObj.desc });
|
|
traitObj.name = '';
|
|
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, '+');
|
|
text = text.replace(/\t/g, ' ');
|
|
const npc = {
|
|
character_name: '',
|
|
NC: 0,
|
|
PROFIL: '',
|
|
TAILLE: '',
|
|
FOR: '',
|
|
DEX: '',
|
|
CON: '',
|
|
INT: '',
|
|
PER: '',
|
|
SAG: '',
|
|
CHA: '',
|
|
INIT: 0,
|
|
PV: 0,
|
|
DEF: 0,
|
|
DEP: 0,
|
|
RD: 0,
|
|
SBG: 0,
|
|
attacks: [],
|
|
abilities: [],
|
|
bio: []
|
|
};
|
|
// npc['ATP-PER'] = 0;
|
|
// npc['ATP-CHA'] = 0;
|
|
const rows = text.split(/\n/);
|
|
let attribs = false;
|
|
let attacks = false;
|
|
let abilities = false;
|
|
let ability = { name: '', desc: '' };
|
|
clog('<<<BEGIN>>>','statblock import');
|
|
rows.forEach(function (row, rowNum) {
|
|
let dataRow = row.trim();
|
|
clog(dataRow, 'statblock import -> parse row');
|
|
if (rowNum === 0) {
|
|
const values = dataRow.split(' ');
|
|
const ncix = values.findIndex(v => v.startsWith('NC'));
|
|
let nc = 0;
|
|
if (ncix !== -1) {
|
|
let nc = int(values[ncix + 1]);
|
|
if (nc === 0) {
|
|
nc = int(values[ncix].replace('NC', ''));
|
|
}
|
|
npc.NC = nc;
|
|
let profile = values.slice(0, ncix).join(' ');
|
|
npc.PROFIL = profile.substring(0, 1).toUpperCase() + profile.substring(1).toLowerCase();
|
|
}
|
|
return;
|
|
}
|
|
if (row.toLowerCase().startsWith('caract')) {
|
|
attribs = true;
|
|
attacks = false;
|
|
abilities = false;
|
|
return;
|
|
}
|
|
if (row.toLowerCase().startsWith('attaques')) {
|
|
attribs = false;
|
|
attacks = true;
|
|
abilities = false;
|
|
return;
|
|
}
|
|
if (row.toLowerCase().startsWith('capacit')) {
|
|
attribs = false;
|
|
attacks = false;
|
|
abilities = true;
|
|
return;
|
|
}
|
|
// reading description (before attributes)
|
|
if (!attribs && !attacks && !abilities) {
|
|
npc.bio.push(dataRow);
|
|
return;
|
|
}
|
|
// reading attacks list
|
|
if (attacks) {
|
|
const atkRow = dataRow.toUpperCase();
|
|
if (atkRow.indexOf('DM') !== -1) {
|
|
// this is an attack line, handle COG statblocks
|
|
dataRow = dataRow.replace(/ \(DM/g, ' DM');
|
|
dataRow = dataRow.replace(/ DM \(/g, ' DM ');
|
|
dataRow = dataRow.replace(/\)$/g, '');
|
|
console.log(dataRow);
|
|
npc.attacks.push(dataRow);
|
|
return;
|
|
}
|
|
}
|
|
if (abilities) {
|
|
// reading abilities list
|
|
|
|
let s = dataRow.indexOf('. ');
|
|
if (s !== -1) {
|
|
ability.name = dataRow.substring(0, s).trim();
|
|
ability.desc = dataRow.substring(s + 1).trim();
|
|
addTrait(npc, ability);
|
|
}
|
|
return;
|
|
}
|
|
// reading statistics
|
|
if (attribs) {
|
|
dataRow = dataRow.replace(/\) /g, ' ');
|
|
if (dataRow.toUpperCase().startsWith('PV')) dataRow = dataRow.replace('(', 'SBG ');
|
|
const items = dataRow.split(' ');
|
|
clog(items, 'statblock import -> attributes');
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
clog('<<<END>>>', 'statblock import');
|
|
|
|
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_sagper = '';
|
|
var pnj_jetsagper = '';
|
|
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 === 'COG') {
|
|
// 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 = int(pnjObj.NC);
|
|
delete pnjObj.NC;
|
|
pnjAttrs.TAILLE = stringOrDefault(pnjObj.TAILLE);
|
|
delete pnjObj.TAILLE;
|
|
if (pnjObj.PROFIL !== '') {
|
|
pnjAttrs.PROFIL = pnjObj.PROFIL;
|
|
}
|
|
delete pnjObj.PROFIL;
|
|
pnjAttrs.pnj_for = int(pnjObj.FOR.replace('*', ''));
|
|
pnjAttrs.pnj_jetfor =
|
|
pnjObj.FOR.charAt(pnjObj.FOR.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.FOR;
|
|
pnjAttrs.pnj_dex = int(pnjObj.DEX.replace('*', ''));
|
|
pnjAttrs.pnj_jetdex =
|
|
pnjObj.DEX.charAt(pnjObj.DEX.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.DEX;
|
|
pnjAttrs.pnj_con = int(pnjObj.CON.replace('*', ''));
|
|
pnjAttrs.pnj_jetcon =
|
|
pnjObj.CON.charAt(pnjObj.CON.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.CON;
|
|
pnjAttrs.pnj_int = int(pnjObj.INT.replace('*', ''));
|
|
pnjAttrs.pnj_jetint =
|
|
pnjObj.INT.charAt(pnjObj.INT.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.INT;
|
|
pnjAttrs[pnj_sagper] = int(sagOrPer.replace('*', ''));
|
|
pnjAttrs[pnj_jetsagper] =
|
|
sagOrPer.charAt(sagOrPer.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.SAG;
|
|
delete pnjObj.PER;
|
|
pnjAttrs.pnj_cha = int(pnjObj.CHA.replace('*', ''));
|
|
pnjAttrs.pnj_jetcha =
|
|
pnjObj.CHA.charAt(pnjObj.CHA.length - 1) == '*' ? jsup : jnor;
|
|
delete pnjObj.CHA;
|
|
pnjAttrs.pnj_init = int(pnjObj.INIT);
|
|
delete pnjObj.INIT;
|
|
pnjAttrs.pnj_def = int(pnjObj.DEF);
|
|
delete pnjObj.DEF;
|
|
if (universe === 'CG') {
|
|
pnjAttrs.pnj_dep = int(pnjObj.DEP);
|
|
}
|
|
delete pnjObj.DEP;
|
|
pnjAttrs.pnj_pv = int(pnjObj.PV);
|
|
pnjAttrs.pnj_pv_max = int(pnjObj.PV);
|
|
delete pnjObj.PV;
|
|
pnjAttrs.pnj_sbg = int(pnjObj.SBG);
|
|
delete pnjObj.SBG;
|
|
pnjAttrs.pnj_rd = int(pnjObj.RD);
|
|
delete pnjObj.RD;
|
|
clog(pnjAttrs, 'statblock parser -> 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.attacks) {
|
|
const atkItems = atk.split(' ');
|
|
clog(atkItems, 'statblock parser -> 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 = int(atkItem.replace('+', ''));
|
|
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;
|
|
}
|
|
clog(atkNom + ' ' + atkBonus + ' ' + atkDM + ' ' + atkSpec, 'statblock parser -> attack');
|
|
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 = int(dm[0]);
|
|
if (atkNbDe === 0) {
|
|
atkDmg = '0'; // No damage dice, attack only
|
|
}
|
|
atkDe = dm[1];
|
|
if (universe === 'COC') {
|
|
atkDe += '!';
|
|
}
|
|
atkBonusDM = int(dm[2]);
|
|
}
|
|
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;
|
|
}
|
|
clog(atkRow, 'statblock parser -> 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`] = int(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;
|
|
clog(atkRow, 'statblock parser -> adding psi 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 ability of pnjObj.abilities) {
|
|
if (ability.hasOwnProperty('name') && ability.hasOwnProperty('desc')) {
|
|
let reload = '';
|
|
let desc = stringOrDefault(ability.desc);
|
|
let name = stringOrDefault(ability.name);
|
|
let p = name.indexOf(' (');
|
|
if (p !== -1) {
|
|
const action = name.replace(' (', '\n').replace(')','').split('\n');
|
|
if (action[1]) {
|
|
if (!action[1].startsWith('L')
|
|
&& !action[1].startsWith('A')
|
|
&& !action[1].startsWith('M')) {
|
|
name = action[0];
|
|
desc += '\n' + '**' + action[1] + '**';
|
|
if (action[1].indexOf('Recharge') === 0) {
|
|
const target = action[1].split(' ')[1];
|
|
reload = `}} {{test=[[1d6cf0cs>${ target.substring(0,1) }]]}} {{test_crit=Capacité rechargée !`;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (name !== '' && desc !== '') {
|
|
newRowID = 'repeating_pnjcapas_' + generateRowID();
|
|
let abilityRow = {};
|
|
abilityRow[`${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, '} ]]');
|
|
abilityRow[`${newRowID}_capadesc`] = desc + reload;
|
|
clog(abilityRow, 'statblock parser -> adding trait');
|
|
setAttrs(abilityRow);
|
|
}
|
|
} 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(
|
|
[
|
|
'FOR',
|
|
'DEX',
|
|
'CON',
|
|
'INT',
|
|
'PER',
|
|
'CHA',
|
|
'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 (let car in values) {
|
|
let vcar = values[car];
|
|
if (vcar && !isNaN(vcar)) vcar = int(vcar);
|
|
if (car.startsWith('RANG_')) {
|
|
if (!caracs.hasOwnProperty('rangs'))
|
|
caracs.rangs = [0, 0, 0, 0, 0, 0, 0, 0, 0];
|
|
let voie = int(car.substring(car.length - 1));
|
|
if (voie > 0) caracs.rangs[voie - 1] = vcar;
|
|
} else if (car.startsWith('voie') && car.endsWith('nom')) {
|
|
if (!caracs.hasOwnProperty('voies'))
|
|
caracs.voies = ['', '', '', '', '', '', '', '', ''];
|
|
let voie = int(car.substring(4, 5));
|
|
if (voie > 0 && vcar) caracs.voies[voie - 1] = vcar.toUpperCase();
|
|
} else {
|
|
caracs[car] = vcar;
|
|
}
|
|
}
|
|
setAttrs({
|
|
CARACS: JSON.stringify(caracs),
|
|
});
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* On clicking JSON profile import button
|
|
* - parse and update profile's path & abilities
|
|
*/
|
|
on('clicked:importprofile', function () {
|
|
getAttrs(['json_profile'], function (value) {
|
|
if (value.json_profile.trim() === '') return;
|
|
const jsonData = JSON.parse(value.json_profile);
|
|
const attrs = {
|
|
json_profile: '',
|
|
PROFIL: jsonData.profile,
|
|
FAMILLE: jsonData.family,
|
|
};
|
|
jsonData.paths.forEach((path, ix) => {
|
|
attrs[`voie${ix + 1}nom`] = path.name;
|
|
path.abilities.forEach((ability, rank) => {
|
|
if (typeof ability === 'string') {
|
|
attrs[`voie${ix + 1}-t${rank + 1}`] = ability;
|
|
} else {
|
|
attrs[`voie${ix + 1}-t${rank + 1}`] = ability.name;
|
|
attrs[`voie${ix + 1}-${rank + 1}`] = ability.description;
|
|
}
|
|
});
|
|
});
|
|
clog(attrs, 'JSON profile parser');
|
|
setAttrs(attrs);
|
|
buildCaracs();
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Sheet migrations
|
|
*/
|
|
function migrateSheetV1_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}';
|
|
}
|
|
a;
|
|
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',
|
|
});
|
|
}
|
|
);
|
|
}
|
|
|
|
function migrateSheetV3() {
|
|
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 = int(values.FOR_BONUS);
|
|
let for_bonus_desc = for_bonus !== 0 ? 'Bonus FOR' : '';
|
|
let dex_bonus = int(values.DEX_BONUS);
|
|
let dex_bonus_desc = dex_bonus !== 0 ? 'Bonus DEX' : '';
|
|
let con_bonus = int(values.CON_BONUS);
|
|
let con_bonus_desc = con_bonus !== 0 ? 'Bonus CON' : '';
|
|
let int_bonus = int(values.INT_BONUS);
|
|
let int_bonus_desc = int_bonus !== 0 ? 'Bonus INT' : '';
|
|
let per_bonus = int(values.PER_BONUS);
|
|
let per_bonus_desc = per_bonus !== 0 ? 'Bonus PER' : '';
|
|
let cha_bonus = int(values.CHA_BONUS);
|
|
let cha_bonus_desc = cha_bonus !== 0 ? 'Bonus CHA' : '';
|
|
let atkcac_div = int(values.ATKCAC_DIV);
|
|
let atkcac_bonus_desc = atkcac_div !== 0 ? 'Bonus ATC' : '';
|
|
let atktir_div = int(values.ATKTIR_DIV);
|
|
let atktir_bonus_desc = atktir_div !== 0 ? 'Bonus ATD' : '';
|
|
let atkmag_div = int(values.ATKMAG_DIV);
|
|
let atkmag_bonus_desc = atkmag_div !== 0 ? 'Bonus MAG' : '';
|
|
let atkmen_div = int(values.ATKMEN_DIV);
|
|
let atkmen_bonus_desc = atkmen_div !== 0 ? 'Bonus MEN' : '';
|
|
let psyinflu_div = int(values.ATKPSYINFLU_DIV);
|
|
let psyinflu_bonus_desc = psyinflu_div !== 0 ? 'Bonus Psy Inf.' : '';
|
|
let psyintui_div = int(values.ATKPSYINTUI_DIV);
|
|
let psyintui_bonus_desc = psyintui_div !== 0 ? 'Bonus Psy Int.' : '';
|
|
let init_div = int(values.INIT_DIV);
|
|
let init_bonus_desc = init_div !== 0 ? 'Bonus Init.' : '';
|
|
let defdiv = int(values.DEFDIV);
|
|
let def_bonus_desc = defdiv !== 0 ? 'Bonus DEF' : '';
|
|
let depdiv = int(values.DEPDIV);
|
|
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',
|
|
});
|
|
}
|
|
);
|
|
}
|
|
|
|
function migrateSheetV3_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' });
|
|
}
|
|
});
|
|
}
|
|
|
|
function migrateSheetV3_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 = stringOrDefault(values[`${attr}_BUFF${b}_DESC`]);
|
|
let buff = int(values[`${attr}_BUFF${b}`]);
|
|
if (desc !== '') buffList.push(`${desc} : ${buff}`);
|
|
}
|
|
let buffAttr = {};
|
|
buffAttr[`${attr}_BUFF_LIST`] = buffList.join(';');
|
|
setAttrs(buffAttr);
|
|
});
|
|
}
|
|
setAttrs({ VERSION: '3.5' });
|
|
}
|
|
|
|
function migrateSheetV3_9() {
|
|
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 = stringOrDefault(values[buffs]);
|
|
if (buffList == '') {
|
|
continue;
|
|
}
|
|
for (const buff of buffList.split(';')) {
|
|
let buffName = stringOrDefault(buff.split(':')[0]);
|
|
let buffVal = stringOrDefault(buff.split(':')[1]);
|
|
if (buffName != '' && buffVal != '') {
|
|
buffName = buffName.trim().toLowerCase();
|
|
buffEnabled = !buffName.startsWith('-');
|
|
if (!buffEnabled) buffName = buffName.substring(1);
|
|
buffVal = buffVal.trim();
|
|
const newItem = {
|
|
name: buffName,
|
|
value: `${aliases[buffs]} : ${buffVal}`,
|
|
enabled: buffEnabled,
|
|
};
|
|
const foundItem = buffRepeat.findIndex(
|
|
(item) => item.name == newItem.name
|
|
);
|
|
if (foundItem == -1) {
|
|
buffRepeat.push(newItem);
|
|
} else {
|
|
buffRepeat[foundItem].value += `; ${newItem.value}`;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (const buffItem of buffRepeat) {
|
|
const rowId = 'repeating_buffs_' + generateRowID();
|
|
let newRow = {};
|
|
newRow[`${rowId}_buffon`] = buffItem.enabled ? '1' : '0';
|
|
newRow[`${rowId}_buffnom`] =
|
|
buffItem.name.substring(0, 1).toUpperCase() +
|
|
buffItem.name.substring(1);
|
|
newRow[`${rowId}_buffmods`] = buffItem.value;
|
|
setAttrs(newRow);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
function migrateSheetV3_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);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
function migrateSheetV3_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);
|
|
});
|
|
}
|
|
|
|
function migrateSheetV3_110() {
|
|
getAttrs(['type_personnage'], function (value) {
|
|
const physical = value.type_personnage === SHEET_STARSHIP ? '0' : '1';
|
|
attrs = { physical: physical };
|
|
if (value.type_personnage === SHEET_STARSHIP) attrs.lib_profil = 'Classe';
|
|
if (value.type_personnage === SHEET_STARSHIP) attrs.lib_famille = 'Taille';
|
|
setAttrs(attrs);
|
|
});
|
|
}
|
|
|
|
function migrateSheetV3_112() {
|
|
getAttrs(['type_personnage'], function (value) {
|
|
if (value.type_personnage === SHEET_STARSHIP) updateShipDEF();
|
|
});
|
|
}
|
|
|
|
function migrateSheetV3_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;
|
|
});
|
|
setAttrs(abilityAttrs);
|
|
});
|
|
}
|
|
|
|
function migrateSheetV4() {
|
|
updatePC();
|
|
updateINIT();
|
|
updateDEF();
|
|
updateDEP();
|
|
updateSEUILBG();
|
|
getAttrs(['UNIVERS', 'type_personnage'], function (values) {
|
|
if (values.UNIVERS !== 'CG' && values.UNIVERS !== 'COG') return;
|
|
if (values.UNIVERS === 'CG') {
|
|
setAttrs({ UNIVERS: 'COG' });
|
|
}
|
|
if (values.type_personnage === SHEET_PC) {
|
|
getAttrs(
|
|
['FOR_SUP', 'CON_SUP', 'INT_SUP', 'PER_SUP', 'CHA_SUP'],
|
|
function (values) {
|
|
setAttrs({
|
|
FOR_SUP: values.FOR_SUP.replace('JET', 'JP'),
|
|
CON_SUP: values.CON_SUP.replace('JET', 'JP'),
|
|
INT_SUP: values.INT_SUP.replace('JET', 'JM'),
|
|
PER_SUP: values.PER_SUP.replace('JET', 'JM'),
|
|
CHA_SUP: values.CHA_SUP.replace('JET', 'JM'),
|
|
});
|
|
}
|
|
);
|
|
}
|
|
});
|
|
|
|
setAttrs({
|
|
POSTE_PIL_OQP: 0,
|
|
POSTE_MOT_OQP: 0,
|
|
POSTE_SEN_OQP: 0,
|
|
POSTE_ORD_OQP: 0,
|
|
});
|
|
getSectionIDs('repeating_armesv', function (ids) {
|
|
attrs = {};
|
|
for (const id of ids) {
|
|
attrs[`repeating_armesv_${id}_armecan_oqp`] = 0;
|
|
}
|
|
setAttrs(attrs);
|
|
});
|
|
}
|
|
|
|
function migrateSheet(verfdp, newver) {
|
|
if (verfdp.major === 0) {
|
|
// Version 1.6 vers 1.7
|
|
migrateSheetV1_7();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
if (verfdp.major < 3) {
|
|
// version 2.0 > 3.0
|
|
migrateSheetV3();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
if (verfdp.major == 3 && verfdp.minor < 4) {
|
|
// version 3.3 > 3.4
|
|
migrateSheetV3_4();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
if (verfdp.major == 3 && verfdp.minor < 5) {
|
|
// version 3.4 > 3.5
|
|
migrateSheetV3_5();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
if (verfdp.major == 3 && verfdp.minor < 9) {
|
|
// version 3.50 > 3.90
|
|
migrateSheetV3_9();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
if (verfdp.major == 3 && verfdp.minor < 91) {
|
|
// version 3.90 > 3.91
|
|
migrateSheetV3_91();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
if (verfdp.major == 3 && verfdp.minor < 92) {
|
|
// version 3.91 > 3.92
|
|
migrateSheetV3_92();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
if (verfdp.major == 3 && verfdp.minor < 110) {
|
|
// version 3.92 > 3.110
|
|
migrateSheetV3_110();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
if (verfdp.major == 3 && verfdp.minor < 112) {
|
|
migrateSheetV3_112();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
if (verfdp.major == 3 && verfdp.minor < 114) {
|
|
migrateSheetV3_114();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
// update to COG v2
|
|
if (verfdp.major < 4) { // WILL NEED TO BE CHANGED TO MAJOR < 4
|
|
migrateSheetV4();
|
|
clog(newver, 'migrate sheet');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Parse semantic version label
|
|
* @param {string} version
|
|
* @returns version object
|
|
*/
|
|
function parseSemVer(version) {
|
|
version += '.0.0';
|
|
if (version.toLowerCase().startsWith('v')) version = version.slice(1);
|
|
const semVer = version.split('.');
|
|
return {
|
|
major: int(semVer[0]),
|
|
minor: int(semVer[1]),
|
|
patch: int(semVer[2]),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Get character token's URL
|
|
* @param {object} values attribute values
|
|
* @returns URL for character token
|
|
*/
|
|
function getTokenURL(values) {
|
|
const token_url_def =
|
|
'https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ChroniquesGalactiques/';
|
|
const starship = int(values.vehicle_starship);
|
|
const mecha = int(values.vehicle_mecha);
|
|
let token_url = stringOrDefault(values.character_token);
|
|
if (token_url !== '') token_url = token_url.split('?')[0];
|
|
if (token_url === '') {
|
|
if (starship && !mecha) token_url = 'starship.png';
|
|
if (mecha && !starship) token_url = 'mecha.png';
|
|
if (token_url !== '') token_url = token_url_def + token_url;
|
|
}
|
|
return token_url;
|
|
}
|
|
|
|
/**
|
|
* 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', 'debug_mode'], function (values) {
|
|
const debug_mode = int(values.debug_mode);
|
|
wkrSettings.debugMode = debug_mode === 1;
|
|
clog(
|
|
"Running sheetworker script... " + (wkrSettings.debugMode ? "DEBUG" : "PROD"),
|
|
"",
|
|
{ text:"white", back:"brown" }
|
|
);
|
|
let verfdp = parseSemVer(values.VERSION);
|
|
const newver = parseSemVer(values.VERFDP);
|
|
if (verfdp.major == 2020 && verfdp == 525) {
|
|
verfdp = parseSemVer(values.VERFDP);
|
|
}
|
|
if (
|
|
verfdp.major < newver.major ||
|
|
verfdp.minor < newver.minor ||
|
|
verfdp.patch < newver.patch
|
|
) {
|
|
migrateSheet(verfdp, newver);
|
|
}
|
|
setAttrs({ VERSION: values.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',
|
|
],
|
|
function (values) {
|
|
if (values.UNIVERS == 'CG') {
|
|
if (values.type_personnage == SHEET_STARSHIP && 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;
|
|
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,
|
|
PE_ONCE: '',
|
|
type_personnage: SHEET_STARSHIP,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
);
|
|
// MAJ LAST_PV
|
|
getAttrs(['PV'], function (v) {
|
|
setAttrs({ LAST_PV: v.PV });
|
|
});
|
|
// MAJ token
|
|
getAttrs(['vehicle_starship', 'vehicle_mecha', 'character_token'], function (values) {
|
|
const token_url = getTokenURL(values);
|
|
setAttrs({ token_url });
|
|
}
|
|
);
|
|
// ARMURE_MALUS
|
|
getAttrs(['ARMURE_MALUS'], function (v) {
|
|
if (!v.ARMURE_MALUS) {
|
|
setArmorMalus();
|
|
}
|
|
});
|
|
// seuil_enc (if needed)
|
|
getAttrs(['seuil_enc', 'FOR'], function (values) {
|
|
let seuil_enc = int(values.seuil_enc);
|
|
if (seuil_enc === 0) {
|
|
setAttrs({
|
|
seuil_enc: 10 + (int(values.FOR)) * 2,
|
|
});
|
|
}
|
|
});
|
|
// rebuild all
|
|
rebuildAll();
|
|
});
|
|
|
|
/**
|
|
* 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 });
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Update the xxx_TEST attributes
|
|
*/
|
|
function updateModTest(carac) {
|
|
getAttrs([`${carac}`, `${carac}_BUFF`], function (values) {
|
|
const attr = {};
|
|
let test = 0;
|
|
for (const value in values) {
|
|
test += int(values[value]);
|
|
}
|
|
attr[`${carac}_TEST`] = test;
|
|
setAttrs(attr);
|
|
});
|
|
}
|
|
|
|
on('change:for change:for_buff', function () {
|
|
updateModTest('FOR');
|
|
});
|
|
|
|
on('change:dex change:dex_buff', function () {
|
|
updateModTest('DEX');
|
|
});
|
|
|
|
on('change:con change:con_buff', function () {
|
|
updateModTest('CON');
|
|
});
|
|
|
|
on('change:int change:int_buff', function () {
|
|
updateModTest('INT');
|
|
});
|
|
|
|
on('change:per change:per_buff', function () {
|
|
updateModTest('PER');
|
|
});
|
|
|
|
on('change:cha change:cha_buff', function () {
|
|
updateModTest('CHA');
|
|
});
|
|
|
|
/**
|
|
* On changing base PC, CHA or addtl PC :
|
|
* - update max PC
|
|
*/
|
|
|
|
function updatePC() {
|
|
getAttrs(['PCBASE', 'CHA', 'PCDIV'], function (values) {
|
|
let pc_max = 0;
|
|
for (const value in values) {
|
|
pc_max += int(values[value]);
|
|
}
|
|
setAttrs({ PC_max: pc_max });
|
|
});
|
|
}
|
|
|
|
on('change:pcbase change:cha change:pcdiv', function () {
|
|
updatePC();
|
|
});
|
|
|
|
/**
|
|
* On changing CON or FOR :
|
|
* - update wounds threshold
|
|
*/
|
|
function updateSEUILBG() {
|
|
getAttrs(['CON', 'FOR'], function (values) {
|
|
let seuilbg = 10;
|
|
for (const value in values) {
|
|
seuilbg += int(values[value]);
|
|
}
|
|
setAttrs({ SEUILBG: seuilbg });
|
|
});
|
|
}
|
|
|
|
on('change:con change:for', function () {
|
|
updateSEUILBG();
|
|
});
|
|
|
|
/**
|
|
* 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, '');
|
|
clog(v, 'buff text parser');
|
|
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 = int(v.substring(4).trim());
|
|
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 int(bv) * bm;
|
|
}
|
|
|
|
/**
|
|
* 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);
|
|
}
|
|
clog(buffName, 'buff list parser');
|
|
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'];
|
|
const changed = e.sourceAttribute.toUpperCase();
|
|
if (!caracs.includes(changed)) 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(changed);
|
|
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:for',
|
|
'change:dex',
|
|
'change:con',
|
|
'change:int',
|
|
'change:per',
|
|
'change:cha',
|
|
'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(['DEX', 'PER', 'INIT_BUFF', 'ARMURE_MALUS'], function (values) {
|
|
let initVal = 10;
|
|
initVal += int(values.DEX);
|
|
initVal += int(values.PER);
|
|
initVal += int(values.INIT_BUFF);
|
|
initVal -= int(values.ARMURE_MALUS);
|
|
setAttrs({ INIT: initVal });
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On changing the relevant attributes
|
|
* Update the INIT(iative) attribute
|
|
*/
|
|
on(
|
|
['change:dex', 'change:per', 'change:init_buff', 'change:armure_malus'].join(
|
|
' '
|
|
),
|
|
function () {
|
|
updateINIT();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Update the DEF(ense) attribute
|
|
*/
|
|
function updateDEF() {
|
|
getAttrs(
|
|
[
|
|
'DEFARMURE',
|
|
'DEFARMUREON',
|
|
'DEFBOUCLIER',
|
|
'DEFBOUCLIERON',
|
|
'DEX',
|
|
'DEF_BUFF',
|
|
'DEFACT',
|
|
],
|
|
function (values) {
|
|
let defVal = 10;
|
|
defVal += int(values.DEFARMURE) * int(values.DEFARMUREON);
|
|
defVal += int(values.DEFBOUCLIER) * int(values.DEFBOUCLIERON);
|
|
defVal += int(values.DEX);
|
|
defVal += int(values.DEF_BUFF);
|
|
defVal += int(values.DEFACT);
|
|
setAttrs({ DEF: defVal });
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* On changing the relevant attributes
|
|
* Update the DEF(ense) attribute
|
|
*/
|
|
on(
|
|
[
|
|
'change:defarmure',
|
|
'change:defarmureon',
|
|
'change:defbouclier',
|
|
'change:defbouclieron',
|
|
'change:dex',
|
|
'change:def_buff',
|
|
'change:defact',
|
|
].join(' '),
|
|
function () {
|
|
updateDEF();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Update the DE(fense) P(sychique) attribute
|
|
*/
|
|
function updateDEP() {
|
|
getAttrs(['CHA', 'DEP_BUFF'], function (values) {
|
|
let depVal = 10;
|
|
depVal += int(values.CHA);
|
|
depVal += int(values.DEP_BUFF);
|
|
setAttrs({ DEP: depVal });
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On changing the relevant attributes
|
|
* Update the DE(fense) P(sychique) attribute
|
|
*/
|
|
on('change:cha change:dep_buff', function () {
|
|
updateDEP();
|
|
});
|
|
|
|
/**
|
|
* 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 = int(values[Object.keys(values)[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 += int(v[`${buffAttr}_BUFF${attr}`]);
|
|
}
|
|
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: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 = int(values.SEUILBG);
|
|
var max_pv = int(values.PV_max);
|
|
var last_pv = int(values.LAST_PV, max_pv);
|
|
var curr_pv = int(values.PV);
|
|
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:statblockimport', function () {
|
|
getAttrs(['UNIVERS', 'statblock'], function (values) {
|
|
if (values.statblock.trim() === '') return;
|
|
let messages = '';
|
|
// parse statblock text
|
|
pnjObj = importStatblock(values.statblock);
|
|
if (pnjObj) {
|
|
clog(pnjObj, 'statblock import -> NPC object');
|
|
// process characteristics & combat attributes
|
|
messages = processBaseAttributes(values.UNIVERS, pnjObj);
|
|
// process attack lines
|
|
if (pnjObj.attacks.length > 0) {
|
|
result = processAttacks(values.UNIVERS, pnjObj);
|
|
if (result != '' && messages != '') {
|
|
result = '\n' + result;
|
|
}
|
|
messages += result;
|
|
}
|
|
delete pnjObj.attacks;
|
|
// process trait/ability lines
|
|
if (pnjObj.abilities.length > 0) {
|
|
result = processTraits(values.UNIVERS, pnjObj);
|
|
if (result != '' && messages != '') {
|
|
result = '\n' + result;
|
|
}
|
|
messages += result;
|
|
}
|
|
delete pnjObj.abilities;
|
|
// get bio
|
|
let bio = '';
|
|
if (pnjObj.bio.length > 0) {
|
|
bio = pnjObj.bio.join(' ');
|
|
}
|
|
delete pnjObj.bio;
|
|
// Other attributes go to DIVERS field
|
|
let divers = '';
|
|
let otherAttrs = Object.keys(pnjObj);
|
|
clog(otherAttrs, 'statblock import -> additional data');
|
|
for (const other in otherAttrs) {
|
|
if (pnjObj[other] !== undefined)
|
|
divers += other + ' ' + pnjObj[other] + '\n';
|
|
}
|
|
setAttrs({
|
|
pnj_bio: bio,
|
|
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 ['FOR', 'DEX', 'CON', 'INT', 'PER', 'CHA']) {
|
|
let attrv = int(values[`pnj_${attr.toLowerCase()}`]);
|
|
attrs[attr] = attrv;
|
|
if (attr === 'DEX') {
|
|
let init = int(values.pnj_init);
|
|
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 = int(values.pnj_def);
|
|
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 === 'CHA') {
|
|
let depb = 10 + attrv;
|
|
let dep = int(values.pnj_dep);
|
|
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 = int(values.pnj_pv);
|
|
attrs.PV_max = int(values.pnj_pv_max);
|
|
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) {
|
|
clog(values, 'NPC to PC converter');
|
|
let v = {};
|
|
for (let attr of npcAtkAttribs) {
|
|
v[attr] = stringOrDefault(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 = int(v.atkbonus);
|
|
let atk = 0;
|
|
let bdm = 0;
|
|
if (v.atkportee && v.atkportee !== '') {
|
|
atk = int(values.pnj_dex);
|
|
if (psyint) atk = int(values.pnj_int);
|
|
if (psyinf) atk = int(values.pnj_cha);
|
|
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 = int(values.pnj_for);
|
|
if (psyint) atk = int(values.pnj_int);
|
|
if (psyinf) atk = int(values.pnj_cha);
|
|
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 = int(v.atkdmbonus);
|
|
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 === SHEET_NPC && eventInfo.newValue === 'pj')
|
|
convertToPC();
|
|
// if (eventInfo.previousValue === 'pj' && eventInfo.newValue === 'pnj') convertToNPC();
|
|
getAttrs(['type_personnage'], function (value) {
|
|
const pnj = value.type_personnage === SHEET_NPC;
|
|
const vehicle = isVehicle(value.type_personnage);
|
|
let attrs = {
|
|
type_fiche: value.type_personnage,
|
|
pnj_togm: pnj ? '/w gm ' : '',
|
|
physical: vehicle ? '0' : '1',
|
|
lib_profil: vehicle ? 'Classe' : 'Profil',
|
|
lib_famille: vehicle ? 'Taille' : 'Famille',
|
|
};
|
|
setAttrs(attrs);
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Return attributes array for a starship station
|
|
* @param {string} ship_attr Spaceship station shortname
|
|
* @param {string} crew_attr Crew station ability
|
|
*/
|
|
function attrStation(ship_attr, crew_attr) {
|
|
return [
|
|
`POSTE_${ship_attr}_OQP`,
|
|
`POSTE_${ship_attr}_NOM`,
|
|
`POSTE_${ship_attr}_BONUS`,
|
|
`POSTE_${ship_attr}_${crew_attr}`,
|
|
];
|
|
}
|
|
|
|
/**
|
|
* 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 = '';
|
|
let attrc = '';
|
|
if (attr === 'CAN') {
|
|
attrx = 'repeating_armesv_armecan_oqp';
|
|
attrn = 'repeating_armesv_armecan_nom';
|
|
attrc = 'repeating_armesv_armecan_dex';
|
|
attrb = 'repeating_armesv_armecan_bonus';
|
|
} else {
|
|
attrx = `POSTE_${attr}_OQP`;
|
|
attrn = `POSTE_${attr}_NOM`;
|
|
attrc = `POSTE_${attr}_${fill[0]}`;
|
|
attrb = `POSTE_${attr}_BONUS`;
|
|
}
|
|
let station_held = int(v[attrx]);
|
|
let station_crew = ' ' + stringOrDefault(v[attrn]);
|
|
if (station_held === 1 && station_crew.trim() === '')
|
|
station_crew = ' ' + fill[2];
|
|
let station_car = int(v[attrc]);
|
|
let station_bonus = int(v[attrb]);
|
|
let station_attr = '';
|
|
if (attr === 'CAN') {
|
|
station_attr = 'repeating_armesv_armecan';
|
|
} else {
|
|
station_attr = `POSTE_${attr}`;
|
|
}
|
|
station[
|
|
station_attr
|
|
] = `[[${station_car}*${station_held}]][${fill[0]}${station_crew}] + [[${station_bonus}*${station_held}]][${fill[1]}${station_crew}]`;
|
|
station[`EQUIP_${attr}`] = station_held === 1 ? station_crew.trim() : 'aucun';
|
|
setAttrs(station);
|
|
}
|
|
|
|
/**
|
|
* On change of spaceship stations character names or bonus
|
|
* - Rebuild hidden macro formulas
|
|
*/
|
|
on(
|
|
[
|
|
'change:poste_pil_oqp',
|
|
'change:poste_pil_nom',
|
|
'change:poste_pil_bonus',
|
|
'change:poste_pil_dex',
|
|
].join(' '),
|
|
function () {
|
|
getAttrs(attrStation('PIL', 'DEX'), function (values) {
|
|
setStation(values, 'PIL', ['DEX', 'Pilotage', 'pilote']);
|
|
});
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:poste_mot_oqp',
|
|
'change:poste_mot_nom',
|
|
'change:poste_mot_bonus',
|
|
'change:poste_pil_int',
|
|
].join(' '),
|
|
function () {
|
|
getAttrs(attrStation('MOT', 'INT'), function (values) {
|
|
setStation(values, 'MOT', ['INT', 'Moteurs', 'mécano']);
|
|
});
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:poste_sen_oqp',
|
|
'change:poste_sen_nom',
|
|
'change:poste_sen_bonus',
|
|
'change:poste_sen_int',
|
|
].join(' '),
|
|
function () {
|
|
getAttrs(attrStation('SEN', 'INT'), function (values) {
|
|
setStation(values, 'SEN', ['INT', 'Electronique', 'scantech']);
|
|
});
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:poste_ord_oqp',
|
|
'change:poste_ord_nom',
|
|
'change:poste_ord_bonus',
|
|
'change:poste_ord_int',
|
|
].join(' '),
|
|
function () {
|
|
getAttrs(attrStation('ORD', 'INT'), function (values) {
|
|
setStation(values, 'ORD', ['INT', 'Electronique', 'infotech']);
|
|
});
|
|
}
|
|
);
|
|
|
|
on(
|
|
[
|
|
'change:repeating_armesv:armecan_oqp',
|
|
'change:repeating_armesv:armecan_nom',
|
|
'change:repeating_armesv:armecan_bonus',
|
|
'change:repeating_armesv:armecan_dex',
|
|
].join(' '),
|
|
function () {
|
|
getAttrs(
|
|
[
|
|
'repeating_armesv_armecan_oqp',
|
|
'repeating_armesv_armecan_nom',
|
|
'repeating_armesv_armecan_bonus',
|
|
'repeating_armesv_armecan_dex',
|
|
],
|
|
function (values) {
|
|
setStation(values, 'CAN', ['DEX', 'Armes lourdes', 'canonnier']);
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Rebuild starship INITiative
|
|
*/
|
|
function updateShipInit() {
|
|
getAttrs(
|
|
[
|
|
'type_fiche',
|
|
'DEX',
|
|
'POSTE_PIL_OQP',
|
|
'POSTE_PIL_DEX',
|
|
'PER',
|
|
'POSTE_SEN_OQP',
|
|
'POSTE_SEN_INT',
|
|
],
|
|
function (values) {
|
|
if (values.type_fiche !== SHEET_STARSHIP) return;
|
|
let initv = 0;
|
|
const dex = int(values.DEX);
|
|
const poste_pil_oqp = int(values.POSTE_PIL_OQP);
|
|
const poste_pil_dex = int(values.POSTE_PIL_DEX);
|
|
const per = int(values.PER);
|
|
const poste_sen_oqp = int(values.POSTE_SEN_OQP);
|
|
const poste_sen_int = int(values.POSTE_SEN_INT);
|
|
if (poste_pil_oqp !== 0) {
|
|
initv = 10 + dex + poste_pil_dex + per + poste_sen_oqp * poste_sen_int;
|
|
}
|
|
setAttrs({ INITV: initv });
|
|
}
|
|
);
|
|
}
|
|
|
|
on(
|
|
[
|
|
'change:dex',
|
|
'change:poste_pil_oqp',
|
|
'change:poste_pil_dex',
|
|
'change:per',
|
|
'change:poste_sen_oqp',
|
|
'change:poste_sen_int',
|
|
].join(' '),
|
|
function () {
|
|
updateShipInit();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Rebuild starship DEFenses
|
|
*/
|
|
function updateShipDEF() {
|
|
getAttrs(
|
|
[
|
|
'type_fiche',
|
|
'DEX_TEST',
|
|
'POSTE_PIL_OQP',
|
|
'POSTE_PIL_DEX',
|
|
'PER_TEST',
|
|
'POSTE_SEN_OQP',
|
|
'POSTE_SEN_INT',
|
|
'CON',
|
|
],
|
|
function (values) {
|
|
if (values.type_fiche !== SHEET_STARSHIP) return;
|
|
let defrap = 0;
|
|
let defsol = 0;
|
|
const dex_test = int(values.DEX_TEST);
|
|
const poste_pil_oqp = int(values.POSTE_PIL_OQP);
|
|
const poste_pil_dex = int(values.POSTE_PIL_DEX);
|
|
const per_test = int(values.PER_TEST);
|
|
const poste_sen_oqp = int(values.POSTE_SEN_OQP);
|
|
const poste_sen_int = int(values.POSTE_SEN_INT);
|
|
const con = int(values.CON);
|
|
if (poste_pil_oqp !== 0) {
|
|
defrap =
|
|
10 +
|
|
dex_test +
|
|
poste_pil_dex +
|
|
per_test +
|
|
poste_sen_oqp * poste_sen_int;
|
|
}
|
|
defsol = 10 + con + per_test + poste_sen_oqp * poste_sen_int;
|
|
setAttrs({ DEFRAP: defrap, DEFSOL: defsol });
|
|
}
|
|
);
|
|
}
|
|
|
|
on(
|
|
[
|
|
'change:dex_test',
|
|
'change:poste_pil_oqp',
|
|
'change:per_test',
|
|
'change:poste_sen_oqp',
|
|
'change:con',
|
|
].join(' '),
|
|
function () {
|
|
updateShipDEF();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Energy points management functions
|
|
*/
|
|
function updateShipEP() {
|
|
getAttrs(
|
|
['type_fiche', 'NIVEAU', 'PEV_BUFF', 'FOR', 'PEV_DMG', 'PEV'],
|
|
function (values) {
|
|
if (values.type_fiche !== SHEET_STARSHIP) return;
|
|
const pev = int(values.PEV);
|
|
let pev_max = 0;
|
|
pev_max += int(values.NIVEAU);
|
|
pev_max += int(values.PEV_BUFF);
|
|
pev_max += int(values.FOR);
|
|
pev_max -= int(values.PEV_DMG);
|
|
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:for', '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 = int(values.PEV_max);
|
|
if (pev_max == 0) return;
|
|
delete values.PEV_max;
|
|
const base_rd = int(values.RD);
|
|
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 = int(values[attr]);
|
|
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}-t${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 = int(v[`v${voie}r${r}`]);
|
|
const title = stringOrDefault(v[`voie${voie}-t${r}`]);
|
|
const text = stringOrDefault(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 = int(values.DEFARMUREON);
|
|
let armure_malus = int(values.DEFARMUREMALUS);
|
|
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 = stringOrDefault(values.repeating_armes_armedm2_de);
|
|
let dm2_desc = stringOrDefault(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 = int(portee);
|
|
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 (int(v[Object.keys(v)[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 = stringOrDefault(values.repeating_jetcapas_jetcapavoie);
|
|
const coeff = int(values.repeating_jetcapas_jetcapacoeff);
|
|
let vn = 0;
|
|
let rang = stringOrDefault(values.repeating_jetcapas_jetcaparang);
|
|
if (rang.startsWith('@{') && rang.endsWith('}')) {
|
|
vn = int(rang.slice(rang.length - 2, rang.length - 1) || -1);
|
|
if (vn >= 0) {
|
|
voie = stringOrDefault(caracs.voies[vn - 1]);
|
|
if (voie !== '') {
|
|
voie = voie.slice(0, 1) + voie.slice(1).toLowerCase();
|
|
}
|
|
rang = int(caracs.rangs[vn - 1]);
|
|
}
|
|
}
|
|
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 = int(values[Object.keys(values)[0]]);
|
|
const enc = int(values[Object.keys(values)[1]]);
|
|
const equipe = int(values[Object.keys(values)[2]]);
|
|
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 });
|
|
}
|
|
}
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Determine best gear bonus
|
|
*/
|
|
function gearBonus() {
|
|
getSectionIDs('repeating_equipement', function (ids) {
|
|
let matmod = '';
|
|
let matmod_desc = '-';
|
|
setAttrs( { matmod, matmod_desc } );
|
|
for (const id of ids) {
|
|
getAttrs(
|
|
[
|
|
`repeating_equipement_${id}_equip-use`,
|
|
`repeating_equipement_${id}_equip-desc`,
|
|
`repeating_equipement_${id}_equip-props`,
|
|
'CARACS',
|
|
],
|
|
function (values) {
|
|
const use = int(values[Object.keys(values)[0]]);
|
|
if (use !== 1) return;
|
|
const desc = stringOrDefault(values[Object.keys(values)[1]]);
|
|
const props = stringOrDefault(values[Object.keys(values)[2]]);
|
|
for (const prop of props.split(',')) {
|
|
const parsed = parseNameValue(prop);
|
|
const propName = parsed.name ? parsed.name.toUpperCase() : '';
|
|
if (propName === 'MOD') {
|
|
const propVal = int(buffValue(parsed.value, JSON.parse(values.CARACS)));
|
|
if (propVal > matmod) {
|
|
matmod = propVal;
|
|
matmod_desc = desc;
|
|
}
|
|
}
|
|
}
|
|
const attrs = { matmod, matmod_desc };
|
|
clog(attrs, 'best gear bonus');
|
|
setAttrs( attrs );
|
|
}
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On changing character equipment
|
|
* - Recompute character encumbrance
|
|
*/
|
|
on(
|
|
['change:repeating_equipement', 'remove:repeating_equipement'].join(' '),
|
|
function () {
|
|
encumbrance();
|
|
gearBonus();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* 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 = int(values[Object.keys(values)[1]]);
|
|
|
|
const attrs = {};
|
|
|
|
const hasAtk = int(values[Object.keys(values)[2]]);
|
|
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 = int(parsed.value);
|
|
attrs[`${defAttr}ON`] = eqpon;
|
|
if (eqpon === 1) {
|
|
if (propVal !== int(values[defAttr])) {
|
|
attrs[defAttr] = propVal;
|
|
}
|
|
if (values[`${defAttr}MALUS`]) {
|
|
const defmalus = int(values[`${defAttr}MALUS`]);
|
|
if (propVal !== defmalus) {
|
|
attrs[`${defAttr}MALUS`] = propVal;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Armor malus
|
|
if (propName === 'DEF-') {
|
|
const defmalus = int(values.DEFARMUREMALUS);
|
|
if (propVal !== defmalus) {
|
|
attrs.DEFARMUREMALUS = propVal;
|
|
}
|
|
}
|
|
// Damage reduction
|
|
if (propName === 'RD') {
|
|
const rd = values.RD;
|
|
const propVal = int(parsed.value);
|
|
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 = stringOrDefault(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`] = stringOrDefault(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 = int(values.seuil_enc);
|
|
let encombrement = int(values.total_enc);
|
|
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
|
|
* - ranks in skill branches
|
|
* - encumbrance
|
|
* - CARACS attribute
|
|
* - INITiative value
|
|
* - DEFense value
|
|
* - Psy Defense value
|
|
* - General buffs
|
|
* - Attack and DM mods
|
|
*/
|
|
function rebuildAllPC() {
|
|
for (const v of [1, 2, 3, 4, 5, 6, 7, 8, 9]) {
|
|
setRank(v.toString());
|
|
}
|
|
encumbrance();
|
|
buildCaracs();
|
|
updateINIT();
|
|
updateDEF();
|
|
updateDEP();
|
|
rebuildBuffs();
|
|
rebuildModAtkDM('repeating_modatk', 'armebuff');
|
|
rebuildModAtkDM('repeating_moddm', 'armebuffdm');
|
|
}
|
|
|
|
/**
|
|
* Rebuild Ship derived attributes
|
|
* - Energy Points
|
|
* - INITiative value
|
|
* - DEFense values
|
|
* - Damage threshold
|
|
*/
|
|
function rebuildAllShip() {
|
|
updateShipEP();
|
|
updateShipInit();
|
|
updateShipDEF();
|
|
starshipDMThreshold();
|
|
setAttrs({ vehicle_starship: 1, vehicle_mecha: 0 });
|
|
}
|
|
|
|
/**
|
|
* Rebuild derived attributes
|
|
*/
|
|
function rebuildAll() {
|
|
getAttrs(['type_personnage'], function (v) {
|
|
if (v.type_personnage === SHEET_PC) rebuildAllPC();
|
|
if (v.type_personnage === SHEET_STARSHIP) rebuildAllShip();
|
|
if (v.type_personnage === SHEET_MECHA) rebuildAllMech();
|
|
const vehicle = isVehicle(v.type_personnage);
|
|
const physical = vehicle ? '0' : '1';
|
|
const update = vehicle ? `update:${v.type_personnage}` : '';
|
|
setAttrs({ physical: physical, POSTES_EQ: update });
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On clicking the Reset button
|
|
* - Rebuild derived attributes
|
|
*/
|
|
on('clicked:resetattrib', 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 = stringOrDefault(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 = stringOrDefault(values[Object.keys(values)[0]], '0');
|
|
const modNom = stringOrDefault(values[Object.keys(values)[1]]);
|
|
let modVal = stringOrDefault(values[Object.keys(values)[2]]);
|
|
if (modOn === '1' && modNom !== '' && modVal !== '') {
|
|
let sign = '';
|
|
if (modVal.startsWith('-') || modVal.startsWith('+')) {
|
|
sign = modVal.substring(0, 1);
|
|
modVal = modVal.substring(1);
|
|
}
|
|
if (modVal.search(/\d+[dD]\d+/) !== -1) {
|
|
modVal = `${sign}[[${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',
|
|
blesse: 'B',
|
|
confus: 'C',
|
|
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é',
|
|
},
|
|
B: {
|
|
title: 'Blessé',
|
|
},
|
|
C: {
|
|
title: 'Confus',
|
|
},
|
|
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 * int(conditions_data[cond].atc);
|
|
buffs.atd += s * int(conditions_data[cond].atd);
|
|
buffs.def += s * int(conditions_data[cond].def);
|
|
buffs.init += s * int(conditions_data[cond].init);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* On changing the weakened state
|
|
* - Change the physical and mental state rolls
|
|
*/
|
|
on('change:etatde', function () {
|
|
getAttrs(['ETATDE'], function (v) {
|
|
setAttrs({
|
|
PHYSDE: v.ETATDE,
|
|
MENTDE: v.ETATDE,
|
|
});
|
|
});
|
|
});
|
|
/**
|
|
* On changing the enabled condition(s)
|
|
* - Set/Unset combat stats buffs
|
|
*/
|
|
on(
|
|
[
|
|
'clicked:aveugle',
|
|
'clicked:blesse',
|
|
'clicked:confus',
|
|
'clicked:effraye',
|
|
'clicked:etourdi',
|
|
'clicked:immobilise',
|
|
'clicked:panique',
|
|
'clicked:ralenti',
|
|
'clicked:renverse',
|
|
'clicked:surpris',
|
|
].join(' '),
|
|
function (eventInfo) {
|
|
var clickedCondition = conditions[eventInfo.triggerName.split(':')[1]];
|
|
getAttrs(
|
|
[
|
|
'PCONDITION',
|
|
'CONDITION',
|
|
'ATKCAC_BUFF',
|
|
'ATKTIR_BUFF',
|
|
'INIT_BUFF',
|
|
'DEF_BUFF',
|
|
'ETATDE',
|
|
'PHYSDE',
|
|
'MENTDE',
|
|
],
|
|
function (values) {
|
|
let buffs = {
|
|
atc: int(values.ATKCAC_BUFF),
|
|
atd: int(values.ATKTIR_BUFF),
|
|
def: int(values.DEF_BUFF),
|
|
init: int(values.INIT_BUFF),
|
|
};
|
|
// debuffs prior condition
|
|
let pcondition = stringOrDefault(values.PCONDITION);
|
|
applyConditions(buffs, pcondition, +1);
|
|
// change condition
|
|
let condition = stringOrDefault(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 || '20';
|
|
let physde = values.PHYSDE || '20';
|
|
let mentde = values.MENTDE || '20';
|
|
if (
|
|
pcondition !== '' &&
|
|
(pcondition.includes(conditions.immobilise) ||
|
|
pcondition.includes(conditions.panique))
|
|
) {
|
|
etatde = '20';
|
|
physde = '20';
|
|
mentde = '20';
|
|
}
|
|
if (pcondition !== '' && pcondition.includes(conditions.blesse)) {
|
|
physde = '20';
|
|
}
|
|
if (pcondition !== '' && pcondition.includes(conditions.confus)) {
|
|
mentde = '20';
|
|
}
|
|
if (physde === '20' && mentde === '20') etatde = '20';
|
|
// check condition for die roll
|
|
if (
|
|
condition !== '' &&
|
|
(condition.includes(conditions.immobilise) ||
|
|
condition.includes(conditions.panique))
|
|
) {
|
|
etatde = '12';
|
|
physde = '12';
|
|
mentde = '12';
|
|
}
|
|
if (condition !== '' && condition.includes(conditions.blesse)) {
|
|
physde = '12';
|
|
}
|
|
if (condition !== '' && condition.includes(conditions.confus)) {
|
|
mentde = '12';
|
|
}
|
|
if (physde === '12' && mentde === '12') etatde = '12';
|
|
// build displayed conditions
|
|
let displayConditions = '';
|
|
if (condition !== '') {
|
|
for (const cond of Object.keys(conditions)) {
|
|
if (condition.includes(conditions[cond])) {
|
|
displayConditions +=
|
|
(displayConditions === '' ? '' : ', ') +
|
|
conditions_data[conditions[cond]].title;
|
|
}
|
|
}
|
|
}
|
|
if (displayConditions === '') displayConditions = ' ';
|
|
setAttrs({
|
|
ATKCAC_BUFF: buffs.atc,
|
|
ATKTIR_BUFF: buffs.atd,
|
|
DEF_BUFF: buffs.def,
|
|
INIT_BUFF: buffs.init,
|
|
ETATDE: etatde,
|
|
PHYSDE: physde,
|
|
MENTDE: mentde,
|
|
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', 'CON', 'PV_NIVEAU', 'PV_BUFF', 'prog_pv'],
|
|
function (values) {
|
|
let niveau = int(values.NIVEAU);
|
|
if (niveau === 0) return;
|
|
let dv = int(values.DV);
|
|
if (dv === 0) return;
|
|
let valCON = int(values.CON);
|
|
let pv_niveau = stringOrDefault(values.PV_NIVEAU);
|
|
let pv = [];
|
|
if (attr === 'niveau' || attr === 'con' || attr === 'pv_buff') {
|
|
if (pv_niveau !== '') pv = JSON.parse(pv_niveau);
|
|
}
|
|
let average = int(values.prog_pv) === 1 ? 1 + dv / 2 : 0;
|
|
let pv_buff = int(values.PV_BUFF);
|
|
let pv_max = 0;
|
|
if (values.type_fiche == SHEET_STARSHIP) {
|
|
pv_max = (dv + valCON) * niveau;
|
|
} else {
|
|
for (let n = 1; n <= niveau; n++) {
|
|
let pvie = 0;
|
|
if (n === 1) {
|
|
pvie = dv + valCON; // 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 (valCON < 0) pvie += valCON; // ... + 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 (valCON > 0) pvie = valCON; // 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:con',
|
|
'change:pv_buff',
|
|
'change:prog_pv',
|
|
].join(' '),
|
|
function (eventInfo) {
|
|
hitPoints(eventInfo.sourceAttribute);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Compute starship damage threshold
|
|
*/
|
|
function starshipDMThreshold(values) {
|
|
getAttrs([
|
|
'type_personnage',
|
|
'NIVEAU',
|
|
'DV',
|
|
'CON',
|
|
'PV_BUFF',
|
|
],
|
|
function (values) {
|
|
if (values.type_personnage !== SHEET_STARSHIP) return;
|
|
clog(values, 'starship DM threshold');
|
|
const niveau = int(values.NIVEAU, 1);
|
|
const dv = int(values.DV, 4);
|
|
const con = int(values.CON);
|
|
const buff = int(values.PV_BUFF);
|
|
const seuil_avarie = con + niveau + dv + buff;
|
|
const attr = { seuil_avarie };
|
|
clog(attr, 'starship DM threshold');
|
|
setAttrs(attr);
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* On changing any attribute related to hit points
|
|
* - Re-compute the starship damage threshold
|
|
*/
|
|
on(
|
|
[
|
|
'change:type_personnage',
|
|
'change:niveau',
|
|
'change:dv',
|
|
'change:con',
|
|
'change:pv_buff',
|
|
].join(' '),
|
|
function () {
|
|
starshipDMThreshold();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* On Hit Dice button click
|
|
* - Increase character level
|
|
*/
|
|
on('clicked:hitdice', function () {
|
|
getAttrs(['NIVEAU'], function (value) {
|
|
let niveau = int(value.NIVEAU);
|
|
if (niveau > 0 && niveau <= 20) {
|
|
setAttrs({
|
|
NIVEAU: niveau + 1,
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Recalculate the crew adjustments to mecha's abilities
|
|
*/
|
|
function updateMechCrew() {
|
|
getAttrs(
|
|
[
|
|
'mec_crew1_car',
|
|
'mec_crew1_bonus',
|
|
'mec_crew1_rank',
|
|
'mec_crew1_status',
|
|
'mec_crew2_car',
|
|
'mec_crew2_bonus',
|
|
'mec_crew2_rank',
|
|
'mec_crew2_status',
|
|
],
|
|
function (values) {
|
|
if (values.mec_crew1_car === values.mec_crew2_car) return;
|
|
attrs = {
|
|
mec_crew_dex: 0,
|
|
mec_crew_int: 0,
|
|
mec_crew_cha: 0,
|
|
mec_crew_per: 0,
|
|
};
|
|
const crew1_bonus = int(values.mec_crew1_bonus);
|
|
const crew1_rank = int(values.mec_crew1_rank);
|
|
const crew1_status = int(values.mec_crew1_status);
|
|
attrs[`mec_crew_${values.mec_crew1_car}`] =
|
|
crew1_status * Math.min(crew1_bonus, crew1_rank);
|
|
const crew2_bonus = int(values.mec_crew2_bonus);
|
|
const crew2_rank = int(values.mec_crew2_rank);
|
|
const crew2_status = int(values.mec_crew2_status);
|
|
attrs[`mec_crew_${values.mec_crew2_car}`] =
|
|
crew2_status * Math.min(crew2_bonus, crew2_rank);
|
|
setAttrs(attrs);
|
|
}
|
|
);
|
|
}
|
|
|
|
on(
|
|
[
|
|
'change:mec_crew1_car',
|
|
'change:mec_crew1_bonus',
|
|
'change:mec_crew1_rank',
|
|
'change:mec_crew1_status',
|
|
'change:mec_crew2_car',
|
|
'change:mec_crew2_bonus',
|
|
'change:mec_crew2_rank',
|
|
'change:mec_crew2_status',
|
|
].join(' '),
|
|
function () {
|
|
updateMechCrew();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Recalculate attack scores
|
|
*/
|
|
function updateMechAttacks() {
|
|
getAttrs(['NIVEAU', 'mec_for', 'mec_int', 'mec_crew_int'], function (values) {
|
|
let mec_atc = 0;
|
|
mec_atc += int(values.NIVEAU);
|
|
mec_atc += int(values.mec_for);
|
|
let mec_atd = 0;
|
|
mec_atd += int(values.NIVEAU);
|
|
mec_atd += int(values.mec_int);
|
|
mec_atd += int(values.mec_crew_int);
|
|
setAttrs({
|
|
mec_atc: mec_atc,
|
|
mec_atd: mec_atd,
|
|
});
|
|
});
|
|
}
|
|
|
|
on(
|
|
[
|
|
'change:niveau',
|
|
'change:mec_for',
|
|
'change:mec_int',
|
|
'change:mec_crew_int',
|
|
].join(' '),
|
|
function () {
|
|
updateMechAttacks();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Recalculate cooling score
|
|
*/
|
|
function updateMechCooling() {
|
|
getAttrs(['NIVEAU', 'mec_cha', 'mec_crew_cha'], function (values) {
|
|
let mec_froid_max = 0;
|
|
mec_froid_max += int(values.NIVEAU);
|
|
mec_froid_max += int(values.mec_cha);
|
|
mec_froid_max += int(values.mec_crew_cha);
|
|
setAttrs({ mec_froid_max: mec_froid_max });
|
|
});
|
|
}
|
|
|
|
on(
|
|
['change:niveau', 'change:mec_cha', 'change:mec_crew_cha'].join(' '),
|
|
function () {
|
|
updateMechCooling();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Recalculate Init & DEFenses
|
|
*/
|
|
function updateMechInitDef() {
|
|
getAttrs(
|
|
['mec_dex', 'mec_crew_dex', 'mec_per', 'mec_crew_per', 'mec_con'],
|
|
function (values) {
|
|
let defrap = 10;
|
|
defrap += int(values.mec_dex);
|
|
defrap += int(values.mec_crew_dex);
|
|
defrap += int(values.mec_per);
|
|
defrap += int(values.mec_crew_per);
|
|
let defsol = 10;
|
|
defsol += int(values.mec_con);
|
|
defsol += int(values.mec_per);
|
|
defsol += int(values.mec_crew_per);
|
|
setAttrs({
|
|
mec_init: defrap,
|
|
mec_defrap: defrap,
|
|
mec_defsol: defsol,
|
|
});
|
|
}
|
|
);
|
|
}
|
|
|
|
on(
|
|
[
|
|
'change:mec_dex',
|
|
'change:mec_crew_dex',
|
|
'change:mec_per',
|
|
'change:mec_crew_per',
|
|
'change:mec_con',
|
|
].join(' '),
|
|
function () {
|
|
updateMechInitDef();
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Recalculate speed
|
|
*/
|
|
function updateMechSpeed() {
|
|
getAttrs(['mec_dex', 'mec_crew_dex', 'mec_vitesse_base'], function (values) {
|
|
const dex = 1 + int(values.mec_dex) + int(values.mec_crew_dex);
|
|
const base = int(values.mec_vitesse_base);
|
|
setAttrs({ mec_vitesse: dex * base });
|
|
});
|
|
}
|
|
|
|
on('change:mec_dex change:mec_crew_dex change:mec_vitesse_base', function () {
|
|
updateMechSpeed();
|
|
});
|
|
|
|
/**
|
|
* Recalculate hit points
|
|
*/
|
|
function updateMechHP() {
|
|
getAttrs(['NIVEAU', 'mec_dv', 'mec_con', 'mec_pv'], function (values) {
|
|
const niveau = int(values.NIVEAU);
|
|
const dv = int(values.mec_dv);
|
|
const con = int(values.mec_con);
|
|
const mec_pv_max = (dv + con) * niveau;
|
|
let mec_pv = int(values.mec_pv);
|
|
if (values.mec_pv === '') mec_pv = mec_pv_max;
|
|
setAttrs({ mec_pv: mec_pv, mec_pv_max: mec_pv_max });
|
|
});
|
|
}
|
|
|
|
on('change:niveau change:mec_dv change:mec_con', function () {
|
|
updateMechHP();
|
|
});
|
|
|
|
/**
|
|
* Recalculate gunner bonus
|
|
*/
|
|
on(
|
|
[
|
|
'change:repeating_mecatk:crewint_bonus',
|
|
'change:repeating_mecatk:crewint_rank',
|
|
'change:repeating_mecatk:crewint_status',
|
|
].join(' '),
|
|
function () {
|
|
getAttrs(
|
|
[
|
|
'repeating_mecatk_crewint_bonus',
|
|
'repeating_mecatk_crewint_rank',
|
|
'repeating_mecatk_crewint_status',
|
|
],
|
|
function (values) {
|
|
const bonus = int(values.repeating_mecatk_crewint_bonus);
|
|
const rank = int(values.repeating_mecatk_crewint_rank);
|
|
const status = int(values.repeating_mecatk_crewint_status);
|
|
setAttrs({
|
|
repeating_mecatk_crewint: status * Math.min(bonus, rank),
|
|
});
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Recalculate all
|
|
*/
|
|
function rebuildAllMech() {
|
|
updateMechCrew();
|
|
updateMechAttacks();
|
|
updateMechCooling();
|
|
updateMechInitDef();
|
|
updateMechSpeed();
|
|
updateMechHP();
|
|
setAttrs({ vehicle_starship: 0, vehicle_mecha: 1 });
|
|
}
|
|
|
|
/**
|
|
* Update Rule of 4
|
|
*/
|
|
function updateRuleOf4() {
|
|
getAttrs(
|
|
[
|
|
'cp1mod',
|
|
'cp2mod',
|
|
'cp3mod',
|
|
'cp4mod',
|
|
'cp5mod',
|
|
'cp6mod',
|
|
'cp7mod',
|
|
'cp8mod',
|
|
'cp9mod',
|
|
'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',
|
|
'sitmod',
|
|
'matmod',
|
|
'matmod_desc',
|
|
'chcmod'
|
|
], function (values) {
|
|
let cmpmod = 0;
|
|
let cmpmod_desc = '';
|
|
for (let v = 1; v <= 9; v++) {
|
|
const use_rank = int(values[`cp${v}mod`]);
|
|
if (use_rank !== 1) continue;
|
|
const rank = int(values[`RANG_VOIE${v}`]);
|
|
if (rank > cmpmod) {
|
|
cmpmod = rank;
|
|
cmpmod_desc = values[`voie${v}nom`] || 'Compétence';
|
|
}
|
|
}
|
|
const sitmod = int(values.sitmod);
|
|
const matmod = int(values.matmod);
|
|
const matmod_desc = values.matmod_desc || 'Matériel';
|
|
const chcmod = int(values.chcmod);
|
|
let rof4 = '';
|
|
if (cmpmod > 0) rof4 += `+ ([[${cmpmod}]])[${cmpmod_desc}]`;
|
|
rof4 += `+ ([[${sitmod}]])[Situation]`;
|
|
if (matmod > 0) rof4 += `+ ([[${matmod}]])[${matmod_desc}]`;
|
|
if (chcmod > 0) rof4 += `+ ([[${chcmod*5}]])[Chance]`;
|
|
setAttrs( { rof4 } );
|
|
});
|
|
}
|
|
|
|
on(
|
|
[
|
|
'change:sitmod',
|
|
'change:matmod',
|
|
'change:matmod_desc',
|
|
'change:chcmod',
|
|
'change:cp1mod',
|
|
'change:cp2mod',
|
|
'change:cp3mod',
|
|
'change:cp4mod',
|
|
'change:cp5mod',
|
|
'change:cp6mod',
|
|
'change:cp7mod',
|
|
'change:cp8mod',
|
|
'change:cp9mod',
|
|
].join(' '), function () {
|
|
updateRuleOf4();
|
|
});
|
|
|
|
</script>
|
|
<!-- FIN SCRIPTS / SHEET WORKERS -->
|