/*globals
ngv seal  */
var global = (function() {
    return this;
})();
if (!global.ngv) {
    global.ngv = {};
}
if (!global.ngv.fw) {
    global.ngv.fw = {};
}
String.prototype.supplant = function (o) {
    return this.replace(/\{([^{}]*)\}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
};
ngv.fw.content = {
    id:"FW_1_0",
    lang:"EN",
    emotions: {
        Angry: {
            name: "Angry",
            description: "",
            soundmix: "sounds/Anger/Short/anger_S_ens_128.mp3",
            sounda: "sounds/Anger/Short/anger_S_flut_128.mp3",
            soundb: "sounds/Anger/Short/anger_S_perc_128.mp3",
            soundc: "sounds/Anger/Short/anger_S_sham_128.mp3",
            urlname: "The-duel-between-Miyamoto-Musashi-and-Tsukahara-Bokuden",
            icon: "images/fm/sounds/small/1-Angrily.jpg",
            length: 11
        },
        Brave: {
            name: "Brave",
            description: "",
            soundmix: "sounds/Brave/Short/brave_S_ens_128.mp3",
            sounda: "sounds/Brave/Short/brave_S_flut_128.mp3",
            soundb: "sounds/Brave/Short/brave_S_perc_128.mp3",
            soundc: "sounds/Brave/Short/brave_S_sham_128.mp3",
            urlname: "Raiko-breaks-Hakamadare-s-magical-spelland-captures-him",
            icon: "images/fm/sounds/small/2-Bravely1.jpg",
            length: 13
        },
        Clever: {
            name: "Clever",
            description: "",
            soundmix: "sounds/Clever/Short/clever_S_ens_128.mp3",
            sounda: "sounds/Clever/Short/clever_S_flut_128.mp3",
            soundb: "sounds/Clever/Short/clever_S_perc_128.mp3",
            soundc: "sounds/Clever/Short/clever_S_sham_128.mp3",
            urlname: "The-king-of-the-Tengus-teaching-martial-arts-to-Yoshitsune",
            icon: "images/fm/sounds/small/3-Cleverly.jpg",
            length: 9
        },
        Courageous: {
            name: "Courageous",
            description: "",
            soundmix: "sounds/Courage/Short/courage_S_ens_128.mp3",
            sounda: "sounds/Courage/Short/courage_S_flut_128.mp3",
            soundb: "sounds/Courage/Short/courage_S_perc_128.mp3",
            soundc: "sounds/Courage/Short/courage_S_sham_128.mp3",
            urlname: "A-woman-saving-the-nation",
            icon: "images/fm/sounds/small/4-Courageously.jpg",
            length: 17
        },
        Desperate: {
            name: "Desperate",
            description: "",
            soundmix: "sounds/Desperate/Short/desperate_S_ens_128.mp3",
            sounda: "sounds/Desperate/Short/desperate_S_flut_128.mp3",
            soundb: "sounds/Desperate/Short/desperate_S_perc_128.mp3",
            soundc: "sounds/Desperate/Short/desperate_S_sham_128.mp3",
            urlname: "The-death-of-Kusunoki-Masatsura",
            icon: "images/fm/sounds/small/5-Desperately.jpg",
            length: 12
        },
        Dutiful: {
            name: "Dutiful",
            description: "",
            soundmix: "sounds/Dutiful/Short/dutiful_S_ens_128.mp3",
            sounda: "sounds/Dutiful/Short/dutiful_S_flut_128.mp3",
            soundb: "sounds/Dutiful/Short/dutiful_S_perc_128.mp3",
            soundc: "sounds/Dutiful/Short/dutiful_S_sham_128.mp3",
            urlname: "Kirino-Toshiaki-s-wife",
            icon: "images/fm/sounds/small/6-Dutifully.jpg",
            length: 19
        },
        Heroic: {
            name: "Heroic",
            description: "",
            soundmix: "sounds/Heroic/Short/heroic_S_ens_128.mp3",
            sounda: "sounds/Heroic/Short/heroic_S_flut_128.mp3",
            soundb: "sounds/Heroic/Short/heroic_S_perc_128.mp3",
            soundc: "sounds/Heroic/Short/heroic_S_sham_128.mp3",
            urlname: "The-actor-Onoe-Kikugoro-V-in-the-play-The-Death-of-Shinohara-Kunimoto-in-Battle",
            icon: "images/fm/sounds/small/7-Heroically.jpg",
            length: 14
        },
        Hopeless: {
            name: "Hopeless",
            description: "",
            soundmix: "sounds/Hopeless/Short/hopeless_S_ens_128.mp3",
            sounda: "sounds/Hopeless/Short/hopeless_S_flut_128.mp3",
            soundc: "sounds/Hopeless/Short/hopeless_S_sham_128.mp3",
            urlname: "The-death-of-the-rebel-leaders-in-the-Battle-of-the-Kumamoto-Uprising",
            icon: "images/fm/sounds/small/8-Hopelessly.jpg",
            length: 20
        },
        Love: {
            name: "Love",
            description: "",
            soundmix: "sounds/Love/Short/love_S_ens_128.mp3",
            sounda: "sounds/Love/Short/love_S_flut_128.mp3",
            soundc: "sounds/Love/Short/love_S_sham_128.mp3",
            urlname: "The-lovers-Gompachi-and-Komurasaki",
            icon: "images/fm/sounds/small/9-Lovingly.jpg",
            length: 25
        },
        Menacing: {
            name: "Menacing",
            description: "",
            soundmix: "sounds/Menacing/Short/menacing_S_ens_128.mp3",
            sounda: "sounds/Menacing/Short/menacing_S_flut_128.mp3",
            soundb: "sounds/Menacing/Short/menacing_S_perc_128.mp3",
            soundc: "sounds/Menacing/Short/menacing_S_sham_128.mp3",
            urlname: "The-actor-Bando-Hikosaburo-in-two-roles-The-ghost-of-Kohada-Koheiji-and-his-sleeping-wife-Otawa-in-the-play-Iroiri-Otogigusa",
            icon: "images/fm/sounds/small/10-Menacingly.jpg",
            length: 22
        },
        Rash: {
            name: "Rash",
            description: "",
            soundmix: "sounds/Rash/Short/rash_S_ens_128.mp3",
            sounda: "sounds/Rash/Short/rash_S_flut_128.mp3",
            soundb: "sounds/Rash/Short/rash_S_perc_128.mp3",
            soundc: "sounds/Rash/Short/rash_S_sham_128.mp3",
            urlname: "Ushiwaka-overcoming-Benkei-at-theGojo-Bridge",
            icon: "images/fm/sounds/small/11-Rashly.jpg",
            length: 18
        },
        Resigned: {
            name: "Resigned",
            description: "",
            soundmix: "sounds/Resigned/Short/resigned_S_ens_128.mp3",
            sounda: "sounds/Resigned/Short/resigned_S_flut_128.mp3",
            soundb: "sounds/Resigned/Short/resigned_S_perc_128.mp3",
            soundc: "sounds/Resigned/Short/resigned_S_sham_128.mp3",
            urlname: "The-suicide-of-Saigo-Takamori",
            icon: "images/fm/sounds/small/12-Resignedly.jpg",
            length: 18
        },
        Sad: {
            name: "Sad",
            description: "",
            soundmix: "sounds/Sad/Short/sad_S_ens_128.mp3",
            sounda: "sounds/Sad/Short/sad_S_flut_128.mp3",
            soundc: "sounds/Sad/Short/sad_S_sham_128.mp3",
            urlname: "The-actor-Onoe-Baiko-IV-as-Yasukata-no-Borei-the-Ghost-of-Yasukata",
            icon: "images/fm/sounds/small/13-Sadly.jpg",
            length: 18
        },
        Shameful: {
            name: "Shameful",
            description: "",
            soundmix: "sounds/Shame/Short/shame_S_ens_128.mp3",
            sounda: "sounds/Shame/Short/shame_S_flut_128.mp3",
            soundb: "sounds/Shame/Short/shame_S_perc_128.mp3",
            soundc: "sounds/Shame/Short/shame_S_sham_128.mp3",
            urlname: "The-eight-canine-heroes-of-theHouse-of-Satomi",
            icon: "images/fm/sounds/small/14-Shamefully.jpg",
            length: 11
        },
        Sorrowful: {
            name: "Sorrowful",
            description: "",
            soundmix: "sounds/Sorrow/Short/sorrow_S_ens_128.mp3",
            sounda: "sounds/Sorrow/Short/sorrow_S_flut_128.mp3",
            soundb: "sounds/Sorrow/Short/sorrow_S_perc_128.mp3",
            soundc: "sounds/Sorrow/Short/sorrow_S_sham_128.mp3",
            urlname: "The-story-of-Umewaka-at-the-Sumida-river",
            icon: "images/fm/sounds/small/15-Sorrowfully.jpg",
            length: 30
        },
        Vengeful: {
            name: "Vengeful",
            description: "",
            soundmix: "sounds/Vengeful/Short/vengeful_S_ens_128.mp3",
            soundb: "sounds/Vengeful/Short/vengeful_S_perc_128.mp3",
            soundc: "sounds/Vengeful/Short/vengeful_S_sham_128.mp3",
            urlname: "Ichikawa-Udanji-as-the-ghost-of-Sogoro-in-the-play-Sakura-Sogoro",
            icon: "images/fm/sounds/small/16-Venegefully.jpg",
            length: 22
        }
    },
    ornaments: {
        wavylines: {
            basewidth: 192,
            baseheight: 294,
            stageimagewidth: 189,
            stageimageheight: 289,
            stageimage: "images/fm/Actions/action-wavy-lines.png"
        },
        speech: {
            basewidth: 192,
            baseheight: 147,
            stageimagewidth: 189,
            stageimageheight: 144,
            offsetx:80,
            offsety:-90,
            paddingleft:30,
            paddingtop:30,
            paddingright:30,
            paddingbottom:30,
            stageimage: "images/fm/Actions/action-speech.png"
        },
        dustcloud: {
            basewidth: 373,
            baseheight: 356,
            stageimagewidth: 366,
            stageimageheight: 350,
            stageimage: "images/fm/Actions/action-dust-cloud.png"
        },
        skull: {
            basewidth: 87,
            baseheight: 114,
            stageimagewidth: 85,
            stageimageheight: 112,
            stageimage: "images/fm/Actions/action-skull.png"
        },
        cherryblossom: {
            basewidth: 383,
            baseheight: 356,
            stageimagewidth: 376,
            stageimageheight: 350,
            stageimage: "images/fm/Actions/action-cherry-blossoms.png"
        },
        evilbubble: {
            basewidth: 192,
            baseheight: 154,
            stageimagewidth: 189,
            stageimageheight: 151,
            offsetx:70,
            offsety:-80,
            paddingleft:30,
            paddingtop:30,
            paddingright:30,
            paddingbottom:30,
            stageimage: "images/fm/Actions/action-evil-bubble.png"
        },
        raincloud: {
            basewidth: 284,
            baseheight: 245,
            stageimagewidth: 279,
            stageimageheight: 241,
            stageimage: "images/fm/Actions/action-rain-cloud.png"
        },
        dreambubble: {
            basewidth: 199,
            baseheight: 161,
            stageimagewidth: 195,
            stageimageheight: 158,
            offsetx:80,
            offsety:-90,
            paddingleft:30,
            paddingtop:30,
            paddingright:30,
            paddingbottom:30,
            stageimage: "images/fm/Actions/action-dream-bubble.png"
        }
    },
    actions: {
        Saysto: {
            name: "Says to",
            maxlength: 80,
            description: "The subject says something to the object.",
            urlname: "Kobayakawa-Takakage-debating-with-the-goblin-priest-Tengu-on-Mount-Hiko",
            textsuggestion: "Say something here",
            objects: ["on-stage", "self", "none"],
            showTextBox: true,
            ornaments: ["speech"],
            "onstage": "{subjectName} speaks to {objectName}",
            "onstagetext": "{subjectName} says \u201C{usertext}\u201D to {objectName}",
            "self": "{subjectName} mutters inaudibly",
            "selftext": "\u201C{usertext}\u201D says {subjectName} to {subPronoun}",
            "none": "{subjectName} speaks aloud to any who will listen",
            "nonetext": "\u201C{usertext}\u201D says {subjectName}",
            "nobody": "It certainly is quiet around here",
            doaction: function(o) {
                var bounceDistance = 80;
                var bounciness = 3; //
                var clipTime = Math.min(Math.max(o.time, 0 ), 1 );
                var bounce = ( -( clipTime - 1 ) *
                ( clipTime * bounciness - 1 ) + 1 ) * bounceDistance -
                bounceDistance;
                o.subPronoun = ({
                    male:"himself",
                    female:"herself",
                    object:"itself"
                })[o.subjectGender];
                o.actiontext = o.action[o.msgid].supplant(o);
                if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                    o.subject.hflip =  o.subject.hflip?
                    (o.subject.x - o.object.x) <= 0:
                    (o.subject.x - o.object.x) > 0;
                }
                var y = Math.max(144, o.subject.y + o.subheady()-bounce);
                var x = Math.max(0,
                    Math.min(840, o.subject.x + o.subheadx()));
                if (o.msgid !== "nobody") {
                    o.Ornament({
                        i: 0,
                        x: x,
                        y: y,
                        opacity: Math.min(o.time+0.2, 1),
                        text:o.usertext
                    });
                }
                return o;
            },
            icon: "images/fm/Actions/action-speech-thumb-small.jpg"
        },
        Challenges: {
            name: "Challenges",
            description: "The subject challenges the object.",
            showTextBox:true,
            textsuggestion:"Do Something!",
            urlname: "Cho-Jun-the-White-Splash-in-the-Waves-wrestling-in-the-river-with-Ri-Ki-theBlack-Whirl-Wind",
            objects: ["on-stage", "self", "none"],
            ornaments: ["speech"],
            "onstage": "{subjectName} issues a challenge to {objectName}",
            "onstagetext": "{subjectName} challenges {objectName} \u201CYou must {usertext}\u201D",
            "self": "{subjectName} resolves to challenge {subPronoun}",
            "selftext": "{subjectName} resolves to challenge {subPronoun} and announces \u201CI must{usertext}\u201D",
            "none": "{subjectName} issues a challenge to all the land",
            "nonetext": "{subjectName} issues a challenge to all the land and proclaims \u201C{usertext}\u201D",
            "nobody": "Things are looking pretty easy so far",
            doaction: function(o) {
                var bounceDistance = 80;
                var bounciness = 3; //
                var clipTime = Math.min(Math.max(o.time, 0 ), 1 );
                var bounce = ( -( clipTime - 1 ) *
                ( clipTime * bounciness - 1 ) + 1 ) * bounceDistance -
                bounceDistance;
                o.subPronoun = ({
                    male:"himself",
                    female:"herself",
                    object:"itself"
                })[o.subjectGender];
                o.actiontext = o.action[o.msgid].supplant(o);
                if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                    o.subject.hflip =  o.subject.hflip?
                    (o.subject.x - o.object.x) <= 0:
                    (o.subject.x - o.object.x) > 0;
                }
                var y = Math.max(144, o.subject.y + o.subheady()-bounce);
                var x = Math.max(0,
                    Math.min(840, o.subject.x + o.subheadx()));
                if (o.msgid !== "nobody") {
                    o.Ornament({
                        i: 0,
                        x: x,
                        y: y,
                        opacity: Math.min(o.time+0.2, 1),
                        text:"You must "+o.usertext
                    });
                }
                return o;
            },
            icon: "images/fm/Actions/action-speech-thumb-small.jpg"
        },
        Meditateson: {
            name: "Meditates on",
            description: "The subject meditates on the object.",
            urlname: "The-enlightenment-of-Jigoku-dayu",
            objects: ["on-stage", "self", "none"],
            showTextBox:true,
            textsuggestion:"a tree falling",
            ornaments: ["dreambubble"],
             "onstage": "{subjectName} meditates upon the nature of {objectName}",
                "onstagetext": "{subjectName} meditates upon {objectName} and thinks {usertext}",
                "self": "{subjectName} contemplates {subPronoun}",
                "selftext": "{subjectName} contemplates {subPronoun} and thinks {usertext}",
                "none": "{subjectName} empties {subPronoun} mind of distracting thoughts",
                "nonetext": "{subjectName} contemplates the nature of {usertext}",
                "nobody": "Nobody has time for meditation around here right now, there are stories to be told.",
            doaction: function(o) {
                var bounceDistance = 80;
                var bounciness = 3; //
                var clipTime = Math.min(Math.max(o.time, 0 ), 1 );
                var bounce = ( -( clipTime - 1 ) *
                ( clipTime * bounciness - 1 ) + 1 ) * bounceDistance -
                bounceDistance;
                o.subPronoun = ({
                    male:"himself",
                    female:"herself",
                    object:"itself"
                })[o.subjectGender];
                o.actiontext = o.action[o.msgid].supplant(o);
                if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                    o.subject.hflip =  o.subject.hflip?
                    (o.subject.x - o.object.x) <= 0:
                    (o.subject.x - o.object.x) > 0;
                }
                if (o.msgid !== "nobody") {
                    o.Ornament({
                        i: 0,
                        x: o.subject.x + o.subheadx(),
                        y: o.subject.y + o.subheady()-bounce,
                        opacity: Math.min(o.time+0.2, 1)
                    });
                }
                return o;            },
            icon: "images/fm/Actions/action-dream-bubble-thumb-small.jpg"
        },
        Dreamsof: {
            name: "Dreams of",
            description: "The subject dreams about the object.",
            urlname: "A-woman-saving-the-nation",
            objects: ["on-stage", "self", "none"],
            ornaments: ["dreambubble"],
            showTextBox:true,
            "onstage": "{subjectName}\u2019s thoughts turn to dreams of {objectName}",
            "onstagetext": "{subjectName} dreams of {objectName} and {usertext}",
            "self": "{subjectName} dreams of {subPronoun}",
            "selftext": "{subjectName} dreams of {subPronoun} {usertext}",
            "none": "{subjectName} abandons all hopes and dreams",
            "nonetext": "{subjectName} dreams of {usertext}",
            "nobody": "A terrible fate has befallen the land.  It has lost all it\u2019s dreams.  Why not make some up for it?",
            doaction: function(o) {
                var bounceDistance = 80;
                var bounciness = 3; //
                var clipTime = Math.min(Math.max(o.time, 0 ), 1 );
                var bounce = ( -( clipTime - 1 ) *
                ( clipTime * bounciness - 1 ) + 1 ) * bounceDistance -
                bounceDistance;
                o.subPronoun = ({
                    male:"himself",
                    female:"herself",
                    object:"itself"
                })[o.subjectGender];
                o.actiontext = o.action[o.msgid].supplant(o);
                if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                    o.subject.hflip =  o.subject.hflip?
                    (o.subject.x - o.object.x) <= 0:
                    (o.subject.x - o.object.x) > 0;
                }
                if (o.msgid !== "nobody") {
                    o.Ornament({
                        i: 0,
                        x: o.subject.x + o.subheadx(),
                        y: o.subject.y + o.subheady()-bounce,
                        opacity: Math.min(o.time+0.2, 1)
                    });
                }
                return o;
            },
            icon: "images/fm/Actions/action-dream-bubble-thumb-small.jpg"
        },
        Curses: {
            name: "Curses",
            description: "The subject curses the object.",
            urlname: "Theatrical-scene-The-cat-spectre-in-the-old-temple",
            objects: ["on-stage"],
            ornaments: ["evilbubble", "raincloud"],
            showTextBox:true,
            "onstage": "{subjectName} curses {objectName}",
            "onstagetext": "{subjectName} curses {objectName} with the words \u201C{usertext}\u201D",
            "self": "{subjectName} curses {subPronoun} foolishness",
            "selftext": "{subjectName} curses {subPronoun} {usertext}",
            "none": "{subjectName} bites {subPronoun} tongue and curses no one",
            "nonetext": "{subjectName} curses {usertext}",
            "nobody": "Isn\u2019t it lovely how nice everyone is being to everyone else around here.",
            doaction: function(o) {
                var bounceDistance = 80;
                var bounciness = 3; //
                var clipTime = Math.min(Math.max(o.time, 0 ), 1 );
                var bounce = ( -( clipTime - 1 ) *
                ( clipTime * bounciness - 1 ) + 1 ) * bounceDistance -
                bounceDistance;
                o.subPronoun = ({
                    male:"his",
                    female:"her",
                    object:"its"
                })[o.subjectGender];
                o.actiontext = o.action[o.msgid].supplant(o);
                if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                    o.subject.hflip =  o.subject.hflip?
                    (o.subject.x - o.object.x) <= 0:
                    (o.subject.x - o.object.x) > 0;
                    o.Ornament({
                        i: 1,
                        x: o.object.x + o.objheadx(),
                        y: o.object.y + o.objheady()-bounce,
                        opacity: Math.min(o.time+0.2, 1)
                    });
                }
                if (o.msgid !== "nobody" && o.msgid!=="none") {
                    o.Ornament({
                        i: 0,
                        x: o.subject.x + o.subheadx(),
                        y: o.subject.y + o.subheady()-bounce,
                        opacity: Math.min(o.time+0.2, 1),
                        text:o.usertext
                    });
                }
                return o;
            },
            icon: "images/fm/Actions/action-evil-bubble-thumb-small.jpg"
        },
        Enchants: {
            name: "Enchants",
            description: "The subject casts a spell upon the object.",
            urlname: "Taira-no-Kiyomori-stopping-the-descentof-the-sun",
            objects: ["on-stage"],
            showTextBox:true,
            textsuggestion:"Klaatu Berada Nikto",
            ornaments: ["speech", "cherryblossom",  "cherryblossom"],
            "onstage": "{subjectName} casts an enchantment over {objectName}",
            "onstagetext": "{subjectName} casts an enchantment over {objectName}, causing {objPronoun} to {usertext}",
            "self": "{subjectName} casts an enchantment over {subPronoun}",
            "selftext": "{subjectName} casts an enchantment over {subPronoun}, causing {subPronoun} to {usertext}",
            "none": "{subjectName} begins to cast an enchantment but forgets the words",
            "nonetext": "{subjectName} casts an enchantment over {usertext}",
            "nobody": "How unenchanting.",
            doaction: function(o) {
                var bounceDistance = 80;
                var bounciness = 3; //
                var clipTime = Math.min(Math.max(o.time, 0 ), 1 );
                var bounce = ( -( clipTime - 1 ) *
                ( clipTime * bounciness - 1 ) + 1 ) * bounceDistance -
                bounceDistance;
                var cwSpiral = {
                    x:Math.cos(o.time*2)*o.time,
                    y:Math.sin(o.time*2)*o.time
                };
                var ccwSpiral = {
                    x:Math.cos(-1-o.time*2)*o.time,
                    y:Math.sin(-1-o.time*2)*o.time
                };
                o.subPronoun = ({
                    male:"himself",
                    female:"herself",
                    object:"itself"
                })[o.subjectGender];
                o.objPronoun = ({
                    male:"him",
                    female:"her",
                    object:"it"
                })[o.objectGender];
                o.actiontext = o.action[o.msgid].supplant(o);
                if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                    o.subject.hflip =  o.subject.hflip?
                    (o.subject.x - o.object.x) <= 0:
                    (o.subject.x - o.object.x) > 0;
                    o.Ornament({
                        i: 1,
                        x: o.object.x + o.objheadx()+cwSpiral.x*10,
                        y: o.object.y + o.objheady()+cwSpiral.y*10,
                        opacity: Math.sin(o.time+0.2, 1)*0.5+0.5
                    });
                    o.Ornament({
                        i: 2,
                        x: o.object.x + o.objheadx()+ccwSpiral.x*10,
                        y: o.object.y + o.objheady()+ccwSpiral.y*10,
                        opacity: Math.cos(o.time+0.2, 1)*0.5+0.5
                    });
                }
                if (o.msgid !== "nobody") {
                    o.Ornament({
                        i: 0,
                        x: o.subject.x + o.subheadx(),
                        y: o.subject.y + o.subheady()-bounce,
                        opacity: Math.min(o.time+0.2, 1),
                        text: o.usertext
                    });
                }
                return o;
            },
            icon: "images/fm/Actions/action-cherry-blossoms-thumb-small.jpg"
        },
        Captures: {
            name: "Captures",
            description: "The subject captures the object.",
            urlname: "The-actor-Ichikawa-Sadanji-I-asSano-Jirozaemon",
            objects: ["on-stage"],
            ornaments: ["dustcloud"],
            "onstage": "{subjectName} seizes {objectName}",
            "none": "{subjectName} lunges forth but comes away empty handed",
            "nobody": "Freedom reigns",
            doaction: function(o) {
                 var clipTime = Math.min(Math.max(o.time/o.duration, 0 ), 1 );
                 var attackMove = 1-(clipTime >= 0.5?
                 -Math.pow(((clipTime*2)-1),2)+1:
                 Math.pow(clipTime*2,2));
                 var poofFade = Math.pow(Math.sin(clipTime*Math.PI),30);
                 var shrink = Math.cos(clipTime*Math.PI)*0.5+0.5;
                 o.actiontext = (o.action[o.msgid]||"").supplant(o);
                 if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                     o.subject.x = o.subject.x*attackMove +
                     o.object.x*(1-attackMove);
                     o.subject.y = o.subject.y*attackMove +
                     o.object.y*(1-attackMove);
                     o.subject.scale = o.subject.scale*attackMove +
                     o.object.scale*(1-attackMove);
                     o.object.x = clipTime>=0.5?o.subject.x:o.object.x;
                     o.object.y = clipTime>=0.5?o.subject.y:o.object.y;
                     o.object.scale = o.object.scale*shrink + 25*(1-shrink);
                     o.subject.hflip =  o.subject.hflip?
                     (o.subject.x - o.object.x) <= 0:
                     (o.subject.x - o.object.x) > 0;
                     

                     (o.object||{}).opacity = Math.round(shrink*100)/100;
                     if(clipTime===1){
                         delete o.actors[o.objectid];
                     }
                     
                 }
                 
                 o.Ornament({
                     i: 0,
                     x: o.subject.x,
                     y: o.subject.y,
                     opacity: Math.round(poofFade*100)/100
                 });

                 return o;
            },
            icon: "images/fm/Actions/action-dust-cloud-thumb-small.jpg"
        },
        Steals: {
            name: "Steals",
            description: "The subject steals (or kidnaps) the object.",
            urlname: "The-old-demon-woman-retrieving-her-arm",
            objects: ["on-stage"],
            "onstageprop": "{subjectName} skilfully steals {objectName}",
            "onstageperson": "{subjectName} boldly kidnaps {objectName}",
            "self": "{subjectName} steals away silently",
            "none": "{subjectName} cannot bring {subPronoun} to take what is not rightfully {subPronoun2}",
            "nobody": "Law and order is maintained. The local samuri pat themselves on the back and settle down for a long nap.",
            doaction: function(o) {
                 var clipTime = Math.min(Math.max(o.time/o.duration, 0 ), 1 );
                 var attackMove = 1-(clipTime >= 0.5?
                 -Math.pow(((clipTime*2)-1),2)+1:
                 Math.pow(clipTime*2,2));
                 var shrink = Math.cos(clipTime*Math.PI)*0.5+0.5;
                 o.subPronoun = ({
                     male:"himself",
                     female:"herself",
                     object:"itself"
                 })[o.subjectGender];
                 o.subPronoun2 = ({
                     male:"his",
                     female:"hers",
                     object:"its own"
                 })[o.subjectGender];
                 if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                     o.msgid =
                     ({
                          male:"onstageperson",
                          female:"onstageperson",
                          object:"onstageprop"
                      })[o.objectGender];
                 }
                 o.actiontext = (o.action[o.msgid]||"").supplant(o);
                 if(o.msgid === "onstageperson" || o.msgid === "onstageprop"){
                     o.subject.x = o.subject.x*attackMove +
                     o.object.x*(1-attackMove);
                     o.subject.y = o.subject.y*attackMove +
                     o.object.y*(1-attackMove);
                     o.subject.scale = o.subject.scale*attackMove +
                     o.object.scale*(1-attackMove);
                     o.object.x = clipTime>=0.5?o.subject.x:o.object.x;
                     o.object.y = clipTime>=0.5?o.subject.y:o.object.y;
                     o.object.scale = o.object.scale*shrink + 25*(1-shrink);
                     o.subject.hflip =  o.subject.hflip?
                     (o.subject.x - o.object.x) <= 0:
                     (o.subject.x - o.object.x) > 0;
                     o.object.opacity = shrink;
                           if(clipTime===1){
                                 delete o.actors[o.objectid];
                             }
                 }
                 return o;
            },
            icon: "images/fm/Actions/action-wavy-lines-thumb-small.jpg"
        },
        Loves: {
            name: "Loves",
            description: "The subject falls in love with the object.",
            urlname: "The-lovers-Gompachi-and-Komurasaki",
            objects: ["on-stage", "self"],
            showTextBox:false,
            ornaments: ["cherryblossom", "cherryblossom"],
            "onstage": "{subjectName} falls deeply in love with {objectName}",
            "self": "{subjectName} is overcome with vanity at {subPronoun} own beauty and wit",
            "none": "{subjectName}\u2019s heart becomes as cold as stone",
            "nobody": "A sense of loathing spreads across the land",
            doaction: function(o) {
                 var clipTime = Math.min(Math.max(o.time/o.duration, 0 ), 1 );
                 var loveMove = -Math.cos(clipTime*Math.PI*2)*0.25+0.25;
                 var poofFade = Math.pow(Math.sin(clipTime*Math.PI),30);
                 o.subPronoun = ({
                     male:"his",
                     female:"her",
                     object:"its"
                 })[o.subjectGender];
                 o.actiontext = (o.action[o.msgid]||"").supplant(o);
                 if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                     var sx=o.subject.x, sy=o.subject.y, ss=o.subject.scale;
                     var ox=o.object.x, oy=o.object.y, os=o.object.scale;
                     o.object.x = Math.floor(sx*loveMove+ox*(1-loveMove));
                     o.object.y =  Math.floor(sy*loveMove+oy*(1-loveMove));
                     o.object.scale =  ss*loveMove+os*(1-loveMove);
                     o.subject.x = Math.floor(ox*loveMove+sx*(1-loveMove));
                     o.subject.y = Math.floor(oy*loveMove+sy*(1-loveMove));
                     o.subject.scale = os*loveMove+ss*(1-loveMove);
                     o.subject.hflip =  o.subject.hflip?
                     (o.subject.x - o.object.x) <= 0:
                     (o.subject.x - o.object.x) > 0;
                 }
                 if (o.msgid !== "nobody" && o.msgid !=="none") {
                     o.Ornament({
                         i: 0,
                         x: Math.floor(o.subject.x+Math.cos(o.time)*20),
                         y: Math.floor(o.subject.y+Math.sin(o.time)*20),
                         opacity: Math.floor(poofFade*100)/100
                     });
                     if(o.msgid !== "self"){
                     o.Ornament({
                         i: 1,
                         x: Math.floor(o.object.x+Math.cos(-o.time)*20),
                         y: Math.floor(o.object.y+Math.sin(-o.time)*20),
                         opacity: Math.floor(poofFade*100)/100
                     });
                    }
                 }
                 return o;
            },
            icon: "images/fm/Actions/action-cherry-blossoms-thumb-small.jpg"
        },
        Attacks: {
            name: "Attacks",
            description: "The subject attacks the object.",
            urlname: "Two-brave-heroes-battling-near-the-white-foot-of-Mt-Ryozan",
            objects: ["on-stage"],
            ornaments: ["dustcloud"],
            "onstage": "{subjectName} engages {objectName} in battle",
             "none": "{subjectName} furiously lashes out at the air, expending much energy but achieving little.",
             "nobody": "A sense of peace and serenity reigns over the land",
            doaction: function(o) {
                var clipTime = Math.min(Math.max(o.time/o.duration, 0 ), 1 );
                var attackMove = ((1-clipTime) >= 0.5?
                 -Math.pow((((1-clipTime)*2)-1),2)+1:
                 Math.pow((1-clipTime)*2,2))*0.5;
                var poofFade = Math.pow(Math.sin(clipTime*Math.PI),30);
                o.actiontext = (o.action[o.msgid]||"").supplant(o);
                if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                    var sx=o.subject.x, sy=o.subject.y, ss=o.subject.scale;
                    var ox=o.object.x, oy=o.object.y, os=o.object.scale;
                    o.object.x = sx*attackMove+ox*(1-attackMove);
                    o.object.y =  sy*attackMove+oy*(1-attackMove);
                    o.object.scale =  ss*attackMove+os*(1-attackMove);
                    o.subject.x = ox*attackMove+sx*(1-attackMove);
                    o.subject.y = oy*attackMove+sy*(1-attackMove);
                    o.subject.scale = os*attackMove+ss*(1-attackMove);
                    o.subject.hflip =  o.subject.hflip?
                    (o.subject.x - o.object.x) <= 0:
                    (o.subject.x - o.object.x) > 0;
                    o.object.hflip =  o.object.hflip?
                     (o.object.x - o.subject.x) <= 0:
                     (o.object.x - o.subject.x) > 0;
                }
                if (o.msgid !== "nobody") {
                    o.Ornament({
                        i: 0,
                        x: o.object.x+Math.cos(-o.time)*20,
                        y: o.object.y+Math.sin(-o.time)*20,
                        opacity: Math.floor(poofFade*100)/100
                    });
                }
                return o;
            },
            icon: "images/fm/Actions/action-dust-cloud-thumb-small.jpg"
        },
        Defeats: {
            name: "Defeats",
            description: "The subject defeats the object.",
            urlname: "The-death-of-Kusunoki-Masatsura",
            objects: ["on-stage"],
            ornaments: ["dustcloud", "raincloud"],
                "onstage": "{subjectName} vanquishes {objectName}",
                "none": "{subjectName} fights poorly today and cannot win",
                "nobody": "nothing happens",
            doaction: function(o) {
                var clipTime = Math.min(Math.max(o.time/o.duration, 0 ), 1 );
                var attackMove = ((1-clipTime) >= 0.5?
                 -Math.pow((((1-clipTime)*2)-1),2)+1:
                 Math.pow((1-clipTime)*2,2))*0.5;
                var poofFade = Math.pow(Math.sin(clipTime*Math.PI),30);
                var bounceDistance = 100;
                var bounciness = 3; //
                var bounce = ( -( clipTime - 1 ) *
                ( clipTime * bounciness - 1 ) + 1 ) * bounceDistance -
                bounceDistance;
                o.actiontext = (o.action[o.msgid]||"").supplant(o);
                if(o.msgid === "onstage" || o.msgid === "onstagetext"){
                    var sx=o.subject.x, sy=o.subject.y, ss=o.subject.scale;
                    var ox=o.object.x, oy=o.object.y, os=o.object.scale;
                    o.object.x = sx*attackMove+ox*(1-attackMove);
                    o.object.y =  sy*attackMove+oy*(1-attackMove);
                    o.object.scale =  ss*attackMove+os*(1-attackMove);
                    o.subject.x = ox*attackMove+sx*(1-attackMove);
                    o.subject.y = oy*attackMove+sy*(1-attackMove);
                    o.subject.scale = os*attackMove+ss*(1-attackMove);
                    //turn to face each other
                         o.subject.hflip =  o.subject.hflip?
                            (o.subject.x - o.object.x) <= 0:
                            (o.subject.x - o.object.x) > 0;
                        o.object.hflip =  o.object.hflip?
                         (o.object.x - o.subject.x) <= 0:
                         (o.object.x - o.subject.x) > 0;
                         o.Ornament({
                             i: 1,
                             x: o.object.x-bounce,
                             y: o.object.y-bounce,
                             opacity: bounce
                         });
                }
                if (o.msgid !== "nobody") {
                    o.Ornament({
                        i: 0,
                        x: o.object.x+Math.cos(-o.time)*20,
                        y: o.object.y+Math.sin(-o.time)*20,
                        opacity: Math.floor(poofFade*100)/100
                    });
                }
                return o;
            },
            icon: "images/fm/Actions/action-rain-cloud-thumb-small.jpg"
        },
        Reveals: {
            name: "Reveals",
            description: "The subject reveals the object.",
            urlname: "The-death-of-the-rebel-leaders-in-the-Battle-of-the-Kumamoto-Uprising",
            objects: ["off-stage","self"],
            "onstage": "{subjectName} reveals {objectName}",
             "self": "{subjectName} reveals {subPronoun}",
             "none": "{subjectName} is skilled in the art of subterfuge and reveals nothing",
             "nobody":"nothing happens",
            doaction: function(o) {
                var clipTime = o.time/o.duration;
                o.subPronoun = ({
                    "male": "himself",
                    "female": "herself",
                    "object": "itself"
                })[o.subjectGender];
                o.actiontext = (o.action[o.msgid]||"").supplant(o);
                if(o.msgid === "onstage"){
                    var halfclip = clipTime*0.5;
                    o.object.opacity = clipTime;
                    o.object.x = o.subject.x*(1-halfclip) + (o.subject.hflip? 0: 1000)*halfclip;
                }
                if(o.msgid === "self"){
                    o.subject.opacity = clipTime;
                }
                return o;
            },
            icon: "images/fm/Actions/action-wavy-lines-thumb-small.jpg"
        },
        Letsgoof: {
            name: "Lets Go Of",
            description: "The subject lets go of the object.",
            urlname: "Shirai-Gompachi",
            objects: ["off-stage", "self"],
            "onstage": "{subjectName} releases {objectName}",
            "self": "{subjectName} feels a great sense of freedom",
            "none": "{subjectName} lets nobody escape their clutches",
            "nobody": "nothing happens",
            doaction: function(o) {
                var clipTime = o.time/o.duration;
                o.subPronoun = ({
                    "male": "himself",
                    "female": "herself",
                    "object": "itself"
                })[o.subjectGender];
                o.actiontext = (o.action[o.msgid]||"").supplant(o);
                if(o.msgid === "onstage"){
                    var halfclip = clipTime*0.5;
                    o.object.opacity = clipTime;
                    o.object.x = o.subject.x*(1-halfclip) + (o.subject.hflip? 0: 1000)*halfclip;
                }
                if(o.msgid === "self"){
                    o.subject.opacity = clipTime;
                }
                return o;
            },
            icon: "images/fm/Actions/action-wavy-lines-thumb-small.jpg"
        },
        Changesinto: {
            name: "Changes into",
            description: "The subject transforms into the object.",
            urlname: "The-eight-canine-heroes-of-theHouse-of-Satomi",
            objects: ["off-stage"],
            ornaments: ["wavylines"],
            "onstage": "In the twinkling of an eye {subjectName} transforms into {objectName}",
            "none": "In a puff of smoke {subjectName} vanishes",
            "nobody": "Nothing happens",
            doaction: function(o) {
                 var clipTime = o.time/o.duration;
                 var poofFade = Math.pow(Math.sin(clipTime*Math.PI),15);
                 var subOp =  Math.floor((1-(clipTime*2))*100)/100;
                 var objOp = Math.floor(((clipTime-0.5)*2)*100)/100;
                 o.subject.opacity = subOp;
                 if(o.msgid === "onstage"){
                 (o.object||{}).opacity = objOp;
                 o.object.x=o.subject.x;
                 o.object.y=o.subject.y;
                }
                if(o.msgid!=="nobody"){
                o.Ornament({
                    i: 0,
                    x: o.subject.x+Math.cos(-o.time)*20,
                    y: o.subject.y+Math.sin(-o.time)*20,
                    opacity: Math.floor(poofFade*100)/100
                });
                }
                 o.actiontext = (o.action[o.msgid]||"").supplant(o);
                 if(o.time===o.duration){
                     delete o.actors[o.subjectid];
                 }
                return o;
            },
            icon: "images/fm/Actions/action-wavy-lines-thumb-small.jpg"
        },
        Sacrifices: {
            name: "Sacrifices",
            description: "The subject sacrifices themselves.",
            urlname: "The-suicide-of-Saigo-Takamori",
            ornaments: ["skull"],
            showTextBox:true,
            textsuggestion:"Optional Reason",
            objects: ["self"],
            "self": "{subjectName} sacrifices {subPronoun}",
            "selftext": "{subjectName} sacrifices {subPronoun} for the sake of {usertext}",
            "none":"Nobody is sacrificed",
            "nonetext":"Nobody is sacrificed",
            "nobody":"Nobody is sacrificed",
            doaction: function(o) {
                var bounceDistance = 80;
                var bounciness = 1; //
                var clipTime = Math.min(Math.max(o.time/o.duration, 0 ), 1 );
                var bounce = ( -( clipTime - 1 ) *
                ( clipTime * bounciness - 1 ) + 1 ) * bounceDistance -
                bounceDistance;
                var poofFade = -Math.cos(Math.min(1, Math.max( clipTime * clipTime,0) ) * Math.PI * 2 ) * 0.5 + 0.6;
                var sFade = Math.cos( Math.min( 1, Math.max( clipTime, 0 )  ) * Math.PI ) * 0.5 + 0.5;
                o.subPronoun = ({
                    "male": "himself",
                    "female": "herself",
                    "object": "itself"
                })[o.subjectGender];
                o.actiontext = (o.action[o.msgid]||"").supplant(o);
                if (o.msgid == "self") {
                    o.Ornament({
                        i: 0,
                        x: o.subject.x + o.subheadx(),
                        y: o.subject.y + o.subheady()-bounce,
                        opacity: poofFade
                    });
                    o.subject.opacity = sFade;
                    if(clipTime===1){
                        delete o.actors[o.subjectid];
                    }
                }
                return o;
            },
            icon: "images/fm/Actions/action-skull-thumb-small.jpg"
        },
        Dies: {
            name: "Dies",
            description: "The subject dies.",
            urlname: "The-actor-Onoe-Kikugoro-V-in-the-play-The-Death-of-Shinohara-Kunimoto-in-Battle",
            objects: ["self"],
            ornaments: ["skull"],
            "self": "{subjectName} feels the life drain from {subPronoun}",
            "none": "Nobody dies",
            "nobody": "Nobody dies",
            doaction: function(o) {
                var bounceDistance = 80;
                var bounciness = 1; //
                var clipTime = Math.min(Math.max(o.time/o.duration, 0 ), 1 );
                var bounce = ( -( clipTime - 1 ) *
                ( clipTime * bounciness - 1 ) + 1 ) * bounceDistance -
                bounceDistance;
             var poofFade = -Math.cos(Math.min(1, Math.max( clipTime * clipTime,0) ) * Math.PI * 2 ) * 0.5 + 0.6;
                var sFade = Math.cos( Math.min( 1, Math.max( clipTime, 0 )  ) * Math.PI ) * 0.5 + 0.5;
                o.subPronoun = ({
                    male:"himself",
                    female:"herself",
                    object:"itself"
                })[o.subjectGender];
                o.actiontext = (o.action[o.msgid]||"").supplant(o);
                if (o.msgid == "self") {
                    o.Ornament({
                        i: 0,
                        x: o.subject.x + o.subheadx(),
                        y: o.subject.y + o.subheady()-bounce,
                        opacity: poofFade
                    });
                    o.subject.opacity = sFade;
                    if(clipTime===1){
                        delete o.actors[o.subjectid];
                    }
                }
                return o;
            },
            icon: "images/fm/Actions/action-skull-thumb-small.jpg"
        }
    },
    backgrounds: {
        "GojoBridge": {
            "name": "Gojo Bridge",
            "urlname": "Ushiwaka-overcoming-Benkei-at-theGojo-Bridge",
            "stageimage": "images/fm/backgrounds/background-gojo-bridge.jpg",
            "color": "transparent",
            "icon": "images/fm/backgrounds/background-gojo-bridge-thumb-small.jpg",
            "largeicon": "images/fm/backgrounds/background-gojo-bridge-thumb-large.jpg"
        },
        "LakeBiwa": {
            "name": "Lake Biwa",
            "urlname": "The-story-of-Umewaka-at-the-Sumida-river",
            "stageimage": "images/fm/backgrounds/background-lake-biwa.jpg",
            "color": "transparent",
            "icon": "images/fm/backgrounds/background-lake-biwa-thumb-small.jpg",
            "largeicon": "images/fm/backgrounds/background-lake-biwa-thumb-large.jpg"
        },
        "Stormyboat": {
            "name": "Stormy boat",
            "urlname": "The-suicide-of-Saigo-Takamori",
            "stageimage": "images/fm/backgrounds/background-storm-boat.jpg",
            "color": "transparent",
            "icon": "images/fm/backgrounds/background-storm-boat-thumb-small.jpg",
            "largeicon": "images/fm/backgrounds/background-storm-boat-thumb-large.jpg"
        },
        "SumidaRiver": {
            "name": "Sumida River",
            "urlname": "Shirai-Gompachi",
            "stageimage": "images/fm/backgrounds/background-sumida-river.jpg",
            "color": "transparent",
            "icon": "images/fm/backgrounds/background-sumida-river-thumb-small.jpg",
            "largeicon": "images/fm/backgrounds/background-sumida-river-thumb-large.jpg"
        },
        "Riverbank": {
            "name": "River bank",
            "urlname": "Shirai-Gompachi",
            "stageimage": "images/fm/backgrounds/background-sumida-river2.jpg",
            "color": "transparent",
            "icon": "images/fm/backgrounds/background-sumida-river2-thumb-small.jpg",
            "largeicon": "images/fm/backgrounds/background-sumida-river2-thumb-large.jpg"
        },
        "Winterhut": {
            "name": "Winter hut",
            "urlname": "The-duel-between-Miyamoto-Musashi-and-Tsukahara-Bokuden",
            "stageimage": "images/fm/backgrounds/background-winter-hut.jpg",
            "color": "transparent",
            "icon": "images/fm/backgrounds/background-winter-hut-thumb-small.jpg",
            "largeicon": "images/fm/backgrounds/background-winter-hut-thumb-large.jpg"
        },
        "Winterlake": {
            "name": "Winter lake",
            "urlname": "Two-brave-heroes-battling-near-the-white-foot-of-Mt-Ryozan",
            "stageimage": "images/fm/backgrounds/background-winter-lake.jpg",
            "color": "transparent",
            "icon": "images/fm/backgrounds/background-winter-lake-thumb-small.jpg",
            "largeicon": "images/fm/backgrounds/background-winter-lake-thumb-large.jpg"
        },
        "MtRyozan": {
            "name": "Mt. Ryozan",
            "urlname": "Two-brave-heroes-battling-near-the-white-foot-of-Mt-Ryozan",
            "stageimage": "images/fm/backgrounds/background-winter-lake2.jpg",
            "color": "transparent",
            "icon": "images/fm/backgrounds/background-winter-lake2-thumb-small.jpg",
            "largeicon": "images/fm/backgrounds/background-winter-lake2-thumb-large.jpg"
        },
        "caveblack": {
            "name": "Cave black",
            "urlname": "Shiten-o-vanquishes-a-white-monkey-on-the-Kiso-Mountain-during-the-Yowa-period-1181-1182-",
            "stageimage": "none",
            "color": "rgb(0, 0, 0)"
        },
        "snowwhite": {
            "name": "Snow white",
            "urlname": "Two-brave-heroes-battling-near-the-white-foot-of-Mt-Ryozan",
            "stageimage": "none",
            "color": "rgb(255, 255, 255)"
        },
        "sunset": {
            "name": "Sunset",
            "urlname": "The-death-of-the-rebel-leaders-in-the-Battle-of-the-Kumamoto-Uprising",
            "stageimage": "none",
            "color": "rgb(224, 150, 105)"
        },
        "parchment": {
            "name": "Parchment",
            "urlname": "The-old-demon-woman-retrieving-her-arm",
            "stageimage": "none",
            "color": "rgb(212, 189, 152)"
        },
        "skyblue": {
            "name": "Sky blue",
            "urlname": "Shirai-Gompachi",
            "stageimage": "none",
            "color": "rgb(100, 128, 131)"
        },
        "teal": {
            "name": "Teal",
            "urlname": "Kirino-Toshiaki-s-wife",
            "stageimage": "none",
            "color": "rgb(67, 104, 87)"
        },
        "deepred": {
            "name": "Deep red",
            "urlname": "Two-brave-men-on-the-roof-of-Horyukaku",
            "stageimage": "none",
            "color": "rgb(139, 14, 28)"
        },
        "greysky": {
            "name": "Grey sky",
            "urlname": "The-actor-Ichikawa-Sadanji-I-asSano-Jirozaemon",
            "stageimage": "none",
            "color": "rgb(77, 79, 74)"
        },
        "defaultbg": {
            "name": "Nowhere",
            "stageimage": "none",
            "color": "rgb(212, 189, 152)",
            "visible":false
        }
    },
    actors: {
        "DaiShojobo": {
            "name": "Dai Shojobo",
            "urlname": "The-king-of-the-Tengus-teaching-martial-arts-to-Yoshitsune",
            "basewidth": 335,
            "baseheight": 228,
            "headx": -6,
            "heady": -66,
            "gender": "male",
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [155, 100, 80],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [454, 0],
            "stageimage": "images/fm/characters/character-dai-shojobo.png",
            "icon": "images/fm/characters/character-dai-shojobo-icon.png",
            "largeicon": "images/fm/characters/character-dai-shojobo-large-icon.png"
        },
        "Jigokudayu": {
            "name": "Jigoku-dayu",
            "urlname": "The-enlightenment-of-Jigoku-dayu",
            "basewidth": 262,
            "baseheight": 325,
            "headx": -33,
            "heady": -95,
            "gender": "female",
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [145, 100, 70],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/characters/character-jigoku-dayu.png",
            "icon": "images/fm/characters/character-jigoku-dayu-icon.png",
            "largeicon": "images/fm/characters/character-jigoku-dayu-large-icon.png"
        },
        "SlaveTrader": {
            "name": "Slave Trader",
            "urlname": "The-story-of-Umewaka-at-the-Sumida-river",
            "basewidth": 214,
            "baseheight": 334,
            "headx": 40,
            "heady": -101,
            "gender": "male",
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [165, 100, 70],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/characters/character-slave-trader.png",
            "icon": "images/fm/characters/character-slave-trader-icon.png",
            "largeicon": "images/fm/characters/character-slave-trader-large-icon.png"
        },
        "TenguPriest": {
            "name": "Tengu Priest",
            "urlname": "Kobayakawa-Takakage-debating-with-the-goblin-priest-Tengu-on-Mount-Hiko",
            "basewidth": 173,
            "baseheight": 350,
            "headx": -1,
            "heady": -134,
            "gender": "male",
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [155, 100, 67],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [454, 0],
            "stageimage": "images/fm/characters/character-tengu-priest.png",
            "icon": "images/fm/characters/character-tengu-priest-icon.png",
            "largeicon": "images/fm/characters/character-tengu-priest-large-icon.png"
        },
        "Umewaka": {
            "name": "Umewaka",
            "urlname": "The-story-of-Umewaka-at-the-Sumida-river",
            "basewidth": 263,
            "baseheight": 293,
            "headx": -47,
            "heady": -50,
            "gender": "male",
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [140, 100, 65],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [454, 0],
            "stageimage": "images/fm/characters/character-umekawa.png",
            "icon": "images/fm/characters/character-umekawa-icon.png",
            "largeicon": "images/fm/characters/character-umekawa-icon-large.png"
        },
        "Yoshitsune": {
            "name": "Yoshitsune",
            "urlname": "The-king-of-the-Tengus-teaching-martial-arts-to-Yoshitsune",
            "basewidth": 214,
            "baseheight": 382,
            "headx": -21,
            "heady": -34,
            "gender": "male",
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [150, 100, 68],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/characters/character-young-yoshitsune.png",
            "icon": "images/fm/characters/character-young-yoshitsune-icon.png",
            "largeicon": "images/fm/characters/character-young-yoshitsune-large-icon.png"
        },
        "Banner": {
            "name": "Banner",
            "urlname": "The-death-of-the-rebel-leaders-in-the-Battle-of-the-Kumamoto-Uprising",
            "basewidth": 188,
            "baseheight": 408,
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [135, 100, 60],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/props/prop-hata.png",
            "icon": "images/fm/props/prop-hata-icon.png",
            "largeicon": "images/fm/props/prop-hata-large-icon.png"
        },
        "Birds": {
            "name": "Birds",
            "urlname": "Two-brave-men-on-the-roof-of-Horyukaku",
            "basewidth": 342,
            "baseheight": 309,
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [150, 100, 75],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/props/prop-birds.png",
            "icon": "images/fm/props/prop-birds-icon.png",
            "largeicon": "images/fm/props/prop-birds-large-icon.png"
        },
        "Blossom": {
            "name": "Blossom",
            "urlname": "The-story-of-Umewaka-at-the-Sumida-river",
            "basewidth": 198,
            "baseheight": 220,
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [140, 100, 55],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/props/prop-blossom.png",
            "icon": "images/fm/props/prop-blossom-icon.png",
            "largeicon": "images/fm/props/prop-blossom-large-icon.png"
        },
        "Bundle": {
            "name": "Bundle",
            "urlname": "The-duel-between-Miyamoto-Musashi-and-Tsukahara-Bokuden",
            "basewidth": 206,
            "baseheight": 74,
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [160, 100, 75],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/props/prop-bundle.png",
            "icon": "images/fm/props/prop-bundle-icon.png",
            "largeicon": "images/fm/props/prop-bundle-large-icon.png"
        },
        "Fish": {
            "name": "Fish",
            "urlname": "Cho-Jun-the-White-Splash-in-the-Waves-wrestling-in-the-river-with-Ri-Ki-theBlack-Whirl-Wind",
            "basewidth": 144,
            "baseheight": 195,
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [140, 100, 70],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [454, 0],
            "stageimage": "images/fm/props/prop-fish.png",
            "icon": "images/fm/props/prop-fish-icon.png",
            "largeicon": "images/fm/props/prop-fish-icon-large.png"
        },
        "Incensepot": {
            "name": "Incense pot",
            "urlname": "The-king-of-the-Tengus-teaching-martial-arts-to-Yoshitsune",
            "basewidth": 171,
            "baseheight": 137,
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [140, 100, 70],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/props/prop-incense-burner.png",
            "icon": "images/fm/props/prop-incense-burner-icon.png",
            "largeicon": "images/fm/props/prop-incense-burner-large-icon.png"
        },
        "Lamp": {
            "name": "Lamp",
            "urlname": "The-enlightenment-of-Jigoku-dayu",
            "basewidth": 123,
            "baseheight": 440,
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [125, 100, 70],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/props/prop-lamp.png",
            "icon": "images/fm/props/prop-lamp-icon.png",
            "largeicon": "images/fm/props/prop-lamp-large-icon.png"
        },
        "Note": {
            "name": "Note",
            "urlname": "Theatrical-scene-The-cat-spectre-in-the-old-temple",
            "basewidth": 148,
            "baseheight": 162,
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [150, 100, 65],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/props/prop-note.png",
            "icon": "images/fm/props/prop-note-icon.png",
            "largeicon": "images/fm/props/prop-note-large-icon.png"
        },
        "Writingset": {
            "name": "Writing set",
            "urlname": "The-suicide-of-Saigo-Takamori",
            "basewidth": 197,
            "baseheight": 113,
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [145, 100, 65],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/props/prop-paper-and-pen.png",
            "icon": "images/fm/props/prop-paper-and-pen-icon.png",
            "largeicon": "images/fm/props/prop-paper-and-pen-large-icon.png"
        },
        "Roundbox": {
            "name": "Steamer",
            "urlname": "A-woman-saving-the-nation",
            "basewidth": 181,
            "baseheight": 114,
            "stageimagewidth": 1200,
            "stageimageheight": 1200,
            "scales": [145, 100, 60],
            "scaleoffsets": [0, 417, 692],
            "flipoffsets": [0, 454],
            "stageimage": "images/fm/props/prop-round-box.png",
            "icon": "images/fm/props/prop-round-box-icon.png",
            "largeicon": "images/fm/props/prop-round-box-large-icon.png"
        }
    }
};
if (global.seal) {
    seal(ngv.fw.content);
}

