Aller au contenu

Module:Imagerie

De Poképédia

Paramètres[modifier]

Paramètres généraux[modifier]

  • le premier paramètre, sans nom, est le numéro du Pokémon concerné, toujours en quatre chiffres arabes.
  • le paramètre génération, par défaut la génération actuelle.
  • il est aussi possible de définir, si nécessaire, la forme du Pokémon (le nom complet de la forme, en accord avec la nomenclature des images).
  • si le Pokémon est Shiny Locked dans la génération concernée, définir le paramètre shinylock. À noter qu'il existe aussi aussi une famille de paramètres du type shinylock-jeu, pour un Pokémon Shiny Locked dans un jeu seulement, mais son usage est extrêmement rare à tel point qu'il est réduit à un seul Pokémon dans une seule génération : voir Mew/Imagerie#Septième génération.
  • le paramètre version permet d'ajouter la version des sprites utilisés, par exemple « CV » pour la Console Virtuelle ou « JP » pour les versions japonaises.

Sprites[modifier]

Par défaut, le module produit une configuration initiale du tableau qui est (tout du moins théoriquement) la plus utilisée. Par exemple, pour la quatrième génération, il suppose que le sprite de face est le même dans Pokémon Diamant et Perle et Pokémon Platine, que celui-ci de Pokémon Or HeartGold et Argent SoulSilver est différent, et enfin que celui de dos est le même pour les trois jeux. Bien sûr, cette supposition se révèle fausse pour un bon nombre de Pokémon, et il faut alors pouvoir lui indiquer ce qu'il y a à changer. Trois familles de paramètres existent alors :

  • sprite-face-jeu ;
  • sprite-dos-jeu.

Le présence de jeu en italique montre une particularité de ces paramètres permise pour les modules : leur nom varie. On pourra ainsi aussi bien utiliser « sprite-face-rs », « sprite-dos-hgss », « miniature-lgpe », etc., le module comprendra et les gérera tous de la même façon. L'abréviation du jeu est en minuscule, ceci pour respecter les conventions sur les paramètres de modèles, étendue aux modules.

Maintenant que nous savons quels paramètres existent, encore faut-il savoir quoi renseigner : l'abréviation du jeu dans lequel est apparu le sprite utilisé. Pour reprendre l'exemple précédemment cité, si l'on veut que Pokémon Diamant et Perle soit à part et que Pokémon Platine et Pokémon Or HeartGold et Argent SoulSilver utilisent le même sprite de face, on définira à la fois « sprite-face-pt=pt » et « sprite-face-hgss=pt ». Ici encore, l'abréviation renseignée est insensible à la casse.

Un deuxième cas est géré à part, celui-ci ou un Pokémon est absent d'un jeu. Par exemple, Keldeo n'est présent que dans Pokémon Noir 2 et Blanc 2 dans la cinquième génération et il faut donc indiquer au module qu'il est absent de Pokémon Noir et Blanc. Assez intuitivement, la catégorie de paramètre est de la forme absence-jeu avec, comme précédemment, l'abréviation du jeu en minuscule. Un cas particulier ici aussi : Pokémon : Let's Go, Pikachu et Let's Go, Évoli. Comme moins de 160 des plus de 800 Pokémon existants à l'époque sont présents dans le jeu, le module « triche » en renseignant par lui-même le paramètre « absence-lgpe » si celui-ci n'est pas défini. Ainsi, pour indiquer qu'un Pokémon est présent dans Pokémon : Let's Go, Pikachu et Let's Go, Évoli, on indiquera plutôt qu'il n'est pas absent de ce jeu avec « absence-lgpe=non ».

Trois paramètres sont possibles pour les différences entre les sprites femelles et mâles :

  • diff-sprites-sexe, à l'effet classique, qui convient le plus souvent ;
  • si seuls les sprites de face varient, et non ceux de dos, alors il faudra utiliser diff-sprites-face-sexe ;
  • au contraire, si seuls les sprites de dos varient, c'est diff-sprites-dos-sexe qui sera nécessaire.

Enfin, dans le cas particulier où un Pokémon n'est jamais disponible de face ou de dos dans un jeu, il est possible de faire disparaître la colonne correspondante du tableau pour ce jeu ciblé, avec un des paramètres suivants :

  • absence-face-jeu=oui ;
  • absence-dos-jeu=oui.

La configuration par défaut actuelle, en absence de paramètre dédié, désactive automatiquement les sprites de dos de Pokémon HOME qui ne sont disponibles que pour un nombre limité de créatures, ainsi que pour les jeux de génération 8 et plus, où les images de dos sont trop peu nombreuses.

Miniatures[modifier]

Pour les miniatures, le module utilise une disposition similaire aux sprites. On aura donc :

  • miniature-jeu pour corriger la disposition par défaut (par exemple Steelix en génération 6) ;
  • diff-miniatures-sexe, lorsque la miniature diffère selon le sexe (par exemple Mistigrix) ;
  • absence-miniature=oui ou absence-miniature-jeu=oui, lorsque le Pokémon n'a pas de miniature

Enfin, le paramètre « miniature-chromatique-jeu » existe pour préciser lorsque les Pokémon ont une miniature chromatique différente dans un certain jeu, mais sa saisie est automatique pour les jeux concernés, par exemple Légendes Pokémon : Arceus.

Artwork[modifier]

Pour afficher un artwork au-dessus de la galerie de miniature(s) et sprites, le paramètre artwork doit être renseigné avec l'abréviation du jeu d'où provient cet artwork. Par exemple, pour afficher « Fichier:Arcanin-RB.png » sur une page ou sous-page d'Arcanin, on utilisera « artwork=RB », avec les majuscules. Il est à noter que le nom du Pokémon est tiré du nom de la page où est appelé le module. Ainsi, tout essai de ce paramètre en dehors d'une page de Pokémon ne mènera qu'à l'apparition d'un point rouge.

Les artworks sont définis là où est défini le module, c'est-à-dire sur les sous-pages /Imagerie. Le module décide ensuite de l'afficher ou non selon la page en cours :

  • sur les sous-pages /Imagerie, l'artwork n'est jamais affiché (puisqu'il est présent dans les galeries plus haut) ;
  • sur les sous-pages /Génération, l'artwork affiché dépend du paramètre artwork ;
  • sur les pages principales des Pokémon, l'artwork affiché est l'artwork principal du Pokémon, c'est-à-dire celui pointé par « Fichier:Arcanin.png ».

Pour forcer l'affichage, plutôt en prévisualisation, on peut toutefois indiquer « affichage-artwork=oui ».

Un paramètre supplémentaire est associé à l'artwork : artwork-précisions. Celui-ci est utile pour les Pokémon ayant plusieurs artworks, et correspond à la partie entre parenthèses dans le nom de l'artwork recherché. Par exemple, pour afficher l'artwork de la forme Originelle de Giratina dans Pokémon Platine (« Fichier:Giratina (Forme Originelle)-Pt.png »), il est nécessaire de combiner « artwork=Pt » avec « artwork-précisions=Forme Originelle ».

Compagnons (quatrième génération)[modifier]

Le module affiche également les sprites compagnons de Pokémon Or HeartGold et Argent SoulSilver. Aucun paramètre supplémentaire n'est à renseigner, mais pour certains cas comme Ceriflor Temps Ensoleillé, on peut rajouter « absence-compagnon=oui » pour masquer cette colonne.

Animations d'attaque (sixième génération)[modifier]

Le module permet de gérer les animations d'attaque de Pokémon X et Y. Il suffit pour cela de définir le nombre d'animations d'attaque avec le paramètre animations-attaque. Dans le cas particulier de Pikachu, on renseignera également diff-animations-attaque-sexe pour différencier les animations selon le sexe du Pokémon.

Images du Pokédex (neuvième génération)[modifier]

Un paramètre pokédex existe pour gérer les images du Pokédex de Pokémon Écarlate et Violet et de ses DLC. Pour les Pokémon qui n'apparaissent pas dans Pokémon Écarlate et Violet, cette section n'apparaît pas. Sinon, plusieurs cas sont possibles à l'heure actuelle :

  • le Pokémon a une seule image du Pokédex, apparue dans Pokémon Écarlate et Violet : c'est le cas par défaut ;
  • le Pokémon n'a pas d'image du Pokédex bien qu'il soit présent dans Pokémon Écarlate et Violet : indiquer « pokédex=non » ;
  • le Pokémon a une seule image du Pokédex, apparue dans Le Masque Turquoise : indiquer « pokédex=EVmt » ;
  • le Pokémon a une seule image du Pokédex, apparue dans Le Disque Indigo : indiquer « pokédex=EVdi » ;
  • le Pokémon a des images du Pokédex différentes : indiquer par exemple « pokédex=EV/EVmt ».

Exemples[modifier]

Un cas classique[modifier]

{{#invoke:Imagerie|pokemon|0162|génération=2}}
Miniatures et sprites de la deuxième génération
MiniaturesSprites de faceSprites de dos
OACOACOAC

Chromatique

Forme et paramètres de configuration[modifier]

{{#invoke:Imagerie|pokemon|0487|génération=4|forme=Alternative|sprite-face-pt=pt|sprite-dos-hgss=hgss}}
Miniatures et sprites de la quatrième génération
MiniaturesSprites de faceSprites de dosCompagnon
DPPtHGSSDPPtHGSSDPPtHGSSHGSS


Chromatique

Différences entre sprites mâles et femelles, et compagnons de Pokémon Or HeartGold et Argent SoulSilver[modifier]

{{#invoke:Imagerie|pokemon|0025|génération=4|diff-sprites-sexe=oui}}
Miniatures et sprites de la quatrième génération
MiniaturesSprites de faceSprites de dosCompagnon
DPPtHGSSDPPtHGSSDPPtHGSSHGSS
Mâle
Mâle

Mâle
Mâle chromatique

Femelle
Femelle

Femelle
Femelle chromatique

Différences entre sprites mâles et femelles seulement de dos[modifier]

{{#invoke:Imagerie|pokemon|0419|génération=5|diff-sprites-dos-sexe=oui}}
Miniatures et sprites de la cinquième génération
MiniaturesSprites de faceSprites de dos
NBN2B2NBN2B2NBN2B2
Mâle
Mâle
Mâle
Mâle chromatique
Femelle
Femelle
Femelle
Femelle chromatique

Différences entre sprites et miniatures mâles et femelles[modifier]

{{#invoke:Imagerie|pokemon|0678|génération=6|diff-sprites-sexe=oui|diff-miniatures-sexe=oui}}
Miniatures et sprites de la sixième génération
MiniaturesSprites de faceSprites de dos
XYROSAXYROSAXYROSA
Mâle
Mâle
Mâle
Mâle chromatique
Femelle
Femelle
Femelle
Femelle chromatique

Forme, absence d'un jeu et Shiny Lock[modifier]

{{#invoke:Imagerie|pokemon|0647|génération=5|forme=Décidé|shinylock=oui|absence-nb=oui}}
Miniatures et sprites de la cinquième génération
MiniaturesSprites de faceSprites de dos
N2B2N2B2N2B2

Chromatique
Les images sur fond foncé ne sont pas visibles en jeu sans outil de triche. En savoir plus...

Le cas Pokémon : Let's Go, Pikachu et Let's Go, Évoli[modifier]

{{#invoke:Imagerie|pokemon|0006|génération=7|absence-lgpe=non|miniature2=LGPE}}
Miniatures et sprites de la septième génération
MiniaturesSprites de faceSprites de dos
SLUSULLGPESLUSULLGPESLUSULLGPE

Chromatique

Cas de la neuvième génération[modifier]

{{#invoke:Imagerie|pokemon|1007|forme=Finale|shinylock=oui|génération=9}}
Miniatures et sprites de la neuvième génération
MiniaturesSprites de face
EVHOMEEVHOME

Chromatique
Indisponible car ce Pokémon est Shiny Lock
Illustration du Pokédex

local p = {}
local ressources = {
	indexTableau = require("Module:Ressources/indexTableau"),
	tailleTableau = require("Module:Ressources/tailleTableau")
}

function p.pokemon( frame )
	-- CONFIGURATION INITIALE
	local num, generation
	local generationMax = 9
	if frame.args[1] == nil then return "Erreur : le numéro du Pokémon n'a pas été défini." else num = frame.args[1] end
	if frame.args['génération'] == nil then generation = generationMax else generation = tonumber( frame.args['génération'] ) end
	if frame.args['forme'] then forme = frame.args['forme'] .. ' ' else forme = '' end
	local nom_gen = ''
	local symbole_chromatique = ''
	local hasPermittedShinyLock = false
	local pagename = frame:preprocess("{{PAGENAME}}")
	local affichageArtwork = 'non'
	local version = frame.args['version']
	if not version then version = '' else version = '-' .. version end
	if not frame.args['affichage-artwork']
	then if pagename:find("Imagerie")
			then affichageArtwork = 'non'
		elseif pagename:find("Génération")
			then affichageArtwork = 'précisé'
		else affichageArtwork = 'général'
		end
	else affichageArtwork = frame.args['affichage-artwork']
	end
	local jeux = {}
	
	-- tableau de trois éléments
	-- le premier liste les groupes de jeux ayant une miniature commune,
	-- le deuxième liste les groupes de jeux ayant un sprite de face commun,
	-- le troisième liste les groupes de jeux ayant un sprite de dos commun
	local sprites = {}
	
	if generation == 1 then
		nom_gen = 'première'
		jeux = {"RV", "RB", "J"}
		sprites = { { RV = {"RV", "RB", "J"} }, { RV = {"RV"}, RB = {"RB"}, J = {"J"} }, { RV = {"RV", "RB", "J"} } }
	elseif generation == 2 then
		nom_gen = 'deuxième'
		symbole_chromatique = '[[Fichier:Miniature Chromatique OA.png]]'
		jeux = {"OA", "O", "A", "C"}
		sprites = { { OA = {"O", "A", "C"} }, { O = {"O"},  A = {"A"}, C = {"C"} }, { OA = {"O", "A", "C"} } }
	elseif generation == 3 then
		nom_gen = 'troisième'
		symbole_chromatique = '[[Fichier:Miniature Chromatique RFVF.png]]'
		jeux = {"RS", "RFVF", "E"}
		sprites = { { RS = {"RS", "RFVF", "E"} }, { RS = {"RS", "RFVF"}, E = {"E"} }, { RS = {"RS", "RFVF", "E"} } }
	elseif generation == 4 then
		nom_gen = 'quatrième'
		symbole_chromatique = '[[Fichier:Miniature Chromatique DP.png]]'
		jeux = {"DP", "Pt", "HGSS"}
		sprites = { { DP = {"DP", "Pt", "HGSS"} }, { DP = {"DP", "Pt"}, HGSS = {"HGSS"} }, { DP = {"DP", "Pt", "HGSS"} } }
	elseif generation == 5 then
		nom_gen = 'cinquième'
		symbole_chromatique = '[[Fichier:Miniature Chromatique NB.png]]'
		jeux = {"NB", "N2B2"}
		sprites = { { NB = {"NB", "N2B2"} }, { NB = {"NB", "N2B2"} }, { NB = {"NB", "N2B2"} } }
	elseif generation == 6 then
		nom_gen = 'sixième'
		symbole_chromatique = '[[Fichier:Miniature Chromatique XY.png]]'
		jeux = {"XY", "ROSA"}
		sprites = { { XY = {"XY", "ROSA"} }, { XY = {"XY", "ROSA"} }, { XY = {"XY", "ROSA"} } }
	elseif generation == 7 then
		nom_gen = 'septième'
		symbole_chromatique = '[[Fichier:Miniature Chromatique SL.png]]'
		jeux = {"SL", "USUL", "LGPE"}
		sprites = { { SL = {"SL", "USUL"}, LGPE = {"LGPE"} }, { SL = {"SL", "USUL"}, LGPE = {"LGPE"} }, { SL = {"SL", "USUL"}, LGPE = {"LGPE"} } }
	elseif generation == 8 then
		nom_gen = 'huitième'
		symbole_chromatique = '[[Fichier:Miniature Chromatique EB.png|x20px]]'
		jeux = {"EB", "DEPS", "LPA"}
		sprites = { { EB = {"EB"}, DEPS = {"DEPS"}, LPA = {"LPA"} }, { EB = {"EB", "DEPS"}, LPA = {"LPA"} }, { EB = {"EB", "DEPS"}, LPA = {"LPA"} } }
	elseif generation == 9 then
		nom_gen = 'neuvième'
		symbole_chromatique = '[[Fichier:Miniature Chromatique EV.png|x20px]]'
		jeux = {"EV", "HOME"}
		sprites = { { EV = {"EV"}, HOME = {"HOME"} }, { EV = {"EV"}, HOME = {"HOME"} }, { EV = {"EV"}, HOME = {"HOME"} } }
	else return "Erreur : génération inconnue."
	end
	
	-- GESTION DES PARAMETRES DE CONFIGURATION PRINCIPAUX
	if not frame.args['absence-lgpe'] then frame.args['absence-lgpe'] = 'oui' end
	if not frame.args['absence-miniature'] then frame.args['absence-miniature'] = 'non' end
	if frame.args['absence-miniature'] == 'oui' then sprites[1] = {} end
	local absences_dos = { 'eb', 'deps', 'lpa', 'ev', 'lpza', 'home' }
	for _, jeu in ipairs(absences_dos) do
		mw.log('absence-dos-' .. jeu)
		mw.log(frame.args['absence-dos-' .. jeu])
		if not frame.args['absence-dos-' .. jeu] then frame.args['absence-dos-' .. jeu] = 'oui' end
		mw.log(frame.args['absence-dos-' .. jeu])
	end
	if not frame.args['diff-miniatures-sexe-lpa'] and (frame.args['diff-sprites-sexe'] == 'oui' or frame.args['diff-sprites-face-sexe'] == 'oui') then frame.args['diff-miniatures-sexe-lpa'] = 'oui' end
	if not frame.args['miniature-chromatique-lpa'] then frame.args['miniature-chromatique-lpa'] = 'oui' end
	
	local remove = {}
	for _, jeu in ipairs(jeux) do
		
		-- gestion des absences dans un jeu donné
		-- si l'absence a lieu pour un jeu qui servait de référence à un groupe, le reste du groupe est éclaté afin de conserver les autres membres
		-- (les valeurs deviennent des clés/valeurs supplémentaires du tableau parent)
		if frame.args['absence-' .. string.lower(jeu)] and frame.args['absence-' .. string.lower(jeu)] ~= 'non' then
			table.insert(remove, jeu)
			for _2, spritesN in ipairs(sprites) do
				if spritesN[jeu] then
					if #spritesN[jeu] > 1 then
						for _3, jeuN in ipairs(spritesN[jeu]) do
							if jeuN ~= jeu then
								spritesN[jeuN] = { jeuN }
							end
						end
					end
					spritesN[jeu] = nil
				else
					for _3, spriteN in pairs(spritesN) do
						if ressources.indexTableau(spriteN, jeu) then
							table.remove(spriteN, ressources.indexTableau(spriteN, jeu))
							break
						end
					end
				end
			end
		end
		
		local paramsSprites = { 'miniature', 'sprite-face', 'sprite-dos' }
		local paramsBackSprites = { 'absence-miniature', 'absence-face', 'absence-dos' }
		for numParam = 1, #paramsSprites do
			local paramSprites = paramsSprites[numParam]
			local paramBackSprites = paramsBackSprites[numParam]
			
			-- gestion des sprites de face/dos non prévus par le scénario standard, déclarés manuellement
			-- (les sprites sont supposés communs par groupes de jeux mais des exceptions existent)
			if frame.args[paramSprites .. '-' .. string.lower(jeu)] then
				local param = frame.args[paramSprites .. '-' .. string.lower(jeu)]
				for _2, jeu2 in ipairs(jeux) do
					if string.lower(jeu2) == string.lower(param) then
						param = jeu2
						break
					end
				end
				if sprites[numParam][jeu] then sprites[numParam][jeu] = nil
				else
					for _2, sprite in pairs(sprites[numParam]) do
						if ressources.indexTableau(sprite, jeu) then
							table.remove(sprite, ressources.indexTableau(sprite, jeu))
							break
						end
					end
				end
				if sprites[numParam][param] then table.insert(sprites[numParam][param], jeu)
				else sprites[numParam][param] = { jeu }
				end
			end
			
			-- gestion des jeux sans sprite de face ou de dos
			if frame.args[paramBackSprites .. '-' .. string.lower(jeu)] and frame.args[paramBackSprites .. '-' .. string.lower(jeu)] ~= 'non' then
				if sprites[numParam][jeu] then sprites[numParam][jeu] = nil
				else
					for _2, sprite in pairs(sprites[numParam]) do
						if ressources.indexTableau(sprite, jeu) then
							table.remove(sprite, ressources.indexTableau(sprite, jeu))
							break
						end
					end
				end
			end
		end
	end
	for _, jeu in ipairs(remove) do
		table.remove(jeux, ressources.indexTableau(jeux, jeu))
	end
	
	-- gestion des paramètres par jeu des diff de miniatures
	if not frame.args['diff-miniatures-sexe']
	then local found = false
		for _, jeu in ipairs(remove) do
			if frame.args['diff-miniatures-sexe-' .. string.lower(jeu)] then found = true end
		end
		if found
		then frame.args['diff-miniatures-sexe'] = 'non'
			for _, jeu in ipairs(remove) do
				if frame.args['diff-miniatures-sexe-' .. string.lower(jeu)] ~= 'oui'
				then frame.args['diff-miniatures-sexe-' .. string.lower(jeu)] = 'non'
				end
			end
		end
	end
	
	-- CRÉATION VIRTUELLE DU TABLEAU ET PARAMÈTRES DE CONFIGURATION SPÉCIFIQUES
	local tableau = {}
	if generation == 1 then
		tableau[1] = { "", {}, {}, {} }
		for _, jeu in ipairs(jeux) do
			if sprites[1][jeu] then
				table.insert(tableau[1][2], {jeu, jeu, sprites[1][jeu], 1})
			end
			if sprites[2][jeu] then
				table.insert(tableau[1][3], {jeu, jeu, sprites[2][jeu], 1})
			end
			if sprites[3][jeu] then
				table.insert(tableau[1][4], {jeu, "dos " .. jeu, sprites[3][jeu], 1})
			end
		end
	elseif generation >= 4 and (frame.args['diff-miniatures-sexe'] or frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] or frame.args['diff-sprites-dos-sexe']) then
		tableau = { 
			{ "[[Fichier:Miniature Mâle HOME.png|20px|Mâle|link=Sexe des Pokémon]]<br />[[Sexe des Pokémon|Mâle]]", {}, {}, {} },
			{ "[[Fichier:Miniature Mâle HOME.png|20px|Mâle|link=Sexe des Pokémon]] " .. symbole_chromatique .. "<br />[[Sexe des Pokémon|Mâle]] [[Pokémon chromatique|chromatique]]", {}, {}, {} },
			{ "[[Fichier:Miniature Femelle HOME.png|20px|Femelle|link=Sexe des Pokémon]]<br />[[Sexe des Pokémon|Femelle]]", {}, {}, {} },
			{ "[[Fichier:Miniature Femelle HOME.png|20px|Femelle|link=Sexe des Pokémon]] " .. symbole_chromatique .. "<br />[[Sexe des Pokémon|Femelle]] [[Pokémon chromatique|chromatique]]", {}, {}, {} }
		}
		for _, jeu in ipairs(jeux) do
			if sprites[1][jeu] then
				if frame.args['diff-miniatures-sexe'] == 'oui' or frame.args['diff-miniatures-sexe-' .. string.lower(jeu)] == 'oui' then
					table.insert(tableau[1][2], {jeu, forme .. "♂ " .. jeu, sprites[1][jeu], 1})
					table.insert(tableau[2][2], {jeu, forme .. "♂ chromatique " .. jeu, sprites[1][jeu], 1})
					table.insert(tableau[3][2], {jeu, forme .. "♀ " .. jeu, sprites[1][jeu], 1})
					table.insert(tableau[4][2], {jeu, forme .. "♀ chromatique " .. jeu, sprites[1][jeu], 1})
				elseif frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] or frame.args['diff-sprites-dos-sexe'] then
					table.insert(tableau[1][2], {jeu, forme .. jeu, sprites[1][jeu], 1})
					table.insert(tableau[2][2], {jeu, forme .. "chromatique " .. jeu, sprites[1][jeu], 1})
					table.insert(tableau[3][2], {jeu, forme .. jeu, sprites[1][jeu], 1})
					table.insert(tableau[4][2], {jeu, forme .. "chromatique " .. jeu, sprites[1][jeu], 1})
				else
					table.insert(tableau[1][2], {jeu, forme .. jeu, sprites[1][jeu], 2})
					table.insert(tableau[3][2], {jeu, forme .. "chromatique " .. jeu, sprites[1][jeu], 2})
				end
			end
			if sprites[2][jeu] then
				if frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] then
					table.insert(tableau[1][3], {jeu, forme .. "♂ " .. jeu, sprites[2][jeu], 1})
					table.insert(tableau[2][3], {jeu, forme .. "♂ chromatique " .. jeu, sprites[2][jeu], 1})
					table.insert(tableau[3][3], {jeu, forme .. "♀ " .. jeu, sprites[2][jeu], 1})
					table.insert(tableau[4][3], {jeu, forme .. "♀ chromatique " .. jeu, sprites[2][jeu], 1})
				elseif frame.args['diff-miniatures-sexe'] or frame.args['diff-sprites-dos-sexe'] then
					table.insert(tableau[1][3], {jeu, forme .. jeu, sprites[2][jeu], 1})
					table.insert(tableau[2][3], {jeu, forme .. "chromatique " .. jeu, sprites[2][jeu], 1})
					table.insert(tableau[3][3], {jeu, forme .. jeu, sprites[2][jeu], 1})
					table.insert(tableau[4][3], {jeu, forme .. "chromatique " .. jeu, sprites[2][jeu], 1})
				else
					table.insert(tableau[1][3], {jeu, forme .. jeu, sprites[2][jeu], 2})
					table.insert(tableau[3][3], {jeu, forme .. "chromatique " .. jeu, sprites[2][jeu], 2})
				end
			end
			if sprites[3][jeu] then
				if frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-dos-sexe'] then
					table.insert(tableau[1][4], {jeu, forme .. "♂ dos " .. jeu, sprites[3][jeu], 1})
					table.insert(tableau[2][4], {jeu, forme .. "♂ chromatique dos " .. jeu, sprites[3][jeu], 1})
					table.insert(tableau[3][4], {jeu, forme .. "♀ dos " .. jeu, sprites[3][jeu], 1})
					table.insert(tableau[4][4], {jeu, forme .. "♀ chromatique dos " .. jeu, sprites[3][jeu], 1})
				elseif frame.args['diff-miniatures-sexe'] or frame.args['diff-sprites-face-sexe'] then
					table.insert(tableau[1][4], {jeu, forme .. "dos " .. jeu, sprites[3][jeu], 1})
					table.insert(tableau[2][4], {jeu, forme .. "chromatique dos " .. jeu, sprites[3][jeu], 1})
					table.insert(tableau[3][4], {jeu, forme .. "dos " .. jeu, sprites[3][jeu], 1})
					table.insert(tableau[4][4], {jeu, forme .. "chromatique dos " .. jeu, sprites[3][jeu], 1})
				else
					table.insert(tableau[1][4], {jeu, forme .. "dos " .. jeu, sprites[3][jeu], 2})
					table.insert(tableau[3][4], {jeu, forme .. "chromatique dos " .. jeu, sprites[3][jeu], 2})
				end
			end
		end
	else
		tableau = { { "", {}, {}, {} }, { symbole_chromatique .. "<br />[[Pokémon chromatique|Chromatique]]", {}, {}, {} } }
		for _, jeu in ipairs(jeux) do
			if sprites[1][jeu] then
				table.insert(tableau[1][2], {jeu, forme .. jeu, sprites[1][jeu], 1})
				table.insert(tableau[2][2], {jeu, forme .. "chromatique " .. jeu, sprites[1][jeu], 1})
			end
			if sprites[2][jeu] then
				table.insert(tableau[1][3], {jeu, forme .. jeu, sprites[2][jeu], 1})
				table.insert(tableau[2][3], {jeu, forme .. "chromatique " .. jeu, sprites[2][jeu], 1})
			end
			if sprites[3][jeu] then
				table.insert(tableau[1][4], {jeu, forme .. "dos " .. jeu, sprites[3][jeu], 1})
				table.insert(tableau[2][4], {jeu, forme .. "chromatique dos " .. jeu, sprites[3][jeu], 1})
			end
		end
	end
	
	-- EN-TÊTE DU TABLEAU et ARTWORK
	local colonnesMiniatures, colonnesFace, colonnesDos
	-- if ressources.tailleTableau(sprites[1]) == 1 then colonnesFace = false else colonnesFace = true end
	-- if ressources.tailleTableau(sprites[2]) == 1 then colonnesDos = false else colonnesDos = true end
	local colonnesMiniatures = true
	local colonnesFace = true
	local colonnesDos = true
	local colonnesCompagnon = false
	
	local colspanMiniatures = 0
	local colspanFace = 0
	local colspanDos = 0
	local colspanCompagnon = 0
	for _, jeuSprite in ipairs(jeux) do
		if sprites[1][jeuSprite] then
			for _2, jeu in ipairs(sprites[1][jeuSprite]) do
				colspanMiniatures = colspanMiniatures + 1
			end
		end
		if sprites[2][jeuSprite] then
			for _2, jeu in ipairs(sprites[2][jeuSprite]) do
				colspanFace = colspanFace + 1
			end
		end
		if sprites[3][jeuSprite] then
			for _2, jeu in ipairs(sprites[3][jeuSprite]) do
				colspanDos = colspanDos + 1
			end
		end
		if generation == 4 and frame.args["absence-compagnon"] ~= 'oui'
		then colspanCompagnon = 1
			colonnesCompagnon = true
		end
	end
	
	local resultat = {'<div class="center"><table class="tableaustandard centre tableau-overflow liensrougesreduits">'}
	local colspanMax = 1 + colspanMiniatures + colspanFace + colspanDos + colspanCompagnon
	
	if (frame.args['artwork'] and affichageArtwork ~= 'non') or affichageArtwork == 'général' then
		table.insert(resultat, '<tr><th class="transition" colspan="' .. colspanMax .. '">Artwork officiel</th></tr><tr><td colspan="' .. colspanMax .. '">[[Fichier:' .. mw.text.split(frame:getParent():getTitle(),"/",true)[1])
		if frame.args['artwork-précisions'] then table.insert(resultat, ' (' .. frame.args['artwork-précisions'] .. ')') end
		if affichageArtwork == 'précisé' then table.insert(resultat, '-' .. frame.args['artwork']) end
		table.insert(resultat, '.png|175px]]</td></tr>')
	end
	table.insert(resultat, '<tr>')
	if colspanMiniatures ~= 0 then
		table.insert(resultat, '<th class="transition" colspan="' .. colspanMax .. '">Miniatures et sprites de la [[' .. nom_gen .. ' génération]]</th>')
	else
		table.insert(resultat, '<th class="transition" colspan="' .. colspanMax .. '">Sprites de la [[' .. nom_gen .. ' génération]]</th>')
	end
	table.insert(resultat, '</tr>')
	
	
	table.insert(resultat, '<tr>')
	if generation ~= 1
	then table.insert(resultat, '<th')
		if colonnesMiniatures or colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"') end
		table.insert(resultat, '></th>')
	end
	
	if colspanMiniatures > 0 then
		table.insert(resultat, '<th')
		if colonnesMiniatures then table.insert(resultat, ' colspan="' .. colspanMiniatures .. '"')
		elseif colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"')
		end
		table.insert(resultat, '>Miniatures</th>')
	end
	
	if colspanFace > 0 then
		table.insert(resultat, '<th')
		if colonnesFace then table.insert(resultat, ' colspan="' .. colspanFace .. '"')
		elseif colonnesMiniatures or colonnesDos then table.insert(resultat, ' rowspan="2"')
		end
		table.insert(resultat, '>Sprites de face</th>')
	end
	
	if colspanDos > 0 then
		table.insert(resultat, '<th')
		if colonnesDos then table.insert(resultat, ' colspan="' .. colspanDos .. '"')
		elseif colonnesMiniatures or colonnesFace then table.insert(resultat, ' rowspan="2"')
		end
		table.insert(resultat, '>Sprites de dos</th>')
	end
	
	if colspanCompagnon > 0 then
		table.insert(resultat, '<th>Compagnon</th>')
	end
	table.insert(resultat, '</tr>')
	
	if colonnesMiniature or colonnesFace or colonnesDos then
		table.insert(resultat, '<tr>')
		if colonnesFace then
			for _, jeuSprite in ipairs(jeux) do
				if sprites[1][jeuSprite] then
					for _2, jeu in ipairs(sprites[1][jeuSprite]) do
						table.insert(resultat, '<td class="' .. frame:expandTemplate{ title = 'Bordure', args = { jeu } } .. '">' .. frame:expandTemplate{ title = 'Abréviation', args = { jeu, '' } } .. '</th>')
					end
				end
			end
		end
		if colonnesFace then
			for _, jeuSprite in ipairs(jeux) do
				if sprites[2][jeuSprite] then
					for _2, jeu in ipairs(sprites[2][jeuSprite]) do
						table.insert(resultat, '<td class="' .. frame:expandTemplate{ title = 'Bordure', args = { jeu } } .. '">' .. frame:expandTemplate{ title = 'Abréviation', args = { jeu, '' } } .. '</th>')
					end
				end
			end
		end
		if colonnesDos then
			for _, jeuSprite in ipairs(jeux) do
				if sprites[3][jeuSprite] then
					for _2, jeu in ipairs(sprites[3][jeuSprite]) do
						table.insert(resultat, '<td class="' .. frame:expandTemplate{ title = 'Bordure', args = { jeu } } .. '">' .. frame:expandTemplate{ title = 'Abréviation', args = { jeu, '' } } .. '</th>')
					end
				end
			end
		end
		if colonnesCompagnon then table.insert(resultat, '<td class="' .. frame:expandTemplate{ title = 'Bordure', args = { 'HGSS' } } .. '">' .. frame:expandTemplate{ title = 'Abréviation', args = { 'HGSS', '' } } .. '</th>') end
		
		table.insert(resultat, '</tr>')
	end
	
	-- CORPS DU TABLEAU
	local i = 1
	while tableau[i] do
		if generation ~= 1 then table.insert(resultat, '<tr><th>' .. tableau[i][1] .. '</th>') end
		if frame.args['shinylock'] and generation == generationMax and i % 2 == 0 then
			table.insert(resultat, '<td colspan="' .. colspanMax - 1 .. '">\'\'Indisponible car ce Pokémon est [[Shiny Lock]]\'\'</td>')
		else
			if frame.args['absence-miniature'] == 'non' then
				for _, sprite in ipairs(tableau[i][2]) do
					if frame.args['shinylock-' .. string.lower(sprite[1])] and generation == generationMax and i % 2 == 0 then
						table.insert(resultat, '<td>\'\'Indisponible car ce<br>Pokémon est [[Shiny Lock]]\'\'</td>')
					else
						if frame.args['miniature-chromatique-' .. string.lower(sprite[1])] == "oui" or i % 2 == 1 then
							local rowspanMult = 1
							local skip = false
							
							if (frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] or frame.args['diff-sprites-dos-sexe'])
								and (frame.args['diff-miniatures-sexe'] ~= 'oui' and frame.args['diff-miniatures-sexe-' .. string.lower(sprite[1])] ~= 'oui')
								and frame.args['miniature-chromatique-' .. string.lower(sprite[1])] ~= "oui"
							then if i == 1
								then rowspanMult = 2
								else skip = true -- on n'affiche pas de case si la miniature femelle est identique à la miniature mâle et qu'il n'y a pas de miniature spécifique pour les chromatiques
								end
							end
							
							if not skip
							then
								table.insert(resultat, '<td')
								
								if colonnesMiniatures then table.insert(resultat, ' colspan="' .. #sprite[3] .. '"') end
								
								if frame.args['miniature-chromatique-' .. string.lower(sprite[1])] ~= "oui" and not (generation == generationMax and (frame.args['shinylock'] or frame.args['shinylock-' .. string.lower(sprite[1])]))
								then rowspanMult = rowspanMult * 2
								else rowspanMult = 1
								end
								table.insert(resultat, ' rowspan="' .. rowspanMult * sprite[4] .. '" style="min-width:50px')
								
								if (frame.args['shinylock'] or frame.args['shinylock-' .. string.lower(sprite[1])]) and i % 2 == 0
								then table.insert(resultat, '; border: 2px solid #995124; background: #E2DAD5')
									hasPermittedShinyLock = true
								end
									
								table.insert(resultat, '">[[Fichier:Miniature ' .. num .. ' ' .. sprite[2] .. version .. '.')
								
								local miniatExtension = "png"
								if generation >= 2 and generation <= 5 then miniatExtension = "gif" end
								table.insert(resultat, miniatExtension)
								
								table.insert(resultat, '|class=miniature_' .. sprite[1] .. ']]</td>')
							end
						end
					end
				end
			end
			for _, sprite in ipairs(tableau[i][3]) do
				if frame.args['shinylock-' .. string.lower(sprite[1])] and generation == generationMax and i % 2 == 0 then
					table.insert(resultat, '<td>\'\'Indisponible car ce<br>Pokémon est [[Shiny Lock]]\'\'</td>')
				else
					table.insert(resultat, '<td')
					
					if colonnesFace then table.insert(resultat, ' colspan="' .. #sprite[3] .. '"') end
					table.insert(resultat, ' rowspan="' .. sprite[4] .. '" style="min-width:50px')
					
					if (frame.args['shinylock'] or frame.args['shinylock-' .. string.lower(sprite[1])]) and i % 2 == 0
					then table.insert(resultat, '; border: 2px solid #995124; background: #E2DAD5')
						hasPermittedShinyLock = true
					end
					
					table.insert(resultat, '">[[Fichier:Sprite ' .. num .. ' ' .. sprite[2] .. version .. '.')
					if sprite[1] == "C" or sprite[1] == "E" then table.insert(resultat, 'gif') else table.insert(resultat, 'png') end
					table.insert(resultat, '|class=maxheight100px]]</td>')
				end
			end
			for _, sprite in ipairs(tableau[i][4]) do
				if frame.args['shinylock-' .. string.lower(sprite[1])] and generation == generationMax and i % 2 == 0 then
					table.insert(resultat, '<td>\'\'Indisponible car ce<br>Pokémon est [[Shiny Lock]]\'\'</td>')
				else
					table.insert(resultat, '<td')
					
					if colonnesDos then table.insert(resultat, ' colspan="' .. #sprite[3] .. '"') end
					table.insert(resultat, ' rowspan="' .. sprite[4] .. '" style="min-width:50px')
					
					if (frame.args['shinylock'] or frame.args['shinylock-' .. string.lower(sprite[1])]) and i % 2 == 0
					then table.insert(resultat, '; border: 2px solid #995124; background: #E2DAD5')
						hasPermittedShinyLock = true
					end
					
					table.insert(resultat, '">[[Fichier:Sprite ' .. num .. ' ' .. sprite[2] .. version .. '.png|class=maxheight100px')
					if generation == 1 then table.insert(resultat, ' upscale_64px') end
					table.insert(resultat, ']]</td>')
				end
			end
			
			-- Compagnons HGSS
			if colspanCompagnon > 0 then
				if i % 2 == 1 then table.insert(resultat, '<td>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'ouest HGSS' .. version .. '.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'est HGSS' .. version .. '.gif]]<br>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'sud HGSS' .. version .. '.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'nord HGSS' .. version .. '.gif]]</td>')
				else table.insert(resultat, '<td')
					
					if frame.args['shinylock']
					then table.insert(resultat, ' style="border: 2px solid #995124; background: #E2DAD5')
						hasPermittedShinyLock = true
					end
					table.insert(resultat, '>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique ouest HGSS' .. version .. '.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique est HGSS' .. version .. '.gif]]<br>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique sud HGSS' .. version .. '.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique nord HGSS' .. version .. '.gif]]</td>')
				end
			end
		end
		table.insert(resultat, '</tr>')
		i = i + 1
	end
	
	-- Animations d'attaque 6G
	if generation == 6 then
		if frame.args['animations-attaque'] then
			table.insert(resultat, '<tr><th class="transition" colspan="' .. colspanMax .. '">Animations d\'attaque</td></tr>')
			if frame.args['diff-animations-attaque-sexe']
			then
				sexe = "♂ "
				table.insert(resultat, '<tr><th>[[Fichier:Miniature Mâle HOME.png|20px|Mâle|link=Sexe des Pokémon]]<br>[[Sexe des Pokémon|Mâle]]</th><td colspan="' .. colspanMax - 1 .. '">')
			else sexe = ""
				table.insert(resultat, '<tr><td colspan="' .. colspanMax .. '">')
			end
			for i = 1, frame.args['animations-attaque'] do
				table.insert(resultat, '[[Fichier:Sprite ' .. num .. ' ' .. forme .. sexe .. i .. ' XY' .. version .. '.png]]')
			end
			if frame.args['diff-animations-attaque-sexe'] then
				sexe = "♀ "
				table.insert(resultat, '</tr><tr><th>[[Fichier:Miniature Femelle HOME.png|20px|Femelle|link=Sexe des Pokémon]]<br>[[Sexe des Pokémon|Femelle]]</th><td colspan="' .. colspanMax - 1 .. '">')
				for i = 1, frame.args['animations-attaque'] do
					table.insert(resultat, '[[Fichier:Sprite ' .. num .. ' ' .. forme .. sexe .. i .. ' XY' .. version .. '.png]]')
				end
			end
			table.insert(resultat, '</td></tr>')
		end
	end
	
	-- Images du Pokédex 9G
	local pokedex = frame.args['pokédex']
	if generation == 9 and pokedex ~= "non" and frame.args['absence-ev'] ~= "oui" then
		local forme_split = mw.text.split(forme, " ")
		local forme_pokedex = ""
		if forme_split[1] == "Alola" or forme_split[1] == "Galar" or forme_split[1] == "Hisui" or forme_split[1] == "Paldea" then forme_pokedex = " " .. forme_split[1] end

		table.insert(resultat, '<tr><th class="transition" colspan="' .. colspanMax .. '">Illustration du Pokédex</td></tr>')
		
		if pokedex == nil then pokedex = 'EV' end
		local pokedex_split = mw.text.split(pokedex, '/')
		for _,jeu in ipairs(pokedex_split) do
			table.insert(resultat, '<tr><td colspan="' .. colspanMax .. '>[[Fichier:Pokédex ' .. num .. forme_pokedex .. ' ' .. jeu .. version .. '.png|x200px]]')
			if #pokedex_split > 1 then table.insert(resultat, '<br />' .. frame:expandTemplate{ title = 'Jeu', args = { jeu }}) end
			table.insert(resultat, '</td></tr>')
		end
	end
	
	table.insert(resultat, '</table>')
	if hasPermittedShinyLock
		then table.insert(resultat, '<div style="transform: translateY(calc(-1em - 4px))"><small><i>Les images sur fond foncé ne sont pas visibles en jeu sans outil de triche. [[Aide:Data mining|En savoir plus...]]</i></small></div>')
	elseif frame.args['phrase-datamine'] == 'oui'
		then table.insert(resultat, '<div style="transform: translateY(calc(-1em - 4px))"><small><i>Les images de ce tableau ne sont pas visibles en jeu sans outil de triche. [[Aide:Data mining|En savoir plus...]]</i></small></div>')
	end
	table.insert(resultat, '</div>')
	
	return table.concat(resultat, '')
end

return p