Aller au contenu

Module:ImagerieTest

De Poképédia

Ce module est une version test du Module:Imagerie.


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'
	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
	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
	
	-- 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
		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 generation == 4 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
								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] .. '.')
								
								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] .. '.')
					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] .. '.png|class=maxheight100px]]</td>')
				end
			end
			
			-- Compagnons HGSS
			if generation == 4 then
				if i % 2 == 1 then table.insert(resultat, '<td>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'ouest HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'est HGSS.gif]]<br>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'sud HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'nord HGSS.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.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique est HGSS.gif]]<br>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique sud HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique nord HGSS.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.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.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 .. '.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