Module:Tableau Pokémon

De Poképédia
Aller à la navigation Aller à la recherche

Fonction « sauvage »[modifier]

Paramètres[modifier]

Légende des icônes
Certains paramètres sont accompagnés d'une ou plusieurs icône indiquant leur(s) caractéristique(s) :
 : Ce paramètre est facultatif, et n'a donc pas besoin d'être systématiquement défini.
 : Ce paramètre classe automatiquement l'article dans une catégorie.
 : Ce paramètre influe sur les données sémantiques présentes en pied de page.

Paramètres nommés[modifier]

  • jeu : l'abréviation du ou des jeux auxquels le tableau se réfère. Cliquez pour afficher ou masquer le tableau des abréviations possibles.
  • image  : permet d'afficher une image en en-tête du tableau.
  • note  : pour ajouter une note au bas du tableau. Des raccourcis sont disponibles.
  • éthernatos : Les niveaux présentés correspondent respectivement à avant et après le combat contre Éthernatos. Les Pokémon vadrouilleurs de niveau 65 apparaissent une fois la Ligue vaincue.
  • ligue : Les niveaux présentés correspondent respectivement à avant et après la victoire contre la Ligue Pokémon.
  • taux-présents ou taux-absents (au choix)  : lorsque plusieurs taux sont possibles suivant différents éléments (météo, saison, climat...), et qu'un certain type de taux n'est pas disponible, ou que seuls certains taux sont présents, les indiquer séparés par des slashs /, sous la forme taux1/taux2/taux3..., sans le préfixe "taux-". Une phrase de fin est alors créée pour notifier de cette précision. Les taux spécifiques varient selon les jeux, et une liste est présente en cliquant .
Liste des taux spécifiques pris en charge
Jeu indiqué Liste des taux présents
OA matin, jour, nuit
C
DP
HGSS
Pt
DEPS
NB printemps, été, automne, hiver
N2B2
SL jour, nuit
USUL
EB soleil, nuage, pluie, orage, neige, blizzard,
soleil-intense, tempête-de-sable, brume
Liste des raccourcis de taux disponibles
(uniquement pour le paramètre non nommé)
Raccourci Résultat
taux-journée taux-matin, taux-jour
  • taux-raccourci  : de manière similaire à taux-présents et taux-absents, ce paramètre permet de restreindre les taux disponibles, selon une liste prédéfinie, pour faciliter la saisie. Il est à noter que ces trois paramètres ne peuvent pas être utilisés conjointement. Cliquez pour afficher ou masquer le tableau récapitulatif des raccourcis de taux.
Liste des raccourcis de restriction de taux disponibles
Nom Jeux associés Restrictions appliquées Phrase associée
isolarmure EB Suppression de Grêle et Blizzard À Isolarmure, les météos Grêle et Blizzard sont absentes.
couronneige EB Suppression de Tempête de sable À Couronneige, la météo Tempête de sable est absente.
couronneige-enneigé EB Suppression de Pluie, Orage et Tempête de Sable Dans les zones enneigées de Couronneige, les météos Pluie, Orage et Tempête de sable sont absentes.
  • zone  : sert à indiquer lorsqu'un tableau ne concerne qu'une partie du lieu, notamment quand plusieurs tableaux sont présents sur la page. Le nom de la zone ne doit pas nécessairement commencer par une majuscule. Ce paramètre n'influe pas directement sur le tableau résultat, mais l'information sera prise en compte lors de l'agrégation des informations pour le Module:Localisations.
  • lieu  : sert à indiquer lorsque le nom du lieu est différent de son nom d'époque. Par exemple, on indiquera lieu=Grotte Inconnue sur la page Caverne Azurée pour les tableaux de Pokémon Rouge et Bleu, car le lieu portait ce nom-là dans ces jeux. Ce paramètre n'influe pas directement sur le tableau résultat, mais l'information sera prise en compte lors de l'agrégation des informations pour le Module:Localisations.
  • localisations  : sert à indiquer si la page ne soit pas être incluse dans le processus de compilation de données pour le Module:Localisations. Pour l'exclure, indiquer localisations=non. Ce paramètre ne devrait servir qu'à des pages spécifiques, comme la page de documentation de ce module, ou encore les antres événementiels de Pokémon Épée et Bouclier.

Paramètre non nommé[modifier]

  • (paramètre non nommé) : Le paramètre non nommé représente le contenu du tableau. Chaque ligne du tableau résultat est représentée par une ligne dans ce paramètre. Il existe deux types de ligne.
Ligne ne présentant pas de slash /
Une ligne ne présentant pas de slash sera considérée comme étant un changement de milieu (Hautes herbes, Sur l'eau, etc.). Bien que n'importe quel milieu puisse être indiqué, la plupart est normalisée selon le jeu. L'entrée d'un milieu normalisé sera alors accompagnée d'une coloration de la ligne, ainsi que d'une image représentant le milieu. Si le milieu indiqué n'est pas normalisé, l'article sera placé dans une catégorie de maintenance. La liste des milieux normalisés est disponible en cliquant sur les boutons de génération ci-dessous, et est modifiable sur Module:Tableau Pokémon/Milieux.
→ Cliquez pour afficher ou masquer les tableaux par génération :
Pokémon Rouge et Bleu
PokémonNiveauTaux
Hautes herbes
En marchant
Rez-de-chaussée
Étage
Sous-sol
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Dans une Poké Ball
Fausses Balls au sol
Pokéflûte
Fossiles
Spécial
Rencontre
À acheter
Donné
Échange
Bug
0006 Dracaufeu
0009 Tortank
Pokémon Jaune
PokémonNiveauTaux
Hautes herbes
En marchant
Rez-de-chaussée
Étage
Sous-sol
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Dans une Poké Ball
Fausses Balls au sol
Pokéflûte
Fossiles
Spécial
Rencontre
À acheter
Donné
Échange
Bug
0025 Pikachu
Pokémon Or et Argent
PokémonNiveauTaux
Hautes herbes[1]
Hautes herbes[2]
En marchant
Rez-de-chaussée
Étage
Sous-sol
Éclate-Roc
Coup d'Boule
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Essaim
Flûte Pokémon
Spécial
Rencontre
À acheter
Donné
Échange
0250 Ho-Oh
0249 Lugia
Pokémon Cristal
PokémonNiveauTaux
Hautes herbes[1]
Hautes herbes[2]
En marchant
Rez-de-chaussée
Étage
Sous-sol
Éclate-Roc
Coup d'Boule
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Essaim
Flûte Pokémon
Spécial
Rencontre
À acheter
Donné
Échange
0245 Suicune
Pokémon Rubis et Saphir
PokémonNiveauTaux
Hautes herbes
Longues herbes
Algues
En marchant
Rez-de-chaussée
Étage
Sous-sol
Sable
Éclate-Roc
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Dans une Poké Ball
Fausses Balls au sol
Essaim
Fossiles
Spécial
Rencontre
Donné
Échange
0383 Groudon
0382 Kyogre
Pokémon Rouge Feu et Vert Feuille
PokémonNiveauTaux
Hautes herbes
En marchant
Rez-de-chaussée
Étage
Sous-sol
Éclate-Roc
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Dans une Poké Ball
Fausses Balls au sol
Pokéflûte
Fossiles
Spécial
Rencontre
À acheter
Donné
Échange
0006 Dracaufeu
0003 Florizarre
Pokémon Émeraude
PokémonNiveauTaux
Hautes herbes
Longues herbes
Algues
En marchant
Rez-de-chaussée
Étage
Sous-sol
Sable
Éclate-Roc
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Dans une Poké Ball
Fausses Balls au sol
Essaim
Fossiles
Spécial
Rencontre
Donné
Échange
0384 Rayquaza
Pokémon Diamant et Perle
PokémonNiveauTaux
Hautes herbes
En marchant
Rez-de-chaussée
Étage
Sous-sol
Sur l'eau
Éclate-Roc
Arbre à Miel
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Essaim
Poké Radar
En insérant Rouge Feu
En insérant Vert Feuille
En insérant Rubis
En insérant Saphir
En insérant Émeraude
En insérant RFVF ou Émeraude
En insérant un jeu 3G
Fossiles
Spécial
Rencontre
Donné
Échange
0483 Dialga
0484 Palkia
Pokémon Or HeartGold et Argent SoulSilver
PokémonNiveauTaux
Hautes herbes
En marchant
Rez-de-chaussée
Étage
Sous-sol
Éclate-Roc
Coup d'Boule[3]
Coup d'Boule[4]
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Essaim
Son Hoenn
Son Sinnoh
Flûte Pokémon
Fossiles
Spécial
Rencontre
À acheter
Donné
Échange
Événement Mystécristal
0250 Ho-Oh
0249 Lugia
Pokémon Platine
PokémonNiveauTaux
Hautes herbes
En marchant
Rez-de-chaussée
Étage
Sous-sol
Éclate-Roc
Arbre à Miel
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Essaim
Poké Radar
En insérant Rouge Feu
En insérant Vert Feuille
En insérant Rubis
En insérant Saphir
En insérant Émeraude
En insérant RFVF ou Émeraude
En insérant un jeu 3G
Fossiles
Spécial
Rencontre
Donné
Échange
0487 Giratina
Forme Originelle
Pokémon Noir et Blanc
PokémonNiveauTaux
Hautes herbes
Herbes sombres
Longues herbes
Longues herbes sombres
Hautes herbes remuantes
Longues herbes remuantes
Marécage
En marchant
Nuages de poussière
Sable
Sol accidenté
Rez-de-chaussée
Étage
Sous-sol
Ombres
Sur l'eau
Ombres dans l'eau
Pêche
Pêche dans les ombres
Faux objet
Troupeaux
Fossiles
Spécial
Rencontre
À acheter
Donné
Échange
0643 Reshiram
0644 Zekrom
Pokémon Noir 2 et Blanc 2
PokémonNiveauTaux
Hautes herbes
Herbes sombres
Longues herbes
Longues herbes sombres
Hautes herbes remuantes
Longues herbes remuantes
Trouée Cachée
Marécage
En marchant
Nuages de poussière
Sable
Sol accidenté
Rez-de-chaussée
Étage
Sous-sol
Ombres
Sur l'eau
Ombres dans l'eau
Pêche
Pêche dans les ombres
Faux objet
Troupeaux
Fossiles
Pokémon de N
Spécial
Rencontre
À acheter
Donné
Échange
0646 Kyurem
Kyurem Noir
0646 Kyurem
Kyurem Blanc
Pokémon X et Y
PokémonNiveauTaux
Hautes herbes
Longues herbes
Fleurs rouges
Fleurs jaunes
Fleurs violettes
Marécage
En marchant
Embuscade au sol
Embuscade depuis un buisson
Embuscade depuis le plafond
Embuscade depuis le ciel
Embuscade depuis une poubelle
Éclate-Roc
Arbre à Baies rouges
Arbre à Baies bleues
Arbre à Baies violettes
Arbre à Baies vertes
Arbre à Baies jaunes
Arbre à Baies roses
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Hordes
Fossiles
Spécial
Rencontre
Donné
Échange
0716 Xerneas
0717 Yveltal
Pokémon Rubis Oméga et Saphir Alpha : Version démo spéciale
PokémonNiveauTaux
Hautes herbes
En marchant
Spécial
0208 Steelix
Méga-Steelix
0362 Oniglali
Méga-Oniglali
Pokémon Rubis Oméga et Saphir Alpha
PokémonNiveauTaux
Hautes herbes
Hautes herbes volcaniques
Longues herbes
Algues
En marchant
Sable
Rez-de-chaussée
Étage
Sous-sol
Éclate-Roc
Sur l'eau
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Dans une Poké Ball
Fausses Balls au sol
Vols d'oiseaux
Navi-Dex
Hordes
Fossiles
Spécial
Rencontre
Donné
Échange
0383 Groudon
Primo-Groudon
0382 Kyogre
Primo-Kyogre
Pokémon Soleil et Lune
PokémonNiveauTaux
Hautes herbes
Hautes herbes brunes
Hautes herbes remuantes
Longues herbes
Fleurs rouges
Fleurs jaunes
Pokémon volants
Ombre
Fuite
En marchant
Nuages de poussière
Embuscade depuis un arbre
Embuscade depuis un buisson
Sables mouvants
Sur l'eau
Embuscade dans l'eau
Pêche
Pêche dans les remous
Tas de Baies
Scanner des Îles
Renforts spéciaux
Fossiles
Spécial
Rencontre
Donné
Échange
0791 Solgaleo
0792 Lunala
Pokémon Ultra-Soleil et Ultra-Lune
PokémonNiveauTaux
Hautes herbes
Hautes herbes brunes
Hautes herbes remuantes
Longues herbes
Fleurs rouges
Fleurs jaunes
Pokémon volants
Ombre
Fuite
En marchant
Nuages de poussière
Embuscade depuis un arbre
Embuscade depuis un buisson
Sables mouvants
Sur l'eau
Embuscade dans l'eau
Pêche
Pêche dans les remous
Tas de Baies
Scanner des Îles
Renforts spéciaux
Fossiles
Spécial
Rencontre
Donné
Échange
0800 Necrozma
Crinière du Couchant
0800 Necrozma
Ailes de l'Aurore
Pokémon : Let's Go, Pikachu et Let's Go, Évoli
PokémonNiveauTaux
Hautes herbes
En marchant
Rez-de-chaussée
Étage
Sous-sol
Dans les airs
Sur l'eau
Fausses Balls au sol
Poké Flûte
Fossiles
Spécial
Rencontre
À acheter
Donné
Échange
0025 Pikachu
Partenaire
0133 Évoli
Partenaire
Pokémon Épée et Bouclier
PokémonNiveauTaux
Hautes herbes
Hautes herbes brunes
Au sol
Pokémon cachés
Surface de l'eau
Marécage
Dans les airs
Pokémon vadrouilleurs
Arbres à Baies
Pêche
Fossiles
Dans une Poké Ball
Bonus de sauvegarde
Spécial
Rencontre
Donné
Échange
0888 Zacian
0889 Zamazenta
Pokémon Diamant Étincelant et Perle Scintillante
PokémonNiveauTaux
Hautes herbes
En marchant
Rez-de-chaussée
Étage
Sous-sol
Sur l'eau
Éclate-Roc
Arbre à Miel
Pêche à la Canne
Pêche à la Super Canne
Pêche à la Méga Canne
Essaim
Poké Radar
Fossiles
Bonus de sauvegarde
Spécial
Rencontre
Donné
Échange
Explorakit obtenu
CS Force obtenue
CS Anti-Brume obtenue
Badge Glaçon obtenu
CS Cascade obtenue
Pokédex National obtenu
Apparition rare
0483 Dialga
0484 Palkia
En plus de ces milieux normalisés, il est également possible d'apporter des précisions.
  • Pour marquer « Étage 3 » ou « Hautes herbes (zone ouest) » tout en gardant la normalisation, il suffira d'indiquer la séparation à l'aide d'une virgule ,, et donc écrire Étage, 3 ou Hautes herbes, (zone ouest).
    • On peut aussi y utiliser le modèle Abréviation pour parler d'un bonus de sauvegarde par exemple, en indiquant Bonus de sauvegarde, ({{Abréviation{{!}}EB}}), avec une majuscule à Abréviation.
  • Avec deux virgules ,,, on peut ajouter un préfixe : Sous-sol,, Premier affichera « Premier sous-sol ».
Si des milieux nécessaires venaient à manquer, vous pouvez modifier le module ou bien en discuter sur la page de discussion du module.
Ligne présentant un slash /
Une ligne présentant un slash sera considérée comme étant un Pokémon. Elle se présente sous la forme NomPokémon / nom-attribut1(attribut1) nom-attribut2(attribut2) .... Il est possible de renseigner plusieurs entrées pour un même Pokémon en multipliant les slashs, sans répéter le nom du Pokémon.
  • La partie de gauche représente le nom du Pokémon. Pour plus de précisions, se référer au module Ressources/infosPokemon. Si plusieurs Pokémon doivent être renseignés, dans le cas d'une horde de Pokémon par exemple, il suffit de les séparer avec une virgule ,, toujours avec le même nommage.
  • La partie de droite représente les attributs du Pokémon dans le contexte de Pokémon sauvage. Plusieurs fonctionnalités sont disponibles, et sauf indication contraire, s'indiquent avec des parenthèses (), sous la forme nom-attribut(attribut). Les différents attributs possibles sont les suivants :
  • niveau : permet de donner le niveau d'un Pokémon. Les traits d'union « - » sont transformés automatiquement en tiret demi-cadratin « – ». Un Pokémon qui est trouvable aux niveaux 20, 21, 22 et 24 pourra être représenté sous la forme niveau(20-22, 24). Plusieurs niveaux pour un même Pokémon peuvent être indiqués à l'aide d'une virgule ,, pour noter par exemple taux(18-20, RuO, 14, SaA) afin d'obtenir 18–20RO, puis 14SA sur la ligne suivante. Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
  • taux : le taux d'apparition du Pokémon dans le milieu.
    • L'ajout du symbole « % » est automatique et n'a pas à être renseigné.
    • Plusieurs taux pour un même Pokémon peuvent être indiqués à l'aide d'une virgule ,, pour noter par exemple taux(60, O, 30, A) afin d'obtenir 60 %O, puis 30 %A sur la ligne suivante. Cette fonctionnalité permet également de renseigner lorsqu'un Pokémon est exclusif à une des deux versions gérées par la tableau.
    • Un taux non entier doit être renseigné sous la forme « xx.x », par exemple : taux(17.2) ; le point sera automatiquement remplacé par une virgule (dans l'exemple, le résultat sera « 17,2 % »).
    • Lorsque « Fixe » est renseigné, pour les Pokémon vadrouilleurs, un raccourci vers une icône Fixe est créé, pour améliorer la lisibilité.
  • taux-particule : le taux d'apparition du Pokémon dans le milieu, spécifique à une certaine météo, saison... Il se renseigne à la place du paramètre taux, et les particules sont renseignées dans le tableau « Liste des taux spécifiques pris en charge », plus haut dans cette documentation. On a par exemple taux-printemps(20), avec les mêmes fonctionnalités que le paramètre précédent. Des raccourcis, renseignés dans ce même tableau, sont également disponibles pour faciliter la saisie. Ainsi, indiquer taux-journée(40) a le même effet que de renseigner taux-matin(40) taux-jour(40). Le raccourci à l'aide de « Fixe » est également disponible.
  • précision-taux  : permet de donner des précisions sur le taux, généralement quand celui-ci est indiqué comme « Fixe » ou « Unique ». Un texte très concis et avec des éventuels retours à la ligne est recommandé, pour ne pas trop déformer le tableau.
  • précision-taux-particule  : de manière similaire, quand le taux est découpé selon la météo, la saison, etc., permet d'apporter une précision avec la même bienveillance que les précisions générales (si ce n'est plus, étant donné que le tableau comporte plus de cases).
  • blocs  : les blocs du Parc Safari de Johto qu'il est nécessaire pour que le Pokémon soit disponible. Plusieurs blocs pour un même Pokémon peuvent être indiqués à l'aide d'une virgule ,, pour noter par exemple taux(5 Blocs Herbeux, 2 Blocs Sylvestres) afin d'obtenir 5 Blocs Herbeux puis 2 Blocs Sylvestres sur la ligne suivante. Par défaut, les colonnes de blocs et d'attente ne sont pas affichées. Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
  • attente  : l'attente avant que le placement des blocs du Parc Safari de Johto soit effectif. S'il n'est pas renseigné, il vaut par défaut « Immédiatement » si des blocs sont renseignés pour ce Pokémon, et « — » sinon. Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
    • L'ajout du mot « jours » après le nombre est automatique et n'a pas à être renseigné. attente(60) donnera donc « 60 jours ».
  • renfort[]  : les noms des Pokémon qui peuvent être appelés en renfort. ATTENTION : cet attribut doit être renseigné entre crochets []. Les différents Pokémon pouvant être appelés sont séparés par des virgules ,, et suivent le nommage du module Ressources/infosPokemon. Un exemple d'utilisation est renfort[Manglouton, Rattata forme(Alola)]. Par défaut, la colonne de renfort n'est pas affichée.
  • taux-renfort  : les taux des Pokémon renseignés avec le paramètre précédent. S'il n'est pas renseigné, il est fixé à 100 par défaut. Comme pour le paramètre taux, l'ajout du symbole « % » est automatique et n'a pas à être renseigné, et un taux non entier doit être renseigné avec des points à la place des virgules. Comme la majorité des autres attributs, il fonctionne avec des parenthèses (). Par défaut, la colonne de taux de renfort n'est pas affichée.
  • emplacement  : complément de localisation, dans le cas où le Pokémon se trouve uniquement à un emplacement très spécifique du lieu (par exemple, l'emplacement du PNJ qui donne le Pokémon). Ce paramètre n'influe pas directement sur le tableau résultat, mais l'information sera prise en compte lors de l'agrégation des informations pour le Module:Localisations. Pour indiquer ce genre de précisions sur les pages de lieux, on indique en général ce genre d'informations dans une phrase située en haut du tableau.
  • localisations  : ajouter localisations(masquer) aux infos d'un Pokémon permet de faire en sorte que les données du module Localisations ignorent ces infos. Par conséquent, ce paramètre n'a aucune incidence directe sur le tableau résultat.

Exemples d'utilisation[modifier]

Exemple général[modifier]

{{#invoke:Tableau Pokémon|sauvage|jeu=RB|
Hautes herbes
Rattata / niveau(8-12) taux(45)
Piafabec / niveau(8-12) taux(30)
Abo / niveau(6-12) taux(25, R)
Sabelette / niveau(6-12) taux(25, B)
Pêche à la Canne
Magicarpe / niveau(5) taux(100)
Pêche à la Super Canne
Ptitard / niveau(10) taux(50)
Poissirène / niveau(10) taux(50)
Pêche à la Méga Canne
Psykokwak / niveau(15) taux(33)
Krabby / niveau(15) taux(33)
Poissirène / niveau(15) taux(33)
À acheter, (500 {{P}})
Magicarpe / niveau(5) taux(Unique)
}}

donne :

Pokémon Rouge et Bleu
PokémonNiveauTaux
Hautes herbes
0019 Rattata8–1245 %
0021 Piafabec8–1230 %
0023 Abo6–1225 %R
0027 Sabelette6–1225 %B
Pêche à la Canne
0129 Magicarpe5100 %
Pêche à la Super Canne
0060 Ptitard1050 %
0118 Poissirène1050 %
Pêche à la Méga Canne
0054 Psykokwak1533 %
0098 Krabby1533 %
0118 Poissirène1533 %
À acheter (500 Poké Dollar)
0129 Magicarpe5Unique

Exemple avec des taux spécifiques[modifier]

{{#invoke:Tableau Pokémon|sauvage|jeu=EB|taux-absents=pluie/orage/brume|
Hautes herbes
Laporeille / niveau(60) taux-soleil(36) taux-nuage(36) taux-soleil-intense(36) taux-tempête-de-sable(56) taux-neige(36) taux-blizzard(36)
Rondoudou / niveau(60) taux(32)
Abra / niveau(60) taux(5)
Trousselin / niveau(60) taux(5)
Leveinard / niveau(60) taux(2)
Sepiatop / niveau(60) taux-soleil (20) taux-nuage(20)
Sorboul / niveau(60) taux-neige(20)
Sorbouboul / niveau(60) taux-blizzard(20)
Mimantis / niveau(60) taux-soleil-intense(20)
}}

donne :

Pokémon Épée et Bouclier
PokémonNiveauTaux
SoleilNuageNeigeBlizzardSoleil intenseTempête de sable
Hautes herbes
0427 Laporeille6036 %36 %36 %36 %36 %56 %
0039 Rondoudou6032 %
0063 Abra605 %
0707 Trousselin605 %
0113 Leveinard602 %
0686 Sepiatop6020  %20 %
0583 Sorboul6020 %
0584 Sorbouboul6020 %
0753 Mimantis6020 %
Les météos Pluie, Orage et Brume sont absentes dans cette zone.

Exemple avec une horde[modifier]

{{#invoke:Tableau Pokémon|sauvage|jeu=XY|
Hautes herbes
Spoink / niveau(13-15) taux(20)
Mangriff / niveau(14) taux(15, X)
Séviper / niveau(14) taux(15, Y)
Absol / niveau(13-15) taux(5)
Draby / niveau(14-15) taux(5)
Baudrive / niveau(13-15) taux(20)
Kungfouine / niveau(13-15) taux(20)
Sepiatop / niveau(14-15) taux(15)
Éclate-Roc
Crabicoque / niveau(18-19, X, 13-14, Y) taux(66)
Opermine / niveau(18-20, X, 13-15, Y) taux(34)
Sur l'eau
Tentacool / niveau(25-27) taux(70)
Wailmer / niveau(25) taux(30)
Pêche à la Canne
Lovdisc / niveau(15) taux(100)
Pêche à la Super Canne
Stari / niveau(25) taux(35, X)
Kokiyas / niveau(25) taux(35, Y)
Flingouste / niveau(25) taux(65, X)
Venalgue / niveau(25) taux(65, Y)
Pêche à la Méga Canne
Qwilfish / niveau(60) taux(60)
Gamblast / niveau(35) taux(30, X)
Kravarech / niveau(35) taux(30, Y)
Staross / niveau(35) taux(10, X)
Crustabri / niveau(35) taux(10, Y)
Hordes
Goélise, Goélise, Goélise, Goélise, Goélise / niveau(7) taux(60)
Nirondelle, Nirondelle, Nirondelle, Nirondelle, Nirondelle / niveau(7) taux(5)
Mangriff, Séviper, Mangriff, Mangriff, Mangriff / niveau(8) taux(35, X)
Séviper, Mangriff, Séviper, Séviper, Séviper / niveau(8) taux(35, Y)
}}

donne :

Pokémon X et Y
PokémonNiveauTaux
Hautes herbes
0325 Spoink13–1520 %
0335 Mangriff1415 %X
0336 Séviper1415 %Y
0359 Absol13–155 %
0371 Draby14–155 %
0425 Baudrive13–1520 %
0619 Kungfouine13–1520 %
0686 Sepiatop14–1515 %
Éclate-Roc
0557 Crabicoque18–19X
13–14Y
66 %
0688 Opermine18–20X
13–15Y
34 %
Sur l'eau
0072 Tentacool25–2770 %
0320 Wailmer2530 %
Pêche à la Canne
0370 Lovdisc15100 %
Pêche à la Super Canne
0120 Stari2535 %X
0090 Kokiyas2535 %Y
0692 Flingouste2565 %X
0690 Venalgue2565 %Y
Pêche à la Méga Canne
0211 Qwilfish6060 %
0693 Gamblast3530 %X
0691 Kravarech3530 %Y
0121 Staross3510 %X
0091 Crustabri3510 %Y
Hordes
GoéliseGoélise
GoéliseGoéliseGoélise
760 %
NirondelleNirondelle
NirondelleNirondelleNirondelle
75 %
MangriffSéviper
MangriffMangriffMangriff
835 %X
SéviperMangriff
SéviperSéviperSéviper
835 %Y

Exemple avec des renforts et une image[modifier]

{{#invoke:Tableau Pokémon|sauvage|jeu=USUL|image=Route 1 (Zone 3) SL.png|
Hautes herbes
Manglouton / niveau(3-5) taux-jour(30) renfort[Manglouton]
Rattata forme(Alola) / niveau(3-5) taux-nuit(30) renfort[Rattata forme(Alola)]
Picassaut / niveau(3-5) taux(20) renfort[Picassaut]
Coxy / niveau(3-5) taux-jour(15) renfort[Coxy]
Mimigal / niveau(3-5) taux-nuit(15) renfort[Mimigal]
Chenipan / niveau(3-5) taux(10) renfort[Chenipan]
Chrysacier / niveau(3-5) taux(10) renfort[Chenipan]
Larvibule / niveau(3-5) taux(10) renfort[Larvibule]
Pichu / niveau(3-5) taux(5) renfort[Pichu, Pikachu, Ptiravi] taux-renfort(80, 15, 5)
}}

donne :

Pokémon Ultra-Soleil et Ultra-Lune
PokémonNiveauTauxRenfortTaux d'appel
JourNuit
Hautes herbes
0734 Manglouton3–530 %Renfort 0734 Manglouton100 %
0019 Rattata
Forme d'Alola
3–530 %Renfort 0019 Rattata
Forme d'Alola
100 %
0731 Picassaut3–520 %Renfort 0731 Picassaut100 %
0165 Coxy3–515 %Renfort 0165 Coxy100 %
0167 Mimigal3–515 %Renfort 0167 Mimigal100 %
0010 Chenipan3–510 %Renfort 0010 Chenipan100 %
0011 Chrysacier3–510 %Renfort 0010 Chenipan100 %
0736 Larvibule3–510 %Renfort 0736 Larvibule100 %
0172 Pichu3–55 %Renfort 0172 Pichu80 %
Renfort 0025 Pikachu15 %
Renfort 0440 Ptiravi5 %

Fonction « antre »[modifier]

Paramètres[modifier]

Légende des icônes
Certains paramètres sont accompagnés d'une ou plusieurs icône indiquant leur(s) caractéristique(s) :
 : Ce paramètre est facultatif, et n'a donc pas besoin d'être systématiquement défini.
 : Ce paramètre classe automatiquement l'article dans une catégorie.
 : Ce paramètre influe sur les données sémantiques présentes en pied de page.
  • page : Renseigner le nom de la page, ou bien « {{subst:PAGENAME}} ». Ceci ajoute un lien vers la page en cours sur les autres articles où le tableau est appelé.
  • (paramètre non nommé) : Le paramètre non nommé représente le contenu du tableau. Chaque ligne du tableau résultat est représentée par une ligne dans ce paramètre.
Une ligne présente toujours un slash /, et est considérée comme étant un Pokémon ; les lignes sans slash ne sont pas considérées par le module. Une ligne se présente sous la forme NomPokémon / nom-attribut1(attribut1) nom-attribut2(attribut2) .... Il est possible de renseigner plusieurs entrées pour un même Pokémon en multipliant les slashs, sans répéter le nom du Pokémon.
  • La partie de gauche représente le nom du Pokémon. Pour plus de précisions, se référer au module Ressources/infosPokemon.
  • La partie de droite représente les attributs du Pokémon dans le contexte de Pokémon sauvage. Plusieurs fonctionnalités sont disponibles, et sauf indication contraire, s'indiquent avec des parenthèses (), sous la forme nom-attribut(attribut). Les différents attributs possibles sont les suivants :
  • talent-caché : indiquer « Possible », « Toujours » ou « Impossible » selon qu'il est possible ou non d'obtenir le Pokémon avec son talent caché. Par défaut, la valeur est fixée à « Impossible ». Renseigner une autre valeur que les trois précédemment citées affichera ce qui est renseigné sans aucune coloration. Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
  • iv : le nombre d'IV parfaits garantis du Pokémon. Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
  • 1 à 5  : le taux d'apparition du Pokémon dans la rareté correspondante, avec « — » comme valeur par défaut. L'ajout du symbole « % » est automatique et n'a pas à être renseigné. Plusieurs taux pour un même Pokémon peuvent être indiqués à l'aide d'une virgule ,, pour noter par exemple 2(60, Ep, 30, Bo) afin d'obtenir 60 %E, puis 30 %B sur la ligne suivante. Cette fonctionnalité permet également de renseigner lorsqu'un Pokémon est exclusif à une des deux versions gérées par la tableau.
  • taux  : le taux d'apparition du Pokémon lorsqu'il est indépendant de la rareté du raid. Il possède les mêmes caractéristiques que les paramètres 1 à 5, et se renseigne à la place de ceux-ci.
  • précision-1 à précision-5, ou précision-taux  : permet de donner des précisions sur le taux correspondant. Un texte concis et avec des sauts à la ligne est recommandé, pour ne pas trop déformer le tableau.
  • notes  : permet de donner des précisions sur le Pokémon, comme par exemple s'il connaît une certaine capacité, s'il n'est pas capturable... Si un Pokémon avec un tel argument est présent dans le tableau, une nouvelle colonne est automatiquement rajoutée. Les textes « Toujours chromatique » et « A le caractère Gigamax » ajoutent automatiquement une petite icône Ce Pokémon est toujours chromatique. Gigamax. Plusieurs notes peuvent être ajoutées pour un même Pokémon à l'aide d'une virgule ,. Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
  • localisations  : sert à indiquer si la page ne soit pas être incluse dans le processus de compilation de données pour le Module:Localisations. Pour l'exclure, indiquer localisations=non. Ce paramètre ne devrait servir qu'à des pages spécifiques, comme la page de documentation de ce module, ou encore les antres événementiels de Pokémon Épée et Bouclier.

Exemples d'utilisation[modifier]

Exemple général[modifier]

{{#invoke:Tableau Pokémon|antre|
Sovkipou / iv(1) 1(30)
Larvadar / iv(1) 1(20)
Carabing / iv(1, Ep, 2, Bo) 1(20, Ep) 2(25, Ep, 20, Bo) 3(20, Bo)
Escargaume / iv(2, Ep, 1, Bo) 1(20, Bo) 2(20, Ep, 25, Bo) 3(20, Ep)
Araqua / iv(1) 1(20) 2(25) / iv(2) 2(20) 3(30) / talent-caché(Toujours) iv(3) 3(20) 4(20)
Astronelle / iv(4) 3(20) 4(20) 5(20)
Tarenbulle / talent-caché(Possible) iv(4) 4(20) 5(25)
Sarmuraï / iv(4) 4(30) 5(30)
Lançargot / talent-caché(Possible) iv(4) 5(15, Ep)
Limaspeed / talent-caché(Possible) iv(4) 5(15, Bo)
Papilusion forme(Gigamax) / talent-caché(Possible) iv(4) taux(10)
}}

donne :

PokémonTalent cachéIV parfaits
garantis
Taux

(Niveau 15–20)
★★
(Niveau 25–30)
★★★
(Niveau 35–40)
★★★★
(Niveau 45–50)
★★★★★
(Niveau 55–60)
0767 SovkipouImpossible130 %
0824 LarvadarImpossible120 %
0588 CarabingImpossible1E
2B
20 %E25 %E
20 %B
20 %B
0616 EscargaumeImpossible2E
1B
20 %B20 %E
25 %B
20 %E
0751 AraquaImpossible120 %25 %
220 %30 %
Toujours320 %20 %
0826 AstronelleImpossible420 %20 %20 %
0752 TarenbullePossible420 %25 %
0768 SarmuraïImpossible430 %30 %
0589 LançargotPossible415 %E
0617 LimaspeedPossible415 %B
0012 Papilusion
Gigamax
Possible410 %

Avec des notes[modifier]

{{#invoke:Tableau Pokémon|antre|
Papilusion forme(Gigamax) / talent-caché(Possible) iv(1) 1(10) / talent-caché(Possible) iv(2) 2(10) / talent-caché(Possible) iv(3) 3(10) / talent-caché(Possible) iv(4) 4(10) / talent-caché(Possible) iv(5) 5(10)
Magicarpe / talent-caché(Possible) iv(1) 1(52) / talent-caché(Possible) iv(2) 2(52) / talent-caché(Possible) iv(3) 3(52) / talent-caché(Possible) iv(4) 4(52) / talent-caché(Possible) iv(5) 5(52) / notes(Toujours chromatique) talent-caché(Possible) iv(1) 1(8) / notes(Toujours chromatique) talent-caché(Possible) iv(2) 2(8) / notes(Toujours chromatique) talent-caché(Possible) iv(3) 3(8) / notes(Toujours chromatique) talent-caché(Possible) iv(4) 4(8) / notes(Toujours chromatique) talent-caché(Possible) iv(5) 5(8)
Goinfrex / talent-caché(Possible) iv(1) 1(10) notes(A le caractère Gigamax)
Ronflex / talent-caché(Possible) iv(2) 2(10)
Ronflex forme(Gigamax) / talent-caché(Possible) iv(3) 3(10) / talent-caché(Possible) iv(4) 4(10) / talent-caché(Possible) iv(5) 5(10)
Minisange / talent-caché(Possible) iv(1) 1(10, Bo)
Bleuseille / talent-caché(Possible) iv(2) 2(10, Bo)
Corvaillus forme(Gigamax) / talent-caché(Possible) iv(3) 3(10, Bo) / talent-caché(Possible) iv(4) 4(10, Bo) / talent-caché(Possible) iv(5) 5(10, Bo)
Khélocrok / talent-caché(Possible) iv(1) 1(10, Ep)
Torgamord / talent-caché(Possible) iv(2) 2(10, Ep)
Torgamord forme(Gigamax) / talent-caché(Possible) iv(3) 3(10, Ep) / talent-caché(Possible) iv(4) 4(10, Ep) / talent-caché(Possible) iv(5) 5(10, Ep)
Dunaja / talent-caché(Possible) iv(1) 1(10, Ep) / talent-caché(Possible) iv(2) 2(10, Ep)
Dunaconda forme(Gigamax) / talent-caché(Possible) iv(3) 3(10, Ep) / talent-caché(Possible) iv(4) 4(10, Ep) / talent-caché(Possible) iv(5) 5(10, Ep)
Grillepattes / talent-caché(Possible) iv(1) 1(10, Bo)
Scolocendre / talent-caché(Possible) iv(2) 2(10, Bo)
Scolocendre forme(Gigamax) / talent-caché(Possible) iv(3) 3(10, Bo) / talent-caché(Possible) iv(4) 4(10, Bo) / talent-caché(Possible) notes(Connaît [[Danse Flamme]], Connaît [[Survinsecte]]) iv(5) 5(10, Bo)
}}

donne :

PokémonTalent cachéIV parfaits
garantis
TauxNotes

(Niveau 15–20)
★★
(Niveau 25–30)
★★★
(Niveau 35–40)
★★★★
(Niveau 45–50)
★★★★★
(Niveau 55–60)
0012 Papilusion
Gigamax
Possible110 %
210 %
310 %
410 %
510 %
0129 MagicarpePossible152 %
252 %
352 %
452 %
552 %
18 %Ce Pokémon est toujours chromatique. Toujours chromatique
28 %
38 %
48 %
58 %
0446 GoinfrexPossible110 %A le caractère Gigamax
0143 RonflexPossible210 %
0143 Ronflex
Gigamax
Possible310 %
410 %
510 %
0821 MinisangePossible110 %B
0822 BleuseillePossible210 %B
0823 Corvaillus
Gigamax
Possible310 %B
410 %B
510 %B
0833 KhélocrokPossible110 %E
0834 TorgamordPossible210 %E
0834 Torgamord
Gigamax
Possible310 %E
410 %E
510 %E
0843 DunajaPossible110 %E
210 %E
0844 Dunaconda
Gigamax
Possible310 %E
410 %E
510 %E
0850 GrillepattesPossible110 %B
0851 ScolocendrePossible210 %B
0851 Scolocendre
Gigamax
Possible310 %B
410 %B
510 %BConnaît Danse Flamme
Connaît Survinsecte

Fonction « teracristal »[modifier]

Paramètres[modifier]

Légende des icônes
Certains paramètres sont accompagnés d'une ou plusieurs icône indiquant leur(s) caractéristique(s) :
 : Ce paramètre est facultatif, et n'a donc pas besoin d'être systématiquement défini.
 : Ce paramètre classe automatiquement l'article dans une catégorie.
 : Ce paramètre influe sur les données sémantiques présentes en pied de page.
  • (paramètre non nommé) : Le paramètre non nommé représente le contenu du tableau. Chaque ligne du tableau résultat est représentée par une ligne dans ce paramètre.
Une ligne présente toujours un slash /, et est considérée comme étant un Pokémon ; les lignes sans slash ne sont pas considérées par le module. Une ligne se présente sous la forme NomPokémon / nom-attribut1(attribut1) nom-attribut2(attribut2) .... Il est possible de renseigner plusieurs entrées pour un même Pokémon en multipliant les slashs, sans répéter le nom du Pokémon.
  • La partie de gauche représente le nom du Pokémon. Pour plus de précisions, se référer au module Ressources/infosPokemon.
  • La partie de droite représente les attributs du Pokémon dans le contexte de Pokémon sauvage. Plusieurs fonctionnalités sont disponibles, et sauf indication contraire, s'indiquent avec des parenthèses (), sous la forme nom-attribut(attribut). Les différents attributs possibles sont les suivants :
  • type-téracristal  : le type Téracristal du Pokémon. Si rien n'est indiqué, alors la case affichera « Aléatoire ». Sinon, une image du type Téracristal sera affichée. Dans ce dernier cas, et si le Pokémon possède la capacité Danse Éveil ou Téra Explosion (voir paramètre capacités), alors son type sera indiqué comme étant celui du type Téracristal. Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
  • talent-caché  : indiquer « Possible », « Toujours » ou « Impossible » selon qu'il est possible ou non d'obtenir le Pokémon avec son talent caché. Par défaut, la valeur est fixée à « Impossible ». Renseigner une autre valeur que les trois précédemment citées affichera ce qui est renseigné sans aucune coloration. Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
  • difficulté : la difficulté du raid lié au Pokémon, en nombre d'étoiles. Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
  • capacités  : les capacités du Pokémon. Plusieurs capacités pour un même Pokémon peuvent être indiqués à l'aide d'une virgule suivie d'une espace , pour noter par exemple capacités(Griffe, Mimi-Queue). Aussi, indiquer un point-virgule suivi d'une espace permet de distinguer les capacités à la capture et les capacités supplémentaires. Ainsi, on pourra indiquer capacités(Griffe, Mimi-Queue; Flammèche, Groz'Yeux) pour avoir Griffe et Mimi-Queue dans la colonne « À la capture », et Flammèche et Groz'Yeux dans la colonne « Supplémentaires ». Les pages d'homonymie sont automatiquement gérées : par exemple, indiquer capacités(Vol) mettra bien un lien vers Vol (capacité), avec comme texte « Vol ». Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
  • notes  : permet de donner des précisions sur le Pokémon, comme par exemple s'il connaît une certaine capacité, s'il n'est pas capturable, ou s'il est exclusif à une version... Si un Pokémon avec un tel argument est présent dans le tableau, une nouvelle colonne est automatiquement rajoutée. Les textes « Toujours chromatique. », « Jamais chromatique. » et ceux de la forme « Insigne XXX. » ajoutent automatiquement une petite icône. Les textes « Exclusif Ec. » et « Exclusif Vi. » sont améliorés et ajoutent une petite icône. Plusieurs notes peuvent être ajoutées pour un même Pokémon à l'aide d'un point suivi d'une espace . Lorsque le même champ est renseigné pour plusieurs entrées de suite d'un même Pokémon, les lignes se fusionnent.
  • id  : sert à forcer l'identifiant utilisé pour lier une ligne d'objets, si l'identifiant généré automatiquement ne convient pas.
  • localisations  : sert à indiquer si la page ne soit pas être incluse dans le processus de compilation de données pour le Module:Localisations. Pour l'exclure, indiquer localisations=non. Ce paramètre ne devrait servir qu'à des pages spécifiques, comme la page de documentation de ce module, ou encore les cristaux événementiels de Pokémon Écarlate et Violet.

La colonne Récompenses est remplie automatiquement en fonction des autres données renseignées, en particulier le nom du Pokémon et la difficulté du raid. Un lien interne à la page est ajouté, et il lie la ligne à la cellule du tableau objet de récompenses correspondante.

Exemples d'utilisation[modifier]

Exemple général[modifier]

{{#invoke:Tableau Pokémon|teracristal|localisations=non|
Dracaufeu / type-téracristal(Dragon) talent-caché(Toujours) difficulté(7) capacités(Draco-Choc, Déflagration, Vent Violent, Exploforce; Surchauffe, Téra Explosion, Zénith, Vol)
Florges forme(Rouge) nom(Fleur Rouge) / talent-caché(Possible) difficulté(4) capacités(Pouvoir Lunaire, Mur Lumière, Danse Fleurs, Téra Explosion) / difficulté(4) capacités(Câlinerie, Mur Lumière, Végé-Attaque, Ultralaser)
Mew / difficulté(6)
}}

donne :

PokémonType TéracristalTalent cachéDifficultéCapacitésRécompenses
À la captureSupplémentaires
0006 DracaufeuDragonToujours7★Dragon Draco-Choc
Feu Déflagration
Vol Vent Violent
Combat Exploforce
Feu Surchauffe
Dragon Téra Explosion
Feu Zénith
Vol Vol
[voir]
0671 Florges
Fleur Rouge
AléatoirePossible4★Fée Pouvoir Lunaire
Psy Mur Lumière
Plante Danse Fleurs
Normal Téra Explosion
[voir]
ImpossibleFée Câlinerie
Psy Mur Lumière
Plante Végé-Attaque
Normal Ultralaser
[voir]
0151 MewAléatoireImpossible6★[voir]

Avec des notes[modifier]

{{#invoke:Tableau Pokémon|teracristal|localisations=non|
Dracaufeu / type-téracristal(Dragon) talent-caché(Toujours) difficulté(7) capacités(Draco-Choc, Déflagration, Vent Violent, Exploforce; Surchauffe, Téra Explosion, Zénith, Vol) notes(Jamais chromatique. Capturable une seule fois. Insigne Surpuissant.)
Florges forme(Rouge) nom(Fleur Rouge) / talent-caché(Possible) difficulté(4) capacités(Pouvoir Lunaire, Mur Lumière, Danse Fleurs, Téra Explosion) / difficulté(5) capacités(Pouvoir Lunaire, Mur Lumière, Danse Fleurs, Téra Explosion)
Mew / difficulté(6) notes(Toujours chromatique.)
}}

donne :

PokémonType TéracristalTalent cachéDifficultéCapacitésNotesRécompenses
À la captureSupplémentaires
0006 DracaufeuDragonToujours7★Dragon Draco-Choc
Feu Déflagration
Vol Vent Violent
Combat Exploforce
Feu Surchauffe
Dragon Téra Explosion
Feu Zénith
Vol Vol
Ce Pokémon n'est jamais chromatique. Jamais chromatique.
Capturable une seule fois.
Insigne Surpuissant.
[voir]
0671 Florges
Fleur Rouge
AléatoirePossible4★Fée Pouvoir Lunaire
Psy Mur Lumière
Plante Danse Fleurs
Normal Téra Explosion
[voir]
Impossible5★[voir]
0151 MewAléatoireImpossible6★Ce Pokémon est toujours chromatique. Toujours chromatique.[voir]

Notes et références[modifier]

  1. 1,0 et 1,1 Indiquer « Hautes herbes (Kanto) » pour obtenir ce résultat.
  2. 2,0 et 2,1 Indiquer « Hautes herbes (Johto) » pour obtenir ce résultat.
  3. Indiquer « Coup d'Boule (Kanto) » pour obtenir ce résultat.
  4. Indiquer « Coup d'Boule (Johto) » pour obtenir ce résultat.

local p = {}
local ressources = {
	["infosPokemon"] = require("Module:Ressources/infosPokemon")
}

-- Extrait le contenu d'une fonction de la forme "fun_name(argument)" dans une expression.
function extract_argument(fun_name, expression, default)
	-- le tiret est un caractère utilisé pour les noms de fonctions, mais aussi spécial pour les expressions rationnelles
	fun_name_rat = string.gsub(fun_name, "%-", "%%-")
	if (string.match(expression, fun_name_rat .. "%([^)]*%)"))
	then return string.sub(string.match(expression, fun_name_rat .. "%([^)]*%)"), string.len(fun_name) + 2, -2)
	else return default
	end
end

-- Extrait le contenu d'une fonction de la forme "fun_name[argument]" dans une expression.
function extract_argument_bracket(fun_name, expression, default)
	-- le tiret est un caractère utilisé pour les noms de fonctions, mais aussi spécial pour les expressions rationnelles
	fun_name_rat = string.gsub(fun_name, "%-", "%%-")
	if (string.match(expression, fun_name_rat .. "%[[^]]*%]"))
	then return string.sub(string.match(expression, fun_name_rat .. "%[[^]]*%]"), string.len(fun_name) + 2, -2)
	else return default
	end
end

function p.sauvage(frame)
	-- Recense les différents types de rencontre de Pokémon sauvages
	local milieu_sauvage = require("Module:Tableau Pokémon/Milieux")

	local jeu = frame.args["jeu"]
	if jeu == nil then jeu = "" end
	
	local bordure = frame:expandTemplate{title='Bordure', args={jeu}}
	if bordure == nil then bordure = "" end
	
	local image = frame.args["image"]
	
	local fetching_loc = frame.args["localisations"]
	fetching_loc = fetching_loc ~= "non"
	
	local i = 1
	local j = 1
	local k = 1
	local h = 1

	-- Noms des icônes / Noms des sous-arguments / Classes de couleurs associées (cf. MediaWiki:Gadget-couleurs.css)
	-- / Lien vers une page globale qui traite de ces sous-taux, nom du type de sous-taux (météo, horaire, saison),
	-- singulier, pluriel, article ("le", "la" ou "l'"), et est-ce que le type du sous-taux est féminin (true ou false)
	local sous_taux = require("Module:Tableau Pokémon/sousTaux")
	local raccourcis = sous_taux.raccourcis
	
	-- GESTION DES TAUX PRÉSENTS
	local taux_presents = nil
	local phrase_finale = ""
	local union_taux = true
	local colspan_taux = 1
	
	-- Paramètre taux-raccourci
	local raccourci_arg = frame.args["taux-raccourci"]
	if raccourci_arg ~= nil
	then taux_presents = raccourcis[raccourci_arg]
		if taux_presents ~= nil
		then if taux_presents[4] and taux_presents[4][2] then phrase_finale = taux_presents[4][2] end
			union_taux = false
			local nombre_taux = 1
			while taux_presents[1][nombre_taux] do
				nombre_taux = nombre_taux + 1
			end
			colspan_taux = nombre_taux - 1
		end
	end
	
	-- Paramètre taux-présents
	local taux_presents_arg = nil
	if taux_presents == nil		-- Si les taux présents ont déjà été définis, on passe cette étape
	then taux_presents_arg = frame.args["taux-présents"]
	end
	
	if taux_presents_arg ~= nil
	then 
		i = 1
		local nombre_taux = 0
		local taux_presents_max = sous_taux[jeu]		-- Le tableau qu'on va émincer pour ne garder que les taux présents
		taux_presents = {{}, {}, {}, taux_presents_max[4]}	-- Le tableau des taux qu'on va remplir
		taux_presents_arg = mw.text.split(taux_presents_arg, "/")
		while taux_presents_arg[i] do
			taux_i = "taux-" .. taux_presents_arg[i]
			j = 1
			while taux_presents_max[2][j] and taux_i ~= taux_presents_max[2][j] do
				j = j + 1
			end
			if taux_presents_max[2][j] -- Trouvé !
			then
				table.insert(taux_presents[1], taux_presents_max[1][j])
				table.insert(taux_presents[2], taux_presents_max[2][j])
				table.insert(taux_presents[3], taux_presents_max[3][j])
				nombre_taux = nombre_taux + 1
			end
			i = i + 1
			union_taux = false
			colspan_taux = nombre_taux
		end
		
		-- Création de la phrase de bas de tableau
		if nombre_taux > 0 then
			if nombre_taux >= 2
			then phrase_finale = "Les " .. taux_presents[4][3] .. " "
			else if taux_presents[4][4] == "l'"
				then phrase_finale = "L'"
				else phrase_finale = mw.getContentLanguage():ucfirst(taux_presents[4][4]) .. " "
				end
				phrase_finale = phrase_finale .. taux_presents[4][2] .. " "
			end
			i = 1
			while taux_presents[1][i] and taux_presents[1][i+1] and taux_presents[1][i+2] do
				phrase_finale = phrase_finale .. taux_presents[1][i] .. ", "
				i = i + 1
			end
			if taux_presents[1][i] and taux_presents[1][i+1]
			then
				local e = ""
				if taux_presents[4][5] then e = "e" end
				phrase_finale = phrase_finale .. taux_presents[1][i] .. " et " .. taux_presents[1][i+1]
				.. "<br>sont les seul" .. e .. "s présent" .. e .. "s dans cette zone."
			elseif taux_presents[1][i] then
				local e = ""
				if taux_presents[4][5] then e = "e" end
				phrase_finale = phrase_finale .. taux_presents[1][i] .. "<br>est "
				if taux_presents[4][5]
				then phrase_finale = phrase_finale .. "la"
				else phrase_finale = phrase_finale .. "le"
				end
				phrase_finale = phrase_finale .. " seul" .. e .. " présent" .. e .. " dans cette zone."
			else
				phrase_finale = "<p>" .. phrase_finale .. " n'est pas disponible dans cette zone.</p>"
			end
		end
	end
	
	-- Paramètre taux-absents
	local taux_absents_arg = nil
	if taux_presents == nil		-- Si les taux présents ont déjà été définis, on passe cette étape
	then taux_absents_arg = frame.args["taux-absents"]
	end
	
	if taux_absents_arg ~= nil
	then 
		i = 1
		colspan_taux = 0
		local nombre_taux_absents = 0
		local taux_presents_max = sous_taux[jeu]		-- Le tableau qu'on va émincer pour ne garder que les taux présents
		taux_presents = {{}, {}, {}, taux_presents_max[4]}	-- Le tableau des taux qu'on va remplir
		taux_absents = {{}, {}, {}, taux_presents_max[4]}	-- Le tableau qui va servir à la phrase finale
		taux_absents_arg = mw.text.split(taux_absents_arg, "/")
		while taux_presents_max[2][i] do
			taux_i = taux_presents_max[2][i]
			j = 1
			while taux_absents_arg[j] and taux_i ~= "taux-" .. taux_absents_arg[j] do
				j = j + 1
			end
			if taux_absents_arg[j] == nil	-- Pas trouvé !
			then
				table.insert(taux_presents[1], taux_presents_max[1][i])
				table.insert(taux_presents[2], taux_presents_max[2][i])
				table.insert(taux_presents[3], taux_presents_max[3][i])
				colspan_taux = colspan_taux + 1
			else
				table.insert(taux_absents[1], taux_presents_max[1][i])
				table.insert(taux_absents[2], taux_presents_max[2][i])
				table.insert(taux_absents[3], taux_presents_max[3][i])
				nombre_taux_absents = nombre_taux_absents + 1
			end
			i = i + 1
			union_taux = false
		end
		
		-- Création de la phrase de bas de tableau
		if nombre_taux_absents > 0 then
			if nombre_taux_absents >= 2
			then phrase_finale = "Les " .. taux_absents[4][3] .. " "
			else if taux_absents[4][4] == "l'"
				then phrase_finale = "L'"
				else phrase_finale = mw.getContentLanguage():ucfirst(taux_absents[4][4]) .. " "
				end
				phrase_finale = phrase_finale .. taux_absents[4][2] .. " "
			end
			i = 1
			while taux_absents[1][i] and taux_absents[1][i+1] and taux_absents[1][i+2] do
				phrase_finale = phrase_finale .. taux_absents[1][i] .. ", "
				i = i + 1
			end
			if taux_absents[1][i] and taux_absents[1][i+1]
			then
				local e = ""
				if taux_absents[4][5] then e = "e" end
				phrase_finale = phrase_finale .. taux_absents[1][i] .. " et " .. taux_absents[1][i+1]
				.. " sont absent" .. e .. "s dans cette zone."
			elseif taux_absents[1][i] then
				local e = ""
				if taux_absents[4][5] then e = "e" end
				phrase_finale = phrase_finale .. taux_absents[1][i] .. " est absent" .. e .. " dans cette zone."
			else
				phrase_finale = phrase_finale .. " n'est pas disponible dans cette zone."
			end
		end
	end
	
	-- Si aucune restriction de taux n'a été appliquée, on prend par défaut celle associée au jeu.
	if taux_presents == nil
	then taux_presents = sous_taux[jeu]
	end
	
	
	-- TAUX
	local raccourcis_sous_taux = {
		["taux-journée"] = {"taux-matin", "taux-jour"}
	}
	
	-- On remplace les raccourcis de taux
	i = 1
	
	local pokemon = frame.args[1]
	if pokemon == nil
	then pokemon = {}
	else
		for key, value in pairs(raccourcis_sous_taux) do
			local replacement = ""
			i = 1
			while value[i] do
				replacement = replacement .. value[i] .. "(%1) "
				i = i + 1
			end
			
			local pattern = key:gsub("-", "%%-")
			pokemon = string.gsub(pokemon, pattern .. "%((.-)%)", replacement)
		end
		
		pokemon = mw.text.split(pokemon, "\n")
	end
	
	local colspan_blocs_safari = 0	-- blocs du Parc Safari de Johto
	local colspan_renfort = 0		-- renfort de SL/USUL
	i = 1
	-- Première boucle pour voir si on a affaire à des taux particuliers (si les taux doivent être divisés ou s'ils peuvent être réunis)
	-- et des renforts.
	while pokemon[i] do
		-- Taux particuliers
		if union_taux
		then
			j = 1
			while taux_presents and taux_presents[2][j] do
				-- le tiret est un caractère utilisé pour les noms de fonctions, mais aussi spécial pour les expressions rationnelles
				if string.find(pokemon[i], string.gsub(taux_presents[2][j], "%-", "%%-"))
				then union_taux = false
				end
				j = j + 1
			end
			if not union_taux
			then colspan_taux = j - 1	-- On récupère la longueur des taux
			end
		end
		
		-- Blocs Safari
		if colspan_blocs_safari == 0
		then if string.find(pokemon[i], "blocs") or string.find(pokemon[i], "attente")
			then colspan_blocs_safari = 2
			end
		end
		
		-- Renforts
		if colspan_renfort < 2 and string.find(pokemon[i], "renfort")
		then if string.find(pokemon[i], "taux%-renfort")
			then colspan_renfort = 2
			else colspan_renfort = 1
			end
		end
		
		i = i + 1
	end
	
	-- EN-TÊTE
	local rowspan_en_tete = 1
	if not union_taux
	then rowspan_en_tete = 2
	end
	local game_suffix = ""
	local japan_class = ""
	if jeu == "RV" then game_suffix =  " <small>(Japon)</small>" end
	if jeu == "RV" or jeu == "B-jp" then japan_class = "japonais" end
	local resultat = {"<table class='tableaustandard centre " .. japan_class .. "' style='max-width: 100%;'><tr><td colspan='"
		.. 2 + colspan_taux + colspan_blocs_safari + colspan_renfort .. "' class='" .. bordure .. "'><b>" .. frame:expandTemplate{title='Jeu', args={jeu}} .. game_suffix
		.. "</b></td></tr>"}
	if image then table.insert(resultat, "<tr><td colspan='" .. 2 + colspan_taux + colspan_blocs_safari + colspan_renfort .. "'>[[Fichier:" .. image .. "]]</td></tr>") end
	table.insert(resultat, "<tr><th rowspan='" .. rowspan_en_tete .. "'>Pokémon</th><th rowspan='" .. rowspan_en_tete
		.. "'>Niveau</th><th colspan='" .. colspan_taux .. "'>Taux</th>")
	
	if colspan_blocs_safari > 0
	then table.insert(resultat, "<th rowspan='" .. rowspan_en_tete .. "'>Blocs</th><th rowspan='" .. rowspan_en_tete .. "'>Attente</th>")
	end

	if colspan_renfort > 0
	then table.insert(resultat, "<th rowspan='" .. rowspan_en_tete .. "'>Renfort</th>")
		if colspan_renfort == 2
		then table.insert(resultat, "<th rowspan='" .. rowspan_en_tete .. "'>Taux d'appel</th>")
		end
	end
	
	table.insert(resultat, "</tr>")
	
	
	if not union_taux
	then j = 1
		table.insert(resultat, "<tr>")
		while taux_presents[1][j] do
			local color = taux_presents[3][j]
			if color
			then table.insert(resultat, "<th class='" .. color .. "'>[[Fichier:Icône " .. taux_presents[1][j]
				.. " " .. jeu .. ".png|" .. taux_presents[1][j] .. "|link=" .. taux_presents[4][1] .. "|x25px]]</th>")
			else table.insert(resultat, "<th>[[Fichier:Icône " .. taux_presents[1][j]
				.. " " .. jeu .. ".png|" .. taux_presents[1][j] .. "|link=" .. taux_presents[4][1] .. "|x25px]]</th>")
			end
			j = j + 1
		end
		table.insert(resultat, "</tr>")
	end
	
	-- Pokémon
	local poke = {}
	local poke_split = {}
	local niveau = ""
	local taux = ""
	local renfort_poke = {}
	local rowspan_ligne = 1
	i = 1
	while pokemon[i] do
		poke = pokemon[i]
		poke = mw.text.split(pokemon[i], " / ")
		
		local nb_entrees = 1
		while poke[nb_entrees + 1] do
			nb_entrees = nb_entrees + 1
		end
		
		local rowspan_poke = 0
		-- Instance de Pokémon sauvage
		if nb_entrees >= 2 then
			h = 2
			
			-- On regarde le nombre de lignes nécessaires au total
			local rowspan_lignes = {}
			local renforts_poke = {}
			local renforts_poke_unsplit = {}
			while poke[h] do
				local renfort_poke_unsplit = extract_argument_bracket("renfort", poke[h], "—")
				renforts_poke_unsplit[h] = renfort_poke_unsplit
				renforts_poke[h] = {}
				
				local renfort_poke = mw.text.split(renfort_poke_unsplit, ", ")
				j = 1
				while renfort_poke[j] do
					renforts_poke[h][j] = renfort_poke[j]
					j = j + 1
				end
				rowspan_poke = rowspan_poke + math.max(1, j - 1)
				rowspan_lignes[h] = j - 1
				h = h + 1
			end
			
			poke_split = mw.text.split(poke[1], ", ")
			if poke_split[2]
			-- Cas de horde
			then table.insert(resultat, '<tr><td rowspan="' .. rowspan_poke .. '">')
				j = 1
				while poke_split[j] do
					table.insert(resultat, ressources.infosPokemon(poke_split[j], "miniature"))
					
					-- Retour à la ligne pour en montrer 2 sur la première ligne et 3 sur la seconde, comme dans les jeux
					if j == 2
					then table.insert(resultat, '<br>')
					end
					
					j = j + 1
				end
				table.insert(resultat, "</td>")
			-- Cas classique, un seul Pokémon
			else table.insert(resultat, '<tr><td rowspan="' .. rowspan_poke .. '" style="text-align:left">'
				.. ressources.infosPokemon(poke_split[1]) .. "</td>")
			end
			
			h = 2
			while poke[h] do
				if h ~= 2 then table.insert(resultat, "<tr>") end
				infos = poke[h]
				
				-- On regarde combien de Pokémon peuvent être en renforts dans cette ligne
				local rowspan_ligne = rowspan_lignes[h]
				
				-- On regroupe les renforts avec les lignes d'après s'il n'y en a qu'un et que ce sont les mêmes
				-- On vérifie quand même au préalable que ce n'est pas déjà regroupé avec la ligne d'avant
				local is_renfort_alone_and_same_than_pred = false
				local renfort_poke = renforts_poke[h]
				local renfort_poke_unsplit = renforts_poke_unsplit[h]
				local renfort_pred = nil
				local renfort_pred_unsplit = nil
				local rowspan_renfort = 1
				
				if h ~= 1
				then renfort_pred = renforts_poke[h-1]
					renfort_pred_unsplit = renforts_poke_unsplit[h-1]
				end
				
				
				if not renfort_poke[2]
				then if renfort_pred_unsplit == renfort_poke_unsplit
					then is_renfort_alone_and_same_than_pred = true
					else
						local hh = h + 1
						while poke[hh] do
							local renfort_next_unsplit = renforts_poke_unsplit[hh]
							if renfort_next_unsplit == renfort_poke_unsplit
							then rowspan_renfort = rowspan_renfort + 1
							else break
							end
							hh = hh + 1
						end
					end
				else 
				end
				
				local niveau_unsplit = extract_argument("niveau", infos, "—")
				local niveau_pred = extract_argument("niveau", poke[h-1], "—")
				local niveau = niveau_unsplit:gsub("-", "–")
				niveau = mw.text.split(niveau, ", ")
				local rowspan_niveau = rowspan_ligne
				if h == 2 or niveau_unsplit ~= niveau_pred
				then
					local hh = h + 1
					while poke[hh] do
						local niveau_next = extract_argument("niveau", poke[hh], nil)
						if niveau_next == niveau_unsplit
						then rowspan_niveau = rowspan_niveau + rowspan_lignes[hh]
						else break
						end
						hh = hh + 1
					end
				
					local niveau_text = niveau[1]
					j = 2
					while niveau[j] do
						niveau_j_number = niveau[j]:gsub("–", "")
						if tonumber(niveau_j_number)
						then niveau_text = niveau_text .. "<br>" .. niveau[j]
						else niveau_text = niveau_text .. frame:expandTemplate{title='Sup', args={niveau[j]}}
						end
						j = j + 1
					end
					table.insert(resultat, "</td><td rowspan='" .. rowspan_niveau .. "'>" .. niveau_text .. "</td>")
				end
				
				
				
				-- Ajout du taux
				function add_rate(rate, rate_precision, colspan, rowspan, class)
					local seen_games_here = nil
					
					rate = mw.ustring.gsub(rate, "-", "—")
					rate = mw.text.split(rate, ", ")
					if tonumber(rate[1])
					then rate[1] = string.gsub(rate[1], "%.", ",") .. "&nbsp;%"
					else rate[1] = mw.ustring.gsub(rate[1], "{{!}}", "|")
					end
					if rate[1] == "Fixe" then rate[1] = "[[Fichier:Icône Fixe.svg|class=imagenoire|27px|Fixe]]" end
					
					table.insert(resultat, "<td")
					if colspan then table.insert(resultat, ' colspan="' .. colspan .. '"') end
					if rowspan then table.insert(resultat, ' rowspan="' .. rowspan .. '"') end
					if class then table.insert(resultat, ' class="' .. class .. '"') end
					table.insert(resultat, '>' .. rate[1])
					
					local k = 2
					while rate[k] do	-- Gestion des taux spécifiques à des jeux
						if tonumber(rate[k])
						then table.insert(resultat, "<br>" .. string.gsub(rate[k], "%.", ",") .. "&nbsp;%")
						else table.insert(resultat, frame:expandTemplate{title='Sup', args={rate[k]}})
						end
						k = k + 1
					end
					if rate_precision then table.insert(resultat, '<br><small><i>' .. rate_precision .. '</i></small>') end
					table.insert(resultat, "</td>")
				end
				
				if union_taux
				then
					-- Configuration où les taux ne varient jamais
					local taux = extract_argument("taux", infos, "—")
					local precision_taux = extract_argument("précision-taux", infos, nil)
					add_rate(taux, precision_taux, nil, rowspan_ligne, nil)
				else
					local taux = extract_argument("taux", infos, "—")
					if taux == "—"
					then
						-- Sur une configuration où les taux sont divisés, cas d'un Pokémon qui plusieurs taux différents
						j = 1
						while taux_presents[2][j] do
							local taux_j = extract_argument(taux_presents[2][j], infos, "—")
							local precision_taux_j = extract_argument("précision-" .. taux_presents[2][j], infos, nil)
							local color = taux_presents[3][j]
							
							add_rate(taux_j, precision_taux_j, nil, rowspan_ligne, color)
							
							j = j + 1
						end
					else
						-- Sur une configuration où les taux sont divisés, cas d'un Pokémon qui a un taux unique
						local precision_taux = extract_argument("précision-taux", infos, nil)
						
						add_rate(taux, precision_taux, colspan_taux, rowspan_ligne, nil)
						
						table.insert(resultat, "</td>")
					end
				end
				
				-- Ajout des Blocs du Parc Safari
				if colspan_blocs_safari > 0
				then
					local j = 1
					local blocs_unsplit = extract_argument("blocs", infos, "—")
					local blocs_pred = extract_argument("blocs", poke[h-1], "—")
					local blocs = mw.ustring.gsub(blocs_unsplit, ", ", "<br>")
					
					local attente_default
					if blocs_unsplit ~= "—" then attente_default = "Immédiatement" else attente_default = "—" end
					local attente = extract_argument("attente", infos, attente_default)
					if tonumber(attente)
					then if tonumber(attente) >= 2
						then attente = attente .. " jours"
						else attente = attente .. " jour"
						end
					end
					
					if blocs_pred ~= "—" then attente_default = "Immédiatement" else attente_default = "—" end
					local attente_pred = extract_argument("attente", poke[h-1], attente_default)
					if tonumber(attente_pred)
					then if tonumber(attente_pred) >= 2
						then attente_pred = attente_pred .. " jours"
						else attente_pred = attente_pred .. " jour"
						end
					end
					
					local rowspan_blocs = rowspan_ligne
					local rowspan_attente = rowspan_ligne
					local extending_blocs_beginning = h > 2 and blocs_unsplit == blocs_pred
					local extending_attente_beginning = h > 2 and attente == attente_pred
					
					if not (extending_blocs_beginning and extending_attente_beginning)
					then
						local hh = h + 1
						local extending_blocs = extending_blocs_beginning
						local extending_attente = extending_attente_beginning
						while poke[hh] do
							local blocs_next = extract_argument("blocs", poke[hh], "—")
							
							if not extending_blocs and blocs_next == blocs_unsplit
							then rowspan_blocs = rowspan_blocs + rowspan_lignes[hh]
							else extending_blocs = true
							end
							
							if not extending_attente
							then if blocs_next ~= "—" then attente_default = "Immédiatement" else attente_default = "—" end
								local attente_next = extract_argument("attente", poke[hh], attente_default)
								if tonumber(attente_next)
								then if tonumber(attente_next) >= 2
									then attente_next = attente_next .. " jours"
									else attente_next = attente_next .. " jour"
									end
								end
								
								if attente == attente_next
								then rowspan_attente = rowspan_attente + rowspan_lignes[hh]
								else extending_attente = true
								end
							end
							
							if extending_blocs and extending_attente then break end
							hh = hh + 1
						end
						
						if h == 2 or not extending_blocs_beginning
						then table.insert(resultat, '<td rowspan="' .. rowspan_blocs .. '">' .. blocs .. '</td>')
						end
						if h == 2 or not extending_attente_beginning
						then table.insert(resultat, '<td rowspan="' .. rowspan_attente .. '">' .. attente .. '</td>')
						end
					end
				end
				
				-- Ajout du renfort
				if not is_renfort_alone_and_same_than_pred and colspan_renfort > 0
				then
					j = 1
					local renfort_taux = extract_argument("taux-renfort", infos, "100")
					renfort_taux = mw.text.split(renfort_taux, ", ")
					
					if renfort_poke[1] == "—"
					-- Cas où le Pokémon n'a pas de renforts, mais d'autres en ont
					then table.insert(resultat, '<td colspan="' .. colspan_renfort .. '" style="background-color:#F0F0F0" rowspan="'
							.. rowspan_renfort .. '">—</td>')
					else
						while renfort_poke[j] do
							if j >= 2 then table.insert(resultat, "<tr>") end
							
							table.insert(resultat, '<td style="text-align:left; background-color:#F0F0F0" rowspan="' .. rowspan_renfort
								.. '">[[Fichier:Miniature Orbe Frousse SL.png|Renfort]]&nbsp;' .. ressources.infosPokemon(renfort_poke[j]) .. '</td>')
							if colspan_renfort == 2
							then
								local renfort_taux_j = renfort_taux[j]
								if renfort_taux_j == nil or renfort_taux_j == "-" then renfort_taux_j = "100" end
								if tonumber(renfort_taux_j) then renfort_taux_j = string.gsub(renfort_taux_j, "%.", ",") .. "&nbsp;%" end
								table.insert(resultat, '<td style="background-color:#F0F0F0" rowspan="' .. rowspan_renfort
									.. '">' .. renfort_taux_j .. '</td>')
							end
							j = j + 1
						end
					end
				end
				
				table.insert(resultat, "</tr>")
				h = h + 1
			end
		
		-- Ligne de changement d'endroit de Poké sauvage
		elseif poke[1] then
			local endroit_unsplit = mw.text.split(poke[1], ",, ")
			local prefixe_endroit = endroit_unsplit[2] -- éventuellement nil
			local endroit = mw.text.split(endroit_unsplit[1], ",")
			local endroit_untouched = endroit[1]
			if prefixe_endroit == nil
			then prefixe_endroit = ""
			else prefixe_endroit = prefixe_endroit .. " "
				if endroit[1]:sub(1,2) == "É"
				then endroit[1] = "é" .. endroit[1]:sub(3, endroit[1]:len())
				else endroit[1] = endroit[1]:sub(1,1):lower() .. endroit[1]:sub(2, endroit[1]:len())
				end	-- on a mis la première lettre de l'endroit en minuscule, puisqu'elle est précédée de prefixe_endroit
			end
			
			if endroit[2] == nil then endroit[2] = "" end
			
			endroit[2] = mw.ustring.gsub(endroit[2], "{{!}}", "|")
			local template_replacement = endroit[2]:gsub(".*{{(.-)|(.-)}}.*", "%1") -- sert à process les modèles, qu'ils utilisent "|" ou "{{!}}"
			local templates_replaced = 0
			while template_replacement ~= endroit[2] and templates_replaced < 4 do -- pour empêcher une boucle infinie en cas de pépin, 4 modèles max devraient suffire
				local arg_template_teplacement = endroit[2]:gsub(".*{{(.-)|(.-)}}.*", "%2")
				
				local template_result = frame:expandTemplate{title=template_replacement, args={arg_template_teplacement}}
				endroit[2] = endroit[2]:gsub("(.*){{(.-)|(.-)}}(.*)", "%1" .. template_result .. "%4")
				
				local template_replacement = endroit[2]:gsub(".*{{(.-)|(.-)}}.*", "%1")
				templates_replaced = templates_replaced + 1
			end
			
			if endroit[1] ~= ""
			then 
				local milieu = milieu_sauvage[jeu]
				if milieu ~= nil then milieu = milieu[endroit_untouched] end
				if milieu == nil
				then milieu = "'>[[Catégorie:Article avec un milieu de capture non normalisé]]" .. prefixe_endroit .. endroit[1] .. endroit[2]
				else
					-- Si aucun nom n'est précisé dans les données des milieux, on prend celui par défaut (celui indiqué)
					if milieu:sub(-6, -1) == ".png]]" or milieu:sub(-4, -1) == "px]]"
					then milieu = milieu .. " " .. prefixe_endroit .. endroit[1] .. endroit[2]
					else milieu = milieu .. endroit[2]
					end
				end
				table.insert(resultat, "<tr><th colspan='" .. 2 + colspan_taux + colspan_blocs_safari + colspan_renfort .. "' class='" .. milieu .. "</th></tr>")
			end
		end
		i = i + 1
	end
	
	note = frame.args["note"]
	if note
	then
		if note == "ligue"
			then phrase_finale = "<p><i>Les niveaux présentés correspondent respectivement à<br>"
				.. "avant et après la victoire contre la Ligue Pokémon.</i></p>" .. phrase_finale
		elseif note == "éthernatos"
			then phrase_finale = "<p><i>Les niveaux présentés correspondent respectivement à<br>"
				.. "avant et après le combat contre Éthernatos.<br>"
				.. "Les Pokémon vadrouilleurs de niveau 65 apparaissent une fois la Ligue vaincue.</i></p>" .. phrase_finale
		elseif note == "trouée cachée"
			then phrase_finale = "<p><i>Tous les Pokémon possèdent leur [[talent caché]].</i></p>" .. phrase_finale	
		else phrase_finale = "<p><i>" .. note .. "</i></p>"
		end
	end
	
	if phrase_finale ~= ""
	then table.insert(resultat, "<tr><td colspan='" .. 2 + colspan_taux + colspan_blocs_safari + colspan_renfort .. "'><i>" .. phrase_finale .. "</i></td></tr>")
	end
	
	table.insert(resultat, '</table>')
	if fetching_loc then table.insert(resultat, "[[Catégorie:Page avec un module Tableau Pokémon]]") end
	return table.concat(resultat, "")
end






function p.antre(frame)
	local pokemon = frame.args[1]
	if pokemon ~= nil then pokemon = mw.text.split(pokemon, "\n") else pokemon = {} end
		
	local page = frame.args["page"]
	local pagename = frame:preprocess("{{PAGENAME}}")
	
	local fetching_loc = frame.args["localisations"]
	fetching_loc = fetching_loc ~= "non"
	
	local i = 1
	local j = 1
	local k = 1
	
	taux_presents = {{"★<br><i><small>(Niveau 15–20)</small></i>", "★★<br><i><small>(Niveau 25–30)</small></i>",
			"★★★<br><i><small>(Niveau 35–40)</small></i>", "★★★★<br><i><small>(Niveau 45–50)</small></i>",
			"★★★★★<br><i><small>(Niveau 55–60)</small></i>"},
		{"1", "2", "3", "4", "5"},
		{"raid1", "raid2", "raid3", "raid4", "raid5"}}
	
	-- Première boucle pour voir si on a affaire à des notes/remarques sur certains Pokémon
	i = 1
	local colspan_notes = 0
	while pokemon[i] do
		poke = mw.text.split(pokemon[i], "/")
		local h = 2
		while poke[h] do
			if extract_argument("notes", poke[h], nil)
			then colspan_notes = 1
			break
			end
			h = h + 1
		end
		if colspan_notes == 1 then break end
		i = i + 1
	end
	
	local colspan_taux = 5
	local rowspan_en_tete = 2
	-- EN-TÊTE
	local resultat = {"<table class='tableaustandard centre' style='max-width: 100%;'><tr>"
		.. "<th rowspan='" .. rowspan_en_tete .. "'>Pokémon</th><th rowspan='" .. rowspan_en_tete .. "'>Talent caché</th><th rowspan='"
		.. rowspan_en_tete .. "'>[[IV]] parfaits<br>garantis</th><th colspan='" .. colspan_taux .. "'>"}
	
	if page ~= nil and page ~= pagename
	then table.insert(resultat, '<div style="float:left; width:0em; text-align:left"><div style="font-size:xx-small">'
		..  frame:preprocess("[[" .. page .. "|Source]]") .. '</div></div>')
	end
	table.insert(resultat, "Taux</th>")
	if colspan_notes > 0
	then table.insert(resultat, "<th rowspan='" .. rowspan_en_tete .. "'>Notes</th>")
	end
	table.insert(resultat, "</tr>")
	
	j = 1
	table.insert(resultat, "<tr>")
	while taux_presents[1][j] do
		local color = taux_presents[3][j]
		if color
		then table.insert(resultat, "<th class='" .. color .. "'>" .. taux_presents[1][j] .. "</th>")
		else table.insert(resultat, "<th>taux_presents[1][j]</th>")
		end
		j = j + 1
	end
	table.insert(resultat, "</tr>")
	
	-- Pokémon
	local poke = {}
	local poke_split = {}
	local niveau = ""
	local taux = ""
	local renfort_poke = {}
	local rowspan_ligne = 1
	i = 1
	while pokemon[i] do
		poke = mw.text.split(pokemon[i], "/")
		
		local nb_entrees = 1
		while poke[nb_entrees + 1] do
			nb_entrees = nb_entrees + 1
		end
		
		local rowspan_poke = 0
		-- Instance de Pokémon sauvage
		if nb_entrees >= 2 then
			h = 2
			
			-- On regarde le nombre de lignes nécessaires au total
			while poke[h] do
				rowspan_poke = rowspan_poke + 1
				h = h + 1
			end
			
			table.insert(resultat, '<tr><td rowspan="' .. rowspan_poke .. '" style="text-align:left">'
				.. ressources.infosPokemon(poke[1] .. " jeu(EB)") .. "</td>")
				
			h = 2
			while poke[h] do
				if h ~= 2 then table.insert(resultat, "<tr>") end
				infos = poke[h]
						
				talent_cache = extract_argument("talent-caché", infos, nil)
				local talent_cache_pred = extract_argument("talent-caché", poke[h-1], nil)
				local rowspan_talent_cache = 1
				if h == 2 or talent_cache ~= talent_cache_pred
				then
					local hh = h + 1
					while poke[hh] do
						local talent_cache_next = extract_argument("talent-caché", poke[hh], nil)
						if talent_cache_next == talent_cache
						then rowspan_talent_cache = rowspan_talent_cache + 1
						else break
						end
						hh = hh + 1
					end
					
					if talent_cache == "Possible"
						then table.insert(resultat, "<td rowspan='" .. rowspan_talent_cache .. "'class='résistance'>Possible</td>")
					elseif talent_cache == "Toujours"
						then table.insert(resultat, "<td rowspan='" .. rowspan_talent_cache .. "'class='standard'>Toujours</td>")
					elseif talent_cache == "Impossible" or talent_cache == nil
						then table.insert(resultat, "<td rowspan='" .. rowspan_talent_cache .. "'class='faiblesse'>Impossible</td>")
					else table.insert(resultat, "<td rowspan='" .. rowspan_talent_cache .. "'>" .. talent_cache .. "</td>")
					end
				end
				
				local iv_unsplit = extract_argument("iv", infos, "—")
				local iv_pred = extract_argument("iv", poke[h-1], nil)
				iv = mw.text.split(iv_unsplit, ", ")
				local rowspan_iv = 1
				if h == 2 or iv_unsplit ~= iv_pred
				then
					local hh = h + 1
					while poke[hh] do
						local iv_next = extract_argument("iv", poke[hh], nil)
						if iv_next == iv_unsplit
						then rowspan_iv = rowspan_iv + 1
						else break
						end
						hh = hh + 1
					end
				
					table.insert(resultat, "<td rowspan='" .. rowspan_iv .. "'>" .. iv[1])
					j = 2
					while iv[j] do
						if tonumber(iv[j])
							then table.insert(resultat, "<br>" .. iv[j])
							else table.insert(resultat, frame:expandTemplate{title='Sup', args={iv[j]}})
						end
						j = j + 1
					end
					table.insert(resultat, "</td>")
				end
				
				taux = extract_argument("taux", infos, "—")
				if taux == "—"
				then
					-- Cas d'un Pokémon qui plusieurs taux différents
					j = 1
					while taux_presents[2][j] do
						local taux_j = extract_argument(taux_presents[2][j], infos, "—")
						taux_j = mw.text.split(taux_j, ", ")
						local precision_taux_j = extract_argument("précision-" .. taux_presents[2][j], infos, nil)
						if tonumber(taux_j[1]) then taux_j[1] = string.gsub(taux_j[1], "%.", ",") .. "&nbsp;%" end
						
						local color = taux_presents[3][j]
						if color
						then table.insert(resultat, "<td class='" .. color .. "' rowspan='" .. rowspan_ligne
							.. "'>" .. taux_j[1])
						else table.insert(resultat, "<td rowspan='" .. rowspan_ligne .. "'>" .. taux_j[1])
						end
						k = 2
						while taux_j[k] do	-- Gestion des taux spécifiques à des jeux
							if tonumber(taux_j[k])
							then table.insert(resultat, "<br>" .. string.gsub(taux_j[k], "%.", ",") .. "&nbsp;%")
							else table.insert(resultat, frame:expandTemplate{title='Sup', args={taux_j[k]}})
							end
							k = k + 1
						end
						if precision_taux_j then table.insert(resultat, '<br><small><i>' .. precision_taux_j .. '</i></small>') end
						table.insert(resultat, "</td>")
						j = j + 1
					end
				else
					-- Cas d'un Pokémon qui a un taux unique
					local precision_taux = extract_argument("précision-taux", infos, nil)
					taux = mw.text.split(taux, ", ")
					if tonumber(taux[1]) then taux[1] = string.gsub(taux[1], "%.", ",") .. "&nbsp;%" end
					
					table.insert(resultat, '<td colspan="' .. colspan_taux .. '">' .. taux[1])
					j = 2
					while taux[j] do	-- Gestion des taux spécifiques à des jeux
						if tonumber(taux[j])
						then table.insert(resultat, "<br>" .. string.gsub(taux[j], "%.", ",") .. "&nbsp;%")
						else table.insert(resultat, frame:expandTemplate{title='Sup', args={taux[j]}})
						end
						j = j + 1
					end
					if precision_taux then table.insert(resultat, '<br><small><i>' .. precision_taux .. '</i></small>') end
					table.insert(resultat, "</td>")
				end
				
				-- Notes (colonne optionnelle)
				if colspan_notes > 0
				then
					local notes_unsplit = extract_argument("notes", infos, "—")
					local notes_pred = extract_argument("notes", poke[h-1], "—")
					notes = mw.text.split(notes_unsplit, ", ")
					local rowspan_notes = 1
					if h == 2 or notes_unsplit ~= notes_pred
					then
						local hh = h + 1
						while poke[hh] do
							local notes_next = extract_argument("notes", poke[hh], "—")
							if notes_next == notes_unsplit
							then rowspan_notes = rowspan_notes + 1
							else break
							end
							hh = hh + 1
						end
					
						table.insert(resultat, "<td rowspan='" .. rowspan_notes .. "'>")
						j = 1
						while notes[j] do
							-- Expansion de certaines notes
							if notes[j] == "Toujours chromatique"
								then notes[j] = "[[Fichier:Miniature Chromatique EB.png|x15px|link=Pokémon chromatique|Ce Pokémon est toujours chromatique.]]"
									.. "&nbsp;Toujours chromatique"
							elseif notes[j] == "Doté du gène Gigamax"
								then notes[j] = "[[Fichier:Miniature Gigamax EB.png|x15px|link=Gigamax|Gigamax]]&nbsp;Doté du gène Gigamax"
							end
							
							if j == 1
							then table.insert(resultat, notes[j])
							else table.insert(resultat, "<br>" .. notes[j])
							end
							j = j + 1
						end
						table.insert(resultat, "</td>")
					end
				end
				
				h = h + 1
			end
		end
		i = i + 1
	end
	
	table.insert(resultat, '</table>')
	if fetching_loc and (page == nil or page == pagename) then table.insert(resultat, "[[Catégorie:Page avec un module Tableau Pokémon]]") end
	return table.concat(resultat, "")
end






function p.teracristal(frame)
	local ressources = {
		["infosPokemon"] = require("Module:Ressources/infosPokemon")
	}
	local data_capacites = require("Module:Data/TypesCapacités")
	local id_separator = "_"
	
	-- Fonction intermédiaire qui transforme une capacité en une ligne avec le type et le lien de la capacité
	function capacite_to_line(capacite, type_teracristal)
		local link_capacite = capacite
		local image_capacite = ""
		local type_capacite = data_capacites[capacite]
		
		if (capacite == "Téra Explosion" or capacite == "Danse Éveil") and type_teracristal ~= nil and type_teracristal ~= "Par défaut"
		then type_capacite = type_teracristal
		elseif type_capacite == nil
		then type_capacite = data_capacites[capacite .. " (capacité)"]
			if type_capacite ~= nil
			then link_capacite = capacite .. " (capacité)"
			end
		end
		if type_capacite ~= nil
		then image_capacite = "[[Fichier:Icône Type " .. type_capacite .. " EV.png|x20px|link=" .. type_capacite .. " (type)|alt=" .. type_capacite .. "]] "
		end
		
		return image_capacite .. " [[" .. link_capacite .. "|" .. capacite .. "]]"
	end
	
	local pokemon = frame.args[1]
	if pokemon ~= nil then pokemon = mw.text.split(pokemon, "\n") else pokemon = {} end
		
	-- local page = frame.args["page"]
	-- local pagename = frame:preprocess("{{PAGENAME}}")
	
	local fetching_loc = frame.args["localisations"]
	fetching_loc = fetching_loc ~= "non"
	
	local i = 1
	local j = 1
	local k = 1
	
	-- Première boucle pour voir si on a affaire à des notes/remarques sur certains Pokémon
	i = 1
	local colspan_notes = 0
	while pokemon[i] do
		poke = mw.text.split(pokemon[i], "/")
		local h = 2
		while poke[h] do
			if extract_argument("notes", poke[h], nil)
			then colspan_notes = 1
			break
			end
			h = h + 1
		end
		if colspan_notes == 1 then break end
		i = i + 1
	end
	
	local coslpan_capacites = 2
	local rowspan_en_tete = 2
	-- EN-TÊTE
	local resultat = {"<table class='tableaustandard centre' style='max-width: 100%;'><tr>"
		.. "<th rowspan='" .. rowspan_en_tete .. "'>Pokémon</th><th rowspan='" .. rowspan_en_tete .. "'>Type Téracristal</th><th rowspan='" .. rowspan_en_tete .. "'>Talent caché</th><th rowspan='"
		.. rowspan_en_tete .. "'>Difficulté</th><th colspan='" .. coslpan_capacites .. "'>Capacités</th>"}
	
	if colspan_notes > 0
	then table.insert(resultat, "<th rowspan='" .. rowspan_en_tete .. "'>Notes</th>")
	end
	table.insert(resultat, "<th rowspan='" .. rowspan_en_tete .. "'>Récompenses</th></tr>")
	table.insert(resultat, "<tr><th>À la capture</th><th>Supplémentaires</th></tr>")
	
	-- Pokémon
	local poke = {}
	local poke_split = {}
	local niveau = ""
	local taux = ""
	local renfort_poke = {}
	local rowspan_ligne = 1
	local id_dict = {}
	i = 1
	while pokemon[i] do
		poke = mw.text.split(pokemon[i], "/")
		
		local nb_entrees = 1
		while poke[nb_entrees + 1] do
			nb_entrees = nb_entrees + 1
		end
		
		local rowspan_poke = 0
		-- Instance de Pokémon sauvage
		if nb_entrees >= 2 then
			h = 2
			
			-- On regarde le nombre de lignes nécessaires au total
			while poke[h] do
				rowspan_poke = rowspan_poke + 1
				h = h + 1
			end
			
			table.insert(resultat, '<tr><td rowspan="' .. rowspan_poke .. '" style="text-align:left">'
				.. ressources.infosPokemon(poke[1] .. " jeu(EV)") .. "</td>")
				
			h = 2
			while poke[h] do
				if h ~= 2 then table.insert(resultat, "<tr>") end
				infos = poke[h]
						
				-- Type Téracristal
				local type_teracristal = extract_argument("type-téracristal", infos, nil)
				local type_teracristal_pred = extract_argument("type-téracristal", poke[h-1], nil)
				local rowspan_type_teracristal = 1
				if h == 2 or type_teracristal ~= type_teracristal_pred
				then
					local hh = h + 1
					while poke[hh] do
						local type_teracristal_next = extract_argument("type-téracristal", poke[hh], nil)
						if type_teracristal_next == type_teracristal
						then rowspan_type_teracristal = rowspan_type_teracristal + 1
						else break
						end
						hh = hh + 1
					end
					
					table.insert(resultat, "<td rowspan='" .. rowspan_type_teracristal .. "'>")
					if type_teracristal == nil
						then table.insert(resultat, "Aléatoire")
					elseif type_teracristal == "Par défaut"
						then table.insert(resultat, type_teracristal)
					else
						table.insert(resultat, frame:expandTemplate{title='Type', args={type_teracristal, ["téra"] = "oui"}})
					end
					table.insert(resultat, "</td>")
				end
					
				-- Talent caché	
				local talent_cache = extract_argument("talent-caché", infos, nil)
				local talent_cache_pred = extract_argument("talent-caché", poke[h-1], nil)
				local rowspan_talent_cache = 1
				if h == 2 or talent_cache ~= talent_cache_pred
				then
					local hh = h + 1
					while poke[hh] do
						local talent_cache_next = extract_argument("talent-caché", poke[hh], nil)
						if talent_cache_next == talent_cache
						then rowspan_talent_cache = rowspan_talent_cache + 1
						else break
						end
						hh = hh + 1
					end
					
					if talent_cache == "Possible"
						then table.insert(resultat, "<td rowspan='" .. rowspan_talent_cache .. "'class='résistance'>Possible</td>")
					elseif talent_cache == "Toujours"
						then table.insert(resultat, "<td rowspan='" .. rowspan_talent_cache .. "'class='standard'>Toujours</td>")
					elseif talent_cache == "Impossible" or talent_cache == nil
						then table.insert(resultat, "<td rowspan='" .. rowspan_talent_cache .. "'class='faiblesse'>Impossible</td>")
					else table.insert(resultat, "<td rowspan='" .. rowspan_talent_cache .. "'>" .. talent_cache .. "</td>")
					end
				end
				
				-- Difficulté
				difficulte = extract_argument("difficulté", infos, nil)
				local difficulte_pred = extract_argument("difficulté", poke[h-1], nil)
				local rowspan_difficulte = 1
				if h == 2 or difficulte ~= difficulte_pred
				then
					local hh = h + 1
					while poke[hh] do
						local difficulte_next = extract_argument("difficulté", poke[hh], nil)
						if difficulte_next == difficulte
						then rowspan_difficulte = rowspan_difficulte + 1
						else break
						end
						hh = hh + 1
					end
					
					local difficulte_number = tonumber(difficulte)
					if difficulte_number == nil
					then table.insert(resultat, "<td rowspan='" .. rowspan_difficulte .. ">—</td>")
					else table.insert(resultat, "<td rowspan='" .. rowspan_difficulte .. ">" .. difficulte_number .. "★" .. "</td>")
					end
				end
				
				-- Capacités
				capacites = extract_argument("capacités", infos, nil)
				local capacites_pred = extract_argument("capacités", poke[h-1], nil)
				local rowspan_capacites = 1
				if h == 2 or capacites ~= capacites_pred
				then
					local hh = h + 1
					while poke[hh] do
						local capacites_next = extract_argument("capacités", poke[hh], nil)
						if capacites_next == capacites
						then rowspan_capacites = rowspan_capacites + 1
						else break
						end
						hh = hh + 1
					end
					
					local capacites_split = {}
					if capacites then capacites_split = mw.text.split(capacites, "; ") end
					local capacites_capture = capacites_split[1]
					local capacites_supplementaires = capacites_split[2]
					
					if capacites_capture == nil
					then capacites_capture = {}
					else capacites_capture = mw.text.split(capacites_capture, ", ")
					end
					if capacites_supplementaires == nil
					then capacites_supplementaires = {}
					else capacites_supplementaires = mw.text.split(capacites_supplementaires, ", ")
					end
					
					local c = 1
					if capacites_capture[1] == nil or capacites_capture[1] == ""
					then table.insert(resultat, "<td rowspan='" .. rowspan_capacites .. "'>—</td>")
					else
						table.insert(resultat, "<td rowspan='" .. rowspan_capacites .. "' style='text-align:left; white-space:nowrap'>")
						while capacites_capture[c] do
							if c > 1
							then table.insert(resultat, "<br>")
							end
							
							table.insert(resultat, capacite_to_line(capacites_capture[c], type_teracristal))
							c = c + 1
						end
						table.insert(resultat, "</td>")
					end
					
					local c = 1
					if capacites_supplementaires[1] == nil or capacites_supplementaires[1] == ""
					then table.insert(resultat, "<td rowspan='" .. rowspan_capacites .. "'>—</td>")
					else
						table.insert(resultat, "<td rowspan='" .. rowspan_capacites .. "' style='text-align:left; white-space:nowrap'>")
						while capacites_supplementaires[c] do
							if c > 1
							then table.insert(resultat, "<br>")
							end
							
							table.insert(resultat, capacite_to_line(capacites_supplementaires[c], type_teracristal))
							c = c + 1
						end
						table.insert(resultat, "</td>")
					end
				end
				
				-- Notes (colonne optionnelle)
				if colspan_notes > 0
				then
					local notes_unsplit = extract_argument("notes", infos, "—")
					local notes_pred = extract_argument("notes", poke[h-1], "—")
					notes = mw.text.split(notes_unsplit, "%. ")
					local rowspan_notes = 1
					if h == 2 or notes_unsplit ~= notes_pred
					then
						local hh = h + 1
						while poke[hh] do
							local notes_next = extract_argument("notes", poke[hh], "—")
							if notes_next == notes_unsplit
							then rowspan_notes = rowspan_notes + 1
							else break
							end
							hh = hh + 1
						end
					
						table.insert(resultat, "<td rowspan='" .. rowspan_notes .. "' style='white-space:nowrap'>")
						j = 1
						while notes[j] do
							if notes[j+1] ~= nil
							then notes[j] = notes[j] .. "."
							end
									
							-- Expansion de certaines notes
							if notes[j] == "Toujours chromatique."
								then notes[j] = "[[Fichier:Miniature Chromatique (avec fond) EV.png|x15px|link=Pokémon chromatique|Ce Pokémon est toujours chromatique.]]"
									.. "&nbsp;Toujours chromatique."
							elseif notes[j] == "Jamais chromatique."
								then notes[j] = "[[Fichier:Miniature Chromatique (barrée) EV.png|x15px|link=Pokémon chromatique|Ce Pokémon n'est jamais chromatique.]]"
									.. "&nbsp;Jamais chromatique."
							elseif notes[j] == "Exclusif Ec."
								then notes[j] = "[[Fichier:Icône Pokémon Écarlate HOME.png|x20px|link=|Ce Pokémon est exclusif à Écarlate.]]"
									.. "&nbsp;Exclusif à ''Écarlate''."
							elseif notes[j] == "Exclusif Vi."
								then notes[j] = "[[Fichier:Icône Pokémon Violet HOME.png|x20px|link=|Ce Pokémon est exclusif à Violet.]]"
									.. "&nbsp;Exclusif à ''Violet''."
							elseif notes[j]:sub(1, 7) == "Insigne"
								then mark_type = notes[j]:sub(9, -2)
									notes[j] = "[[Fichier:Insigne " .. mark_type .. " EV.png|x20px|link=Insigne]] [[Insigne]] " .. mark_type .. "."
							end
							
							if j == 1
							then table.insert(resultat, notes[j])
							else table.insert(resultat, "<br>" .. notes[j])
							end
							j = j + 1
						end
						table.insert(resultat, "</td>")
					end
				end
				
				-- Récompenses
				local id = extract_argument("id", infos, nil)
				if id == nil
				then id = ""
					local w = 1
					local poke_words = mw.text.split(poke[1], " ")
					while poke_words[w] and poke_words[w] ~= "" do
						local l = 1
						local b = false
						while poke_words[w]:sub(l, l) ~= "" do
							if poke_words[w]:sub(l, l) == "("
							then b = true
								break
							end
							l = l + 1
						end
						if b then break end
						if w > 1 then id = id .. " " end
						id = id .. poke_words[w]
						w = w + 1
					end
					if tonumber(difficulte)
					then id = id .. id_separator .. difficulte
					end
				end
				if id_dict[id] == nil
				then id_dict[id] = 1
				else id_dict[id] = id_dict[id] + 1
					id = id .. id_separator .. id_dict[id]
				end
				table.insert(resultat, "<td id='Pokémon" .. id_separator .. id .. "'>[[#Objet" .. id_separator .. id .. "|[voir]]]</td></tr>")
				
				h = h + 1
			end
		end
		i = i + 1
	end
	
	table.insert(resultat, '</table>')
	if fetching_loc then table.insert(resultat, "[[Catégorie:Page avec un module Tableau Pokémon]]") end
	return table.concat(resultat, "")
end

return p