Fandom

Megami Tensei Wiki

Module:Skills

4,400pages on
this wiki
Add New Page
Talk0
local getArgs = require('Module:Arguments').getArgs
local getGames = require('Module:Gamedata')
 
local p = {}
 
local function makeInvokeFunction(funcName)
	-- makes a function that can be returned from #invoke, using
	-- [[Module:Arguments]].
	return function (frame)
		local args = getArgs(frame, {parentOnly = true})
		return p[funcName](args)
	end
end
 
local styles = {
	['skill'] = '\n|-\n!style="background:#000;color:#fff"|',
	['skillc'] = '\n!style="background:#000;color:#fff;"|',
	['cost1'] = '\n|style="background:#222"|',
	['cost2'] = '\n|style="background:#282828"|',
	['effect1'] = '\n|style="background:#222;text-align:left"|',
	['effect2'] = '\n|style="background:#282828;text-align:left"|',
	['effect1p'] = '\n|colspan=2 style="background:#222;text-align:left"|',
	['effect2p'] = '\n|colspan=2 style="background:#282828;text-align:left"|',
	['order'] = '\n|style="background:#000;text-align:left"|',
	['table2h'] = '\n{|width="100%" class="customtable ',
	['statlow'] = '\n|style="background:#000;color:#fff"|',
	}
 
local cate1 = '<span style="display:none"><includeonly>'
if mw.title.getCurrentTitle():inNamespace('') then 
		cate1 = cate1 .. '[[Category:'
	else cate1 = cate1
end
local cate2 = ']]</includeonly></span>'
local noskillcate = cate1 .. 'Articles with unrecognizable skill name for Module:Skills' .. cate2
local noskill1 = '\n|-\n!colspan=3 style="background:#300"|<strong style="color:red;font-size:150%">Invalid skill name of "'
local noskill2 = '". You may correct the skill name or modify [[module:Skills/'
local noskill3 = ']] if needed.</strong>' .. noskillcate
local noskill4 = '\n|-\n!colspan=4 style="background:#300"|<strong style="color:red;font-size:150%">No empty line or skill name is allowed. You should either remove the empty line or add some proper skill name.</strong>' .. noskillcate
 
p.row = makeInvokeFunction('_row')
 
function p._row(args)
	local row = args[1]
	local game = args[2]
	local code = args[3]
	if not code or code == '' then return '' end
	local level = args[4]
	if not level then level = '' end
	if level == 'innate' or level == 'default' or level == 'Default' then level = 'Innate' end
	local data = require('Module:Skills/' .. game)
	local skill = data.skills[code]
	if not skill then
		local alias = data.aliases[code]
		if alias then
			code = alias
			skill = data.skills[code]
		else 
			return noskill1 .. code .. noskill2 .. game .. noskill3
		end
	end
	if skill.name then code = skill.name end
	local skillcell = styles['skill'] .. code
	local cost = skill.cost
	if game == 'SMT3' then
		if cost == 'Convo' then
			cost = '<abbr title="Active conversational skill without HP or MP cost. Ineffective to Corpus, Haunt, Wilder, Foul, Light-tendency demons, bosses and all enemies in Labyrinth of Amala.">Convo</abbr>'
			elseif cost == 'Interrupt' then
			cost = '<abbr title="Interruption skill only activates when certain conversational effect triggers.">Interrupt</abbr>'
		end
	end
	local cost1 = '\n||' .. cost
	local cost2 = styles['cost2'] .. cost
	local effect1 = styles['effect1'] .. skill.effect
	local effect2 = styles['effect2'] .. skill.effect
	local order = styles['order'] .. skill.cost
	local element1, element2
	if skill.element then
		element1 = '\n||' .. skill.element or ''
		element2 = styles['cost2'] .. skill.element or ''
	end
	local level1, level2
	if skill.pre then
		level1 = '\n||' .. skill.pre
		level2 = styles['cost2'] .. skill.pre
	elseif level == '' then
		level1 = '\n||'
		level2 = styles['cost2']
	elseif level then
		level1 = '\n||' .. level
		level2 = styles['cost2'] .. level
	end
	local result
	if row == 'r01' then
		result = skillcell .. effect1 -- Odd number row for enemy whose skill cost is irrelevant.
		elseif row == 'r02' then
		result = skillcell .. effect2 -- Even number row for enemy whose skill cost is irrelevant.
		elseif row == 'r11' then
			if game == 'SMT3' and skill.phy then
				result = skillcell .. styles['effect1p'] .. skill.effect -- Odd number row for enemy whose physical skills cost no HP.
				else result = skillcell .. cost1 .. effect1 -- Odd number row for demon which does not learn new skill on level gain.
			end
		elseif row == 'r12' then
			if game == 'SMT3' and skill.phy then
				result = skillcell .. styles['effect2p'] .. skill.effect -- Even number row for enemy whose physical skills cost no HP.
				else result = skillcell .. cost2 .. effect2 -- Even number row for demon which does not learn new skill on level gain.
			end
		elseif row == 'r21' then
		result = skillcell .. cost1 .. effect1 .. level1 -- Odd number row for demon/persona which learn new skill on level gain.
		elseif row == 'r22' then
		result = skillcell .. cost2 .. effect2 .. level2 -- Even number row for demon/persona which learn new skill on level gain.
		elseif row == 'r31' then
		result = skillcell .. effect1 .. level1 -- Odd number row for guest who learn new skill on level gain.
		elseif row == 'r32' then
		result = skillcell .. effect2 .. level2 -- Even number row for guest who learn new skill on level gain.
		elseif row == 'p12' then
		result = styles['skill'] .. level .. styles['skillc'] .. code .. effect1 -- Row for Persona 1 and 2 persona 
		elseif row == 'rf' then
		result = skillcell .. effect1 .. order -- Row for Persona-specific fusion spell.
		elseif row == 'dk1' then
		result = skillcell .. element1 .. cost1 .. effect1 -- Odd number row for DemiKids stats skill list.
		elseif row == 'dk2' then
		result = skillcell .. element2 .. cost2 .. effect2 -- Odd number row for DemiKids stats skill list.
		elseif row == 'dkc1' then
		result = skillcell .. level1 .. element1 .. cost1 .. effect1 -- Odd number row for DemiKids stats combo skill list.
		elseif row == 'dkc2' then
		result = skillcell .. level2 .. element2 .. cost2 .. effect2 -- Odd number row for DemiKids stats combo skill list.
		elseif row == 'dkp' then
		result = skillcell .. element2 .. effect2 -- row for DemiKids powers.
		else
		result = '<strong style="color:red;font-size:150%">Invalid parameter 1 of ' .. '"' .. row .. '".</strong>' .. cate1 .. 'Templates with unrecognizable row value for Module:Skills' .. cate2
	end
	return result
end
 
p.SMTstats = makeInvokeFunction('_SMTstats')
 
function p._SMTstats(args)
	local boss = args.Boss
	local image = args.Image or ''
	local magdrop = args['Mag Drop'] or ''
	local race = args.Race or args.Clan or ''
	local alignment = args.Alignment or args.Align or ''
	local level = args.Level or ''
	local hp = args.HP or ''
	local mp = args.MP or ''
	local noa = args.NOA or args.NOH or ''
	local str = args.STR or args.st or ''
	local int = args.INT or args['in'] or ''
	local mgc = args.MGC or args.ma or ''
	local stm = args.STM or args.vi or ''
	local agl = args.AGL or args.ag or ''
	local lck = args.LCK or args.lu or ''
	local atk = args.Atk or ''
	local hit = args.Hit or ''
	local def = args.Def or ''
	local avd = args.Avd or args.Eva or ''
	local mpw = args.Mpw or ''
	local mef = args.Mef or ''
	local drop = args.Drop or ''
	local resist = args.Resist or args.Affinity
	local skills = args.Skills
	if image then image = styles['skill'] .. image elseif image == '' then image = '' end
	local magt
	if magdrop~='' or boss then magt = '| <abbr title="Magnetite Drop">MAG</abbr>' elseif magdrop == '' or not boss then magt = '<abbr title="Initial money cost for summoning to the battle team.">Cost</abbr>!!<abbr title="Cost Point (Mag Consumption per 10 Steps)">CP</abbr>' end
	if race == 'Seraph' then race = '[[Herald|Seraph]]' .. cate1 .. 'Herald Race' .. cate2
		elseif race == 'Ghost' then race = '[[Haunt|Ghost]]' .. cate1 .. 'Haunt Race' .. cate2
		elseif race == 'Gaean' or race == 'Gaian' then race = '[[Ring of Gaea|Gaean]]' .. cate1 .. 'Ring of Gaea' .. cate2
		elseif race == 'Messian' then race = '[[Order of Messiah|Messian]]'.. cate1 .. 'Order of Messiah' .. cate2
		else race = '[[' .. race .. ']]' .. cate1 .. race .. ' Race' .. cate2
	end
	if resist then resist = styles['table2h'] .. 'smt1"\n!width=100|Resistances\n|style="background:#000;text-align:left;padding:0 5px"|' .. resist .. '\n|}'
		else resist = ''
	end
	local los = ''
	for k, v in ipairs(mw.text.split(skills, '\n')) do
		local data = require('Module:Skills/SMT1')
		local skill = data.skills[v]
		if not skill then
			local alias = data.aliases[v]
			if alias then
				v = alias
				skill = data.skills[v]
			else skill = v
			end
		end
		local skillcell = styles['skill'] .. v
		local effect, cost
		if skill == '' then
			cost = ''
			effect = noskill4
			elseif skill.effect then
				cost = skill.cost
				effect = skill.effect
				if skill.name then v = skill.name end
			else
				cost = ''
				effect = noskill1 .. skill .. noskill2 .. 'SMT1' .. noskill3
		end
		if magdrop ~= '' or boss then
			if (k % 2 == 0) then
				los = los .. skillcell .. styles['effect2'] .. effect
			else
				los = los .. skillcell .. styles['effect1'] .. effect
			end
		else
			if (k % 2 == 0) then
				los = los .. skillcell .. styles['cost2'] .. cost .. styles['effect2'] .. effect
			else
				los = los .. skillcell .. '\n||' .. cost .. styles['effect1'] .. effect
			end
		end
	end
	local categoryd, categorya
	if magdrop~='' or boss then categoryd = cate1 .. 'Shin Megami Tensei Bosses' .. cate2 else categoryd = cate1 .. 'Shin Megami Tensei Demons' .. cate2 end
	if alignment == 'Law' or alignment == 'Light-Law' or alignment == 'Neutral-Law' or alignment == 'Dark-Law' then categorya = cate1 .. 'Law Demons in Shin Megami Tensei' .. cate2
		elseif alignment == 'Neutral' or alignment == 'Light-Neutral' or alignment == 'Neutral-Neutral' or alignment == 'Dark-Neutral' then categorya = cate1 .. 'Neutral Demons in Shin Megami Tensei' .. cate2
		elseif alignment == 'Chaos' or alignment == 'Light-Chaos' or alignment == 'Neutral-Chaos' or alignment == 'Dark-Chaos' then categorya = cate1 .. 'Chaos Demons in Shin Megami Tensei' .. cate2
		elseif not alignment or alignment == '' or  '-' then categorya = ''
	end
	local costt
	if magdrop == '' then
		costt = styles['skillc'] .. 'Cost'
		elseif magdrop~='' then costt = ''
	end
	if magdrop ~= '' or boss then 
		magdrop = tonumber(level) * 20
		else magdrop = tonumber(level) * 32  .. styles['statlow'] .. math.floor(tonumber(level) / 2) + 2
	end
	local skillt
	if skills ~= '' then
		skillt = '\n!colspan="3"|[[List of Shin Megami Tensei Skills|<span style="color:#fff">List of Skills</span>]]\n|-\n' .. styles['skillc'] .. 'Skill' .. costt .. styles['skillc'] .. 'Effect'
		else skillt = ''
	end
	local result
	result = '{|align="center" style="min-width:650px;text-align:center; background: #222222; border:2px solid ' .. getGames.games['smt1'].colorb .. ';border-radius:7px; font-size:75%; font-family:verdana;"\n|-\n|\n{|width=100% cellpadding=0 cellspacing=0\n' .. image .. '\n|' .. styles['table2h'] .. 'smt1"\n![[Race and species|<span style="color:white">Race</span>]]\n![[Alignment|<span style="color:white">Alignment</span>]]\n!Level\n!HP\n!MP\n!' .. magt .. '\n|-' .. styles['statlow'] .. race .. styles['statlow'] .. alignment .. styles['statlow'] .. level .. styles['statlow'] .. hp .. styles['statlow'] .. mp .. styles['statlow'] .. magdrop .. '\n|}' .. styles['table2h'] .. 'smt1"\n!<abbr title="Number of Hits">NOH</abbr>\n!Strength\n!Intelligence\n!Magic\n!Vitality\n!Agility\n!Luck\n|-' .. styles['statlow'] .. noa .. styles['statlow'] .. str .. styles['statlow'] .. int .. styles['statlow'] .. mgc .. styles['statlow'] .. stm .. styles['statlow'] .. agl .. styles['statlow'] .. lck .. '\n|}' .. styles['table2h'] .. 'smt1"\n!Attack\n!Hit\n!Defense\n!Evasion\n!<abbr title="Magic Power">MPower</abbr>\n!<abbr title="Magic Effect">MEffect</abbr>\n![[List of Shin Megami Tensei Items|<span style="color:#fff">Drop</span>]]\n|-' .. styles['statlow'] .. atk .. styles['statlow'] .. hit .. styles['statlow'] .. def .. styles['statlow'] .. avd .. styles['statlow'] .. mpw .. styles['statlow'] .. mef .. styles['statlow'] .. drop .. '\n|}\n|}' .. resist .. styles['table2h'] .. 'smt1"' .. skillt .. los .. '\n|}\n|}' .. categoryd .. categorya
	return result
 
end
 
p.P4stats = makeInvokeFunction('_P4stats')
 
function p._P4stats(args)
	local boss = args.Boss
	local hp = args.HP
	local sp = args.SP
	local level = args.Level or ''
	local arcana = args.Arcana or ''
	local strength = args.Strength or args.st or ''
	local magic = args.Magic or args.ma or ''
	local endurance = args.Endurance or args.en or ''
	local agility = args.Agility or args.ag or ''
	local luck = args.Luck or args.lu or ''
	local resist = args.Resist or args.Resists
	local block = args.Block or args.Null or args.Immune
	local absorb = args.Absorb or args.Absorbs or args.Drain
	local reflect = args.Reflect or args.Reflects or args.Repel
	local weak = args.Weak
	local phys = args.Phys
	local fire = args.Fire
	local ice = args.Ice
	local elec = args.Lit or args.Elec
	local wind = args.Wind
	local light = args.Light
	local dark = args.Dark
	local alm = args.Alm or args.Almighty
	local inherit = args.Inherit
	local yen = args.Yen
	local xp = args.EXP
	local p4g = args.P4G
	local skills = args.Skills
	local result = '{|align="center" style="min-width:650px;text-align:center; background: #222; border:2px solid ' .. getGames.games['p4'].colorb .. '; border-radius:7px; font-size:75%; font-family:verdana;"\n|-\n|' .. styles['table2h'] .. 'p4"\n!Level\n![[Arcana|<span style="color:black">Arcana</span>]]\n'
	if hp or mp then
		result = result .. '!HP\n!SP'
	end
	result = result .. '\n!title="Strength"|St\n!title="Magic"|Ma\n!title="Endurance"|En\n!title="Agility"|Ag\n!title="Luck"|Lu\n|-\n' .. styles['statlow'] .. level .. styles['statlow']
	if arcana == '' or arcana == '-' or arcana == 'Unclassified' or arcana == 'None'
		then result = result .. '-'
		else result = result .. '[[' .. arcana .. ' Arcana|' .. arcana .. ']]' .. cate1 .. arcana .. ' Arcana' .. cate2
	end
	if hp or sp then
		result = result .. styles['statlow'] .. hp .. styles['statlow'] .. sp
	end
	result = result .. styles['statlow'] .. strength .. styles['statlow'] .. magic .. styles['statlow'] .. endurance .. styles['statlow'] .. agility .. styles['statlow'] .. luck .. '\n|}' .. styles['table2h'] .. 'p4"'
	if phys or fire or ice or elec or wind or light or dark or alm or xp or yen then
		if not phys then phys = '' end
		if not fire then fire = '' end
		if not ice then ice = '' end
		if not elec then elec = '' end
		if not wind then wind = '' end
		if not light then light = '' end
		if not dark then dark = '' end
		if not alm then alm = '' end
		if not xp then xp = '' end
		if not yen then yen = '' end
		result = result .. '\n!Phys\n!Fire\n!Ice\n!title="Electricity"|Elec\n!Wind\n!Light\n!Dark\n!Almighty\n!EXP\n!Yen\n|-\n' .. styles['statlow'] .. phys .. styles['statlow'] .. fire .. styles['statlow'] .. ice .. styles['statlow'] .. elec .. styles['statlow'] .. wind .. styles['statlow'] .. light .. styles['statlow'] .. dark .. styles['statlow'] .. alm .. styles['statlow'] .. xp .. styles['statlow'] .. yen
		elseif inherit or resist or block or absorb or reflect or weak then
		if not inherit then inherit = '-' end
		if not resist then resist = '-' end
		if not block then block = '-' end
		if not absorb then absorb = '-' end
		if not reflect then reflect = '-' end
		if not weak then weak = '-' else weak = '<span style="color:#f22">' .. weak .. '</span>' end
		result = result .. '\n!Inherit\n!Resists\n!Block\n!Absorbs\n!Reflects\n!Weak\n|-\n' .. styles['statlow'] .. inherit .. styles['statlow'] .. resist .. styles['statlow'] .. block .. styles['statlow'] .. absorb .. styles['statlow'] .. reflect .. styles['statlow'] .. weak
		end
	result = result .. '\n|}'
	local data = require('Module:Skills/P4')
	if skills then
		if hp or sp or boss then
			result = result .. styles['table2h'] .. 'p4"\n!colspan="2"|[[List of Persona 4 Skills|<span style="color:black">List of Skills</span>]]' .. styles['skill'] .. 'Skill' .. styles['skillc'] .. 'Effect'
			for k, v in ipairs(mw.text.split(skills, '\n')) do
				local skill = data.skills[v]
				if not skill then
					local alias = data.aliases[v]
					if alias then
						v = alias
						skill = data.skills[v]
					else skill = v
					end
				end
				local skillcell = styles['skill'] .. v
				local effect
				if skill == nil then effect = noskill4
					elseif skill.effect then
						effect = skill.effect
						if skill.name then v = skill.name end
					else 
						effect = noskill1 .. skill .. noskill2 .. 'P4' .. noskill3
				end
				if (k % 2 == 0) then
					result = result .. skillcell .. styles['effect2'] .. effect
				else
					result = result .. skillcell .. styles['effect1'] .. effect
				end
			end
		else
			result = result .. styles['table2h'] .. 'p4"\n!colspan="4"|[[List of Persona 4 Skills|<span style="color:black">List of Skills</span>]]' .. styles['skill'] .. 'Skill' .. styles['skillc'] .. 'Cost' .. styles['skillc'] .. 'Effect' .. styles['skillc'] .. 'Level'
			for k1, v1 in ipairs(mw.text.split(skills, '\n')) do -- Any entry on new line within "Skills" parameter is treated as new skill name.
				for k2, v2 in ipairs(mw.text.split(v1 .. '\\', '\\')) do -- Entry after backslash after skill name is treated as "level" for learning new skill per level gain. Any entry starting from second backslash on the same line is ignored until a new line.
					if k2 > 2 then break
						elseif (k2 % 2 == 0) then -- this checks even (true) or odd (false) number row.
							if v2 == 'innate' or v2 == 'default' or v2 == 'Default'
								then v2 = 'Innate'
							end
							if (k1 % 2 == 0) then
 
								result = result .. styles['cost2'] .. v2 -- "v2" represents "Level" within "Skills" parameter on each new line after the backslash.
							else result = result .. styles['cost1'] .. v2
							end
						else
						local skill = data.skills[v2] -- now v2 represents skill name
						if not skill then
							local alias = data.aliases[v2]
							if alias then
								v2 = alias
								skill = data.skills[v2]
							else skill = v2
							end
						end
						local skillcell = styles['skill'] .. v2
						if skill == nil then
							cost = ''
							effect = noskill4
						elseif skill.effect then
							cost = skill.cost
							effect = skill.effect
							if skill.name then v2 = skill.name end
						else
							cost = ''
							effect = noskill1 .. skill .. noskill2 .. 'P4' .. noskill3
						end
						if (k1 % 2 == 0) then
							result = result .. skillcell .. styles['cost2'] .. cost .. styles['effect2'] .. effect
						else
							result = result .. skillcell .. styles['cost1'] .. cost .. styles['effect1'] .. effect
						end
					end
				end
			end
		end
		result = result .. '\n|}'
	end
	result = result .. '\n|}'
	if inherit or resist or block or absorb or reflect or weak then
		result = result .. cate1 .. 'Persona 4 Personas' .. cate2 .. cate1 .. 'Persona 4 Golden Personas' .. cate2
		elseif p4g then result = result .. cate1 .. 'Persona 4 Golden Personas' .. cate2
	end
	if boss then result = result .. cate1 .. 'Persona 4 Bosses' .. cate2 end
	if phys or fire or ice or elec or wind or light or dark or alm or xp or yen then result = result .. cate1 .. 'Persona 4 Shadows' .. cate2 end
	return result
end
 
p.P5stats = makeInvokeFunction('_P5stats')
 
function p._P5stats(args)
	local persona = args.Persona
	local demon = args.Demon
	local boss = args.Boss
	local hp = args.HP
	local sp = args.SP
	local level = args.Level or ''
	local arcana = args.Arcana or ''
	local strength = args.Strength or args.st or ''
	local magic = args.Magic or args.ma or ''
	local endurance = args.Endurance or args.en or ''
	local agility = args.Agility or args.ag or ''
	local luck = args.Luck or args.lu or ''
	local resist = args.Resist or args.Resists
	local block = args.Block or args.Null or args.Immune
	local absorb = args.Absorb or args.Absorbs or args.Drain
	local reflect = args.Reflect or args.Reflects or args.Repel
	local weak = args.Weak
	local phys = args.Phys
	local fire = args.Fire
	local ice = args.Ice
	local elec = args.Lit or args.Elec
	local wind = args.Wind
	local light = args.Light
	local dark = args.Dark
	local alm = args.Alm or args.Almighty
	local inherit = args.Inherit
	local yen = args.Yen
	local xp = args.EXP
	local skills = args.Skills
	local result = '{|align="center" style="min-width:650px;text-align:center; background: #222; border:2px solid ' .. getGames.games['p5'].colorb .. '; border-radius:7px; font-size:75%; font-family:verdana;"\n|-\n|' .. styles['table2h'] .. 'p5"\n!Level\n![[Arcana|<span style="color:black">Arcana</span>]]\n'
	if hp or mp then
		result = result .. '!HP\n!SP'
	end
	result = result .. '\n!title="Strength"|St\n!title="Magic"|Ma\n!title="Endurance"|En\n!title="Agility"|Ag\n!title="Luck"|Lu\n|-\n' .. styles['statlow'] .. level .. styles['statlow']
	if arcana == '' or arcana == '-' or arcana == 'Unclassified' or arcana == 'None'
		then result = result .. '-'
		else result = result .. '[[' .. arcana .. ' Arcana|' .. arcana .. ']]' .. cate1 .. arcana .. ' Arcana' .. cate2
	end
	if hp or sp then
		result = result .. styles['statlow'] .. hp .. styles['statlow'] .. sp
	end
	result = result .. styles['statlow'] .. strength .. styles['statlow'] .. magic .. styles['statlow'] .. endurance .. styles['statlow'] .. agility .. styles['statlow'] .. luck .. '\n|}' .. styles['table2h'] .. 'p5"'
	if phys or fire or ice or elec or wind or light or dark or alm or xp or yen then
		if not phys then phys = '' end
		if not fire then fire = '' end
		if not ice then ice = '' end
		if not elec then elec = '' end
		if not wind then wind = '' end
		if not light then light = '' end
		if not dark then dark = '' end
		if not alm then alm = '' end
		if not xp then xp = '' end
		if not yen then yen = '' end
		result = result .. '\n!Phys\n!Fire\n!Ice\n!title="Electricity"|Elec\n!Wind\n!Light\n!Dark\n!Almighty\n!EXP\n!Yen\n|-\n' .. styles['statlow'] .. phys .. styles['statlow'] .. fire .. styles['statlow'] .. ice .. styles['statlow'] .. elec .. styles['statlow'] .. wind .. styles['statlow'] .. light .. styles['statlow'] .. dark .. styles['statlow'] .. alm .. styles['statlow'] .. xp .. styles['statlow'] .. yen
		elseif inherit or resist or block or absorb or reflect or weak then
		if not inherit then inherit = '-' end
		if not resist then resist = '-' end
		if not block then block = '-' end
		if not absorb then absorb = '-' end
		if not reflect then reflect = '-' end
		if not weak then weak = '-' else weak = '<span style="color:#f22">' .. weak .. '</span>' end
		result = result .. '\n!Inherit\n!Resists\n!Block\n!Absorbs\n!Reflects\n!Weak\n|-\n' .. styles['statlow'] .. inherit .. styles['statlow'] .. resist .. styles['statlow'] .. block .. styles['statlow'] .. absorb .. styles['statlow'] .. reflect .. styles['statlow'] .. weak
		end
	result = result .. '\n|}'
	local data = require('Module:Skills/P5')
	if skills then
		result = result .. styles['table2h'] .. 'p5"\n!colspan="4" style="background: linear-gradient(120deg, ' .. getGames.games['p5'].colorb .. ' 42%, #000 42.1%, #000 43%, #fff 43.1%, #fff 57%, #000 57.1%, #000 58%, ' .. getGames.games['p5'].colorb .. ' 58.1%"|[[List of Persona 5 Skills|<span style="color:black;text-shadow:-3px 3px 3px #0ff">List of Skills</span>]]' .. styles['skill'] .. 'Skill'
		if hp or sp or boss or demon then
			result = result .. styles['skillc'] .. 'Effect'
			for k, v in ipairs(mw.text.split(skills, '\n')) do
				local skill = data.skills[v]
				if not skill then
					local alias = data.aliases[v]
					if alias then
						v = alias
						skill = data.skills[v]
					else skill = v
					end
				end
				local skillcell = styles['skill'] .. v
				local effect
				if skill == nil then effect = noskill4
					elseif skill.effect then
						effect = skill.effect
						if skill.name then v = skill.name end
					else 
						effect = noskill1 .. skill .. noskill2 .. 'P5' .. noskill3
				end
				if (k % 2 == 0) then
					result = result .. skillcell .. styles['effect2'] .. effect
				else
					result = result .. skillcell .. styles['effect1'] .. effect
				end
			end
		else
			result = result .. styles['skillc'] .. 'Cost' .. styles['skillc'] .. 'Effect' .. styles['skillc'] .. 'Level'
			for k1, v1 in ipairs(mw.text.split(skills, '\n')) do -- Any entry on new line within "Skills" parameter is treated as new skill name.
				for k2, v2 in ipairs(mw.text.split(v1 .. '\\', '\\')) do -- Entry after backslash after skill name is treated as "level" for learning new skill per level gain. Any entry starting from second backslash on the same line is ignored until a new line.
					if k2 > 2 then break
						elseif (k2 % 2 == 0) then -- this checks even (true) or odd (false) number row.
							if v2 == 'innate' or v2 == 'default' or v2 == 'Default'
								then v2 = 'Innate'
							end
							if (k1 % 2 == 0) then
 
								result = result .. styles['cost2'] .. v2 -- "v2" represents "Level" within "Skills" parameter on each new line after the backslash.
							else result = result .. styles['cost1'] .. v2
							end
						else
						local skill = data.skills[v2] -- now v2 represents skill name
						if not skill then
							local alias = data.aliases[v2]
							if alias then
								v2 = alias
								skill = data.skills[v2]
							else skill = v2
							end
						end
						local skillcell = styles['skill'] .. v2
						if skill == nil then
							cost = ''
							effect = noskill4
						elseif skill.effect then
							cost = skill.cost
							effect = skill.effect
							if skill.name then v2 = skill.name end
						else
							cost = ''
							effect = noskill1 .. skill .. noskill2 .. 'P5' .. noskill3
						end
						if (k1 % 2 == 0) then
							result = result .. skillcell .. styles['cost2'] .. cost .. styles['effect2'] .. effect
						else
							result = result .. skillcell .. styles['cost1'] .. cost .. styles['effect1'] .. effect
						end
					end
				end
			end
		end
		result = result .. '\n|}'
	end
	result = result .. '\n|}'
	if persona then	result = result .. cate1 .. 'Persona 5 Personas' .. cate2 end
	if demon then result = result .. cate1 .. 'Persona 5 Demons' .. cate2 end
	if boss then result = result .. cate1 .. 'Persona 5 Bosses' .. cate2 end
	return result
end
 
return p
--[[Category:Skills modules|!]]

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.