Fandom

Megami Tensei Wiki

Module:Gamebox

4,384pages on
this wiki
Add New Page
Talk3

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.

--<pre>
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 stylet = '\n|-\n|style="font-size:100%; text-align:center;background:#222;" colspan=2|'
 
local function cate(catename,sort)
	if not mw.title.getCurrentTitle():inNamespace('') then 
		return ''
	end
	if sort then sort = '|' .. sort else sort = '' end
	return '[[Category:' .. catename  .. sort .. ']]'
end
 
local t = {
	['image']={'image'},
	['image_width']={'image_width',default='240px'},
	['image_bg']={'image_bg'},
	['japan']={'japan'},
	['romaji']={'romaji'},
	['Developer']={'developer'},
	['Publisher']={'publisher'},
	['Genre']={'genre'},
	['Platform']={'platform(s)','platform'},
	['Japan']={'release-date-japan','releasej'},
	['the United States']={'release-date-north-america','releasena'},
	['Europe'] ={'release-date-europe','releaseeu'},
	['Australia']={'release-date-australasia','releaseau'},
	['cname']={'name',default=mw.title.getCurrentTitle().text}, -- Character's name
	['Also known as']={'aka'},
	['Japanese Name']={'japan','kana'},
	['Romaji']={'romaji'},
	['rpname']={'RPname','rpname',h='<span style="white-space:nowrap;border-bottom:1px dotted black; cursor:help;" title="The localized English name of Revelations: Persona, the original English release of the game."><i>Revelations</i> Name</span>'},
	['First Appearance']={'first appearance','first'},
	['Affiliation']={'affiliation'},
	['Alignment']={'alignment'},
	['Team']={'team'}, -- Strange Journey
	['Occupation']={'job','occupation'},
	['Rank']={'rank'}, -- Strange Journey
	['Ship']={'ship'}, -- Strange Journey
	['Country']={'country'}, -- Strange Journey
	['Reason']={'reason'}, -- Nocturne
	['Demonic Sponsor']={'demonic sponsor','sponsor'}, -- Nocturne
	['Origin']={'origin'},
	['Weapon']={'weapon'},
	['Demon Partner']={'demonpartner'}, -- Devil Child
	['Tribe']={'tribe'}, -- DDSaga
	['Firearm Type']={'gun'},
	['Atma Avatar']={'avatar'}, -- DDSaga Atma Avatar
	['Atma Brand']={'brand'}, -- DDSaga Atma brand
	['Brand Location']={'location'}, -- DDSaga Atma brand location
	['Date of Birth']={'birthday','dob'},
	['Age']={'age'},
	['Zodiac']={'zodiac'},
	['Height']={'height'},
	['Weight']={'weight'},
	['COMP Color']={'comp'}, -- Devil Survivor 1 character's COMP color
	['Cell Phone Color']={'cell'}, -- Devil Survivor 2 character's cel phone color
	['Residency']={'home'},
	['Allied Demon']={'allieddemon'}, -- General-purposed, primarily for Shin Megami Tensei IV Final
	['Fate Demon']={'fatedemon'}, -- Demon fusions unlocked by raising Devil Survivor 2 character's Fate rank
	['Anime Demon']={'animedemon'}, -- Allied demons summoned in Devil Survivor 2 anime
	['Blood Type']={'blood','blood type'},
	['Melee Weapon']={'melee'},
	['Ranged Weapon']={'ranged'},
	['Arcana']={'arcana'}, -- Persona series
	['Arcana2']={'arcana2',h='<abbr title="The arcana which also generally have ' .. "'Great'" .. ' affinity with the character apart from the signature Arcana.">Secondary Arcana</abbr>'}, -- Persona 1 and 2
	['Persona']={'persona'}, -- Character's signature Persona(s)
	['Class']={'class'}, -- SMTxFE
	['Mirage Partner']={'miragepartner'}, -- SMTxFE
	['Theme']={'theme','song'}, -- Character's theme music 
	['Likes']={'likes'},
	['Dislikes']={'dislikes'},
	['Nationality']={'nationality','nation'},
	['Ethnicity']={'ethnicity','ethnic'},
	['Japanese VA']={'japaneseva','Japanese VA'},
	['English VA']={'englishva','English VA'},
}
 
local game_stat_order1 = {
	'Developer',
	'Publisher',
	'Genre',
	'Platform',
}
 
local game_stat_order2 = {
	'Japan',
	'the United States',
	'Europe',
	'Australia',
}
 
local char_stat_order = {
	'Also known as',
	'Japanese Name',
	'Romaji',
	'rpname',
	'First Appearance',
	'Nationality',
	'Ethnicity',
	'Affiliation',
	'Alignment',
	'Team',
	'Occupation',
	'Rank',
	'Ship',
	'Country',
	'Reason',
	'Demonic Sponsor',
	'Origin',
	'Weapon',
	'Demon Partner',
	'Tribe',
	'Firearm Type',
	'Atma Avatar',
	'Atma Brand',
	'Brand Location',
	'Date of Birth',
	'Age',
	'Zodiac',
	'Height',
	'Weight',
	'COMP Color',
	'Cell Phone Color',
	'Residency',
	'Allied Demon',
	'Fate Demon',
	'Anime Demon',
	'Blood Type',
	'Melee Weapon',
	'Ranged Weapon',
	'Arcana',
	'Arcana2',
	'Persona',
	'Class',
	'Mirage Partner',
	'Theme',
	'Likes',
	'Dislikes',
	'Japanese VA',
	'English VA',
}
 
local function get_prop(args)
	local prop = {}
	for k, v in pairs(t) do
		for _, name in ipairs(v) do
			if args[name] then
				prop[k] = args[name]
				break
			end
		end
		prop[k] = prop[k] or v.default
	end
	return prop
end
 
p.game = makeInvokeFunction('_game')
 
function p._game(args)
	local prop = get_prop(args)
	local game = args[1] or args.class or args.game or args.Game or ''
	local gameg -- Game general style
	if getGames.games[game].fallback then
		gameg = getGames.games[game].fallback -- e.g. 'p3f' and 'p3p' will fall back to 'p3' if applicable.
		else gameg = game
	end
	local gamen = getGames.games[game].name -- Full game name
	local gamegn = getGames.games[gameg].name -- e.g. 'Persona 3 FES' will fall back to 'Persona 3' if applicable.
	if not prop.image_bg then prop.image_bg = '#333' end
	local styleg = '\n|-\n!style="background: ' .. getGames.games[gameg].colorbg .. ';color: ' .. getGames.games[gameg].font .. '"'
	local styleh = styleg .. '|'
	local stylec = styleg .. ' colspan=2|'
	local result
	if prop.image then
		prop.image = '\n|-\n| style="border-radius:3.5px; background:' .. prop.image_bg .. '" colspan="2" align="center" | [[File:' .. prop.image .. '|' .. prop.image_width .. ']]'
		else prop.image = ''
	end
	result = '{|class="customtable" style="background: #333; width:250px; font-size:90%; border:3px solid ' .. getGames.games[gameg].colorb .. '; border-radius:7px; float: right; padding: 0px; margin-left:10px" |' .. stylec .. '\'\'' .. mw.title.getCurrentTitle().text .. '\'\'' .. prop.image
	if prop.japan then prop.japan = stylet .. prop.japan else prop.japan = '' end
	if prop.romaji then prop.romaji = stylet .. prop.romaji else prop.romaji = '' end
	result = result .. prop.japan .. prop.romaji .. stylec .. 'Game Information'
	for i,v in ipairs(game_stat_order1) do
		if prop[v] then
			result = result .. styleh .. v .. '\n|' .. prop[v]
		end
	end
	result = result .. stylec .. 'Release Dates'
	for i,v in ipairs(game_stat_order2) do
		if prop[v] then
			result = result .. styleh .. '[[File:Flag of ' .. v .. '.png|25px|alt=Flag of '..v..'|'..v..']]\n|' .. prop[v]
		end
	end
	result = result .. '\n|}' .. cate('Games')
	if gameg == 'mt1' or gameg == 'mt2' then
		result = result .. cate('Megami Tensei Series')
	elseif gameg == 'smt1' or gameg == 'smt2' or gameg == 'smtif' or gameg == 'smt3' or gameg == 'smt9' or gameg == 'smtim' or gameg == 'smtsj' or gameg == 'smt4' then
		result = result .. cate('Shin Megami Tensei Series')
	elseif gameg == 'lb1' or gameg == 'lb2' or gameg == 'alb' or gameg == 'lb3' or gameg == 'lbs' or gameg == 'lbnt1' or gameg == 'lbnt2' or gameg == 'lbnt3' then
		result = result .. cate('Last Bible Series')
	elseif gameg == 'majin1' or gameg == 'majin2' then
		result = result .. cate('Majin Tensei Series')
	elseif gameg == 'smtds' or gameg == 'sh' or gameg == 'raidou1' or gameg == 'raidou2' then
		result = result .. cate('Devil Summoner')
	elseif gameg == 'p1' or gameg == 'p2is' or gameg == 'p2ep' or gameg == 'p3' or gameg == 'pts' or gameg == 'p4' or gameg == 'pq' or gameg == 'p5' then
		result = result .. cate('Persona Series')
	elseif gameg == 'childred' or gameg == 'childblack' or gameg == 'childwhite' or gameg == 'childlight' or gameg == 'childfire' or gameg == 'childice' or gameg == 'childmessiah' then
		result = result .. cate('Devil Children')
	elseif gameg == 'ddsaga1' or gameg == 'ddsaga2' then
		result = result .. cate('Digital Devil Saga')
	elseif gameg == 'desu1' or gameg == 'desu2' then
		result = result .. cate('Devil Survivor Series')
	end
	if gameg == 'childred' or gameg == 'childblack'
		then result = result .. cate('Devil Children Red/Black Book','!')
	elseif gameg == 'childmessiah' then
		result = result .. cate('Messiah Riser','!')
	elseif gameg == '' then
	elseif gameg then
		result = result .. cate(gamen,'!')
	end
	return result
end
 
p.char = makeInvokeFunction('_char')
 
function p._char(args)
	local prop = get_prop(args)
	local game = args[1] or args.class or args.game or args.Game or ''
	local gameg
	if getGames.games[game].fallback then
		gameg = getGames.games[game].fallback
		else gameg = game
	end
	local gamen = getGames.games[game].name
	local gamegn = getGames.games[gameg].name
	local styleg = '\n|-\n!style="background: ' .. getGames.games[gameg].colorbg .. ';color: ' .. getGames.games[gameg].font .. '"'
	local styleh = styleg .. '|'
	local stylec = styleg .. ' colspan=2|'
	local result = '{| class="customtable" style="background:#000; border: 3px ' .. getGames.games[gameg].colorb .. ' solid; float: right; border-radius:7px; font-size:90%; padding: 0px; width:290px; margin-left:10px"' .. stylec .. prop.cname
	if not prop.image_bg then prop.image_bg = 'linear-gradient(20deg, #bbb, #222)' end
	if prop.image then result = result .. '\n|-\n!colspan=2 style="background:' .. prop.image_bg .. '"|' .. prop.image end
	for i,v in ipairs(char_stat_order) do
		if prop[v] then
			if t[v].h then t.header = t[v].h else t.header = v end
			result = result .. styleh .. t.header .. '\n|' .. prop[v]
		end
	end
	result = result .. '\n|}'
	if args.Part == 'both' or args.Part == 'Both' then
	    if game == 'p2is' then
		    result = result .. cate(getGames.games['p2is'].name .. ' Characters') .. cate(getGames.games['p2ep'].name .. ' Characters')
    	elseif game == 'smtds' then
	    	result = result .. cate(gamen .. ' Characters') .. cate(getGames.games['sh'].name .. ' Characters')
    	elseif game == 'raidou1' then
	    	result = result .. cate(gamen .. ' Characters') .. cate(getGames.games['raidou2'].name .. ' Characters')
    	elseif game == 'desu2' then
	    	result = result .. cate(gamen .. ' Characters') .. cate(getGames.games['desu2rb'].name .. ' Characters')
		end
    elseif args.Part == 'All' or args.Part == 'all' then
        if game == 'p3' then
    		result = result .. cate(gamen .. ' Characters') .. cate(getGames.games['p3f'].name .. ' Characters') .. cate(getGames.games['p3p'].name .. ' Characters')
	    elseif game == 'p4' then
		    result = result .. cate(gamen .. ' Characters') .. cate(getGames.games['p4g'].name .. ' Characters') .. cate(getGames.games['p4a'].name .. ' Characters') .. cate(getGames.games['p4d'].name .. ' Characters')
	    end
	elseif gamen ~= nil then
		result = result .. cate(gamen .. ' Characters')
	end
	if args.alignment == 'Law' then
	    result = result .. cate('Law-Aligned Characters')
	elseif args.alignment == 'Neutral' then
	    result = result .. cate('Neutral-Aligned Characters')
	elseif args.alignment == 'Chaos' then
	    result = result .. cate('Chaos-Aligned Characters')
	 end
	 return result
end
 
return p
--</pre>
--[[Category:Modules]]
--[[Category:Character Templates|!]]

Also on Fandom

Random Wiki