Fandom

Megami Tensei Wiki

Module:Skills

4,384pages on
this wiki
Add New Page
Talk0

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.

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|!]]

Also on Fandom

Random Wiki