Module:ImagerieTest
Apparence
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
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 = 8 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 jeux = {}
-- tableau de deux éléments
-- le premier liste les groupes de jeux ayant un sprite de face commun,
-- le second 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 = {"RB"}, J = {"J"} }, { RV = {"RV", "RB", "J"} } }
elseif generation == 2 then
nom_gen = 'deuxième'
symbole_chromatique = '[[Fichier:Miniat shiny oac.png]]'
jeux = {"OA", "O", "A", "C"}
sprites = { { O = {"O"}, A = {"A"}, C = {"C"} }, { OA = {"O", "A", "C"} } }
elseif generation == 3 then
nom_gen = 'troisième'
symbole_chromatique = '[[Fichier:Miniat shiny rfvf.png]]'
jeux = {"RS", "RFVF", "E"}
sprites = { { RS = {"RS", "RFVF"}, E = {"E"} }, { RS = {"RS", "RFVF", "E"} } }
elseif generation == 4 then
nom_gen = 'quatrième'
symbole_chromatique = '[[Fichier:Miniat shiny dpphgss.png]]'
jeux = {"DP", "Pt", "HGSS"}
sprites = { { DP = {"DP", "Pt"}, HGSS = {"HGSS"} }, { DP = {"DP", "Pt", "HGSS"} } }
elseif generation == 5 then
nom_gen = 'cinquième'
symbole_chromatique = '[[Fichier:Miniat shiny nbn2b2.png]]'
jeux = {"NB", "NB2"}
sprites = { { NB = {"NB", "NB2"} }, { NB = {"NB", "NB2"} } }
elseif generation == 6 then
nom_gen = 'sixième'
symbole_chromatique = '[[Fichier:Miniat shiny xy.png]]'
jeux = {"XY", "ROSA"}
sprites = { { XY = {"XY", "ROSA"} }, { XY = {"XY", "ROSA"} } }
elseif generation == 7 then
nom_gen = 'septième'
symbole_chromatique = '[[Fichier:Miniat shiny slusul.png]]'
jeux = {"SL", "USUL", "LGPE"}
sprites = { { SL = {"SL", "USUL"}, LGPE = {"LGPE"} }, { SL = {"SL", "USUL"}, LGPE = {"LGPE"} } }
elseif generation == 8 then
nom_gen = 'huitième'
jeux = {"EB", "HOME"}
sprites = { { EB = {"EB"}, HOME = {"HOME"} }, { EB = {"EB"}, 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-dos-home'] then frame.args['absence-dos-home'] = 'oui' end
if not frame.args['absence-miniature'] then frame.args['absence-miniature'] = 'non' 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 = { 'face', 'dos' }
for numParam, paramSprites in ipairs(paramsSprites) do
-- 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['sprite-' .. paramSprites .. '-' .. string.lower(jeu)] then
local param = frame.args['sprite-' .. 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['absence-' .. paramSprites .. '-' .. string.lower(jeu)] and frame.args['absence-' .. paramSprites .. '-' .. 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
-- CREATION VIRTUELLE DU TABLEAU ET PARAMETRES DE CONFIGURATION SPECIFIQUES
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, "dos " .. jeu, sprites[2][jeu], 1})
end
end
elseif generation >= 4 and (frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] or frame.args['diff-sprites-dos-sexe']) then
tableau = {
{ "[[Fichier:Symbole femelle.png|10px]]<br />[[Sexe des Pokémon|Femelle]]", {}, {} },
{ "[[Fichier:Symbole mâle.png|10px]]<br />[[Sexe des Pokémon|Mâle]]", {}, {} },
{ "[[Fichier:Symbole femelle.png|10px]] " .. symbole_chromatique .. "<br />[[Sexe des Pokémon|Femelle]] [[Pokémon chromatique|chromatique]]", {}, {} },
{ "[[Fichier:Symbole mâle.png|10px]] " .. symbole_chromatique .. "<br />[[Sexe des Pokémon|Mâle]] [[Pokémon chromatique|chromatique]]", {}, {} }
}
for _, jeu in ipairs(jeux) do
if sprites[1][jeu] then
if frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] then
table.insert(tableau[1][2], {jeu, forme .. "♀ " .. jeu, sprites[1][jeu], 1})
table.insert(tableau[2][2], {jeu, forme .. "♂ " .. jeu, sprites[1][jeu], 1})
table.insert(tableau[3][2], {jeu, forme .. "♀ chromatique " .. 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-dos-sexe'] then
table.insert(tableau[1][3], {jeu, forme .. "♀ dos " .. jeu, sprites[2][jeu], 1})
table.insert(tableau[2][3], {jeu, forme .. "♂ dos " .. jeu, sprites[2][jeu], 1})
table.insert(tableau[3][3], {jeu, forme .. "♀ chromatique dos " .. jeu, sprites[2][jeu], 1})
table.insert(tableau[4][3], {jeu, forme .. "♂ chromatique dos " .. jeu, sprites[2][jeu], 1})
else
table.insert(tableau[1][3], {jeu, forme .. "dos " .. jeu, sprites[2][jeu], 2})
table.insert(tableau[3][3], {jeu, forme .. "chromatique dos " .. jeu, sprites[2][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 .. "dos " .. jeu, sprites[2][jeu], 1})
table.insert(tableau[2][3], {jeu, forme .. "chromatique dos " .. jeu, sprites[2][jeu], 1})
end
end
end
-- ENTETE DU TABLEAU et ARTWORK
local resultat = {'<table class="tableaustandard centre">'}
local colspanMax = 2 * #jeux + 3
if frame.args['artwork'] then
table.insert(resultat, '<tr><th colspan="' .. colspanMax .. '" style="background-color: #C0C0FF;">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 frame.args['artwork'] ~= "oui" then table.insert(resultat, '-' .. frame.args['artwork']) end
table.insert(resultat, '.png|175px]]</td></tr>')
end
table.insert(resultat, '<tr>')
if frame.args['absence-miniature'] == 'non' then
table.insert(resultat, '<th colspan="' .. colspanMax .. '" style="background-color: #C0C0FF;">Miniatures et sprites de la [[' .. nom_gen .. ' génération]]</th>')
else
table.insert(resultat, '<th colspan="' .. colspanMax .. '" style="background-color: #C0C0FF;">Sprites de la [[' .. nom_gen .. ' génération]]</th>')
end
table.insert(resultat, '</tr>')
local 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
colonnesFace = true
colonnesDos = true
if generation ~= 1 then
table.insert(resultat, '<th')
if colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"') end
table.insert(resultat, '></th>')
end
if frame.args['absence-miniature'] == 'non' then
table.insert(resultat, '<th')
if colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"') end
table.insert(resultat, '>Miniature</th>')
end
local colspanFace = 0
local colspanDos = 0
for _, jeuSprite in ipairs(jeux) do
if sprites[1][jeuSprite] then
for _2, jeu in ipairs(sprites[1][jeuSprite]) do
colspanFace = colspanFace + 1
end
end
if sprites[2][jeuSprite] then
for _2, jeu in ipairs(sprites[2][jeuSprite]) do
colspanDos = colspanDos + 1
end
end
end
if colspanFace > 0 then
table.insert(resultat, '<th')
if colonnesFace then table.insert(resultat, ' colspan="' .. colspanFace .. '"')
elseif 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 colonnesFace then table.insert(resultat, ' rowspan="2"')
end
table.insert(resultat, '>Sprites de dos</th>')
end
if generation == 4 then
table.insert(resultat, '<th')
if colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"') end
table.insert(resultat, '>Compagnon' .. frame:expandTemplate{ title = 'Sup', args = { 'HGSS' }} .. '</th>')
end
table.insert(resultat, '</tr>')
if 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, '<th>' .. frame:expandTemplate{ title = 'Jeu', args = { jeu } } .. '</th>')
end
end
end
end
if colonnesDos then
for _, jeuSprite in ipairs(jeux) do
if sprites[2][jeuSprite] then
for _2, jeu in ipairs(sprites[2][jeuSprite]) do
table.insert(resultat, '<th>' .. frame:expandTemplate{ title = 'Jeu', args = { jeu } } .. '</th>')
end
end
end
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
local miniatExtension = "png"
if generation >= 2 and generation <= 5 then miniatExtension = "gif" end
if i == 1 and frame.args['absence-miniature'] == 'non' then
table.insert(resultat, '<td rowspan="')
if frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] or frame.args['diff-sprites-dos-sexe'] then table.insert(resultat, 4) else table.insert(resultat, 2) end
table.insert(resultat, '">[[Fichier:Miniature ' .. num .. ' ' .. forme)
if frame.args['diff-miniatures-sexe'] then table.insert(resultat, '♀ ') end
table.insert(resultat, jeux[1] .. '.' .. miniatExtension .. ']]')
if frame.args['diff-miniatures-sexe'] then
table.insert(resultat, ' (femelle)<br>[[Fichier:Miniature ' .. num .. ' ' .. forme .. '♂ ' .. jeux[1] .. '.' .. miniatExtension .. ']] (mâle)')
elseif frame.args['miniature2'] then
for _, jeu in ipairs(jeux) do
if string.lower(jeu) == string.lower(frame.args['miniature2']) then table.insert(resultat, ' [[Fichier:Miniature ' .. num .. ' ' .. forme .. jeu .. '.' .. miniatExtension .. ']]') end
if jeu ~= "OA" then table.insert(resultat, frame:expandTemplate{ title = 'Sup', args = { jeu }}) end
end
end
table.insert(resultat, '</td>')
end
if frame.args['shinylock'] and i > #tableau / 2 then
if i == #tableau / 2 + 1 then
table.insert(resultat, '<td colspan="' .. colspanMax .. '" rowspan="' .. #tableau / 2 .. '">\'\'Indisponible car ce Pokémon est [[Shiny Lock]]\'\'</td>')
end
else
for _, sprite in ipairs(tableau[i][2]) do
if i > #tableau / 2 and frame.args['shinylock-' .. string.lower(sprite[1])] then
if i == #tableau / 2 + 1 then
table.insert(resultat, '<td rowspan="' .. #tableau / 2 .. '">\'\'Indisponible car ce Pokémon est [[Shiny Lock]]\'\'</td>')
end
else
table.insert(resultat, '<td')
if colonnesFace then table.insert(resultat, ' colspan="' .. #sprite[3] .. '"') end
table.insert(resultat, ' rowspan="' .. sprite[4] .. '">[[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][3]) do
if i > #tableau / 2 and frame.args['shinylock-' .. string.lower(sprite[1])] then
if i == #tableau / 2 + 1 then
table.insert(resultat, '<td rowspan="' .. #tableau / 2 .. '">\'\'Indisponible car ce Pokémon est [[Shiny Lock]]\'\'</td>')
end
else
table.insert(resultat, '<td')
if colonnesDos then table.insert(resultat, ' colspan="' .. #sprite[3] .. '"') end
table.insert(resultat, ' rowspan="' .. sprite[4] .. '">[[Fichier:Sprite ' .. num .. ' ' .. sprite[2] .. '.png|class=maxheight100px]]</td>') end
end
-- Compagnons HGSS
if generation == 4 then
if i == 1 then table.insert(resultat, '<td rowspan="' .. #tableau / 2 .. '">[[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>')
elseif i == #tableau / 2 + 1 then table.insert(resultat, '<td rowspan="' .. #tableau / 2 .. '">[[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 colspan="' .. colspanMax .. '>Animations d\'attaque</td></tr><tr><td colspan="' .. colspanMax .. '>')
for i = 1, frame.args['animations-attaque'] do
table.insert(resultat, '[[Fichier:Sprite ' .. num .. ' ' .. i .. ' XY.png]]')
end
table.insert(resultat, '</td></tr>')
end
end
table.insert(resultat, '</table>')
return table.concat(resultat, '')
end
return p