Le fichier de description des règles de Magic : l'Assemblée

Comme cela a été précisé plus haut, les règles de ce jeu de cartes sont décrites dans le fichier mtg.xml du répertoire src/main/resources/tbs. Vous chercherez souvent dans ce fichier afin d'obtenir des tests, actions ou capacités déjà écrites, alors analysons la structure de ce fichier.

En-tête

Le fichier mtg.xml commence avec l'élément <tbs>, qui est l'abbréviation de "Turn Based Strategy" (ou stratégie basée sur des tours). Certains attributs spécifient l'emplacement du schéma XML du fichier, l'espace de nommage XML, d'autres spécifient le nom du jeu, la version et l'auteur. On trouvera également des informations concernant le fichier contenant l'image du dos des cartes de ce jeu.

Base de données des informations complémentaires

Magic Project inclu également une base données des informations concernant les cartes qui n'ont pas de relations avec les règles comme l'image d'une carte, le texte d'ambiance ou l'artiste. Toutes ces informations sont téléchargées automatiquement depuis plusieurs sites par la fourniture de fichier XML de proxy valides.

L'élément <database-properties> dans le fichier mtg.xml est utilisé pour déclarer les différentes informations interprétées par Magic Project. Vous trouverez ci-dessous un extrait du contenu de cet élément prélevé depuis le fichier mtg.xml.

<database-properties>
 <property name="card.artist-credit" type="java.lang.String" translate="false" />
 <property name="card.flavor-text" type="java.lang.String" translate="false" />
 <property name="card.sets" type="java.util.List" translate="true" />
 <property name="card.text" type="java.lang.String" translate="false" />
 <property name="card.id" type="java.lang.String" translate="false" />
 <property name="card.set" type="java.lang.String" translate="true" />
 <property name="card.version" type="java.lang.String" translate="false" />
</database-properties>

Les symboles de mana

Magic Project télécharge dynamiquement les symboles de mana nécessaires à l'affichage des capacités depuis le site web de Wizards of the Coast pour des raisons de propriété intellectuelle. L'élément <mana-symbols> permet de fournir à Magic Project toutes les informations permettant de télécharger ces symboles.

Licence

L'élément <license> fourni une description de la licence du jeu auquel est associé le fichier mtg.xml. Vous trouverez ci-dessous un extrait de la description de la license :

<licence>
 This program is not published, produced or supported by Wizards Of The Coast(TM), Inc. Magic
 The Gathering(TM) and Wizards Of The Coast(R) Inc. are registered trademarks owned by
 Wizards Of The Coast(R) Inc., a subsidiary of Hasbro, Inc.
</licence>

Les alias

La plupart des élément de l'implémentation du jeu de cartes Magic : l'Assemblée dans Magic Project sont référencés par des valeurs entières. Afin de rendre les règles lisibles pour un humain, on peut également utiliser des alias pour certaines valeurs entières spécifiques, qui sont déclarées au sein de l'élément <aliases>.

Voyons les différents alias disponibles.

Les alias globaux

Ces alias sont utilisés dans diverses situations :

Nom de l'alias
none
all
abortme
abort
destroy
manapool
manacost
threshold

Les types de dommages

Tous les différents types de dommages peuvent être testés en utilisant les alias suivants :

Nom de l'alias
damage-normal
damage-combat
damage-cannot-be-prevented
damage-cannot-be-redirected
damage-cannot-be-regenerated
damage-cannot-be-prevented-redirected
damage-can-prevent

Les positions d'une carte

La position d'une carte dans une zone peut être référencée en utilisant les alias suivants :

Nom de l'alias
top
bottom

Les alias utilisés pour la prévention de dommages

Les alias suivants sont utilisés pour la prévention de dommages :

Nom de l'alias
damage-any
damage-combat-only
damage-combat-can-be-prevented
damage-can-be-prevented
damage-can-be-redirected
damage-can-be-regenerated

Les alias utilisés pour les index de phase

Les alias suivants sont utilisés pour les index de phase :

Nom de l'alias
precombat-main
eoc.index
postcombat-main

Les alias utilisés pour les index de jeu statiques

Les alias suivants sont utilisés pour les index de jeu statiques, il sont mis à zéro au début de chaque tour :

Nom de l'alias
attack-step-index
nb-attacking-group
assignment-configuration
assignment-configuration-int
beginning-of-combat-target-lists
normal-next-player
skipping-turn
turnid
nbattacking

Les alias utilisés pour les registres liés aux cartes et aux joueurs

Les alias suivants sont utilisés pour les registres liés aux cartes et aux joueurs :

Nom de l'alias
colorless
black
blue
green
red
white
state
damage
combat.assignedto
free0
free1

Les alias utilisés pour les registres liés aux cartes

Les alias suivants sont utilisés pour les registres liés aux cartes :

Nom de l'alias
combat.toassign
power
toughness
loyalty
planeswalker-ability
special-abilities

Les alias utilisés pour les registres liés aux joueurs

Les alias suivants sont utilisés pour les registres liés aux joueurs :

Nom de l'alias
poison
life
mulligan
creatures-moved-in-graveyard-from-play-this-turn
damage-dealt-this-turn
hand-vibility-modifiers
initialized
land-remain-to-cast
maxi-cards-in-hand
playedland

Les alias utilisés pour les types de cartes

Les alias suivants sont utilisés pour les types de cartes :

Nom de l'alias
mana-source
permanent
instant
tribal
sorcery

Les alias utilisés pour les types de permanents

Les alias suivants sont utilisés pour les types de permanents :

Nom de l'alias
enchantment
local-enchantment
global-enchantment
land
swamp
island
forest
mountain
plains
creature
artifact
artifact-creature
planeswalker

Les alias utilisés pour les phases

Les alias suivants sont utilisés pour les phases:

Nom de l'alias
untap
upkeep
draw
main
declare-attack
declare-attacking
declare-blocking
combat-deals
eoc
eot
cleanup

Les alias utilisés pour les types de protection

Les alias suivants sont utilisés pour les types de protection :

Nom de l'alias
protection-from-idcard
protection-from-enchantments
protection-from-creatures
protection-from-artifacts
protection-from-color
protection-from-black
protection-from-blue
protection-from-green
protection-from-red
protection-from-white
protection-from-property
protection-from-goblins
protection-from-kavu
protection-from-gorgons
protection-from-clerics
protection-from-beasts
protection-from-dragons
protection-from-spirits
protection-from-arcane
protection-from-snow

Les alias utilisés pour les catégories de la propriété inciblable

Les alias suivants sont utilisés pour les catégories de la propriété inciblable :

Nom de l'alias
untargetable-by-idcard
untargetable-by-creature
untargetable-by-sorcery
untargetable-by-enchant
untargetable-by-artifact
shroud

Les alias utilisés pour les propriétés des cartes

Les alias suivants sont utilisés pour les propriétés des cartes :

Nom de l'alias
double-strike
first-strike
flying
rampage
trample
snow
protection-from-spells
protection-from-abilities
untap-under-condition
basic-land
attacks-if-able
banding
shadow
fear
islandwalk
forestwalk
swampwalk
plainswalk
mountainwalk
reach
vigilance
haste
does-not-untap
wall-can-attack
cannot-attack
cannot-block
artifact-damage-reduced-to-0
spell-damage-reduced-to-0
creature-damage-reduced-to-0
damage-reduced-to-0
sorcery-damage-reduced-to-0
token
defender
indestructible
unblockable
cannot-be-enchanted
enchant-world
desert
lair
locus
equipment
desertwalk
cannot-be-countered
cannot-use-T
sunburst
protection-from-monocolored
protection-from-multicolored
protection-from-all-colors
flash
morph
snow-islandwalk
snow-forestwalk
snow-swampwalk
snow-plainswalk
snow-mountainwalk
nonbasic-landwalk
convoke
may-not-untap
legendary-landwalk
cannot-be-blocked-by-artifacts
cannot-be-blocked-by-walls
phasing
aura
block-as-shadow
block-only-flying
horsemanship
arcane
shrine
legend
changeling
jace
garruk
ajani
liliana
chandra

Les types de créatures

Tous les types de créatures déclarés dans Magic Project sont listés ci-dessous :

Nom de l'alias
FIRST_SUB_TYPE
advisor
anemone
angel
anteater
antelope
ape
archer
archon
artificer
assassin
assembly-worker
atog
aurochs
avatar
badger
barbarian
basilisk
bat
bear
beast
beeble
berserker
bird
blinkmoth
boar
bringer
brushwagg
camarid
camel
caribou
carrier
cat
centaur
cephalid
chimera
citizen
cleric
cockatrice
construct
coward
crab
crocodile
cyclops
dauthi
demon
deserter
devil
djinn
dragon
drake
dreadnought
drone
druid
dryad
dwarf
efreet
egg
elder
elemental
elephant
elf
elk
eye
faerie
ferret
fish
flagbearer
fox
frog
fungus
gargoyle
giant
gnome
goat
goblin
golem
gorgon
graveborn
gremlin
griffin
hag
harpy
hellion
hippo
homarid
homunculus
horror
horse
hound
human
hydra
illusion
imp
incarnation
insect
jellyfish
juggernaut
kavu
kirin
kithkin
knight
kobold
kor
kraken
lammasu
leech
leviathan
lhurgoyf
licid
lizard
manticore
masticore
mercenary
merfolk
metathran
minion
minotaur
monger
mongoose
monk
moonfolk
mutant
myr
mystic
nautilus
nephilim
nightmare
nightstalker
ninja
nomad
octopus
ogre
ooze
orb
orc
orgg
ouphe
ox
oyster
pegasus
pentavite
pest
phelddagrif
phoenix
pincher
pirate
plant
prism
rabbit
rat
rebel
reflection
rhino
rigger
rogue
rukh
salamander
samurai
sand
saproling
satyr
scarecrow
scorpion
scout
serf
serpent
shade
shaman
shapeshifter
sheep
skeleton
slith
sliver
slug
snake
soldier
soltari
spawn
specter
spellshaper
sphinx
spider
spike
spirit
splinter
sponge
squid
squirrel
starfish
survivor
tetravite
thalakos
thopter
thrull
treefolk
triskelavite
troll
turtle
unicorn
vampire
vedalken
viashino
volver
wall
warrior
weird
whale
wildebeest
will-o'-the-wisp
witch
wizard
wolf
wolverine
wombat
worm
wraith
wurm
yeti
zombie
zubera
fillette
LAST_SUB_TYPE

Initialisation des registres des joueurs

Une série de registres de valeurs entières (comme les points de vie) est allouée pour chaque joueur. Les éléments <registers-first-player> et <registers-first-player> sont dédiés à l'initialisation de ces registres. Vous trouverez ci-dessous un extrait de ces éléments issus du fichier mtg.xml :

<registers-first-player>
 <register index="life" value="20" />
 <register index="maxi-cards-in-hand" value="7" />
 <register index="land-remain-to-cast" value="1" />
 <register index="hand-vibility-modifiers" value="0" />
 <register index="playedland" value="0" />
 <register index="mulligan" value="7" />
</registers-first-player>
<registers-second-player>
 <register index="life" value="20" />
 <register index="maxi-cards-in-hand" value="7" />
 <register index="hand-vibility-modifiers" value="0" />
 <register index="playedland" value="0" />
 <register index="mulligan" value="7" />
</registers-second-player>

La déclaration des phases

L'élément suivant <phases> déclare les différentes phases qui composent un tour dans le jeu de carte implémenté. Il spécifie également quels types de sorts sont jouables durant ces différentes phases.

Les images associées aux états

Pour chaque carte en jeu avec un état spécique (comme le mal d'invocation), Magic Project interprète l'élément <state-pictures> pour récupérer et associer une image relative à cet état. Si les attributs index et state sont fournis, Magic Project va faire une comparaison bit à bit entre la valeur entière à la position désignée par index dans les registres de la carte et la valeur contenue dans state. Les attributs width et height permettent de renseigner Magic Project sur respectivement la largeur et la hauteur de l'image à afficher sur la carte. Il est possible de faire en sorte que Magic Project positionne automatiquement les images (en les séquençant) en mettant la valeur -1 pour les attributs x et y.

Les images associées aux actions

Dans le jeu de cartes Magic : l'Assemblée, certaines actions sont liées à une image. Cela est vrai pour l'action "engager" par exemple. L'élément <action-pictures> déclare les différentes images associées aux actions.

Les filtres des informations affichées sur les cartes

L'élément <tooltip-filters> informe Magic Project de la quantité d'informations à afficher sur les cartes en fonction de tests divers (par exemple, il est inutile d'afficher les couleurs d'un terrain étant donné qu'ils sont tous incolores).

Les modifieurs statiques

Les modifieurs statiques sont des modifications qui s'appliquent automatiquement à certaines cartes à partir du moment où ces dernières vérifient les règles qui sont attachées à ces modifieurs. Il sont déclarés au sein de l'élément <static-modifiers>. On trouve par exemple dans cette élément un modifieur statique qui permer à tout terrain basique en jeu de produire un mana de la couleur à laquelle il est associée, un modifieur statique pour pouvoir jouer les cartes avec la capacité morph ou un modifieur statique qui permet aux cartes qui ont la capacité flash d'être jouées à tout moment où un éphémère pourrait être joué.

Vous trouverez ci-dessous l'exemple du modifieur statique relatifs aux crétures avec la capacité mue :

<static-modifier filter-zone="play">
 <modifiers>
  <register-indirection index="power" value="2" operation="set" layer="internal" />
  <register-indirection index="toughness" value="2" operation="set" layer="internal" />
  <idcard-modifier idcard="creature" operation="set" layer="internal" />
  <property-modifier operation="remove" property="all" layer="internal"/>
  <color-modifier operation="clear" />
 </modifiers>
 <while>
  <and>
   <has-property property="morph" />
   <not>
    <is-face-up />
   </not>
  </and>
 </while>
</static-modifier>

La déclaration des capacités

Dans l'élément <abilities>, on peut trouver toutes les capacités directement associées avec la gestion générale du jeu.

Le contenu de cet élément débute avec les capacités système (déclarées à l'aide d'éléments <system-ability>) qui permettent entre autres aux joueurs de jouer durant la phase d'attaque, d'initialiser le jeu, d'implémenter les phases de pioche et de défausse, d'implémenter le mulligan, de gérer et d'initialiser le tour, de gérer les dommages mortels ou les brûlures de mana, d'implémenter la règle des légendes, d'implémenter la règles des enchantements du monde ou encore d'imposer la limitation concernant le nombre de terrains que l'on peut jouer par tour.

Ces déclarations sont suivies par les capacités de remplacement, qui sont des capacités qui se déclenchent sur l'occurence de certaines actions et remplacent dynamiquement ces actions par d'autres actions. Elles sont déclarées via l'élément <replacement-ability>. On trouve entre autres les capacités de remplacement qui gère le déplacement d'une carte jeton vers le cimetière (en réalité une telle carte est retirée de la partie à la place), qui gère le fait de jouer une carte avec la capacité flashback (lorsque le sort se résout, la carte associée est retirée de la partie) ou qui gère le fait de jouer une carte avec la capacité buyback (lorsque le sort se résout, la carte associée retourne dans la main de son propriétaire).

Disposition de l'espace de jeu

La disposition de l'espace de jeu est également décrite dans le fichier XML à l'aide de l'élément <layout>. Les zones et cadres communs y sont déclarés.

Les références

C'est la partie la plus importante du fichier XML pour les développeurs de règles de cartes. Identifié par l'élément <references>, il contient un ensemble de tests, d'actions, d'capacités ou d'attaches qui peuvent être référencées depuis votre code XML d'une carte. Attention : L'ordre de déclaration est important, il n'est pas possible reférencer un test, capacité,... qui no'a pas été déclaré avant.

Références de test

Elles sont décrites dans l'élément <tests>. On trouvera les références suivantes :

Nom de la référenceDescription
has-imprinted-cardRetourne vrai s'il y a une carte impriméee sur la carte courante.
hellbentRetourne vrai si vous n'avez plus de cartes en main.
once-each-turnEst-ce que cette capacité du type "ne peut être jouée qu'une seule fois par tour" a déjà été jouée ?
tested-just-summonedEst-ce que la carte testée viens d'être invoquée ?
just-summonedEst-ce que la carte courante vient d'être invoquée ?
before-attackers-declarationEst-ce que la phase courante est votre phase de déclaration des attaquants ?
during-your-untapEst-ce que la phase courante est votre phase de dégagement ?
during-modifier-untapEst-ce que la phase courante est la phase de dégagement du controller du créateur du modifieur?
during-your-upkeepEst-ce la phase courante est votre phase d'entretien ?
during-oppponent-upkeepEst-ce la phase courante est la phase d'entretien d'un adversaire ?
during-your-drawEst-ce que la phase courante est votre phase de pioche ?
thresholdEst-ce que le cimetière du contrôleur de la carte testée contient au moins un nombre de cartes supérieur ou égal au nombre identifié par le registre threshold de cette carte ?
tested-is-attackingEst-ce que la carte testée est en train d'attaquer ?
first-target-is-attackingEst-ce que la première carte dans la liste des cibles est en train d'attaquer ?
is-attackingEst-ce que la carte courante est en train d'attaquer ?
saved-is-attackingEst-ce que la carte sauvegardée est en train d'attaquer ?
tested-is-blockingEst-ce que la carte testée est en train de bloquer ?
first-target-is-blockingEst-ce que la première carte dans la liste des cibles est en train de bloquer ?
is-blockingEst-ce que la carte courante est en train de bloquer ?
tested-is-blockedEst-ce que la carte testée a été bloquée ?
is-blockedEst-ce que la carte courante a été bloquée ?
is-untapped-under-conditionEst-ce que la carte testée a été dégagée manuellement ?
tested-has-combat-damage-to-assignEst-ce que la carte testée a des dommages de combat à affliger ?
tested-is-unblockedEst-ce que la carte testée n'a pas été bloquée ?
is-unblockedEst-ce que la carte courante n'a pas été bloquée ?
tested-in-combatEst-ce que la carte testée participe au combat ?
in-combatEst-ce que la carte courante participe au combat ?
cantapEst-ce que la carte courante peut s'engager ?
can-use-TEst-ce que la carte courante peut utiliser la capacité {T} (en plus du précédent test, ce test vérifie si la carte courante n'est pas affectée par une quelconque limitation qui l'empècher ?
has-counterExiste-t-il un compteur privé pour la carte courante ? Ce compteur n'est pas visible pour les joueurs. Consultez également la capacité init-counter.
is-multicoloredEst-ce que la carte testée est multicolore (elle a au moins deux couleurs) ?
this-is-multicoloredEst-ce que la carte courante est multicolore (elle a au moins deux couleurs) ?
is-monocoloredEst-ce que la carte testée est monocolore ?
this-is-monocoloredEst-ce que la carte courante est monocolore ?
is-coloredEst-ce que la carte testée est colorée (elle a au moins une couleur) ?
this-is-coloredEst-ce que la carte courante est colorée (elle a au moins une couleur) ?
is-targetEst-ce que la carte testée peut être ciblée ?
is-targetable-landEst-ce que la carte testée est un terrain ciblable ?
is-targetable-spellEst-ce que la carte testée est un sort ciblable ?
valid-damage-sourceCe test doit retourner vrai pour désigner une source de dommages valide.
is-targetable-damage-sourceCe test doit retourner vrai pour désigner une source de dommages ciblable.
is-targetable-abilityAfin de cibler une capacité de manière appropriée, ce test doit retourner vrai.
is-targetable-creatureAfin de cibler une créature de manière appropriée, ce test doit retourner vrai.
is-targetable-artifactAfin de cibler un artefact de manière appropriée, ce test doit retourner vrai.
is-targetable-tappableAfin de cibler un permanent engageable (une créature, un artifact ou un terrain) de manière appropriée, ce test doit retourner vrai.
is-basic-landEst-ce que la carte testée est un terrain basique ?
is-nonbasic-landEst-ce que la carte testée est un terrain non-basique ?
only-for-artifact-spellTest utilisé pour appliquer des restrictions sur l'utilisation de mana uniquement destiné à être utilisé pour payer le coût de mana d'artefacts (voir Mishra's Workshop par exemple).
only-for-colored-spellTest utilisé pour appliquer des restrictions sur l'utilisation de mana uniquement destiné à être utilisé pour payer le coût de mana de sorts multicolores.
only-for-cumulative-upkeepTest utilisé pour appliquer des restrictions sur l'utilisation de mana uniquement destiné à être utilisé pour payer le coût de mana d'entretiens cumulatifs.
valid-blockPour être désigné comme bloqueur de l'attaquant courant, la carte testée doit vérifier que ce test retourne vrai.
is-targetable-playerPour cibler un joueur de manière appropriée, ce test doit retourner vrai.
is-targetable-dealtablePour cibler une créature ou un joueur de manière appropriée, ce test doit retourner vrai.
is-targetable-artifact-creaturePour cibler une créature artefact de manière appropriée, ce test doit retourner vrai.
is-targetable-enchantmentPour cibler un enchantement de manière appropriée, ce test doit retourner vrai.
is-targetable-local-enchantmentPour cibler une aura de manière appropriée, ce test doit retourner vrai.
can-attackEst-ce que la carte testée peut attaquer ?
valid-enchantTest utilisé pour l'attache d'une aura à un permanent enchanté.
valid-enchant-landTest utilisé pour l'attache d'une aura à un terrain enchanté.
valid-enchant-creatureTest utilisé pour l'attache d'une aura à une créature enchantée.
valid-enchant-enchantmentTest utilisé pour l'attache d'une aura à une créature artefact enchantée.
valid-enchant-artifact-creatureTest utilisé pour l'attache d'une aura à une créature artefact enchantée.
valid-enchant-artifactTest utilisé pour l'attache d'une aura à un artefact enchanté.
valid-equip-creatureTest utilisé pour l'attache d'un equipement à une créature équipée.
valid-to-enchantTest interne utilisé pour sélectionner une carte valide à enchanter (n'utilisez pas ce test directement).
valid-creature-to-enchantTest utilisé pour sélectionner une créature valide à enchanter.
valid-enchantment-to-enchantTest utilisé pour sélectionner un enchantement valide à enchanter.
valid-land-to-enchantTest utilisé pour sélectionner un terrain valide à enchanter.
valid-permanent-to-enchantTest utilisé pour sélectionner un permanent valide à enchanter.
valid-artifact-creature-to-enchantTest utilisé pour sélectionner une créature artefact valide à enchanter.
valid-artifact-to-enchantTest utilisé pour sélectionner un artefact valide à enchanter.
valid-to-equipTest utilisé pour vérifier la validité d'un équipement (n'utilisez pas directement ce test).
valid-creature-to-equipTest utilisé pour vérifier la validité de l'équipement sur la créature.
valid-equipTest utilisé pour sélectionner une carte valide à équipper (n'utilisez pas directement ce test).
valid-equip-creatureTest utilisé pour sélectionner une créature valide à équipper.
died-cardCe test est utilisé par les capacités update-toughness et update-damage.
priv_blocking-tested-counterTest uniquement utilisé par la capacité d'assignation de dégats de combat pour vérifier les créatures bloquant la carte super.tested.
priv_blocked-by-tested-counterTest uniquement utilisé par la capacité d'assignation de dégats de combat pour vérifier les créatures bloquées par la carte super.tested.
priv_currentplayer-has-to-discardTest utilisé durant la phase de défausse pour vérifier si le joueur courant a des cartes en trop à défausser dans sa main.
flashback-usedEst-ce que le flashback a été utilisé ?
buyback-usedEst-ce que le buyback a été payé pour ce sort ?
kicker-usedEst-ce que le kick a été payé pour ce sort ?
kicker2-usedEst-ce que le second kick a été payé pour ce sort ?
entwine-usedEst-ce que le entwine a été payé pour ce sort ?
has-no-more-fadingRetourne vrai si la carte courante n'a plus de marqueur fading sur elle.
has-no-more-timeRetourne vrai si la carte courante n'a plus de marqueur time sur elle.
can-regenerateEst-ce que la créture peut régénérer ? Ce test ne peut être référencé depuis un test d'événement.
is-valid-blocking-creature-for-targeted-attacking?
has-at-least-one-valid-blocking-creature?
valid-creature-equipTest utilisé pour sélectionner une cible appropriée pour un équipement.

Les références d'actions

Elles sont décrites au sein de l'élément <actions>. Certaines références sont désignées comme des MACRO([value],[test]), ce qui signifie que vous pouvez y associer dynamiquement un test additionnel à ajouter au tests de l'action ou passer une valeur à l'action référencée. On peut trouver les références suivantes :

Nom de la référenceDescription
affinityMACRO(counter-test) : Affinité pour counter-test. Exemple : Dross Golem
phase-outLes cartes dans la liste des cibles phasent out.
counterContre les sort(s) dans la liste des cibles.
use-once-each-turnMarque la capacité qui référence cette action comme étant déjà jouée ce tour-ci.
target-permanent-enchantMACRO(test) : elle vous permet de cibler un permanent valide à enchanter.
all-creaturesMACRO(test) : cible toutes les créatures en jeu.
all-landsMACRO(test) : cible toutes les terrains en jeu.
all-artifactsMACRO(test) : cible toutes les artefactes en jeu.
target-for-attachmentMACRO(test) : elle vous permet de cibler un permanent valide de manière à ce que la carte courante s'attache à ce permanent ciblé (fonctionne pour les équipements et les auras).
target-creature-enchantMACRO(test) : elle vous permet de cibler une créature valide à enchanter.
target-land-enchantMACRO(test) : elle vous permet de cibler un terrain valide à enchanter.
target-artifact-enchantMACRO(test) : elle vous permet de cibler un artefact valide à enchanter.
target-damage-sourceMACRO(test) : elle vous permet de cibler une source de dommages valide.
target-local-enchantmentMACRO(test) : elle vous permet de cibler une aura valide en jeu.
target-enchantmentMACRO(test) : elle vous permet de cibler un enchantement valide en jeu.
target-landMACRO(test) : elle vous permet de cibler un terrain valide en jeu.
target-creatureMACRO(test) : elle vous permet de cibler une créature valide en jeu.
target-artifactMACRO(test) : elle vous permet de cibler un artefact valide en jeu.
target-artifact-creatureMACRO(test) : elle vous permet de cibler une créature artefact valide en jeu.
target-permanentMACRO(test) : elle vous permet de cibler un permanent valide.
target-noncreature-artifactMACRO(test) : elle vous permet de cibler un artefact non-créature valide en jeu.
target-nonartifact-creatureMACRO(test) : elle vous permet de cibler une créature non-artefact valide en jeu.
target-tappableMACRO(test) : elle vous permet de cibler un permanent valide qui a la possibilité d'être engagé.
target-playerMACRO(test) : elle vous permet de cibler joueur valide.
choose-playerMACRO(test) : elle vous permet de choisir joueur valide (pas une action de cible).
target-opponentMACRO(test) : elle vous permet de cibler un adversaire valide.
target-dealtableMACRO(test) : elle vous permet de cibler un dealtable valide (qui désigne un joueur ou permanent qui peut subir des dommages).
target-cardMACRO(test) : elle vous permet de cibler une carte valide en jeu (équivalent à target-permanent).
target-spellMACRO(test) : elle vous permet de cibler un sort valide dans la pile.
target-abilityMACRO(test) : elle vous permet de cibler un capactié valide dans la pile.
search-lib-up-to-playerMACRO(value,test) : elle permet au joueur en première position dans la liste des cibles de chercher dans sa bibliothèque jusqu'à value cartes (il peut annuler l'opération).
search-lib-up-toMACRO(value,test) : elle vous permet de chercher dans votre bibliothèque jusqu'à value cartes (vous pouvez annuler l'opération).
search-libMACRO(test) : elle vous permet de chercher une carte dans votre bibliothèque (vous ne pouvez pas annuler l'opération).
search-lib-playerMACRO(value,test) : elle permet au joueur en première position dans la liste des cibles de chercher dans sa bibliothèque jusqu'à value cartes (il ne peut pas annuler l'opération).
revealRévèle les cartes de la liste des cibles à tout le monde et attend jusqu'à ce que l'adversaire décide de ne plus regarder les cartes révélées de cette manière.
lookElle vous permet de regarder les cartes dans la liste des cibles et attend jusqu'à ce que vous décidiez de ne plus regarder ces cartes.
look-at-the-topElle vous permet de regarder la carte du dessus de votre bibliothèque. L'action face-down' devrait être appelé par la suite.
finish-spellDéplace la carte qui référence cette action dans le cimetière de son propriétaire.
shuffle-in-libDéplace les cartes de la liste des cibles dans les librairies de leurs propriétaires respectifs et mélange la bibliothèque du propriétaire de la dernière carte.
shuffle-in-libsDéplace les cartes de la liste des cibles dans les librairies de leurs propriétaires respectifs et mélange toutes les bibliothèques.
prepare-extra-turnPrépare le jeu de manière à ce que vous puissiez jouer un tour supplémentaire après celui-ci.
TEngage la carte qui référence cette action.
remove-from-combatRetire les cartes de la liste des cibles du combat.
regenerateAjoute à la carte qui référence cette action une capacité de remplacement qui se déclenche lorsque cette carte subit des dommages mortels et remplace cette action en retirant cette carte du combat (le cas échéant) et en retirant tout dommage s'appliquant à cette carte. Cette capacité dure jusqu'à la fin du tour.
regenerate-targetApplique l'action regenerate à la dernière carte de la liste des cibles.
regenerate-attached-toApplique l'action regenerate à la carte rattachée à la carte qui référence cette action.
remove-all-damageRetire tous les dommages qui s'appliquent aux cartes de la liste des cibles.
restore-library-visibilityRestaure la visibilité pour vous concernant les bibliothèques des joueurs de la liste des cibles (TODO).
restore-hand-visibilityRestaure la visibilité des mains des joueurs de la liste des cibles pour l'adversaire (vérifie si l'adversaire a une capacité spéciale lui permettant de regarder votre main de manière permanente).
add-1-1-until-eotLes cartes de la liste des cibles gagnent -1/-1 jusqu'à la fin du tour.
add-2-2-until-eotLes cartes de la liste des cibles gagnent -2/-2 jusqu'à la fin du tour.
add-3-3-until-eotLes cartes de la liste des cibles gagnent -3/-3 jusqu'à la fin du tour.
add-4-4-until-eotLes cartes de la liste des cibles gagnent -4/-4 jusqu'à la fin du tour.
add+1+1-until-eotLes cartes de la liste des cibles gagnent +1/+1 jusqu'à la fin du tour.
add+7+7-until-eotLes cartes de la liste des cibles gagnent +7/+7 jusqu'à la fin du tour.
add+6+6-until-eotLes cartes de la liste des cibles gagnent +6/+6 jusqu'à la fin du tour.
add+1-1-until-eotLes cartes de la liste des cibles gagnent +1/-1 jusqu'à la fin du tour.
add+2-2-until-eotLes cartes de la liste des cibles gagnent +2/-2 jusqu'à la fin du tour.
add+3-3-until-eotLes cartes de la liste des cibles gagnent +3/-3 jusqu'à la fin du tour.
add-2+2-until-eotLes cartes de la liste des cibles gagnent -2/+2 jusqu'à la fin du tour.
add-1+1-until-eotLes cartes de la liste des cibles gagnent -1/+1 jusqu'à la fin du tour.
add+2-1-until-eotLes cartes de la liste des cibles gagnent +2/-1 jusqu'à la fin du tour.
add-1-0-until-eotLes cartes de la liste des cibles gagnent -1/-0 jusqu'à la fin du tour.
add+1+2-until-eotLes cartes de la liste des cibles gagnent +1/+2 jusqu'à la fin du tour.
add+2+2-until-eotLes cartes de la liste des cibles gagnent +2/+2 jusqu'à la fin du tour.
add+3+3-until-eotLes cartes de la liste des cibles gagnent +3/+3 jusqu'à la fin du tour.
add+4+4-until-eotLes cartes de la liste des cibles gagnent +4/+4 jusqu'à la fin du tour.
add+5+5-until-eotLes cartes de la liste des cibles gagnent +5/+5 jusqu'à la fin du tour.
add+2+1-until-eotLes cartes de la liste des cibles gagnent +2/+1 jusqu'à la fin du tour.
add+3+0-until-eotLes cartes de la liste des cibles gagnent +3/+0 jusqu'à la fin du tour.
add+4+0-until-eotLes cartes de la liste des cibles gagnent +4/+0 jusqu'à la fin du tour.
add+2+0-until-eotLes cartes de la liste des cibles gagnent +2/+0 jusqu'à la fin du tour.
add+2+0-until-eocLes cartes de la liste des cibles gagnent +2/+0 jusqu'à la fin du combat.
add+1+0-until-eotLes cartes de la liste des cibles gagnent +1/+0 jusqu'à la fin du tour.
add+0+1-until-eotLes cartes de la liste des cibles gagnent +0/+1 jusqu'à la fin du tour.
add+0+2-until-eotLes cartes de la liste des cibles gagnent +0/+2 jusqu'à la fin du tour.
add+0+3-until-eotLes cartes de la liste des cibles gagnent +0/+3 jusqu'à la fin du tour.
add+0+5-until-eotLes cartes de la liste des cibles gagnent +0/+5 jusqu'à la fin du tour.
add-2-0-until-eotLes cartes de la liste des cibles gagnent -2/-0 jusqu'à la fin du tour. Exemple : Ivory Charm
gain-1-1-until-eotLa carte qui référence cette action gagne -1/-1 jusqu'à la fin du tour.
gain+1+1-until-eotLa carte qui référence cette action gagne +1/+1 jusqu'à la fin du tour.
gain+1+0-until-eotLa carte qui référence cette action gagne +1/+0 jusqu'à la fin du tour.
gain+2+0-until-eotLa carte qui référence cette action gagne +2/+0 jusqu'à la fin du tour.
gain+0+1-until-eotLa carte qui référence cette action gagne +0/+1 jusqu'à la fin du tour.
gain+0+2-until-eotLa carte qui référence cette action gagne +0/+2 jusqu'à la fin du tour.
gain+2+2-until-eotLa carte qui référence cette action gagne +2/+2 jusqu'à la fin du tour.
gain+3+3-until-eotLa carte qui référence cette action gagne +3/+3 jusqu'à la fin du tour.
gain+1+2-until-eotLa carte qui référence cette action gagne +1/+2 jusqu'à la fin du tour.
gain+1-1-until-eotLa carte qui référence cette action gagne +1/-1 jusqu'à la fin du tour.
unblockable-until-eotLes cartes de la liste des cibles deviennent imblocables jusqu'à la fin du tour.
flying-until-eotLes cartes de la liste des cibles gagnent le vol jusqu'à la fin du tour. Exemple : Raka Disciple
fear-until-eotLes cartes de la liste des cibles gagnent la peur jusqu'à la fin du tour (elle sont imblocables sauf par des créatures noires ou artefacts).
shadow-until-eotLes cartes de la liste des cibles gagnent la distorsion jusqu'à la fin du tour (elles ne peuvent bloquer ou être bloquées que par des créatures avec la distorsion).
wall-can-attack-until-eotLes cartes de la liste des cibles sont autorisées à attaquer ce tour-ci (si possible) même si elles ont la défense.
haste-until-eotLes cartes de la liste des cibles gagnent la célérité jusqu'à la fin du tour (elle peuvent attaquer durant le tour où elles sont arrivées en jeu).
trample-until-eotLes cartes de la liste des cibles gagnent le piétinement jusqu'à la fin du tour.
banding-until-eotLes cartes de la liste des cibles gagnent le regroupement jusqu'à la fin du tour.
first-strike-until-eotLes cartes de la liste des cibles gagnent l'initiative jusqu'à la fin du tour.
double-strike-until-eotLes cartes de la liste des cibles gagnent double strike jusqu'à la fin du tour.
vigilance-until-eotLes cartes de la liste des cibles gagnent la vigilance jusqu'à la fin du tour (attaquer ne les fait pas s'engager).
shroud-until-eotLes cartes de la liste des cibles ne peuvent pas être la cible de sorts ou de capacités jusqu'à la fin du tour.
return-to-handRetourne les cartes de la liste des cibles dans la main de leurs propriétaires.
move-library-topDéplace les cartes de la liste des cibles au dessus de la bibliothèque de leurs propriétaires.
move-library-bottom
remove-from-game
*---------------------------+--------------------------------------------------+
Retire les cartes de la liste des cibles du jeu (elles sont déplacées vers la zone side, [TODO] créer une zone dédiée pour de telles cartes devrait être considéré).
put-in-graveyardDéplace les cartes de la liste des cibles dans le cimetière de leurs propriétaires.
draw-a-cardFait piocher une carte aux joueurs de la liste des cibles. Exemple : Bandage
remove-a-card-from-libraryRetire du jeu la carte du dessus de la bibliothèque des joueurs de la liste des cibles. Cette liste est vidée après cette opération.
remove-a-card-from-graveyardElle permet aux joueurs de la liste des cibles de choisir une carte de leur cimetière afin qu'elle soit retirée du jeu. La liste des cibles est vidée après cette opération.
draw-a-card-next-upkeepElle vous fait piocher une carte durant l'entretien du prochain tour. Exemple : Heal
opponent-draw-a-card-next-upkeepElle fait piocher une carte à l'adversaire durant l'entretien du prochain tour.
pay-lifeMACRO(value) : fait payer value points de vie au contrôleur de la carte qui référence cette action. Attention, un test devra être utilisé afin de vérifier que ce joueur a assez de points de vie pour joueur cette action (vérifiez mtg.xml pour plus d'informations).
gain-lifeMACRO(value) : fait gagner value points de vie au contrôleur de la carte qui référence cette action.
lose-lifeMACRO(value) : fait perdre value points de vie au contrôleur de la carte qui référence cette action.
lose-life-targetMACRO(value) : fait perdre value points de vie aux joueurs de la liste des cibles.
discardMACRO(value,test) : elle vous fait choisir et défausser value cartes depuis votre main.
discard-randomMACRO(value,test) : elle vous fait défausser au hazard value cartes depuis votre main.
opponent-discardsMACRO(value,test) : elle fait choisir et défausser value cartes à l'adversaire depuis sa main.
discard-a-playerMACRO(value,test) : elle vous fait choisir et défausser value cartes depuis la main des joueurs de la liste des cibles.
player-discardMACRO(value,test) : elle fait choisir et défausser value cartes au joueur en première position dans la liste des cibles depuis sa main.
player-discard-random
player-discard-up-to
*---------------------------+--------------------------------------------------+
MACRO(value,test) : elle fait choisir et défausser jusqu'à value cartes au joueur en première position dans la liste des cibles depuis sa main.
discard-cards_nonameDéplace les cartes de la liste des cibles dans le cimetière de leur propriétaires (cette action n'est pas nommée).
discard-cardsDéplace les cartes de la liste des cibles dans le cimetière de leur propriétaires.
destroyDétruire les cartes présentes dans la liste de cibles.
buryDétruire les cartes présentes dans la liste de cibles. Les cartes détruites ne peuvent être régénérées.
destroy-target-eotDétruit le première carte de la liste de cibles à la fin du tour.
destroy-target-eoc
remove-from-game-target-eot
*---------------------------+--------------------------------------------------+
Retire de la partie le première carte de la liste de cibles à la fin du tour.
return-to-play-target-eot
sacrifice-this
*---------------------------+--------------------------------------------------+
Sacrifie cette carte (Mettre la carte dans cimetière de son propriétaire).
sacrifice-a-creatureMACRO(test) : Sacrifie value créatures choisies.
sacrifice-any-creatureMACRO(value,test) : Sacrifie n'importe quel nombre de créatures choisies.
sacrifice-a-permanentMACRO(value,test) : Sacrifie value permanants choisis.
opponent-sacrifice-a-permanentMACRO(value,test) : Sacrifie value permanants choisis.
opponent-sacrifice-a-creatureMACRO(value,test) : L'adversaire sacrifie value créatures choisies.
sacrifice-an-artifactMACRO(value,test) : Sacrifie value artefacts choisis.
sacrifice-an-enchantmentMACRO(value,test) : Sacrifie value enchantements choisis.
opponent-sacrifice-an-enchantmentMACRO(value,test) : L'adversaire sacrifie value enchantements choisis.
opponent-sacrifice-an-artifactMACRO(value,test) : L'adversaire sacrifie value artifacts choisis.
sacrifice-a-landMACRO(value,test) : Sacrifie value terrains choisis.
opponent-sacrifice-a-landMACRO(value,test) : L'adversaire sacrifie value terrains choisis.
sacrificeSacrifie les cartes présentes dans la liste de cibles.
redirect-all-to-thisRedirige l'ensemble des dégats de la première cible vers cette carte jusqu'à la fin du tour.
redirect-1-from-thisRedirige le prochain dommage issu de cette carte vers la première cible jusqu'à la fin du tour. Exemple : Nomads en-Kor
redirect-2-from-thisRedirige les 2 prochains dommages issus de cette carte vers la première cible jusqu'à la fin du tour.
redirect-3-from-thisRedirige les 3 prochains dommages issus de cette carte vers la première cible jusqu'à la fin du tour.
redirect-all-from-thisRedirige tous les prochains dommages issus de cette carte vers la première cible jusqu'à la fin du tour.
redirect-allRedirige l'ensemble des dommages de la première cible vers la seconde jusqu'à la fin du tour.
redirect-1Redirige le prochain dommage de la première cible vers la seconde jusqu'à la fin du tour.
redirect-2Redirige les 2 prochains dommages de la première cible vers la seconde jusqu'à la fin du tour.
redirect-3Redirige les 3 prochains dommages de la première cible vers la seconde jusqu'à la fin du tour.
redirect-1-to-thisRedirige le prochain dommage de la première cible vers cette carte jusqu'à la fin du tour. Exemple : Daughter of Autumn
redirect-2-to-thisRedirige les 2 prochains dommages de la première cible vers cette carte jusqu'à la fin du tour.
redirect-3-to-thisRedirige les 3 prochains dommages de la première cible vers cette carte jusqu'à la fin du tour.
prevent-1-on-thisPrévient le prochain dommage infligé à cette carte jusqu'à la fin du tour. Exemple : Ordruun Commando
prevent-all-on-thisPrévient tous les dommages infligés à cette carte jusqu'à la fin du tour. Exemple : Deftblade Elite
prevent-all-from-thisPrévient tous les dommages infligés par cette carte jusqu'à la fin du tour. Exemple : Deftblade Elite
prevent-1Prévient le prochain dommage infligé à la dernière carte ciblée jusqu'à la fin du tour. Exemple : Heal, Samite Healer
prevent-2Prévient les 2 prochains dommages infligés à la dernière carte ciblée jusqu'à la fin du tour. Exemple : Elvish Healer
prevent-3Prévient les 3 prochains dommages infligés à la dernière carte ciblée jusqu'à la fin du tour. Exemple : Healing Salve
prevent-4Prévient les 4 prochains dommages infligés à la dernière carte ciblée jusqu'à la fin du tour. Exemple : Hallowed Healer
prevent-5Prévient les 5 prochains dommages infligés à la dernière carte ciblée jusqu'à la fin du tour. Exemple : Abuna's Chant
prevent-6Prévient les 6 prochains dommages infligés à la dernière carte ciblée jusqu'à la fin du tour. Exemple : Recuperate
prevent-xPrévient les X prochains dommages infligés à la dernière carte ciblée jusqu'à la fin du tour. Exemple : Alabaster Potion
prevent-allPrévient tous les dommages infligés à la dernière carte ciblée jusqu'à la fin du tour. Exemple : Circle of Protection: Black
prevent-all-combat-on-target
prevent-all-from
*---------------------------+--------------------------------------------------+
Prévient tous les dommages infligés par la dernière carte jusqu'à la fin du tour.
prevent-all-combat-damagePrévient tous les dommages de combat infligés ce tour-ci. Exemple : Moment's Peace
deals-no-combat-damagePrévient tous les dommages de combats qui aurait dus être infligés par la première cible ce tour-ci.
put-in-playMet en jeu cette carte sous le contrôle du propriétaire.
choose-damage-sourceChoisis une carte qui pourrait faire des dommages à quelque chose. Exemple : Circle of Protection: Black
buybackActive l'option rappel pour le sort courant. Exemple : Constant Mists
flashbackActive l'option flashback pour le sort courant. Exemple : Moment's Peace
kickerActive l'option kick pour le sort courant. Exemple : Duskwalker
kicker2Active l'option kick pour le sort courant. Exemple : Cetavolver
entwineActive l'option entwine pour le sort courant. Exemple : Dream's Grip
planeswalker-ability-used
skip-next-turn
*---------------------------+--------------------------------------------------+
Fais passer son prochain tour au propriétaire de la carte courante.
target-equipable-creatureCible une créture qui peut être équipée par la carte courante. Exemple : Grifter's Blade
equipEquipe la dernière cible avec la carte courante (qui devrait être alors un équipement).
radianceImplémentation de l'option radiance. Exemple : Rally the Righteous
morphImplémentation de la capacité mue : retourne la carte courante face visible. Exemple : Aphetto Alchemist
imprint-cardCette action imprime la dernière cible de la liste de cibles sur la carte contrôlant cette action. La card imprimée est sauvegardée en tant que composant 'private-object' dans la carte.
load-imprinted-cardCharge la carte imprimée dans la liste de cibles. S'il n'y a pas de carte imprimée, une erreur est générée. Utiliser le test 'has-imprinted-card'.
pay-xPaye X manas incolores. Exemple : Fireball
pay-xxPayer XX manas incolores. Exemple : Decree of Justice
blocks-this-if-ableForce la dernière cible à bloquer la carte courante durant le prochain combat s'il le peut.
amplifyAction amplify MACRO([value]). Exemple : Daru Stinger

Les références de capacités

Elles sont décrites au sein de l'élément <abilities>. Utiliser ces références est la meilleure manière d'accélérer le développement et la maintenance du code des cartes car elles centralisent tout le code réutilisable relatif aux cartes. Ainsi, si vous trouvez des capacités souvent répétées dans les cartes, c'est le meilleur endroit pour y ajouter une référence afin de la partager avec l'ensemble de la communauté des développeurs de cartes. L'équipe de développement fera tout son possible pour inclure la détection de nouvelles capacités au sein de son générateur de règles de cartes à partir de l'Oracle. Certaines capacités fonctionnent comme des macros en acceptant une ou deux liste d'actions. On trouve les références suivantes :

Nom de la référenceDescription
suspendCapacité déclenchée relative à la gestion de la suspension. Elle est utilisée par l'abilité cast-suspend. La capacité se déclenche au début de votre phase d'entretien et a pour effet de retirer un marquer temps sur la carte référençant cette abilité, s'il ne reste plus de marqueur temps sur cette carte, elle est mise en jeu. TODO : il faut que la carte soit considérée comme jouée durant le tour où elle a été mise en jeu et pas pendant le tour où la capacité de suspension a été invoquée, cette information a de l'importance pour toutes les cartes exploitant le mécanis-this déluge. Un exemple de l'utilisation de cette capacité est disponible à travers la carte Lotus Bloom.
cast-suspendMACRO(actions, actions) : cette capacité activée doit être référencée par toute carte exploitant la capacité suspension. Il permet au possesseur de la carte d'invoquer le sort associé en mode suspension et ajoute de manière dynamique la capacité déclenchée suspend à la carte retirée du jeu. La première <actions> macro permet de spécifier le coût de la capacité de suspension. La seconde <actions> macro est appelée juste après avoir retiré la carte du jeu et vous permet d'implémenter l'ajout de marqueur temps sur la carte retirée du jeu. Un exemple de l'utilisation de cette capacité est disponible à travers la carte Lotus Bloom.
provokeImplémentation de Provocation.
graftImplémentation de Graft. Déplace un compteur +1/+1 de cette carte vers la carte qui arrive en jeu.
cyclingDéplace la carte qui référence cette action dans le cimetière de son propriétaire et permet à ce même propriétaire de piocher une carte depuis sa bibliothèque. Cette capacité est une macro, une liste d'action doit être donnée en paramètre Exemple : Sunfire Balm
forecastForecast {macro actions} : {macro actions}.
tap-add-B{T} : ajouter un mana noir à votre réserve de mana.
tap-add-U{T} : ajouter un mana blue à votre réserve de mana.
tap-add-G{T} : ajouter un mana vert à votre réserve de mana.
tap-add-R{T} : ajouter un mana rouge à votre réserve de mana.
tap-add-W{T} : ajouter un mana blanc à votre réserve de mana.
tap-add-C{T} : ajouter un mana incolor à votre réserve de mana.
cast-enchant{T} : mettre en jeu un enchantement local, attaché à un permanent valide.
cast-enchant-flash{T} : mettre en jeu un enchantement local, attaché à un permanent valide.
cast-spell{T} : mettre en jeu un permanent en payant son coût de mana.
morphUtilise la capacité de morph.
cast-morph{T} : mettre en jeu un morph en payant 3.
cast-flash{T} : mettre en jeu un permanent avec la cpacité de flash, et en payan sont coût de mana.
cast-land{T} : jouer un terrin.
echoLa capacité echo. Cette référence accepte en macro une action de substitution à l'action pay-mana de défaut.
prevent-all-on-thisPrévient tous les dommages infligés à cette carte.
prevent-all-on-attachedtoPrévient tous les dommages infligés à la carte attachée.
deals-no-combat-damageLa carte sauvegardée n'inflige pas de dégat de combat.
bloodthirst1Implementation de bloodthirst 1. Exemple : Bloodscale Prowler
bloodthirst2Implementation de bloodthirst 2. Exemple : Scab-Clan Mauler
bloodthirst3Implementation de bloodthirst 1. Exemple : Ghor-Clan Savage
dredge1Implementation de dredge 1. Exemple : Grave-Shell Scarab
dredge2Implementation de dredge 2.
dredge3Implementation de dredge 3. Exemple : Darkblast
dredge4Implementation de dredge 5.
dredge5Implementation de dredge 5.
dredge6Implementation de dredge 6.
transmuteImplementation de transmute. Exemple : Perplex
rampage1Implementation de Sauvagerie 1. Exemple : Balduvian War-Makers
rampage2Implementation de Sauvagerie 2. Exemple : Balduvian War-Makers
rampage3Implementation de Sauvagerie 3. Exemple : Craw Giant
rampage4Implementation de Sauvagerie 4. Exemple : Teeka's Dragon
eot-sacrificeA la fin du tour, sacrifier cette carte. Exemple : Dragon Whelp
regenerateRegénérère si possible la carte sauvegardée. Cette capacité ne devrait pas apparaître directement dans les capacités d'une carte, mais utilisée avec l'action create-ability.
shapeshifter-abilityLorsqu'une créature arrive en jeu, THIS devient une copie de cette carte et gagne cette capacité. Exemple : Unstable Shapeshifter
cast-spell-kicker{T} : mettre en jeu un permanent en payant son coût de mana ainsi qu'un kicker. Cette macro ne fonctionne qu'avec un seul kicker payé. Il y a deux noeuds <actions> correspondants respectivement au coût du kick et à son effet associé.
cast-spell-kicker2{T} : mettre en jeu un permanent en payant son coût de mana ainsi que le second kicker. Cette macro ne fonctionne qu'avec un seul kicker payé. Il y a deux noeuds <actions> correspondants respectivement au coût du kick et à son effet associé.
cast-spell-kicker12{T} : mettre en jeu un permanent en payant son coût de mana ainsi que le premier et le second kicker. Cette macro ne fonctionne qu'avec deux kicks payé. Il y a quatre noeuds <actions> correspondants respectivement au coût du premier et du second kick et à respectivement au premier et au deuxième effet associé.
amplify-1Capacité amplify 1. Exemple : Daru Stinger
amplify-2Capacité amplify 2. Exemple : Daru Stinger
amplify-3Capacité amplify 3. Exemple : Daru Stinger

Les références d'attaches

Elles sont décrites au sein de l'élément <attachments>. On peut trouver les références suivantes :

Nom de la référenceDescription
enchant-creatureUtilisez cette référence pour attacher une aura de type 'enchanter : créature' à une créature valide à enchanter.

Contraintes d'actions

Magic Project est également capable d'appliquer des contraintes sur les actions si elles correspondent aux éléments fils de l'élément <action>. Ces contraintes sont ajoutées dynamiquement à l'aide de l'opération fournie (génégalement renseignée à "and") au test associé au sein de l'action correspondante. Ces contraintes sont déclarées via l'élément <action-constraints>. Vous trouverez ici par exemple les contraintes concernant la capacité d'un équipement d'équiper une créature (il est impossible pour un équipement qui est également une créature d'équiper une créature) :

<constraint operation="and">
 <test>
  <and>
   <not>
    <has-idcard idcard="creature" card="this" />
   </not>
   <has-property property="equipment" card="this" />
  </and>
 </test>
 <actions>
  <attach name="equip" />
 </actions>
</constraint>
<constraint operation="and">
 <test>
  <and>
   <not>
    <has-idcard idcard="creature" card="this" />
   </not>
   <has-property property="equipment" card="this" />
  </and>
 </test>
 <actions>
  <pay-mana />
 </actions>
</constraint>

Coûts additionnels

Magic Project est capable de gérer les coûts additionnels à l'aide de l'élément <additional-costs>.

Les objets

La dernière partie du fichier XML est dédiée aux objets, qui peuvent être considérés comme des compteurs (glace, poison, +1/+1, etc.). Ils sont déclarés via l'élément <objects>.

Les fichiers des règles des cartes de Magic : l'Assemblée

Comme cela a été précisé avant, chaque carte dans un jeu comme Magic : l'Assemblée peut faire référence à ses propres règles spécifiques. Dans Magic Project, il faut écrire un fichier XML par carte à implémenter. Le contenu du fichier décrit les règles de la carte dans la même syntaxe utilisée dans le fichier mtg.xml.

Description des règles de syntaxe XML des règles des cartes

La meilleure façon de décrire la structure de ces fichier est d'examiner un exemple. Pourquoi ne pas coder la carte Angel of Light de l'édition Starter ?

Cet exemple vous permettra de connaître les parties les plus importantes qui constituent un fichier XML de description des règles d'une carte. Vous trouverez ci-dessous l'image de cette carte :

Commençons par observer le code de cette carte :

<?xml version="1.0" encoding="ISO-8859-1"?>
<card xmlns="http://sourceforge.net/projects/firemox"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://sourceforge.net/projects/firemox ../../validator.xsd"
 name="Angel of Light">
 <rules-author-comment>riclas</rules-author-comment>
 <init>
  <registers>
   <register index="white" value="1"/>
   <register index="colorless" value="4"/>
   <register index="power" value="3"/>
   <register index="toughness" value="3"/>
  </registers>
  <colors>white</colors>
  <idcards>creature</idcards>
  <properties>vigilance flying angel</properties>
 </init>
 <abilities>
  <ability ref="cast-spell"/>
 </abilities>
</card>

La déclaration d'une carte commence toujours avec l'élément <card>. Il doit spécifier les paramètres xmlns (l'espace de nommage XML du fichier courant), xmlns:xsi (l'espace de nommage XML des éléments et attributs relatif au schéma), xsi:schemaLocation (qui spécifie l'emplacement du fichier XML de schéma utilisé pour valider la structure du fichier) et le nom (c'est à dire le nom de la carte en Anglais sans remplacer ni effacer aucun caractère).

<card xmlns="http://sourceforge.net/projects/firemox"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://sourceforge.net/projects/firemox ../../validator.xsd"
 name="Angel of Light">

Cet élément est immédiatement suivi par l'élément <rules-author-comment> qui donne des informations à propos de l'auteur du fichier XML des règles de la carte (généralement son nom ou pseudo).

<rules-author-comment>riclas</rules-author-comment>

Cet élément peut être suivi d'un commentaire qui rappelle la version de l'Oracle des règles de la carte si cette carte a été générée par le convertisseur Oracle vers XML.

L'élément suivant est l'élément <init> qui contient toutes les informations statiques de la carte. On trouvera dans cet élément :

  • L'élément <registers> qui est utilisé pour initialiser un certain nombre de registres associés à la carte. Cet élément contient des éléments <register> qui ont généralement deux attributs : index pour le nom logique du registre (qui en réalité est un index entier, ainsi le nom logique utilisé doit être déclaré dans l'élément <aliases> du fichier XML mtg.xml) et value pour la valeur affectée. and value for the affected value. Veuillez noter que la valeur ou l'index peuvent être imbriqués sous la forme d'éléments. On utilise généralement ces registres pour les cartes :
    • white pour la quantité de mana blanc dans le coût d'invocation,
    • blue pour la quantité de mana bleu dans le coût d'invocation,
    • black pour la quantité de mana noir dans le coût d'invocation,
    • green pour la quantité de mana vert dans le coût d'invocation,
    • red pour la quantité de mana rouge dans le coût d'invocation,
    • colorless pour la quantité de mana incolore dans le coût d'invocation,
    • power pour la force de la créature si cette carte est une créature,
    • toughness pour l'endurance de la créature si cette carte est une créature,

    Dans l'exemple, la carte a un coût d'invocation de 4W et un couple force/endurance de 3/3.

    <registers>
     <register index="white" value="1"/>
     <register index="colorless" value="4"/>
     <register index="power" value="3"/>
     <register index="toughness" value="3"/>
    </registers>
    
  • L'élément <colors> permet d'ajouter des couleurs à la carte. Il peut contenir jusqu'à cinq alias de couleurs, séparés par un espace.

    Dans notre example, la carte est une carte blanche.

    <colors>white</colors>
    
  • L'élément <idcards> permet de préciser les types principaux de la carte, il peut contenir les valeurs suivantes :
    • plains pour une plaine,
    • island pour une île,
    • swamp pour un marais,
    • forest pour une forêt,
    • mountain pour une montagne,
    • land pour un terrain non-basique,
    • creature pour une créature,
    • artifact pour un artefact,
    • local-enchantment pour une aura,
    • global-enchantment pour un enchantement,
    • instant pour un éphémère,
    • sorcery pour un sortilège.

    L'exemple nous montre que la carte est une créature.

    <idcards>creature</idcards>
    
  • L'élément <properties> contient tous les sous-types de la carte comme le type de créature ou des capacité additionnelles comme l'initiative. Vous êtes invité à consulter le fichier XML mtg.xml pour l'ensemble des valeurs possibles en recharchant la chaîne "<!-- properties -->".

    L'exemple nous montre que la créature est un Ange avec le Vol et la Vigilance (attaquer ne fait pas cette créature s'engager).

    <properties>vigilance flying angel</properties>
    

L'élément suivant est dédié aux capacités. L'unique capacité déclarée est une référence à la capacité cast-spell du fichier mtg.xml. Cette capacité permet au propriétaire de la carte de payer le coût d'invocation de la carte afin de la jouer depuis sa main.

<abilities>
 <ability ref="cast-spell"/>
</abilities>

Autre exemples

Maintenant que vous connaissez la structure de base d'une carte, il serait judicieux de regarder des exemples de cartes un peu plus complexes à implémenter.

Cloudstone Curio

Cette carte est quelque peu compliquée à implémenter : elle a des interactions avec les événements concernant le mouvement des cartes et elle doit également vérifier si deux cartes partagent un type de permanent. Vous trouverez ci-dessous l'image de cette carte :

Commençons par observer le code de cette carte :

<?xml version="1.0" encoding="ISO-8859-1"?>
<card xmlns="http://sourceforge.net/projects/firemox" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://sourceforge.net/projects/firemox ../../validator.xsd"
 name="Cloudstone Curio">
 <rules-author-comment>Hoani CROSS</rules-author-comment>
 <init>
  <registers>
   <register index="colorless" value="3"/>
  </registers>
  <idcards>artifact</idcards>
 </init>
 <abilities>
  <ability ref="cast-spell"/>
  <triggered-ability zone="play">
   <moved-card>
    <source-test>
     <not>
      <in-zone zone="play"/>
     </not>
    </source-test>
    <destination-test>
     <and>
      <in-zone zone="play"/>
      <controller player="you"/>
      <not>
       <has-idcard idcard="artifact"/>
      </not>
     </and>
    </destination-test>
   </moved-card>
   <cost>
    <choice cancel="true">
     <either>
      <target type="card" mode="choose" restriction-zone="play" raise-event="false">
       <test>
        <and>
         <controller player="you"/>
         <not>
          <is target="context.card"/>
         </not>
         <sup right="0">
          <left>
           <and>
            <left>
             <card-types card="context.card"/>
            </left>
            <right>
             <card-types card="tested"/>
            </right>
           </and>
          </left>
         </sup>
        </and>
       </test>
      </target>
     </either>
    </choice>
   </cost>
   <effects>
    <action ref="return-to-hand"/>
   </effects>
  </triggered-ability>
 </abilities>
</card>

L'élément <init> nous montre que cette carte est un artefact avec un coût d'invocation de 3.

<init>
 <registers>
  <register index="colorless" value="3"/>
 </registers>
 <idcards>artifact</idcards>
</init>

Observons les capacités de cette carte car elles contiennent les parties les plus importantes concernant l'implémentation de la carte.

La première capacité est bien sûr celle qui permet au propriétaire de cette carte de l'invoquer.

<ability ref="cast-spell"/>

La capacité principale de la carte est une capacité déclenchée qui se déclenche uniquement pendant que la carte est en jeu :

<triggered-ability zone="play">

La capacité de la carte commence par "À chaque fois qu'un permanent non-artefact arrive en jeu sous votre contrôle". Ainsi la capacité va se déclencher si une carte est déplacée depuis une zone différente de la zone de jeu vers la zone de jeu et seulement si la carte déplacée est une carte non-artefact que vous contrôlez.

<moved-card>
 <source-test>
  <not>
   <in-zone zone="play"/>
  </not>
 </source-test>
 <destination-test>
  <and>
   <in-zone zone="play"/>
   <controller player="you"/>
   <not>
    <has-idcard idcard="artifact"/>
   </not>
  </and>
 </destination-test>
</moved-card>

Cette capacité a un coût caché : cibler un permanent valide pour éventuellement le faire retourner dans la main de son propriétaire. C'est pourquoi l'élément suivante est un élément <cost> :

<cost>
 <choice cancel="true">
  <either>
   <target type="card" mode="choose" restriction-zone="play" raise-event="false">
    <test>
     <and>
      <controller player="you"/>
      <not>
       <is target="context.card"/>
      </not>
      <sup right="0">
       <left>
        <and>
         <left>
          <card-types card="context.card"/>
         </left>
         <right>
          <card-types card="tested"/>
         </right>
        </and>
       </left>
      </sup>
     </and>
    </test>
   </target>
  </either>
 </choice>
</cost>

Le contrôlleur de carte a le choix de cibler ou non le permanent, c'est pourquoi vous trouverez l'élément suivante avec l'attribut cancel renseigné à true :

<choice cancel="true">
 <either>
  <target type="card" mode="choose" restriction-zone="play" raise-event="false">
   <test>
    <and>
     <controller player="you"/>
     <not>
      <is target="context.card"/>
     </not>
     <sup right="0">
      <left>
       <and>
        <left>
         <card-types card="context.card"/>
        </left>
        <right>
         <card-types card="tested"/>
        </right>
       </and>
      </left>
     </sup>
    </and>
   </test>
  </target>
 </either>
</choice>

Laisser le contrôleur cibler un permanent est est réalisé par l'élément suivant (l'attribut raise-event est renseigné avec false car la capacité n'est pas ciblée) :

<target type="card" mode="choose" restriction-zone="play" raise-event="false">
 <test>
  <and>
   <controller player="you"/>
   <not>
    <is target="context.card"/>
   </not>
   <sup right="0">
    <left>
     <and>
      <left>
       <card-types card="context.card"/>
      </left>
      <right>
       <card-types card="tested"/>
      </right>
     </and>
    </left>
   </sup>
  </and>
 </test>
</target>

Le test doit vérifier que le permanent ciblé ("tested") est contrôlé par vous et qu'il n'est pas la carte qui vient de déclencher cette capacité ("context.card") et qu'il partage un type de carte avec la carte qui vient de déclencher cette capacité :

<and>
 <controller player="you"/>
 <not>
  <is target="context.card"/>
 </not>
 <sup right="0">
  <left>
   <and>
    <left>
     <card-types card="context.card"/>
    </left>
    <right>
     <card-types card="tested"/>
    </right>
   </and>
  </left>
 </sup>
</and>

Les effets de cette capacité déclenchée sont déclarés avec l'élément suivant :

<effects>
 <action ref="return-to-hand"/>
</effects>

La référence d'action "return-to-hand" retourne les cartes de la liste des cibles dans la main de leurs propriétaires respectifs.