<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.puella-magi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=EPFBot</id>
	<title>Puella Magi Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.puella-magi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=EPFBot"/>
	<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/Special:Contributions/EPFBot"/>
	<updated>2026-06-05T10:27:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Talk:Timelines/Original/Null&amp;diff=232516</id>
		<title>Talk:Timelines/Original/Null</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Talk:Timelines/Original/Null&amp;diff=232516"/>
		<updated>2025-11-18T11:15:47Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What&#039;s the point of this article? NMS does have a timeloop and timelines, but all of them are like, mentioned in passing less than a sentence long. It&#039;ll be just a plain summary of the story. [[User:EPFBot|EPFBot]] ([[User talk:EPFBot|talk]]) 11:15, 18 November 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232487</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232487"/>
		<updated>2025-11-16T17:42:46Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    local iconimg = iconAlt(char_id, img_override, gametitle)&lt;br /&gt;
&lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px;\&amp;quot; class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    elseif iconimg ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px;\&amp;quot; class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;&amp;quot; .. iconimg .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
       result = &amp;quot;&amp;lt;center&amp;gt;&amp;lt;div class=\&amp;quot;bigcontainer\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/div&amp;gt;&amp;lt;/center&amp;gt;&amp;quot; &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/styles.css&amp;diff=232486</id>
		<title>Template:Story Transcript/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/styles.css&amp;diff=232486"/>
		<updated>2025-11-16T17:07:46Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.bigcontainer{&lt;br /&gt;
	display:table;&lt;br /&gt;
	vertical-align:middle;&lt;br /&gt;
	text-align:center;&lt;br /&gt;
	padding:0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.littlecontainer{&lt;br /&gt;
	 display: table-cell;&lt;br /&gt;
	 vertical-align:middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media only screen and (max-width: 800px) {&lt;br /&gt;
  .littlecontainer { &lt;br /&gt;
    display: block;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration/Test&amp;diff=232484</id>
		<title>Template:Story Transcript/Narration/Test</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration/Test&amp;diff=232484"/>
		<updated>2025-11-16T16:46:47Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Story Transcript/styles.css&amp;quot;/&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|nm|{{{speaker_en|{{{speaker|}}}}}}|{{{speaker_jp|}}}|{{{char_link|}}}||||Narration|{{{voiceline|}}}|{{{voiceline2|}}}|{{{voiceline3|}}}|{{{voiceline4|}}}}}&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|n|&#039;&#039;{{{dialogue_en|{{{dialogue|}}}}}}&#039;&#039;|&#039;&#039;{{{dialogue_jp|}}}&#039;&#039;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
See [[Template:Magia Exedra Story Transcript]] for usage.[[Category:Magia Exedra Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232483</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232483"/>
		<updated>2025-11-16T16:46:21Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    local iconimg = iconAlt(char_id, img_override, gametitle)&lt;br /&gt;
&lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px;\&amp;quot; class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    elseif iconimg ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px;\&amp;quot; class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;&amp;quot; .. iconimg .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div class=\&amp;quot;littlecontainer\&amp;quot; style=\&amp;quot;width:100%\&amp;quot;&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
       result = &amp;quot;&amp;lt;center&amp;gt;&amp;lt;div class=\&amp;quot;bigcontainer\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/div&amp;gt;&amp;lt;/center&amp;gt;&amp;quot; &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232482</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232482"/>
		<updated>2025-11-16T16:41:33Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    local iconimg = iconAlt(char_id, img_override, gametitle)&lt;br /&gt;
&lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    elseif iconimg ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;&amp;quot; .. iconimg .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div class=\&amp;quot;littlecontainer\&amp;quot; style=\&amp;quot;width:100%\&amp;quot;&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
       result = &amp;quot;&amp;lt;center&amp;gt;&amp;lt;div class=\&amp;quot;bigcontainer\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/div&amp;gt;&amp;lt;/center&amp;gt;&amp;quot; &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232481</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232481"/>
		<updated>2025-11-16T16:37:25Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    local iconimg = iconAlt(char_id, img_override, gametitle)&lt;br /&gt;
&lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    elseif iconimg ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;&amp;quot; .. iconimg .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
       result = &amp;quot;&amp;lt;center&amp;gt;&amp;lt;div class=\&amp;quot;bigcontainer\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/div&amp;gt;&amp;lt;/center&amp;gt;&amp;quot; &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232480</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232480"/>
		<updated>2025-11-16T16:33:59Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    local iconimg = iconAlt(char_id, img_override, gametitle)&lt;br /&gt;
&lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    elseif iconimg ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;&amp;quot; .. iconimg .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
       result = &amp;quot;&amp;lt;div class=\&amp;quot;bigcontainer\&amp;quot;&amp;gt;&amp;lt;center&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/center&amp;gt;&amp;lt;/div&amp;gt;&amp;quot; &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232479</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232479"/>
		<updated>2025-11-16T16:20:49Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    local iconimg = iconAlt(char_id, img_override, gametitle)&lt;br /&gt;
&lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    elseif iconimg ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;&amp;quot; .. iconimg .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
       result = &amp;quot;&amp;lt;div class=\&amp;quot;bigcontainer\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot; &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232475</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232475"/>
		<updated>2025-11-16T16:05:24Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: addin the classes...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    local iconimg = iconAlt(char_id, img_override, gametitle)&lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px;\&amp;quot; class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = result .. iconimg&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div class=\&amp;quot;littlecontainer\&amp;quot;&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot; class=\&amp;quot;bigcontainer\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration/Test&amp;diff=232474</id>
		<title>Template:Story Transcript/Narration/Test</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration/Test&amp;diff=232474"/>
		<updated>2025-11-16T16:03:26Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Story Transcript/styles.css&amp;quot;/&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|nm|{{{speaker_en|{{{speaker|}}}}}}|{{{speaker_jp|}}}|{{{char_link|}}}||||Narration|{{{voiceline|}}}|{{{voiceline2|}}}|{{{voiceline3|}}}|{{{voiceline4|}}}}}&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|d|&#039;&#039;{{{dialogue_en|{{{dialogue|}}}}}}&#039;&#039;|&#039;&#039;{{{dialogue_jp|}}}&#039;&#039;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
See [[Template:Magia Exedra Story Transcript]] for usage.[[Category:Magia Exedra Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Dialogue/Test&amp;diff=232473</id>
		<title>Template:Story Transcript/Dialogue/Test</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Dialogue/Test&amp;diff=232473"/>
		<updated>2025-11-16T16:03:06Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Story Transcript/styles.css&amp;quot;/&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|nm|{{{charname_en|{{{charname|}}}}}}|{{{charname_jp|}}}|{{{char_link|}}}|{{{char_id|}}}|{{{img_override|}}}|{{{series|}}}||{{{voiceline|}}}|{{{voiceline2|}}}|{{{voiceline3|}}}|{{{voiceline4|}}}}}&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|d|{{{dialogue_en|}}}|{{{dialogue_jp|}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
See [[Template:Magia Exedra Story Transcript]] for usage.[[Category:Magia Exedra Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232471</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232471"/>
		<updated>2025-11-16T15:40:22Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: testin some more&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    local iconimg = iconAlt(char_id, img_override, gametitle)&lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = result .. iconimg&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;display: inline-block;\&amp;quot;&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232470</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232470"/>
		<updated>2025-11-16T15:17:22Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    local iconimg = iconAlt(char_id, img_override, gametitle)&lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    elseif iconimg ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;&amp;quot; .. iconimg .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;display: inline-block;\&amp;quot;&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration/Test&amp;diff=232469</id>
		<title>Template:Story Transcript/Narration/Test</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration/Test&amp;diff=232469"/>
		<updated>2025-11-16T15:13:36Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|nm|{{{speaker_en|{{{speaker|}}}}}}|{{{speaker_jp|}}}|{{{char_link|}}}||||Narration|{{{voiceline|}}}|{{{voiceline2|}}}|{{{voiceline3|}}}|{{{voiceline4|}}}}}&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|d|&#039;&#039;{{{dialogue_en|{{{dialogue|}}}}}}&#039;&#039;|&#039;&#039;{{{dialogue_jp|}}}&#039;&#039;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
See [[Template:Magia Exedra Story Transcript]] for usage.[[Category:Magia Exedra Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration/Test&amp;diff=232468</id>
		<title>Template:Story Transcript/Narration/Test</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration/Test&amp;diff=232468"/>
		<updated>2025-11-16T15:07:35Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;tr style=&amp;quot;opacity:80%;&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|nm|{{{speaker_en|{{{speaker|}}}}}}|{{{speaker_jp|}}}|{{{char_link|}}}||||Narration|{{{voiceline|}}}|{{{voiceline2|}}}|{{{voiceline3|}}}|{{{voiceline4|}}}}}&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|d|&#039;&#039;{{{dialogue_en|{{{dialogue|}}}}}}&#039;&#039;|&#039;&#039;{{{dialogue_jp|}}}&#039;&#039;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
See [[Template:Magia Exedra Story Transcript]] for usage.[[Category:Magia Exedra Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232467</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232467"/>
		<updated>2025-11-16T15:04:02Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    elseif (char_id ~= nil and char_id ~= &amp;quot;&amp;quot;) or (img_override ~= nil and img_override ~= nil) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;width:80px; display: inline-block;\&amp;quot;&amp;gt;&amp;quot; .. iconAlt(char_id, img_override, gametitle) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div style=\&amp;quot;display: inline-block;\&amp;quot;&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Dialogue/Test&amp;diff=232466</id>
		<title>Template:Story Transcript/Dialogue/Test</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Dialogue/Test&amp;diff=232466"/>
		<updated>2025-11-16T14:58:07Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|nm|{{{charname_en|{{{charname|}}}}}}|{{{charname_jp|}}}|{{{char_link|}}}|{{{char_id|}}}|{{{img_override|}}}|{{{series|}}}||{{{voiceline|}}}|{{{voiceline2|}}}|{{{voiceline3|}}}|{{{voiceline4|}}}}}&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|d|{{{dialogue_en|}}}|{{{dialogue_jp|}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
See [[Template:Magia Exedra Story Transcript]] for usage.[[Category:Magia Exedra Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=User:EPF/Sandbox&amp;diff=232465</id>
		<title>User:EPF/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=User:EPF/Sandbox&amp;diff=232465"/>
		<updated>2025-11-16T14:54:35Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Box|main&lt;br /&gt;
|tintColor=#e6f5ff&lt;br /&gt;
|background=true&lt;br /&gt;
|body=&#039;&#039;&#039;This page uses official translations by Intern-kun of Magia Exedra.&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--(&#039;イベントストーリー_マギレコゼロ（1／3）_01&#039;, &#039;Magia Record Crescent Memoria Part 1&#039;, &#039;マギアレコード Crescent Memoria 第１弾&#039;)--&amp;gt;&lt;br /&gt;
{{Story Transcript/Header}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90265_01.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_013_coordinator}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=|charname_jp=|dialogue_en=Thank you for coming&amp;lt;br&amp;gt;to the Toyozuru Festival today!|dialogue_jp=今日は{{Ruby|豊鶴|とよづる}}フェスに&amp;lt;br&amp;gt;来てくれて本当にありがとーっ！|char_id=800201|voiceline=cv_magireco0_01_01_001}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=That day, the wish I made&amp;lt;br&amp;gt;as a Magical Girl got shaken.|dialogue_jp=あの日、アタシは&amp;lt;br&amp;gt;魔法少女としての願いを&amp;lt;br&amp;gt;揺るがす出会いを果たしたんだ|voiceline=cv_magireco0_01_01_002}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=|charname_jp=|dialogue_en=If you could have one wish, what would&amp;lt;br&amp;gt;you wish for?|dialogue_jp=もしも、ひとつ願いが叶うなら…&amp;lt;br&amp;gt;みんなは何を願う？|char_id=800101|voiceline=cv_magireco0_01_01_003}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=|charname_jp=|dialogue_en=I&#039;d wanna travel the world, spreading courage&amp;lt;br&amp;gt;through our songs!|dialogue_jp=私は、世界中を回って&amp;lt;br&amp;gt;みんなに勇気と歌を届けたい！|char_id=800101|voiceline=cv_magireco0_01_01_004}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=|charname_jp=|dialogue_en=We may only be idols, but it&#039;s our dream&amp;lt;br&amp;gt;to save the world through music!|dialogue_jp=アイドルでしかない私たちだけど&amp;lt;br&amp;gt;歌で世界を救うのが夢だから！|char_id=800101|voiceline=cv_magireco0_01_01_005}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Save the world?)|dialogue_jp=（世界を救う…か）|char_id=101031|voiceline=cv_magireco0_01_01_006}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=*Sniffle*|dialogue_jp=すん…ぐすっ|voiceline=cv_magireco0_01_01_007}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Hm?|dialogue_jp=ん？|char_id=101031|voiceline=cv_magireco0_01_01_008}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Hey, are you okay?&amp;lt;br&amp;gt;I have a hankie, if you&#039;d like...|dialogue_jp=キミ、大丈夫？&amp;lt;br&amp;gt;ハンカチならあるけど…|char_id=101031|voiceline=cv_magireco0_01_01_009}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=Huh? Oh, it&#039;s fine...&amp;lt;br&amp;gt;I have tissue papers.|dialogue_jp=へっ？&amp;lt;br&amp;gt;あ、ちり紙があるので…|char_id=838332|voiceline=cv_magireco0_01_01_010}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Tissue &amp;quot;papers&amp;quot;...?)|dialogue_jp=（…ちり紙？）|char_id=101031|voiceline=cv_magireco0_01_01_011}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=This is why I keep every pack I get with me.&amp;lt;br&amp;gt;You never know when you might need them.|dialogue_jp=荷物が多いと&amp;lt;br&amp;gt;こういうときに役立って…えへへ|char_id=838332|voiceline=cv_magireco0_01_01_012}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Um...&amp;lt;br&amp;gt;At least you don&#039;t look unwell...|dialogue_jp=えっと…体調が悪い&amp;lt;br&amp;gt;とかじゃなさそうだね|char_id=101031|voiceline=cv_magireco0_01_01_013}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=I&#039;m so sorry for worrying you!|dialogue_jp=ああ！&amp;lt;br&amp;gt;すみません、心配させて！|char_id=838332|voiceline=cv_magireco0_01_01_014}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=An older student recommended&amp;lt;br&amp;gt;I come see this show...|dialogue_jp=…私、先輩のすすめで&amp;lt;br&amp;gt;ライブを観にきたんですけど|char_id=838332|voiceline=cv_magireco0_01_01_015}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=And hearing their dreams and wishes—&amp;lt;br&amp;gt;it was all so beautiful!|dialogue_jp=夢とか、願いとか&amp;lt;br&amp;gt;なんだか素敵だなぁって|char_id=838332|voiceline=cv_magireco0_01_01_016}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=I couldn&#039;t help but cry.|dialogue_jp=それで、思わず&amp;lt;br&amp;gt;涙が出てしまって…|char_id=838332|voiceline=cv_magireco0_01_01_017}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=Do you have one? A wish, I mean.|dialogue_jp=あなたにはありますか？&amp;lt;br&amp;gt;「願い」|char_id=838332|voiceline=cv_magireco0_01_01_018}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Do you?|dialogue_jp=…そういうキミにはあるの？|char_id=101031|voiceline=cv_magireco0_01_01_019}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=If I could make one wish,&amp;lt;br&amp;gt;it would be to save someone.|dialogue_jp=私は、もし願いが叶うなら&amp;lt;br&amp;gt;誰かを救いたいって思うんです|char_id=838332|voiceline=cv_magireco0_01_01_020}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=I think that was the first time&amp;lt;br&amp;gt;I&#039;d ever truly regretted my wish.|dialogue_jp=あのとき、アタシは初めて&amp;lt;br&amp;gt;本当の意味で自分の願いに対して&amp;lt;br&amp;gt;後悔をしたんだと思う|voiceline=cv_magireco0_01_01_021}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=To be honest, I feel kind of embarrassed&amp;lt;br&amp;gt;that I&#039;d never regretted it before now.|dialogue_jp=今まで、一度も後悔しなかったことを&amp;lt;br&amp;gt;恥ずかしいって感じるくらいにはね|voiceline=cv_magireco0_01_01_022}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_99_10045_01.png}}&lt;br /&gt;
{{Story Transcript/Video|cs=y|vid=Movie/3DMovie/mv4063.m3u8}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_99_90263_01.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_045_this_morning}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=|speaker_jp=|dialogue_en=&amp;quot;We&#039;ve hit the streets to ask...&amp;lt;br&amp;gt;If you could only have one wish,&amp;lt;br&amp;gt;what would it be?&amp;quot;|dialogue_jp=「街行く人に聞いてみました！&amp;lt;br&amp;gt;　もしも、ひとつだけ願いが叶うとしたら？」|voiceline=cv_magireco0_01_01_023}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_99_90328_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=|charname_jp=|dialogue_en=I can wish for anything I want?&amp;lt;br&amp;gt;Then I&#039;d wish for no more wars.|dialogue_jp=なんでも叶うというのなら&amp;lt;br&amp;gt;世界から戦争がなくなったらいいですよね|char_id=801101|voiceline=cv_magireco0_01_01_024}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=|charname_jp=|dialogue_en=I&#039;d wish for all the children in the world&amp;lt;br&amp;gt;to be happy.|dialogue_jp=すべての子どもたちの幸せ…でしょうか|char_id=800800|voiceline=cv_magireco0_01_01_025}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=|charname_jp=|dialogue_en=I&#039;d wanna cure my sick friend.|dialogue_jp=友だちの病気を治したいです|char_id=836931|voiceline=cv_magireco0_01_01_026}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_99_90263_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko&#039;s Older Brother|charname_jp=ももこの兄|dialogue_en=As long as I&#039;m in the starting lineup,&amp;lt;br&amp;gt;I don&#039;t need any other wish.|dialogue_jp=スタメンに選ばれれば&amp;lt;br&amp;gt;今は他に願いはないや|char_id=800501|voiceline=cv_magireco0_01_01_027}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko&#039;s Younger Brother|charname_jp=ももこの弟|dialogue_en=A new video game!|dialogue_jp=オレは新しいゲーム！|char_id=801300|voiceline=cv_magireco0_01_01_028}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko&#039;s Mother|charname_jp=ももこの母|dialogue_en=Speaking of wishes... Do you remember that&amp;lt;br&amp;gt;adorable dream you used to have, Momoko?|dialogue_jp=願いと言えば、ももこも&amp;lt;br&amp;gt;前は可愛い夢があったわよね|char_id=800600|voiceline=cv_magireco0_01_01_029}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko&#039;s Mother|charname_jp=ももこの母|dialogue_en=You always used to say you wanted to be&amp;lt;br&amp;gt;a princess.|dialogue_jp=ほら、お姫様になりたいって&amp;lt;br&amp;gt;よく言ってたじゃない？|char_id=800600|voiceline=cv_magireco0_01_01_030}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Yeah, when I was like, five years old!|dialogue_jp=なっ！&amp;lt;br&amp;gt;５歳とかの頃の話だろ！|char_id=101031|voiceline=cv_magireco0_01_01_031}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko&#039;s Mother|charname_jp=ももこの母|dialogue_en=You don&#039;t need a wish granted for that.&amp;lt;br&amp;gt;You&#039;ve always been a little princess at home.|dialogue_jp=お願いなんかしなくても&amp;lt;br&amp;gt;ずーっと我が家のお姫様なのに|char_id=800600|voiceline=cv_magireco0_01_01_032}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko&#039;s Father|charname_jp=ももこの父|dialogue_en=What&#039;s it nowadays, then? Love?&amp;lt;br&amp;gt;Nah, not possible! Bwahaha!|dialogue_jp=今は恋の願いだったり&amp;lt;br&amp;gt;んなわけねーか、ガハハ！|char_id=800700|voiceline=cv_magireco0_01_01_033}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Ugh, that&#039;s it... I&#039;m goin&#039; to school!|dialogue_jp=まったく…&amp;lt;br&amp;gt;アタシ、もう学校行くからな！|char_id=101031|voiceline=cv_magireco0_01_01_034}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90003_01.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_012_remain}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I can&#039;t believe Dad guessed it right!|dialogue_jp=…なんっで父さんが&amp;lt;br&amp;gt;ちょっと当ててるんだよ！|char_id=101031|voiceline=cv_magireco0_01_01_035}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I was outta there so quick, there&#039;s no way&amp;lt;br&amp;gt;they saw it on my face... Right?|dialogue_jp=急いで逃げてきたけど&amp;lt;br&amp;gt;アタシ、顔に出てなかったよな…|char_id=101031|voiceline=cv_magireco0_01_01_036}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I can&#039;t let anyone find out what my wish was!|dialogue_jp=あんな願い&amp;lt;br&amp;gt;絶対にバレるわけにいかない…|char_id=101031|voiceline=cv_magireco0_01_01_037}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=&amp;quot;The courage to confess my feelings.&amp;quot;&amp;lt;br&amp;gt;What was I even thinkin&#039;? It was so outta&amp;lt;br&amp;gt;character for me.|dialogue_jp=だって、アタシの願いは&amp;lt;br&amp;gt;“告白のための勇気”なんて&amp;lt;br&amp;gt;らしくない願いだったんだから|voiceline=cv_magireco0_01_01_038}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90265_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=If I could make one wish,&amp;lt;br&amp;gt;it would be to save someone.|dialogue_jp=私は、もし願いが叶うなら&amp;lt;br&amp;gt;誰かを救いたいって思うんです|char_id=838332|voiceline=cv_magireco0_01_01_039}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90003_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=*Sigh*&amp;lt;br&amp;gt;I thought I&#039;d forgotten,&amp;lt;br&amp;gt;but apparently not...|dialogue_jp=はぁ…忘れてたのに&amp;lt;br&amp;gt;思い出しちまったよ…|char_id=101031|voiceline=cv_magireco0_01_01_040}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(I thought I&#039;d come to terms&amp;lt;br&amp;gt;with my wish long ago...)|dialogue_jp=（願いとは、とっくに&amp;lt;br&amp;gt;　折り合いつけたはずなのにな…）|char_id=101031|voiceline=cv_magireco0_01_01_041}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Huh? My Soul Gem&#039;s lookin&#039; a little cloudy...|dialogue_jp=…あれ、アタシのソウルジェム&amp;lt;br&amp;gt;ちょっと濁ってる…？|char_id=101031|voiceline=cv_magireco0_01_01_042}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=When did that happen?&amp;lt;br&amp;gt;Oh well...|dialogue_jp=いつの間に…&amp;lt;br&amp;gt;まぁ、いいか|char_id=101031|voiceline=cv_magireco0_01_01_043}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=|speaker_jp=|dialogue_en=*Rustle*|dialogue_jp=カサ|voiceline=}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Hm?|dialogue_jp=…ん？|char_id=101031|voiceline=cv_magireco0_01_01_045}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(What&#039;s a notebook doin&#039; here?)|dialogue_jp=（こんなところに&amp;lt;br&amp;gt;　ノートが落ちてる…？）|char_id=101031|voiceline=cv_magireco0_01_01_046}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=|speaker_jp=|dialogue_en=*Rustle*|dialogue_jp=パラ|voiceline=}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Oh? There&#039;s somethin&#039; inside.)|dialogue_jp=（おっと…&amp;lt;br&amp;gt;　なんか挟まってたのか）|char_id=101031|voiceline=cv_magireco0_01_01_048}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(A pressed flower bookmark?)|dialogue_jp=（…押し花の栞？）|char_id=101031|voiceline=cv_magireco0_01_01_049}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Wonder what this purple flower is...)|dialogue_jp=（この紫色の花&amp;lt;br&amp;gt;　なんだったっけか…）|char_id=101031|voiceline=cv_magireco0_01_01_050}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(&#039;Kay, let&#039;s see who this belongs to.)|dialogue_jp=（えっと、持ち主は…）|char_id=101031|voiceline=cv_magireco0_01_01_051}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=...?!|dialogue_jp=――っ!?|char_id=101031|voiceline=cv_magireco0_01_01_052}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(I sense a Witch...)|dialogue_jp=（魔女の反応…）|char_id=101031|voiceline=cv_magireco0_01_01_053}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(I&#039;m not happy about how cloudy&amp;lt;br&amp;gt;my Soul Gem&#039;s lookin&#039;, but I&#039;ve got&amp;lt;br&amp;gt;no choice.)|dialogue_jp=（ソウルジェムの濁りは&amp;lt;br&amp;gt;　気になるけど、やるしかないか）|char_id=101031|voiceline=cv_magireco0_01_01_054}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90443_01.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_029_the_crow}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=*Sob*|dialogue_jp=うっ…|char_id=101030|voiceline=cv_magireco0_01_01_055}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=So, I&#039;m new to this whole&amp;lt;br&amp;gt;Magical Girl thing...|dialogue_jp=…こっちは魔法少女に&amp;lt;br&amp;gt;なりたてなんだから…|char_id=101030|voiceline=cv_magireco0_01_01_056}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=You mind goin&#039; easy on me?|dialogue_jp=ちょっとは手加減しろよ…|char_id=101030|voiceline=cv_magireco0_01_01_057}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=As if a Witch would listen to me...|dialogue_jp=なんて、魔女が&amp;lt;br&amp;gt;聞いてくれるわけないよな…|char_id=101030|voiceline=cv_magireco0_01_01_058}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Gah!|dialogue_jp=ぐあっ！|char_id=101030|voiceline=cv_magireco0_01_01_059}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Uh-oh... This ain&#039;t lookin&#039; good.)|dialogue_jp=（どうする…このままじゃ）|char_id=101030|voiceline=cv_magireco0_01_01_060}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Ah...|dialogue_jp=あ…|char_id=101030|voiceline=cv_magireco0_01_01_061}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(I can&#039;t move my legs...&amp;lt;br&amp;gt;C&#039;mon! You gotta be kiddin&#039; me!)|dialogue_jp=（足が動かない…&amp;lt;br&amp;gt;　なんで、こんな）|char_id=101030|voiceline=cv_magireco0_01_01_062}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Am I gonna die ashamed of my wish?)|dialogue_jp=（アタシは願いも誇れないまま&amp;lt;br&amp;gt;　死んじまうのかよ…）|char_id=101030|voiceline=cv_magireco0_01_01_063}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=Yaaah!|dialogue_jp=やぁっ！|voiceline=cv_magireco0_01_01_064}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_005_place_to_hunt}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=Are you okay?!|dialogue_jp=大丈夫ですか!?|char_id=100630|voiceline=cv_magireco0_01_01_065}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=I&#039;ve never seen you around before.&amp;lt;br&amp;gt;Are you a newbie?|dialogue_jp=…見かけない顔ね&amp;lt;br&amp;gt;新入りかしら？|char_id=100230|voiceline=cv_magireco0_01_01_066}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Oh, uh...|dialogue_jp=あ…いや…|char_id=101030|voiceline=cv_magireco0_01_01_067}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Thanks for savin&#039; me there...&amp;lt;br&amp;gt;Wait... That face...|dialogue_jp=助けてくれてありがとう…って&amp;lt;br&amp;gt;その顔…|char_id=101030|voiceline=cv_magireco0_01_01_068}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=Oh, you recognize me?|dialogue_jp=…私のこと&amp;lt;br&amp;gt;知っているのかしら？|char_id=100230|voiceline=cv_magireco0_01_01_069}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=You kiddin&#039; me?! You&#039;re Yachiyo Nanami,&amp;lt;br&amp;gt;the model! You&#039;re crazy famous at school!|dialogue_jp=そりゃ、七海やちよと言えば&amp;lt;br&amp;gt;モデルで…学校でも有名だし…|char_id=101030|voiceline=cv_magireco0_01_01_070}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=You&#039;re like, the veteran of Kamihama Magical&amp;lt;br&amp;gt;Girls! How could I NOT recognize you?|dialogue_jp=神浜の魔法少女の中でも&amp;lt;br&amp;gt;ベテランで名が知れてて…！|char_id=101030|voiceline=cv_magireco0_01_01_071}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Well, I&#039;m flattered... But I&#039;m not sure&amp;lt;br&amp;gt;how I feel about the term &amp;quot;veteran...&amp;quot;|dialogue_jp=知ってもらえてるのは嬉しいけど&amp;lt;br&amp;gt;“ベテラン”はちょっと複雑ね…|char_id=100230|voiceline=cv_magireco0_01_01_072}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=Oh my... This is no time for a chat.|dialogue_jp=あら…おしゃべりをしている&amp;lt;br&amp;gt;場合じゃないみたいですよ|char_id=100630|voiceline=cv_magireco0_01_01_073}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_still_04_00_0030.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=???|charname_jp=？？？|dialogue_en=Let&#039;s go, Yachan!|dialogue_jp=いきましょう、やっちゃん|voiceline=cv_magireco0_01_01_074}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Right. I can&#039;t risk embarrassing myself&amp;lt;br&amp;gt;in front of a junior.|dialogue_jp=ええ、後輩に恥ずかしい姿を&amp;lt;br&amp;gt;見せるわけにはいかないわ|voiceline=cv_magireco0_01_01_075}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90443_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo &amp;amp; ???|charname_jp=やちよ＆？？？|dialogue_en=Yaaah!|dialogue_jp=やぁぁっ！|char_id=100230|voiceline=cv_magireco0_01_01_076}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Whoa! They&#039;re so in sync!&amp;lt;br&amp;gt;And look so cool!)|dialogue_jp=（すげぇ…&amp;lt;br&amp;gt;　息が合ってて、かっこいい）|char_id=101030|voiceline=cv_magireco0_01_01_077}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90443_01.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90003_01.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=bgm01_adv_everyday1}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=So...&amp;lt;br&amp;gt;Thank you for saving me!|dialogue_jp=あの、助けてもらって&amp;lt;br&amp;gt;ありがとうございました！|char_id=101031|voiceline=cv_magireco0_01_01_078}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Yachiyo Nanami and...um...|dialogue_jp=えと、七海やちよさん…と|char_id=101031|voiceline=cv_magireco0_01_01_079}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Mifuyu Azusa|charname_jp=梓みふゆ|dialogue_en=Mifuyu Azusa. But you can call me Mifuyu.|dialogue_jp=梓みふゆです&amp;lt;br&amp;gt;みふゆでいいですよ|char_id=100632|voiceline=cv_magireco0_01_01_080}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Are you new to this...?|dialogue_jp=あなたは、新入りの子よね？|char_id=100234|voiceline=cv_magireco0_01_01_081}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Right! I&#039;m Momoko Togame!&amp;lt;br&amp;gt;I made my contract a little while ago!|dialogue_jp=あ、十咎ももこです！&amp;lt;br&amp;gt;少し前に契約しました！|char_id=101031|voiceline=cv_magireco0_01_01_082}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Well, I&#039;m so glad we were able to help you.|dialogue_jp=そう、助けられてよかったわ|char_id=100234|voiceline=cv_magireco0_01_01_083}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Mifuyu Azusa|charname_jp=梓みふゆ|dialogue_en=We actually only came back to look for&amp;lt;br&amp;gt;something we dropped. Lucky we did!|dialogue_jp=探し物のために&amp;lt;br&amp;gt;戻ってきたのが功を奏しましたね|char_id=100632|voiceline=cv_magireco0_01_01_084}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=You&#039;re looking for somethin&#039;?&amp;lt;br&amp;gt;It&#039;s not this notebook, is it?|dialogue_jp=探し物…それって&amp;lt;br&amp;gt;このノートじゃないですか？|char_id=101031|voiceline=cv_magireco0_01_01_085}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=My journal!&amp;lt;br&amp;gt;Thank you so much for this.|dialogue_jp=私の日記…！&amp;lt;br&amp;gt;ありがとう、助かったわ|char_id=100234|voiceline=cv_magireco0_01_01_086}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=I&#039;m guessing...you&#039;re not in a team yet?|dialogue_jp=ねぇ、ところであなた&amp;lt;br&amp;gt;チームは組んでいないの？|char_id=100234|voiceline=cv_magireco0_01_01_087}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Oh, um, nope... I&#039;m just goin&#039; with&amp;lt;br&amp;gt;the flow. Heheh...|dialogue_jp=あー、そうっすね…&amp;lt;br&amp;gt;なんか成り行きで…あはは|char_id=101031|voiceline=cv_magireco0_01_01_088}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Mifuyu Azusa|charname_jp=梓みふゆ|dialogue_en=Yachan...|dialogue_jp=やっちゃん…|char_id=100632|voiceline=cv_magireco0_01_01_089}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Mm hm...|dialogue_jp=…えぇ|char_id=100234|voiceline=cv_magireco0_01_01_090}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Would you like to join our team?|dialogue_jp=あなたさえよければ&amp;lt;br&amp;gt;うちのチームに来ない？|char_id=100234|voiceline=cv_magireco0_01_01_091}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=It can be challenging going at it alone,&amp;lt;br&amp;gt;as you&#039;ve seen today.|dialogue_jp=ひとりだと、今日みたいに&amp;lt;br&amp;gt;苦戦することもあるでしょうし|char_id=100234|voiceline=cv_magireco0_01_01_092}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Though she&#039;s not here right now,&amp;lt;br&amp;gt;we usually have one other teammate.|dialogue_jp=今日はいないけど&amp;lt;br&amp;gt;もうひとり仲間もいるの|char_id=100234|voiceline=cv_magireco0_01_01_093}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Mifuyu Azusa|charname_jp=梓みふゆ|dialogue_en=She can come across as a little standoffish,&amp;lt;br&amp;gt;but she&#039;s sweet and lovely at heart.|dialogue_jp=ツンツンはしていますが&amp;lt;br&amp;gt;根は優しくて可愛い方なので|char_id=100632|voiceline=cv_magireco0_01_01_094}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Mifuyu Azusa|charname_jp=梓みふゆ|dialogue_en=I&#039;m sure you&#039;ll like her.|dialogue_jp=ももこさんとも&amp;lt;br&amp;gt;すぐ仲良くなれると思うんです|char_id=100632|voiceline=cv_magireco0_01_01_095}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=And we don&#039;t have to make it official right&amp;lt;br&amp;gt;away. We could start with a trial run&amp;lt;br&amp;gt;if you prefer. To test the waters?|dialogue_jp=正式なチームじゃなくて&amp;lt;br&amp;gt;お試しでもいいから、どう？|char_id=100234|voiceline=cv_magireco0_01_01_096}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Oh...|dialogue_jp=あー…|char_id=101031|voiceline=cv_magireco0_01_01_097}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I really appreciate the offer, but no thanks!|dialogue_jp=ありがたい話なんですけど&amp;lt;br&amp;gt;すみません！|char_id=101031|voiceline=cv_magireco0_01_01_098}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I&#039;m fine.|dialogue_jp=アタシなら、大丈夫なんで|char_id=101031|voiceline=cv_magireco0_01_01_099}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Well, see ya!|dialogue_jp=それじゃあ！|char_id=101031|voiceline=cv_magireco0_01_01_100}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_99_90273_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=*Huff* *Huff*|dialogue_jp=はぁ…はぁ…|char_id=101031|voiceline=cv_magireco0_01_01_101}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=Two ultra cool and fierce Magical Girls asked&amp;lt;br&amp;gt;me to join their team... This is like, the&amp;lt;br&amp;gt;dream scenario. I should be jumpin&#039; for joy.|dialogue_jp=強くてかっこいい魔法少女の先輩から&amp;lt;br&amp;gt;チームになろうだなんて…&amp;lt;br&amp;gt;本当なら、嬉しすぎる提案のはず|voiceline=cv_magireco0_01_01_102}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=But I don&#039;t have any right to be&amp;lt;br&amp;gt;on their team.|dialogue_jp=でも、アタシには&amp;lt;br&amp;gt;仲間になる資格なんてないんだ|voiceline=cv_magireco0_01_01_103}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=I bet they made wonderful, selfless wishes.&amp;lt;br&amp;gt;Me and my selfish wish could never stand&amp;lt;br&amp;gt;shoulder-to-shoulder with them.|dialogue_jp=きっと素晴らしい願いを叶えたふたりに&amp;lt;br&amp;gt;アタシみたいな&amp;lt;br&amp;gt;自分のための願いをしたやつが&amp;lt;br&amp;gt;肩を並べていいわけがない|voiceline=cv_magireco0_01_01_104}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_001_inception}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Ugh, I&#039;m so pathetic!|dialogue_jp=クソ…情けねぇ…！|char_id=101031|voiceline=cv_magireco0_01_01_105}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=What am I doin&#039;, mopin&#039; around?!|dialogue_jp=何をうじうじしてんだ、アタシ！|char_id=101031|voiceline=cv_magireco0_01_01_106}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=My wish has been granted already.&amp;lt;br&amp;gt;It&#039;s done. I can&#039;t take it back now.|dialogue_jp=叶っちまった願いは取り消せない&amp;lt;br&amp;gt;取り戻すことはできない|voiceline=cv_magireco0_01_01_107}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=If I don&#039;t wanna live my life regrettin&#039; it,&amp;lt;br&amp;gt;I might as well try and make the most of&amp;lt;br&amp;gt;bein&#039; a Magical Girl.|dialogue_jp=…なら、アタシは願いを後悔しないように&amp;lt;br&amp;gt;魔法少女になってよかったって&amp;lt;br&amp;gt;そう言えるヤツになってやるんだ|voiceline=cv_magireco0_01_01_108}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=A Magical Girl&#039;s duty is to save people.|dialogue_jp=魔法少女の本分は、人を救うこと|voiceline=cv_magireco0_01_01_109}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=So, I gotta learn to help people.&amp;lt;br&amp;gt;Then I can live proud of my wish.|dialogue_jp=だから、人を助けられる魔法少女になって&amp;lt;br&amp;gt;自分の願いを誇れるように生きるんだ|voiceline=cv_magireco0_01_01_110}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=Then my wish itself won&#039;t even matter.|dialogue_jp=そうすりゃきっと&amp;lt;br&amp;gt;願いなんて、どうだってよくなる|voiceline=cv_magireco0_01_01_111}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Someday, I&#039;m gonna be a strong and fierce&amp;lt;br&amp;gt;Magical Girl who can stand beside those two.|dialogue_jp=いつか、ふたりと並べるくらい&amp;lt;br&amp;gt;強くてかっこいい魔法少女になる|char_id=101031|voiceline=cv_magireco0_01_01_112}}&lt;br /&gt;
{{Story Transcript/Dialogue/Test|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I&#039;m gonna be a Magical Girl who&amp;lt;br&amp;gt;can protect everyone!|dialogue_jp=みんなを守れる&amp;lt;br&amp;gt;魔法少女になってやる！|char_id=101031|voiceline=cv_magireco0_01_01_113}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Footer}}&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232464</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232464"/>
		<updated>2025-11-16T14:22:44Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: making copies of ch, v and icon that are local cuz this test for nm definitely didnt work&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
function iconAlt (char_id, img_override, gametitle)&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function chAlt (charname_en, charname_jp, charlink_initial)&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function vAlt (v1,v2,v3,v4)&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    elseif (char_id ~= nil and char_id ~= &amp;quot;&amp;quot;) or (img_override ~= nil and img_override ~= nil) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. iconAlt(char_id, img_override, gametitle) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. chAlt(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. vAlt(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=User:EPF/Sandbox&amp;diff=232463</id>
		<title>User:EPF/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=User:EPF/Sandbox&amp;diff=232463"/>
		<updated>2025-11-16T14:13:56Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Box|main&lt;br /&gt;
|tintColor=#e6f5ff&lt;br /&gt;
|background=true&lt;br /&gt;
|body=&#039;&#039;&#039;This page uses official translations by Intern-kun of Magia Exedra.&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--(&#039;イベントストーリー_マギレコゼロ（1／3）_01&#039;, &#039;Magia Record Crescent Memoria Part 1&#039;, &#039;マギアレコード Crescent Memoria 第１弾&#039;)--&amp;gt;&lt;br /&gt;
{{Story Transcript/Header}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90265_01.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_013_coordinator}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=|charname_jp=|dialogue_en=Thank you for coming&amp;lt;br&amp;gt;to the Toyozuru Festival today!|dialogue_jp=今日は{{Ruby|豊鶴|とよづる}}フェスに&amp;lt;br&amp;gt;来てくれて本当にありがとーっ！|char_id=800201|voiceline=cv_magireco0_01_01_001}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=That day, the wish I made&amp;lt;br&amp;gt;as a Magical Girl got shaken.|dialogue_jp=あの日、アタシは&amp;lt;br&amp;gt;魔法少女としての願いを&amp;lt;br&amp;gt;揺るがす出会いを果たしたんだ|voiceline=cv_magireco0_01_01_002}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=|charname_jp=|dialogue_en=If you could have one wish, what would&amp;lt;br&amp;gt;you wish for?|dialogue_jp=もしも、ひとつ願いが叶うなら…&amp;lt;br&amp;gt;みんなは何を願う？|char_id=800101|voiceline=cv_magireco0_01_01_003}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=|charname_jp=|dialogue_en=I&#039;d wanna travel the world, spreading courage&amp;lt;br&amp;gt;through our songs!|dialogue_jp=私は、世界中を回って&amp;lt;br&amp;gt;みんなに勇気と歌を届けたい！|char_id=800101|voiceline=cv_magireco0_01_01_004}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=|charname_jp=|dialogue_en=We may only be idols, but it&#039;s our dream&amp;lt;br&amp;gt;to save the world through music!|dialogue_jp=アイドルでしかない私たちだけど&amp;lt;br&amp;gt;歌で世界を救うのが夢だから！|char_id=800101|voiceline=cv_magireco0_01_01_005}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Save the world?)|dialogue_jp=（世界を救う…か）|char_id=101031|voiceline=cv_magireco0_01_01_006}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=*Sniffle*|dialogue_jp=すん…ぐすっ|voiceline=cv_magireco0_01_01_007}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Hm?|dialogue_jp=ん？|char_id=101031|voiceline=cv_magireco0_01_01_008}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Hey, are you okay?&amp;lt;br&amp;gt;I have a hankie, if you&#039;d like...|dialogue_jp=キミ、大丈夫？&amp;lt;br&amp;gt;ハンカチならあるけど…|char_id=101031|voiceline=cv_magireco0_01_01_009}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=Huh? Oh, it&#039;s fine...&amp;lt;br&amp;gt;I have tissue papers.|dialogue_jp=へっ？&amp;lt;br&amp;gt;あ、ちり紙があるので…|char_id=838332|voiceline=cv_magireco0_01_01_010}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Tissue &amp;quot;papers&amp;quot;...?)|dialogue_jp=（…ちり紙？）|char_id=101031|voiceline=cv_magireco0_01_01_011}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=This is why I keep every pack I get with me.&amp;lt;br&amp;gt;You never know when you might need them.|dialogue_jp=荷物が多いと&amp;lt;br&amp;gt;こういうときに役立って…えへへ|char_id=838332|voiceline=cv_magireco0_01_01_012}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Um...&amp;lt;br&amp;gt;At least you don&#039;t look unwell...|dialogue_jp=えっと…体調が悪い&amp;lt;br&amp;gt;とかじゃなさそうだね|char_id=101031|voiceline=cv_magireco0_01_01_013}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=I&#039;m so sorry for worrying you!|dialogue_jp=ああ！&amp;lt;br&amp;gt;すみません、心配させて！|char_id=838332|voiceline=cv_magireco0_01_01_014}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=An older student recommended&amp;lt;br&amp;gt;I come see this show...|dialogue_jp=…私、先輩のすすめで&amp;lt;br&amp;gt;ライブを観にきたんですけど|char_id=838332|voiceline=cv_magireco0_01_01_015}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=And hearing their dreams and wishes—&amp;lt;br&amp;gt;it was all so beautiful!|dialogue_jp=夢とか、願いとか&amp;lt;br&amp;gt;なんだか素敵だなぁって|char_id=838332|voiceline=cv_magireco0_01_01_016}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=I couldn&#039;t help but cry.|dialogue_jp=それで、思わず&amp;lt;br&amp;gt;涙が出てしまって…|char_id=838332|voiceline=cv_magireco0_01_01_017}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=Do you have one? A wish, I mean.|dialogue_jp=あなたにはありますか？&amp;lt;br&amp;gt;「願い」|char_id=838332|voiceline=cv_magireco0_01_01_018}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Do you?|dialogue_jp=…そういうキミにはあるの？|char_id=101031|voiceline=cv_magireco0_01_01_019}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=If I could make one wish,&amp;lt;br&amp;gt;it would be to save someone.|dialogue_jp=私は、もし願いが叶うなら&amp;lt;br&amp;gt;誰かを救いたいって思うんです|char_id=838332|voiceline=cv_magireco0_01_01_020}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=I think that was the first time&amp;lt;br&amp;gt;I&#039;d ever truly regretted my wish.|dialogue_jp=あのとき、アタシは初めて&amp;lt;br&amp;gt;本当の意味で自分の願いに対して&amp;lt;br&amp;gt;後悔をしたんだと思う|voiceline=cv_magireco0_01_01_021}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=To be honest, I feel kind of embarrassed&amp;lt;br&amp;gt;that I&#039;d never regretted it before now.|dialogue_jp=今まで、一度も後悔しなかったことを&amp;lt;br&amp;gt;恥ずかしいって感じるくらいにはね|voiceline=cv_magireco0_01_01_022}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_99_10045_01.png}}&lt;br /&gt;
{{Story Transcript/Video|cs=y|vid=Movie/3DMovie/mv4063.m3u8}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_99_90263_01.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_045_this_morning}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=|speaker_jp=|dialogue_en=&amp;quot;We&#039;ve hit the streets to ask...&amp;lt;br&amp;gt;If you could only have one wish,&amp;lt;br&amp;gt;what would it be?&amp;quot;|dialogue_jp=「街行く人に聞いてみました！&amp;lt;br&amp;gt;　もしも、ひとつだけ願いが叶うとしたら？」|voiceline=cv_magireco0_01_01_023}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_99_90328_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=|charname_jp=|dialogue_en=I can wish for anything I want?&amp;lt;br&amp;gt;Then I&#039;d wish for no more wars.|dialogue_jp=なんでも叶うというのなら&amp;lt;br&amp;gt;世界から戦争がなくなったらいいですよね|char_id=801101|voiceline=cv_magireco0_01_01_024}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=|charname_jp=|dialogue_en=I&#039;d wish for all the children in the world&amp;lt;br&amp;gt;to be happy.|dialogue_jp=すべての子どもたちの幸せ…でしょうか|char_id=800800|voiceline=cv_magireco0_01_01_025}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=|charname_jp=|dialogue_en=I&#039;d wanna cure my sick friend.|dialogue_jp=友だちの病気を治したいです|char_id=836931|voiceline=cv_magireco0_01_01_026}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_99_90263_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko&#039;s Older Brother|charname_jp=ももこの兄|dialogue_en=As long as I&#039;m in the starting lineup,&amp;lt;br&amp;gt;I don&#039;t need any other wish.|dialogue_jp=スタメンに選ばれれば&amp;lt;br&amp;gt;今は他に願いはないや|char_id=800501|voiceline=cv_magireco0_01_01_027}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko&#039;s Younger Brother|charname_jp=ももこの弟|dialogue_en=A new video game!|dialogue_jp=オレは新しいゲーム！|char_id=801300|voiceline=cv_magireco0_01_01_028}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko&#039;s Mother|charname_jp=ももこの母|dialogue_en=Speaking of wishes... Do you remember that&amp;lt;br&amp;gt;adorable dream you used to have, Momoko?|dialogue_jp=願いと言えば、ももこも&amp;lt;br&amp;gt;前は可愛い夢があったわよね|char_id=800600|voiceline=cv_magireco0_01_01_029}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko&#039;s Mother|charname_jp=ももこの母|dialogue_en=You always used to say you wanted to be&amp;lt;br&amp;gt;a princess.|dialogue_jp=ほら、お姫様になりたいって&amp;lt;br&amp;gt;よく言ってたじゃない？|char_id=800600|voiceline=cv_magireco0_01_01_030}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Yeah, when I was like, five years old!|dialogue_jp=なっ！&amp;lt;br&amp;gt;５歳とかの頃の話だろ！|char_id=101031|voiceline=cv_magireco0_01_01_031}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko&#039;s Mother|charname_jp=ももこの母|dialogue_en=You don&#039;t need a wish granted for that.&amp;lt;br&amp;gt;You&#039;ve always been a little princess at home.|dialogue_jp=お願いなんかしなくても&amp;lt;br&amp;gt;ずーっと我が家のお姫様なのに|char_id=800600|voiceline=cv_magireco0_01_01_032}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko&#039;s Father|charname_jp=ももこの父|dialogue_en=What&#039;s it nowadays, then? Love?&amp;lt;br&amp;gt;Nah, not possible! Bwahaha!|dialogue_jp=今は恋の願いだったり&amp;lt;br&amp;gt;んなわけねーか、ガハハ！|char_id=800700|voiceline=cv_magireco0_01_01_033}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Ugh, that&#039;s it... I&#039;m goin&#039; to school!|dialogue_jp=まったく…&amp;lt;br&amp;gt;アタシ、もう学校行くからな！|char_id=101031|voiceline=cv_magireco0_01_01_034}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90003_01.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_012_remain}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I can&#039;t believe Dad guessed it right!|dialogue_jp=…なんっで父さんが&amp;lt;br&amp;gt;ちょっと当ててるんだよ！|char_id=101031|voiceline=cv_magireco0_01_01_035}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I was outta there so quick, there&#039;s no way&amp;lt;br&amp;gt;they saw it on my face... Right?|dialogue_jp=急いで逃げてきたけど&amp;lt;br&amp;gt;アタシ、顔に出てなかったよな…|char_id=101031|voiceline=cv_magireco0_01_01_036}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I can&#039;t let anyone find out what my wish was!|dialogue_jp=あんな願い&amp;lt;br&amp;gt;絶対にバレるわけにいかない…|char_id=101031|voiceline=cv_magireco0_01_01_037}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=&amp;quot;The courage to confess my feelings.&amp;quot;&amp;lt;br&amp;gt;What was I even thinkin&#039;? It was so outta&amp;lt;br&amp;gt;character for me.|dialogue_jp=だって、アタシの願いは&amp;lt;br&amp;gt;“告白のための勇気”なんて&amp;lt;br&amp;gt;らしくない願いだったんだから|voiceline=cv_magireco0_01_01_038}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90265_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=If I could make one wish,&amp;lt;br&amp;gt;it would be to save someone.|dialogue_jp=私は、もし願いが叶うなら&amp;lt;br&amp;gt;誰かを救いたいって思うんです|char_id=838332|voiceline=cv_magireco0_01_01_039}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90003_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=*Sigh*&amp;lt;br&amp;gt;I thought I&#039;d forgotten,&amp;lt;br&amp;gt;but apparently not...|dialogue_jp=はぁ…忘れてたのに&amp;lt;br&amp;gt;思い出しちまったよ…|char_id=101031|voiceline=cv_magireco0_01_01_040}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(I thought I&#039;d come to terms&amp;lt;br&amp;gt;with my wish long ago...)|dialogue_jp=（願いとは、とっくに&amp;lt;br&amp;gt;　折り合いつけたはずなのにな…）|char_id=101031|voiceline=cv_magireco0_01_01_041}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Huh? My Soul Gem&#039;s lookin&#039; a little cloudy...|dialogue_jp=…あれ、アタシのソウルジェム&amp;lt;br&amp;gt;ちょっと濁ってる…？|char_id=101031|voiceline=cv_magireco0_01_01_042}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=When did that happen?&amp;lt;br&amp;gt;Oh well...|dialogue_jp=いつの間に…&amp;lt;br&amp;gt;まぁ、いいか|char_id=101031|voiceline=cv_magireco0_01_01_043}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=|speaker_jp=|dialogue_en=*Rustle*|dialogue_jp=カサ|voiceline=}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Hm?|dialogue_jp=…ん？|char_id=101031|voiceline=cv_magireco0_01_01_045}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(What&#039;s a notebook doin&#039; here?)|dialogue_jp=（こんなところに&amp;lt;br&amp;gt;　ノートが落ちてる…？）|char_id=101031|voiceline=cv_magireco0_01_01_046}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=|speaker_jp=|dialogue_en=*Rustle*|dialogue_jp=パラ|voiceline=}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Oh? There&#039;s somethin&#039; inside.)|dialogue_jp=（おっと…&amp;lt;br&amp;gt;　なんか挟まってたのか）|char_id=101031|voiceline=cv_magireco0_01_01_048}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(A pressed flower bookmark?)|dialogue_jp=（…押し花の栞？）|char_id=101031|voiceline=cv_magireco0_01_01_049}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Wonder what this purple flower is...)|dialogue_jp=（この紫色の花&amp;lt;br&amp;gt;　なんだったっけか…）|char_id=101031|voiceline=cv_magireco0_01_01_050}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(&#039;Kay, let&#039;s see who this belongs to.)|dialogue_jp=（えっと、持ち主は…）|char_id=101031|voiceline=cv_magireco0_01_01_051}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=...?!|dialogue_jp=――っ!?|char_id=101031|voiceline=cv_magireco0_01_01_052}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(I sense a Witch...)|dialogue_jp=（魔女の反応…）|char_id=101031|voiceline=cv_magireco0_01_01_053}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(I&#039;m not happy about how cloudy&amp;lt;br&amp;gt;my Soul Gem&#039;s lookin&#039;, but I&#039;ve got&amp;lt;br&amp;gt;no choice.)|dialogue_jp=（ソウルジェムの濁りは&amp;lt;br&amp;gt;　気になるけど、やるしかないか）|char_id=101031|voiceline=cv_magireco0_01_01_054}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90443_01.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_029_the_crow}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=*Sob*|dialogue_jp=うっ…|char_id=101030|voiceline=cv_magireco0_01_01_055}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=So, I&#039;m new to this whole&amp;lt;br&amp;gt;Magical Girl thing...|dialogue_jp=…こっちは魔法少女に&amp;lt;br&amp;gt;なりたてなんだから…|char_id=101030|voiceline=cv_magireco0_01_01_056}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=You mind goin&#039; easy on me?|dialogue_jp=ちょっとは手加減しろよ…|char_id=101030|voiceline=cv_magireco0_01_01_057}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=As if a Witch would listen to me...|dialogue_jp=なんて、魔女が&amp;lt;br&amp;gt;聞いてくれるわけないよな…|char_id=101030|voiceline=cv_magireco0_01_01_058}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Gah!|dialogue_jp=ぐあっ！|char_id=101030|voiceline=cv_magireco0_01_01_059}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Uh-oh... This ain&#039;t lookin&#039; good.)|dialogue_jp=（どうする…このままじゃ）|char_id=101030|voiceline=cv_magireco0_01_01_060}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Ah...|dialogue_jp=あ…|char_id=101030|voiceline=cv_magireco0_01_01_061}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(I can&#039;t move my legs...&amp;lt;br&amp;gt;C&#039;mon! You gotta be kiddin&#039; me!)|dialogue_jp=（足が動かない…&amp;lt;br&amp;gt;　なんで、こんな）|char_id=101030|voiceline=cv_magireco0_01_01_062}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Am I gonna die ashamed of my wish?)|dialogue_jp=（アタシは願いも誇れないまま&amp;lt;br&amp;gt;　死んじまうのかよ…）|char_id=101030|voiceline=cv_magireco0_01_01_063}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=Yaaah!|dialogue_jp=やぁっ！|voiceline=cv_magireco0_01_01_064}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_005_place_to_hunt}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=Are you okay?!|dialogue_jp=大丈夫ですか!?|char_id=100630|voiceline=cv_magireco0_01_01_065}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=I&#039;ve never seen you around before.&amp;lt;br&amp;gt;Are you a newbie?|dialogue_jp=…見かけない顔ね&amp;lt;br&amp;gt;新入りかしら？|char_id=100230|voiceline=cv_magireco0_01_01_066}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Oh, uh...|dialogue_jp=あ…いや…|char_id=101030|voiceline=cv_magireco0_01_01_067}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Thanks for savin&#039; me there...&amp;lt;br&amp;gt;Wait... That face...|dialogue_jp=助けてくれてありがとう…って&amp;lt;br&amp;gt;その顔…|char_id=101030|voiceline=cv_magireco0_01_01_068}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=Oh, you recognize me?|dialogue_jp=…私のこと&amp;lt;br&amp;gt;知っているのかしら？|char_id=100230|voiceline=cv_magireco0_01_01_069}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=You kiddin&#039; me?! You&#039;re Yachiyo Nanami,&amp;lt;br&amp;gt;the model! You&#039;re crazy famous at school!|dialogue_jp=そりゃ、七海やちよと言えば&amp;lt;br&amp;gt;モデルで…学校でも有名だし…|char_id=101030|voiceline=cv_magireco0_01_01_070}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=You&#039;re like, the veteran of Kamihama Magical&amp;lt;br&amp;gt;Girls! How could I NOT recognize you?|dialogue_jp=神浜の魔法少女の中でも&amp;lt;br&amp;gt;ベテランで名が知れてて…！|char_id=101030|voiceline=cv_magireco0_01_01_071}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Well, I&#039;m flattered... But I&#039;m not sure&amp;lt;br&amp;gt;how I feel about the term &amp;quot;veteran...&amp;quot;|dialogue_jp=知ってもらえてるのは嬉しいけど&amp;lt;br&amp;gt;“ベテラン”はちょっと複雑ね…|char_id=100230|voiceline=cv_magireco0_01_01_072}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=Oh my... This is no time for a chat.|dialogue_jp=あら…おしゃべりをしている&amp;lt;br&amp;gt;場合じゃないみたいですよ|char_id=100630|voiceline=cv_magireco0_01_01_073}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_still_04_00_0030.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=???|charname_jp=？？？|dialogue_en=Let&#039;s go, Yachan!|dialogue_jp=いきましょう、やっちゃん|voiceline=cv_magireco0_01_01_074}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Right. I can&#039;t risk embarrassing myself&amp;lt;br&amp;gt;in front of a junior.|dialogue_jp=ええ、後輩に恥ずかしい姿を&amp;lt;br&amp;gt;見せるわけにはいかないわ|voiceline=cv_magireco0_01_01_075}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90443_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo &amp;amp; ???|charname_jp=やちよ＆？？？|dialogue_en=Yaaah!|dialogue_jp=やぁぁっ！|char_id=100230|voiceline=cv_magireco0_01_01_076}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=(Whoa! They&#039;re so in sync!&amp;lt;br&amp;gt;And look so cool!)|dialogue_jp=（すげぇ…&amp;lt;br&amp;gt;　息が合ってて、かっこいい）|char_id=101030|voiceline=cv_magireco0_01_01_077}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90443_01.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=adv_chara_01_004.png}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_01_90003_01.png}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=bgm01_adv_everyday1}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=So...&amp;lt;br&amp;gt;Thank you for saving me!|dialogue_jp=あの、助けてもらって&amp;lt;br&amp;gt;ありがとうございました！|char_id=101031|voiceline=cv_magireco0_01_01_078}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Yachiyo Nanami and...um...|dialogue_jp=えと、七海やちよさん…と|char_id=101031|voiceline=cv_magireco0_01_01_079}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Mifuyu Azusa|charname_jp=梓みふゆ|dialogue_en=Mifuyu Azusa. But you can call me Mifuyu.|dialogue_jp=梓みふゆです&amp;lt;br&amp;gt;みふゆでいいですよ|char_id=100632|voiceline=cv_magireco0_01_01_080}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Are you new to this...?|dialogue_jp=あなたは、新入りの子よね？|char_id=100234|voiceline=cv_magireco0_01_01_081}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Right! I&#039;m Momoko Togame!&amp;lt;br&amp;gt;I made my contract a little while ago!|dialogue_jp=あ、十咎ももこです！&amp;lt;br&amp;gt;少し前に契約しました！|char_id=101031|voiceline=cv_magireco0_01_01_082}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Well, I&#039;m so glad we were able to help you.|dialogue_jp=そう、助けられてよかったわ|char_id=100234|voiceline=cv_magireco0_01_01_083}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Mifuyu Azusa|charname_jp=梓みふゆ|dialogue_en=We actually only came back to look for&amp;lt;br&amp;gt;something we dropped. Lucky we did!|dialogue_jp=探し物のために&amp;lt;br&amp;gt;戻ってきたのが功を奏しましたね|char_id=100632|voiceline=cv_magireco0_01_01_084}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=You&#039;re looking for somethin&#039;?&amp;lt;br&amp;gt;It&#039;s not this notebook, is it?|dialogue_jp=探し物…それって&amp;lt;br&amp;gt;このノートじゃないですか？|char_id=101031|voiceline=cv_magireco0_01_01_085}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=My journal!&amp;lt;br&amp;gt;Thank you so much for this.|dialogue_jp=私の日記…！&amp;lt;br&amp;gt;ありがとう、助かったわ|char_id=100234|voiceline=cv_magireco0_01_01_086}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=I&#039;m guessing...you&#039;re not in a team yet?|dialogue_jp=ねぇ、ところであなた&amp;lt;br&amp;gt;チームは組んでいないの？|char_id=100234|voiceline=cv_magireco0_01_01_087}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Oh, um, nope... I&#039;m just goin&#039; with&amp;lt;br&amp;gt;the flow. Heheh...|dialogue_jp=あー、そうっすね…&amp;lt;br&amp;gt;なんか成り行きで…あはは|char_id=101031|voiceline=cv_magireco0_01_01_088}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Mifuyu Azusa|charname_jp=梓みふゆ|dialogue_en=Yachan...|dialogue_jp=やっちゃん…|char_id=100632|voiceline=cv_magireco0_01_01_089}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Mm hm...|dialogue_jp=…えぇ|char_id=100234|voiceline=cv_magireco0_01_01_090}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Would you like to join our team?|dialogue_jp=あなたさえよければ&amp;lt;br&amp;gt;うちのチームに来ない？|char_id=100234|voiceline=cv_magireco0_01_01_091}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=It can be challenging going at it alone,&amp;lt;br&amp;gt;as you&#039;ve seen today.|dialogue_jp=ひとりだと、今日みたいに&amp;lt;br&amp;gt;苦戦することもあるでしょうし|char_id=100234|voiceline=cv_magireco0_01_01_092}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=Though she&#039;s not here right now,&amp;lt;br&amp;gt;we usually have one other teammate.|dialogue_jp=今日はいないけど&amp;lt;br&amp;gt;もうひとり仲間もいるの|char_id=100234|voiceline=cv_magireco0_01_01_093}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Mifuyu Azusa|charname_jp=梓みふゆ|dialogue_en=She can come across as a little standoffish,&amp;lt;br&amp;gt;but she&#039;s sweet and lovely at heart.|dialogue_jp=ツンツンはしていますが&amp;lt;br&amp;gt;根は優しくて可愛い方なので|char_id=100632|voiceline=cv_magireco0_01_01_094}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Mifuyu Azusa|charname_jp=梓みふゆ|dialogue_en=I&#039;m sure you&#039;ll like her.|dialogue_jp=ももこさんとも&amp;lt;br&amp;gt;すぐ仲良くなれると思うんです|char_id=100632|voiceline=cv_magireco0_01_01_095}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Yachiyo Nanami|charname_jp=七海やちよ|dialogue_en=And we don&#039;t have to make it official right&amp;lt;br&amp;gt;away. We could start with a trial run&amp;lt;br&amp;gt;if you prefer. To test the waters?|dialogue_jp=正式なチームじゃなくて&amp;lt;br&amp;gt;お試しでもいいから、どう？|char_id=100234|voiceline=cv_magireco0_01_01_096}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Oh...|dialogue_jp=あー…|char_id=101031|voiceline=cv_magireco0_01_01_097}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I really appreciate the offer, but no thanks!|dialogue_jp=ありがたい話なんですけど&amp;lt;br&amp;gt;すみません！|char_id=101031|voiceline=cv_magireco0_01_01_098}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I&#039;m fine.|dialogue_jp=アタシなら、大丈夫なんで|char_id=101031|voiceline=cv_magireco0_01_01_099}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Well, see ya!|dialogue_jp=それじゃあ！|char_id=101031|voiceline=cv_magireco0_01_01_100}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Illustration|cs=y|img=bg_adv_99_90273_01.png}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=*Huff* *Huff*|dialogue_jp=はぁ…はぁ…|char_id=101031|voiceline=cv_magireco0_01_01_101}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=Two ultra cool and fierce Magical Girls asked&amp;lt;br&amp;gt;me to join their team... This is like, the&amp;lt;br&amp;gt;dream scenario. I should be jumpin&#039; for joy.|dialogue_jp=強くてかっこいい魔法少女の先輩から&amp;lt;br&amp;gt;チームになろうだなんて…&amp;lt;br&amp;gt;本当なら、嬉しすぎる提案のはず|voiceline=cv_magireco0_01_01_102}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=But I don&#039;t have any right to be&amp;lt;br&amp;gt;on their team.|dialogue_jp=でも、アタシには&amp;lt;br&amp;gt;仲間になる資格なんてないんだ|voiceline=cv_magireco0_01_01_103}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=I bet they made wonderful, selfless wishes.&amp;lt;br&amp;gt;Me and my selfish wish could never stand&amp;lt;br&amp;gt;shoulder-to-shoulder with them.|dialogue_jp=きっと素晴らしい願いを叶えたふたりに&amp;lt;br&amp;gt;アタシみたいな&amp;lt;br&amp;gt;自分のための願いをしたやつが&amp;lt;br&amp;gt;肩を並べていいわけがない|voiceline=cv_magireco0_01_01_104}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=music_01_01_001_inception}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Ugh, I&#039;m so pathetic!|dialogue_jp=クソ…情けねぇ…！|char_id=101031|voiceline=cv_magireco0_01_01_105}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=What am I doin&#039;, mopin&#039; around?!|dialogue_jp=何をうじうじしてんだ、アタシ！|char_id=101031|voiceline=cv_magireco0_01_01_106}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=My wish has been granted already.&amp;lt;br&amp;gt;It&#039;s done. I can&#039;t take it back now.|dialogue_jp=叶っちまった願いは取り消せない&amp;lt;br&amp;gt;取り戻すことはできない|voiceline=cv_magireco0_01_01_107}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=If I don&#039;t wanna live my life regrettin&#039; it,&amp;lt;br&amp;gt;I might as well try and make the most of&amp;lt;br&amp;gt;bein&#039; a Magical Girl.|dialogue_jp=…なら、アタシは願いを後悔しないように&amp;lt;br&amp;gt;魔法少女になってよかったって&amp;lt;br&amp;gt;そう言えるヤツになってやるんだ|voiceline=cv_magireco0_01_01_108}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=A Magical Girl&#039;s duty is to save people.|dialogue_jp=魔法少女の本分は、人を救うこと|voiceline=cv_magireco0_01_01_109}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=So, I gotta learn to help people.&amp;lt;br&amp;gt;Then I can live proud of my wish.|dialogue_jp=だから、人を助けられる魔法少女になって&amp;lt;br&amp;gt;自分の願いを誇れるように生きるんだ|voiceline=cv_magireco0_01_01_110}}&lt;br /&gt;
{{Story Transcript/Narration/Test|cs=y|speaker_en=Momoko Togame|speaker_jp=十咎ももこ|dialogue_en=Then my wish itself won&#039;t even matter.|dialogue_jp=そうすりゃきっと&amp;lt;br&amp;gt;願いなんて、どうだってよくなる|voiceline=cv_magireco0_01_01_111}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=Someday, I&#039;m gonna be a strong and fierce&amp;lt;br&amp;gt;Magical Girl who can stand beside those two.|dialogue_jp=いつか、ふたりと並べるくらい&amp;lt;br&amp;gt;強くてかっこいい魔法少女になる|char_id=101031|voiceline=cv_magireco0_01_01_112}}&lt;br /&gt;
{{Story Transcript/Dialogue|charname_en=Momoko Togame|charname_jp=十咎ももこ|dialogue_en=I&#039;m gonna be a Magical Girl who&amp;lt;br&amp;gt;can protect everyone!|dialogue_jp=みんなを守れる&amp;lt;br&amp;gt;魔法少女になってやる！|char_id=101031|voiceline=cv_magireco0_01_01_113}}&lt;br /&gt;
{{Story Transcript/Music|cs=y|track=stop}}&lt;br /&gt;
{{Story Transcript/Footer}}&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration/Test&amp;diff=232462</id>
		<title>Template:Story Transcript/Narration/Test</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration/Test&amp;diff=232462"/>
		<updated>2025-11-16T14:11:39Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;tr style=&amp;quot;opacity:80%;&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|nm|{{{speaker_en|{{{speaker|}}}}}}|{{{speaker_jp|}}}|{{{char_link|}}}|&amp;lt;!--char_id--&amp;gt;|&amp;lt;!--img_override--&amp;gt;|&amp;lt;!--gametitle--&amp;gt;|Narration|{{{voiceline|}}}|{{{voiceline2|}}}|{{{voiceline3|}}}|{{{voiceline4|}}}}}&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|d|&#039;&#039;{{{dialogue_en|{{{dialogue|}}}}}}&#039;&#039;|&#039;&#039;{{{dialogue_jp|}}}&#039;&#039;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
See [[Template:Magia Exedra Story Transcript]] for usage.[[Category:Magia Exedra Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232461</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232461"/>
		<updated>2025-11-16T12:28:20Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: i kinda like name-by-img, but it kinda sucks if the character name is too long. trying to fix that&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nm - a function for the side nameplate in Dialogue and Narration &lt;br /&gt;
_.nm = function(frame)&lt;br /&gt;
    local name_en = frame.args[1]&lt;br /&gt;
    local name_jp = frame.args[2]&lt;br /&gt;
    local charlink = frame.args[3]&lt;br /&gt;
    local char_id = frame.args[4]&lt;br /&gt;
    local img_override = frame.args[5]&lt;br /&gt;
    local gametitle = frame.args[6]&lt;br /&gt;
    local narration = frame.args[7]&lt;br /&gt;
    local voicefile1 = frame.args[8]&lt;br /&gt;
    local voicefile2 = frame.args[9]&lt;br /&gt;
    local voicefile3 = frame.args[10]&lt;br /&gt;
    local voicefile4 = frame.args[11]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if narration ~= nil and narration ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;(Narration)&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    elseif (char_id ~= nil and char_id ~= &amp;quot;&amp;quot;) or (img_override ~= nil and img_override ~= nil) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. _.icon(char_id, img_override, gametitle) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (name_en ~= nil and name_en ~= &amp;quot;&amp;quot;) or (name_jp ~= nil and name_jp ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. _.ch(name_en, name_jp, charlink) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if voicefile1 ~= nil and voicefile1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = result .. &amp;quot;&amp;lt;div&amp;gt;&amp;quot; .. _.v(voicefile1, voicefile2, voicefile3, voicefile4) .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    result = &amp;quot;&amp;lt;th style=\&amp;quot;width: 20%\&amp;quot;&amp;gt;&amp;quot; .. result .. &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration&amp;diff=232460</id>
		<title>Template:Story Transcript/Narration</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Template:Story_Transcript/Narration&amp;diff=232460"/>
		<updated>2025-11-16T10:16:33Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: adding a space&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;!--&lt;br /&gt;
   --&amp;gt;&amp;lt;th style=&amp;quot;width: 20%&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
      --&amp;gt;(Narration)&amp;lt;!--&lt;br /&gt;
      --&amp;gt;{{#if:{{{speaker_en|{{{speaker|{{{speaker_jp|}}}}}}}}}|&amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;}}{{#invoke:Tscript|ch|{{{speaker_en|{{{speaker|}}}}}}|{{{speaker_jp|}}}|{{{char_link|}}}}}&amp;lt;!--&lt;br /&gt;
      --&amp;gt;{{#invoke:Tscript|v|{{{voiceline|}}}|{{{voiceline2|}}}|{{{voiceline3|}}}|{{{voiceline4|}}}}}&amp;lt;!--&lt;br /&gt;
   --&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#invoke:Tscript|n|{{{dialogue_en|{{{dialogue|}}}}}}|{{{dialogue_jp|}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
See [[Template:Magia Exedra Story Transcript]] for usage.[[Category:Magia Exedra Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232459</id>
		<title>Module:Tscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.puella-magi.net/w/index.php?title=Module:Tscript&amp;diff=232459"/>
		<updated>2025-11-16T09:23:00Z</updated>

		<summary type="html">&lt;p&gt;EPFBot: removing &amp;lt;br&amp;gt;s, ill deal with them differently&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- A set of modules to deal with transcripts. See Template:Story_Transcript .&lt;br /&gt;
&lt;br /&gt;
local _ = {}&lt;br /&gt;
&lt;br /&gt;
-- icon - A function to deal with character icon&lt;br /&gt;
_.icon = function(frame)&lt;br /&gt;
    local char_id = frame.args[1]&lt;br /&gt;
    local img_override = frame.args[2]&lt;br /&gt;
    local gametitle = frame.args[3]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if img_override ~= nil and img_override ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = img_override&lt;br /&gt;
    elseif char_id ~= nil and char_id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;Story Icon &amp;quot; .. char_id .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        -- this will have to be fixed in the python script, for now I have no magireco transcripts to worry about so I&#039;m leaving &amp;quot;empty&amp;quot; as an option in&lt;br /&gt;
        if gametitle == &amp;quot;Exedra&amp;quot; or gametitle == nil or gametitle == &amp;quot;&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;Exedra &amp;quot; .. result&lt;br /&gt;
        elseif gametitle == &amp;quot;MagiReco&amp;quot; then&lt;br /&gt;
        	result = &amp;quot;MagiReco &amp;quot; .. result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if result ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. result .. &amp;quot;|80px]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ch - A function to deal with character naming, linking, categorizing.&lt;br /&gt;
_.ch = function(frame)&lt;br /&gt;
    -- first argument is also the en charname&lt;br /&gt;
    local charname_en = frame.args[1]&lt;br /&gt;
    local charname_jp = frame.args[2]&lt;br /&gt;
    local charlink_initial = frame.args[3]&lt;br /&gt;
	local charlink_final = &amp;quot;&amp;quot;&lt;br /&gt;
    local result = charname_en&lt;br /&gt;
    local category = &amp;quot;&amp;quot;&lt;br /&gt;
    --also prepare nonmagireco link characters one day&lt;br /&gt;
    local categorizable_chars = mw.loadJsonData [[Module:Tscript/categorizable_chars.json]]&lt;br /&gt;
	local nonexedra_link_characters = mw.loadJsonData [[Module:Tscript/nonexedra_link_characters.json]]&lt;br /&gt;
    &lt;br /&gt;
    if charname_jp ~= nil and charname_jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = charname_en .. &amp;quot; / &amp;quot; .. charname_jp&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(categorizable_chars) do&lt;br /&gt;
        if value == charname_en then&lt;br /&gt;
            category = &amp;quot;[[Category:&amp;quot; .. charname_en .. &amp;quot; in Story]]&amp;quot;&lt;br /&gt;
			if charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot; then&lt;br /&gt;
                charlink_final = charname_en .. &amp;quot; in Magia Exedra&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            break&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if (charlink_initial == nil or charlink_initial == &amp;quot;&amp;quot;) and nonexedra_link_characters[charname_en] ~= nil then&lt;br /&gt;
        charlink_final = nonexedra_link_characters[charname_en]     &lt;br /&gt;
	elseif charlink_initial ~= nil and charlink_initial ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        charlink_final = charlink_initial&lt;br /&gt;
    end&lt;br /&gt;
    if charlink_final ~= nil and charlink_final ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &amp;quot;[[&amp;quot; .. charlink_final .. &amp;quot;|&amp;quot; .. result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if result == nil then&lt;br /&gt;
        result = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return result .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- v - a function for dealing with voicelines.&lt;br /&gt;
_.v = function(frame)&lt;br /&gt;
    local v1 = frame.args[1]&lt;br /&gt;
    local v2 = frame.args[2]&lt;br /&gt;
    local v3 = frame.args[3]&lt;br /&gt;
    local v4 = frame.args[4]&lt;br /&gt;
    local r = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if v1 ~= nil and v1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = &amp;quot;[[File:&amp;quot; .. v1 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
        if v2 ~= nil and v2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r = r .. &amp;quot;[[File:&amp;quot; .. v2 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
            if v3 ~= nil and v3 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = r .. &amp;quot;[[File:&amp;quot; .. v3 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                if v4 ~= nil and v4 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = r .. &amp;quot;[[File:&amp;quot; .. v4 .. &amp;quot;.ogg]]&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- d - a function for dialogue.&lt;br /&gt;
_.d = function(frame)&lt;br /&gt;
    local en = frame.args[1]&lt;br /&gt;
    local jp = frame.args[2]&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- n - a function for narration. should be almost identical to d&lt;br /&gt;
_.n = function(frame)&lt;br /&gt;
	local en = frame.args[1]&lt;br /&gt;
	local jp = frame.args[2]&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	    if en == nil then&lt;br /&gt;
        en = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if jp ~= nil and jp ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 40%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. jp .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        result = &#039;&amp;lt;td style=&amp;quot;width: 80%;&amp;quot;&amp;gt;&amp;lt;i style=&amp;quot;opacity:80%&amp;quot;&amp;gt;&#039; .. en .. &#039;&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- cs - a function for proper colspan for Music and Illustration, depending on whether the transcript is a legacy English-only one, or a bilingual one.&lt;br /&gt;
_.cs = function(frame)&lt;br /&gt;
    local a = frame.args[1]&lt;br /&gt;
    local result = &#039;colspan=2&#039;&lt;br /&gt;
    if a ~= nil and a ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        result = &#039;colspan=3&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return _&lt;/div&gt;</summary>
		<author><name>EPFBot</name></author>
	</entry>
</feed>