Une macro MapTool pour les cartes d'affrontement

Une macro MapTool pour les cartes d'affrontement

Dec 16, 2020
Development
RPTools, macro, MapTool, VTT, cards

Voir le serveur Discord et le Wiki de RPTools pour plus d’informations et de discussions.

Contexte #

On a déjà parlé brièvement de MapTool dans le post concernant la macro pour les lancers de dés : il s’agit d’un logiciel de VTT permettant l’édition complexe de macros spécifiques à vos besoins.

Dans le cas présent, l’objectif est le suivant : Simuler le système des cartes de Blessures et de Perturbations pour l’intégrer pleinement au framework de la partie en ligne.

Logique de la macro #

  1. Vérifie le nombre de cartes Perturbations déjà en main et annule si Perturbations >= Volonté actuelle
  2. Évalue le nombre de cartes à tirer
  3. Tire la première carte face cachée ► stock l’asset (l’image) dans une variable
  4. Le cas échéant, tire les autres cartes visibles ► crée une liste CartesVisibles pour stacker les assets (les images)
  5. Append CartesCachees (variable macro, temporaire) dans cartesPerturbationsCachees (propriété du token, permanent)
  6. Append CartesVisibles (variable macro, temporaire) dans cartesPerturbationsVisibles (propriété du token, permanent)
  7. Affiche les nouvelles cartes tirées sur une ligne en commençant par un dos de carte (face cachée) puis les cartes visibles

Propriétés cibles #

  • cartesBlessures:0 ► Nombre total de cartes Blessures (default = 0)
  • cartesBlessuresCachees:"" ► Liste des assets de cartes Blessures cachées (default = empty)
  • cartesBlessuresVisibles:"" ► Liste des assets de cartes Blessures visibles (default = empty)
  • cartesPerturbations:0 ► Nombre total de cartes Perturbations (default = 0)
  • cartesPerturbationsVisibles:"" ► Liste des assets de cartes Perturbations cachées (default = empty)
  • cartesPerturbationsCachees:"" ► Liste des assets de cartes Perturbations visibles (default = empty)

Bug Log #

► Si l’arrivée au max se fait avec 1 carte, tirer 1 carte ensuite en ajoute 1 de trop (soient 2)

  1. cartesBlessures = 0 / 7
  2. tirer 7 cartes ► cartesBlessures = 7 / 7
  3. tirer 1 carte ► cartesBlessures = 8 / 7

Comportement anormal :

  1. cartesBlessures = 0 / 7
  2. tirer 6 cartes ► cartesBlessures = 6 / 7
  3. tirer 1 carte ► cartesBlessures = 7 / 7
  4. tirer 1 carte ► cartesBlessures = 9 / 7

Code (des cartes Blessures) #

Les cartes Blessures sont à opposer aux PV Max car les PV ne se dépensent pas.

<!--Si trop de cartes déjà en main, protection du token-->
[r,if(cartesBlessures > PVcurrent),code:{[abort(0)]};{}]


<!--Sinon = déroulement normal-->


<!--Variables-->
<!--Demande au joueur le nombre de cartes à tirer-->
[h: input("NombreDeCartes")]
<!--Déclare la première carte comme cachée-->
[h: NbCartesCachees = 1]
<!--Calcule le nombre de cartes visibles-->
[h: NbCartesVisibles = NombreDeCartes - NbCartesCachees]
<!--Retient l'état initial du nombre de cartes Blessures en main-->
[h: BlessuresInit = cartesBlessures]


<!--Tire une carte qui restera cachée-->
[h: CarteCachee = tableImage("Blessures")]


<!--S'il reste des cartes à tirer, crée une liste vide CartesVisibles-->
[h: CartesVisibles = ""]
<!--Tire et stack les cartes (le cas échéant) dans CartesVisibles-->
[h,if(NbCartesVisibles > 0),code:{
    [c(NbCartesVisibles):CartesVisibles = listAppend(CartesVisibles,tableImage("Blessures"))]
};{}]



<!--Affiche un dos de carte pour signifier une carte cachée tirée, ajoute un _ pour la lisibilité -->
<br>
<img src='[r: tableImage("Dos",1)]'></img>_


<!--Affiche les cartes visibles à la suite de la carte cachée-->
[foreach(asset,CartesVisibles,"_"),code:{<img src='[r:asset]'></img>}]


<!--Insère l'asset de la carte cachée dans la propriété du token-->
[h: cartesBlessuresCachees = listAppend(cartesBlessuresCachees,CarteCachee)]
<!--Insère la liste d'assets des cartes visibles dans la propriété du token-->
[h: cartesBlessuresVisibles = listAppend(cartesBlessuresVisibles,CartesVisibles)]


<!--Calcule le total de cartes actuel-->
[h: BlessuresTOTAL = json.length(json.fromList(cartesBlessuresVisibles)) + json.length(json.fromList(cartesBlessuresCachees))]

<!--Affiche dans la ligne en-dessous un message contextuel au joueur sur la réaction du token-->
<br>
[r,if(BlessuresTOTAL < PVmax),code:
	{<font color="maroon"><b>Blessures : [BlessuresInit] → [cartesBlessures = BlessuresTOTAL] cartes en main<br><i>[r:token.name]</i> est blessé...</b></color>};{}]

[r,if(BlessuresTOTAL == PVmax),code:
	{<font color="orange"><b><i>Blessures : [BlessuresInit] → [cartesBlessures = BlessuresTOTAL] cartes en main<br>[r:token.name]</i> se vide de son sang !</b></color>};{}]

[r,if(BlessuresTOTAL > PVmax),code: {<font color="red"><b>Blessures : [BlessuresInit] → [cartesBlessures = BlessuresTOTAL] / [PVcurrent]<br><i>[r: token.name]</i> périt...</b></color>};{}]

Code (des cartes Perturbations) #

Les cartes Perturbations sont à opposer à la réserve de Volonté volonteCurrent et non au niveau de Volonté volonteMax, car cette dernière peut être dépensée.

<!--Si trop de cartes déjà en main, protection du token-->
[r,if(cartesPerturbations > volonteCurrent),code:{[abort(0)]};{}]


<!--Sinon = déroulement normal-->


<!--Variables-->
<!--Demande au joueur le nombre de cartes à tirer-->
[h: input("NombreDeCartes")]
<!--Déclare la première carte comme cachée-->
[h: NbCartesCachees = 1]
<!--Calcule le nombre de cartes visibles-->
[h: NbCartesVisibles = NombreDeCartes - NbCartesCachees]
<!--Retient l'état initial du nombre de cartes Perturbations en main-->
[h: PerturbationsInit = cartesPerturbations]


<!--Tire une carte qui restera cachée-->
[h: CarteCachee = tableImage("Perturbations")]


<!--S'il reste des cartes à tirer, crée une liste vide CartesVisibles-->
[h: CartesVisibles = ""]
<!--Tire et stack les cartes (le cas échéant) dans CartesVisibles-->
[h,if(NbCartesVisibles > 0),code:{
    [c(NbCartesVisibles):CartesVisibles = listAppend(CartesVisibles,tableImage("Perturbations"))]
};{}]



<!--Affiche un dos de carte pour signifier une carte cachée tirée, ajoute un _ pour la lisibilité -->
<br>
<img src='[r: tableImage("Dos",2)]'></img>_


<!--Affiche les cartes visibles à la suite de la carte cachée-->
[foreach(asset,CartesVisibles,"_"),code:{<img src='[r:asset]'></img>}]


<!--Insère l'asset de la carte cachée dans la propriété du token-->
[h: cartesPerturbationsCachees = listAppend(cartesPerturbationsCachees,CarteCachee)]
<!--Insère la liste d'assets des cartes visibles dans la propriété du token-->
[h: cartesPerturbationsVisibles = listAppend(cartesPerturbationsVisibles,CartesVisibles)]


<!--Calcule le total de cartes actuel-->
[h: PerturbationsTOTAL = json.length(json.fromList(cartesPerturbationsVisibles)) + json.length(json.fromList(cartesPerturbationsCachees))]

<!--Affiche dans la ligne en-dessous un message contextuel au joueur sur la réaction du token-->
<br>
[r,if(PerturbationsTOTAL < volonteCurrent),code:
	{<font color="navy"><b>Perturbations : [PerturbationsInit] → [cartesPerturbations = PerturbationsTOTAL] cartes en main<br><i>[r: token.name]</i> se sent mal...</b></color>};{}]

[r,if(PerturbationsTOTAL == volonteCurrent),code:
	{<font color="orange"><b><i>Perturbations : [PerturbationsInit] → [cartesPerturbations = PerturbationsTOTAL] cartes en main<br>[r: token.name]</i> commence à paniquer...</b></color>};{}]

[r,if(PerturbationsTOTAL > volonteCurrent),code: {<font color="red"><b>Perturbations : [ PerturbationsInit] → [cartesPerturbations = PerturbationsTOTAL] / [volonteCurrent]<br><i>[r: token.name]</i> est en déroute mentale !</b></color>};{}]