commit c2ea8c5126163ae06a0e6ce534fe1782559bf6ea Author: Nes370 Date: Tue Jun 22 16:32:48 2021 -0700 Initial Commit Assets downloaded from NicoVideo. diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/Game.rpgproject b/Game.rpgproject new file mode 100644 index 0000000..47a6d70 --- /dev/null +++ b/Game.rpgproject @@ -0,0 +1 @@ +RPGMV 1.0.1 \ No newline at end of file diff --git a/audio/bgm/03_A_Hero's_Return.ogg b/audio/bgm/03_A_Hero's_Return.ogg new file mode 100644 index 0000000..6590ff7 Binary files /dev/null and b/audio/bgm/03_A_Hero's_Return.ogg differ diff --git a/audio/bgm/03_Childhood_Memories.ogg b/audio/bgm/03_Childhood_Memories.ogg new file mode 100644 index 0000000..5d99340 Binary files /dev/null and b/audio/bgm/03_Childhood_Memories.ogg differ diff --git a/audio/bgm/03_March_of_the_Tiny_Soldier.ogg b/audio/bgm/03_March_of_the_Tiny_Soldier.ogg new file mode 100644 index 0000000..2b78255 Binary files /dev/null and b/audio/bgm/03_March_of_the_Tiny_Soldier.ogg differ diff --git a/audio/bgm/03_Ruin_Rummage.ogg b/audio/bgm/03_Ruin_Rummage.ogg new file mode 100644 index 0000000..4837a7a Binary files /dev/null and b/audio/bgm/03_Ruin_Rummage.ogg differ diff --git a/audio/bgm/2000_Town2.ogg b/audio/bgm/2000_Town2.ogg new file mode 100644 index 0000000..64bae50 Binary files /dev/null and b/audio/bgm/2000_Town2.ogg differ diff --git a/audio/bgm/Castle2.ogg b/audio/bgm/Castle2.ogg new file mode 100644 index 0000000..d8e6696 Binary files /dev/null and b/audio/bgm/Castle2.ogg differ diff --git a/audio/bgm/Dungeon4.ogg b/audio/bgm/Dungeon4.ogg new file mode 100644 index 0000000..a26a248 Binary files /dev/null and b/audio/bgm/Dungeon4.ogg differ diff --git a/audio/bgs/Sea.ogg b/audio/bgs/Sea.ogg new file mode 100644 index 0000000..d4a714e Binary files /dev/null and b/audio/bgs/Sea.ogg differ diff --git a/audio/me/Item.ogg b/audio/me/Item.ogg new file mode 100644 index 0000000..fa653cc Binary files /dev/null and b/audio/me/Item.ogg differ diff --git a/audio/se/Book1.ogg b/audio/se/Book1.ogg new file mode 100644 index 0000000..d9e123d Binary files /dev/null and b/audio/se/Book1.ogg differ diff --git a/audio/se/Cat.ogg b/audio/se/Cat.ogg new file mode 100644 index 0000000..9ab9a45 Binary files /dev/null and b/audio/se/Cat.ogg differ diff --git a/audio/se/Cow.ogg b/audio/se/Cow.ogg new file mode 100644 index 0000000..6b05693 Binary files /dev/null and b/audio/se/Cow.ogg differ diff --git a/audio/se/Cursor2.ogg b/audio/se/Cursor2.ogg new file mode 100644 index 0000000..fcd702a Binary files /dev/null and b/audio/se/Cursor2.ogg differ diff --git a/audio/se/Damage3.ogg b/audio/se/Damage3.ogg new file mode 100644 index 0000000..eb5271a Binary files /dev/null and b/audio/se/Damage3.ogg differ diff --git a/audio/se/Dog.ogg b/audio/se/Dog.ogg new file mode 100644 index 0000000..da41d45 Binary files /dev/null and b/audio/se/Dog.ogg differ diff --git a/audio/se/Door1.ogg b/audio/se/Door1.ogg new file mode 100644 index 0000000..f86ce32 Binary files /dev/null and b/audio/se/Door1.ogg differ diff --git a/audio/se/Door5.ogg b/audio/se/Door5.ogg new file mode 100644 index 0000000..7a3087c Binary files /dev/null and b/audio/se/Door5.ogg differ diff --git a/audio/se/Equip3.ogg b/audio/se/Equip3.ogg new file mode 100644 index 0000000..9a50230 Binary files /dev/null and b/audio/se/Equip3.ogg differ diff --git a/audio/se/Ice4.ogg b/audio/se/Ice4.ogg new file mode 100644 index 0000000..48d4dd3 Binary files /dev/null and b/audio/se/Ice4.ogg differ diff --git a/audio/se/Item1.ogg b/audio/se/Item1.ogg new file mode 100644 index 0000000..82d9d8b Binary files /dev/null and b/audio/se/Item1.ogg differ diff --git a/audio/se/Jump1.ogg b/audio/se/Jump1.ogg new file mode 100644 index 0000000..a2940af Binary files /dev/null and b/audio/se/Jump1.ogg differ diff --git a/audio/se/Knock.ogg b/audio/se/Knock.ogg new file mode 100644 index 0000000..423cf22 Binary files /dev/null and b/audio/se/Knock.ogg differ diff --git a/audio/se/Laser1.ogg b/audio/se/Laser1.ogg new file mode 100644 index 0000000..742d596 Binary files /dev/null and b/audio/se/Laser1.ogg differ diff --git a/audio/se/Load.ogg b/audio/se/Load.ogg new file mode 100644 index 0000000..450a187 Binary files /dev/null and b/audio/se/Load.ogg differ diff --git a/audio/se/Move1.ogg b/audio/se/Move1.ogg new file mode 100644 index 0000000..9cd2492 Binary files /dev/null and b/audio/se/Move1.ogg differ diff --git a/audio/se/Move10.ogg b/audio/se/Move10.ogg new file mode 100644 index 0000000..96ef14b Binary files /dev/null and b/audio/se/Move10.ogg differ diff --git a/audio/se/Save.ogg b/audio/se/Save.ogg new file mode 100644 index 0000000..51a2ebd Binary files /dev/null and b/audio/se/Save.ogg differ diff --git a/audio/se/Transceiver.ogg b/audio/se/Transceiver.ogg new file mode 100644 index 0000000..2ebfcff Binary files /dev/null and b/audio/se/Transceiver.ogg differ diff --git a/data/Actors.json b/data/Actors.json new file mode 100644 index 0000000..882ed44 --- /dev/null +++ b/data/Actors.json @@ -0,0 +1,7 @@ +[ +null, +{"id":1,"battlerName":"","characterIndex":0,"characterName":"hime","classId":1,"equips":[1,1,2,3,0],"faceIndex":0,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"姫様","nickname":"","note":"","profile":""}, +{"id":2,"battlerName":"","characterIndex":1,"characterName":"hime","classId":2,"equips":[2,1,2,3,0],"faceIndex":2,"faceName":"Actor1","traits":[],"initialLevel":77,"maxLevel":99,"name":"侍女","nickname":"","note":"","profile":""}, +{"id":3,"battlerName":"","characterIndex":0,"characterName":"","classId":1,"equips":[0,0,0,0,0],"faceIndex":0,"faceName":"","traits":[],"initialLevel":1,"maxLevel":99,"name":"","nickname":"","note":"","profile":""}, +{"id":4,"battlerName":"","characterIndex":0,"characterName":"","classId":1,"equips":[0,0,0,0,0],"faceIndex":0,"faceName":"","traits":[],"initialLevel":1,"maxLevel":99,"name":"","nickname":"","note":"","profile":""} +] \ No newline at end of file diff --git a/data/Animations.json b/data/Animations.json new file mode 100644 index 0000000..e97274e --- /dev/null +++ b/data/Animations.json @@ -0,0 +1,123 @@ +[ +null, +{"id":1,"animation1Hue":0,"animation1Name":"Hit1","animation2Hue":0,"animation2Name":"","frames":[[],[[0,0,0,250,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0]],[[1,0,0,200,0,0,255,1]],[[2,0,0,200,0,0,255,1]],[[3,0,0,200,0,0,255,1]]],"name":"打撃/物理","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":1,"frame":0,"se":{"name":"Blow3","pan":0,"pitch":100,"volume":90}}]}, +{"id":2,"animation1Hue":0,"animation1Name":"Hit1","animation2Hue":0,"animation2Name":"HitPhoton","frames":[[],[[0,0,0,250,0,0,255,1],[100,-16,0,230,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0]],[[1,0,0,200,0,0,255,1],[101,-16,0,230,0,0,255,1]],[[2,0,0,200,0,0,255,1],[102,-16,0,230,0,0,255,1]],[[3,0,0,200,0,0,255,1],[103,-16,0,230,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[104,-16,0,230,0,0,180,1]]],"name":"打撃/エフェクト","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":0,"frame":0,"se":{"name":"Evasion2","pan":0,"pitch":150,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":1,"frame":1,"se":{"name":"Damage4","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Powerup","pan":0,"pitch":180,"volume":90}}]}, +{"id":3,"animation1Hue":0,"animation1Name":"Hit2","animation2Hue":0,"animation2Name":"HitFire","frames":[[[0,0,-12,150,0,0,255,1]],[[1,0,-12,150,0,0,255,1]],[[2,0,-12,150,0,0,255,1],[100,0,-12,225,0,0,255,1]],[[2,0,-12,165,0,0,180,1],[101,0,-12,225,0,0,255,1]],[[2,0,-12,172,0,0,100,1],[102,0,-12,225,0,0,255,1]],[[-1,0,-12,172,0,0,100,1],[103,0,-12,225,0,0,255,1]],[[-1,0,-12,172,0,0,100,1],[104,0,-12,225,0,0,255,1]],[[-1,0,-12,172,0,0,100,1],[105,0,-12,225,0,0,255,1]],[[-1,0,-12,172,0,0,100,1],[106,0,-12,225,0,0,255,1]],[[-1,0,-12,172,0,0,100,1],[107,0,-12,225,0,0,255,1]]],"name":"打撃/炎","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Fire1","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,119,102,221],"flashDuration":3,"flashScope":1,"frame":0,"se":{"name":"Blow3","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,136,51,153],"flashDuration":5,"flashScope":2,"frame":2,"se":null}]}, +{"id":4,"animation1Hue":0,"animation1Name":"Hit2","animation2Hue":0,"animation2Name":"HitIce","frames":[[[0,0,-12,150,0,0,255,1]],[[1,0,-12,150,0,0,255,1]],[[2,0,-12,150,0,0,255,1],[101,0,-12,120,0,0,255,1],[102,0,-12,195,0,0,255,1]],[[2,0,-12,165,0,0,180,1],[100,0,-12,210,0,0,255,1],[103,0,-12,240,0,0,255,1]],[[2,0,-12,172,0,0,100,1],[100,0,-12,195,0,0,255,1],[104,0,-12,240,0,0,255,1],[105,0,0,225,0,0,255,1],[108,0,-12,225,0,0,255,1]],[[101,0,-12,195,0,0,255,1],[104,0,-12,255,0,0,255,1],[108,0,-12,255,0,0,255,1],[106,0,0,165,0,0,255,1]],[[100,0,-12,180,0,0,255,1],[104,0,-12,262,0,0,180,1],[109,0,-12,210,0,0,255,1],[106,0,0,180,0,0,255,1]],[[101,0,-12,195,0,0,255,1],[104,0,-12,270,0,0,100,1],[109,0,-12,225,0,0,200,1],[107,0,0,180,0,0,255,1]],[[100,0,-12,180,0,0,255,1],[109,0,-12,240,0,0,100,1],[106,0,0,180,0,0,255,1]],[[101,0,-12,195,0,0,180,1],[107,0,0,180,0,0,255,1]],[[101,0,-12,195,0,0,100,1]]],"name":"打撃/氷","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Ice4","pan":0,"pitch":75,"volume":100}},{"flashColor":[119,187,255,221],"flashDuration":3,"flashScope":1,"frame":0,"se":{"name":"Blow3","pan":0,"pitch":100,"volume":100}},{"flashColor":[187,221,221,153],"flashDuration":5,"flashScope":2,"frame":2,"se":null}]}, +{"id":5,"animation1Hue":0,"animation1Name":"Hit2","animation2Hue":0,"animation2Name":"HitThunder","frames":[[[0,0,-12,150,0,0,255,1]],[[1,0,-12,150,0,0,255,1]],[[2,0,-12,150,0,0,255,1],[100,0,-12,225,0,0,255,1]],[[2,0,-12,165,0,0,180,1],[101,0,-12,225,0,0,255,1]],[[2,0,-12,172,0,0,100,1],[102,0,-12,225,0,0,255,1]],[[103,0,-12,225,0,0,255,1]],[[104,0,-12,225,0,0,255,1]],[[105,0,-12,225,0,0,255,1]],[[106,0,-12,225,0,0,255,1]],[[-1,0,-12,225,0,0,255,1],[106,0,-12,232,20,0,150,1]]],"name":"打撃/雷","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder8","pan":0,"pitch":80,"volume":100}},{"flashColor":[255,255,102,221],"flashDuration":3,"flashScope":1,"frame":0,"se":{"name":"Blow3","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,119,153],"flashDuration":5,"flashScope":2,"frame":2,"se":null}]}, +{"id":6,"animation1Hue":0,"animation1Name":"Slash","animation2Hue":0,"animation2Name":"","frames":[[[0,24,-42,180,0,0,255,1]],[[1,24,-42,180,0,0,255,1]],[[2,0,-18,180,0,0,255,1]],[[3,0,-18,180,0,0,255,1]],[[4,0,-18,180,0,0,255,1]]],"name":"斬撃/物理","position":1,"timings":[{"flashColor":[255,255,255,187],"flashDuration":2,"flashScope":1,"frame":0,"se":{"name":"Slash1","pan":0,"pitch":140,"volume":80}}]}, +{"id":7,"animation1Hue":0,"animation1Name":"Slash","animation2Hue":0,"animation2Name":"SlashPhoton","frames":[[[0,0,-42,180,0,0,255,1],[100,0,-2,180,0,0,255,1]],[[1,0,-42,180,0,0,255,1],[101,0,-2,180,0,0,255,1]],[[2,0,-18,180,0,0,255,1],[102,16,-2,180,0,0,255,1]],[[3,0,-18,180,0,0,255,1],[103,60.5,-25.5,180,0,0,255,1]],[[4,0,-18,180,0,0,255,1],[103,79,-17.5,180,2,0,127,1]]],"name":"斬撃/エフェクト","position":1,"timings":[{"flashColor":[255,255,255,187],"flashDuration":2,"flashScope":0,"frame":0,"se":{"name":"Evasion2","pan":0,"pitch":150,"volume":80}},{"flashColor":[255,255,255,187],"flashDuration":2,"flashScope":1,"frame":1,"se":{"name":"Slash1","pan":0,"pitch":150,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Powerup","pan":0,"pitch":180,"volume":90}}]}, +{"id":8,"animation1Hue":0,"animation1Name":"SlashFire","animation2Hue":0,"animation2Name":"","frames":[[[0,24,-72,180,0,0,255,1]],[[1,24,-72,180,0,0,255,1],[6,24,-72,195,0,0,255,1]],[[2,0,-48,180,0,0,255,1],[7,0,-48,195,0,0,255,1]],[[3,0,-48,180,0,0,255,1],[8,0,-48,195,0,0,255,1]],[[4,0,-48,180,0,0,255,1],[9,0,-48,195,0,0,255,1]],[[5,0,-48,180,0,0,255,1],[10,0,-48,195,0,0,255,1]],[[11,0,-48,195,0,0,255,1]],[[12,0,-48,195,0,0,255,1]],[[13,0,-48,195,0,0,255,1]]],"name":"斬撃/炎","position":1,"timings":[{"flashColor":[255,255,255,187],"flashDuration":3,"flashScope":1,"frame":0,"se":{"name":"Slash1","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,136,51,153],"flashDuration":5,"flashScope":2,"frame":1,"se":{"name":"Fire1","pan":0,"pitch":120,"volume":100}}]}, +{"id":9,"animation1Hue":0,"animation1Name":"SlashIce","animation2Hue":0,"animation2Name":"","frames":[[[0,24,-72,180,0,0,255,1]],[[1,24,-72,180,0,0,255,1],[6,24,-72,195,0,0,255,1]],[[2,0,-48,180,0,0,255,1],[7,0,-48,195,0,0,255,1]],[[3,0,-48,180,0,0,255,1],[8,0,-48,195,0,0,255,1]],[[4,0,-48,180,0,0,255,1],[9,0,-48,195,0,0,255,1]],[[5,0,-48,180,0,0,255,1],[10,0,-48,195,0,0,255,1]],[[11,0,-48,195,0,0,255,1]],[[12,0,-48,195,0,0,255,1]]],"name":"斬撃/氷","position":1,"timings":[{"flashColor":[255,255,255,187],"flashDuration":3,"flashScope":1,"frame":0,"se":{"name":"Slash1","pan":0,"pitch":100,"volume":100}},{"flashColor":[187,221,221,153],"flashDuration":5,"flashScope":2,"frame":1,"se":{"name":"Ice4","pan":0,"pitch":100,"volume":100}}]}, +{"id":10,"animation1Hue":0,"animation1Name":"SlashThunder","animation2Hue":0,"animation2Name":"","frames":[[[0,24,-72,180,0,0,255,1]],[[1,24,-72,180,0,0,255,1],[6,24,-72,195,0,0,255,1]],[[2,0,-48,180,0,0,255,1],[7,0,-48,195,0,0,255,1]],[[3,0,-48,180,0,0,255,1],[8,0,-48,195,0,0,255,1]],[[4,0,-48,180,0,0,255,1],[9,0,-48,195,0,0,255,1]],[[5,0,-48,180,0,0,255,1],[10,0,-48,195,0,0,255,1]],[[11,0,-48,195,0,0,255,1]],[[12,0,-48,195,0,0,255,1]],[[13,0,-48,195,0,0,255,1]]],"name":"斬撃/雷","position":1,"timings":[{"flashColor":[255,255,255,187],"flashDuration":3,"flashScope":1,"frame":0,"se":{"name":"Slash1","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,119,153],"flashDuration":5,"flashScope":2,"frame":1,"se":{"name":"Thunder8","pan":0,"pitch":100,"volume":100}}]}, +{"id":11,"animation1Hue":0,"animation1Name":"Stick","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,280,0,0,172,1]],[[2,0,-2,200,0,0,255,1]],[[3,0,-2,180,0,0,255,1]],[[4,0,-2,180,0,0,255,1]],[[5,0,-2,180,0,0,255,1]],[[6,0,-2,180,0,0,255,1],[6,0,-2,220,45,0,255,1]],[[6,0,-2,200,0,0,127,1],[6,0,-2,240,45,0,127,1]]],"name":"刺突/物理","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder1","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":1,"frame":2,"se":{"name":"Sword5","pan":0,"pitch":120,"volume":90}}]}, +{"id":12,"animation1Hue":0,"animation1Name":"Stick","animation2Hue":0,"animation2Name":"StickPhoton","frames":[[[0,0,0,280,0,0,172,1],[-1,0,-2,0,0,0,0,0],[100,0,0,260,0,0,255,1]],[[2,0,0,200,0,0,255,1],[-1,0,-2,0,0,0,0,0],[101,0,0,220,0,0,255,1]],[[3,0,0,180,0,0,255,1],[-1,0,-2,0,0,0,0,0],[102,0,0,220,0,0,255,1]],[[4,0,0,180,0,0,255,1],[-1,0,-2,0,0,0,0,0],[103,0,0,220,0,0,255,1]],[[5,0,0,180,0,0,255,1],[-1,0,-2,0,0,0,0,0],[104,0,0,220,0,0,255,1]],[[6,0,0,180,0,0,255,1],[6,0,0,220,45,1,255,1],[105,0,0,220,0,0,255,1]],[[6,0,0,200,0,0,127,1],[6,0,0,240,45,1,127,1],[107,0,0,220,0,0,255,1]],[[107,0,0,240,180,0,255,1],[-1,220,-233,100,0,0,255,1],[108,0,0,280,0,0,255,1]],[[107,0,0,240,180,0,127,1],[-1,220,-233,100,0,0,255,1],[108,0,0,300,0,0,127,1]]],"name":"刺突/エフェクト","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":0,"frame":0,"se":{"name":"Evasion2","pan":0,"pitch":150,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":1,"frame":1,"se":{"name":"Thunder4","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Powerup","pan":0,"pitch":180,"volume":90}}]}, +{"id":13,"animation1Hue":0,"animation1Name":"Stick","animation2Hue":0,"animation2Name":"HitFire","frames":[[[-1,0,-12,150,0,0,255,1],[0,0,-12,300,0,0,255,1]],[[2,0,-12,200,0,0,255,1]],[[4,0,-12,300,0,0,255,1],[5,0,-12,180,0,0,255,1]],[[6,0,-12,240,0,0,255,1],[100,0,-12,225,0,0,255,1]],[[7,0,-12,255,0,0,255,1],[101,0,-12,225,0,0,255,1]],[[102,0,-12,225,0,0,255,1],[8,0,-12,270,355,0,255,1]],[[103,0,-12,240,0,0,255,1],[8,0,-12,277,354,0,150,1]],[[104,0,-12,225,0,0,255,1]],[[105,0,-12,225,0,0,255,1]],[[106,0,-12,225,0,0,255,1]],[[107,0,-12,225,0,0,255,1]]],"name":"刺突/炎","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder1","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,119,102,221],"flashDuration":3,"flashScope":1,"frame":2,"se":{"name":"Sword5","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,136,51,153],"flashDuration":5,"flashScope":2,"frame":3,"se":{"name":"Fire1","pan":0,"pitch":100,"volume":100}}]}, +{"id":14,"animation1Hue":135,"animation1Name":"Stick","animation2Hue":0,"animation2Name":"HitIce","frames":[[[0,0,-12,300,0,0,255,1]],[[2,0,-12,200,0,0,255,1]],[[5,0,-12,180,0,0,255,1],[4,0,-12,300,0,0,255,1]],[[2,0,-12,150,0,0,255,1],[101,0,-12,120,0,0,255,1],[102,0,-12,195,0,0,255,1],[6,0,-12,240,0,0,255,1]],[[2,0,-12,165,0,0,180,1],[100,0,-12,210,0,0,255,1],[103,0,-12,240,0,0,255,1],[7,0,-12,255,0,0,255,1]],[[2,0,-12,172,0,0,100,1],[100,0,-12,195,0,0,255,1],[104,0,-12,240,0,0,255,1],[108,0,-12,225,0,0,255,1],[105,0,0,225,0,0,255,1],[8,0,-12,270,355,0,255,1]],[[101,0,-12,195,0,0,255,1],[104,0,-12,255,0,0,255,1],[108,0,-12,255,0,0,255,1],[106,0,0,165,0,0,255,1],[8,0,-12,277,354,0,150,1]],[[100,0,-12,180,0,0,255,1],[104,0,-12,262,0,0,180,1],[109,0,-12,210,0,0,255,1],[106,0,0,180,0,0,255,1]],[[101,0,-12,195,0,0,255,1],[104,0,-12,270,0,0,100,1],[109,0,-12,225,0,0,200,1],[107,0,0,180,0,0,255,1]],[[100,0,-12,180,0,0,255,1],[109,0,-12,240,0,0,100,1],[106,0,0,180,0,0,255,1]],[[101,0,-12,195,0,0,180,1],[107,0,0,180,0,0,255,1]],[[101,0,-12,195,0,0,100,1]]],"name":"刺突/氷","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder1","pan":0,"pitch":120,"volume":90}},{"flashColor":[136,221,221,221],"flashDuration":3,"flashScope":1,"frame":2,"se":{"name":"Sword5","pan":0,"pitch":100,"volume":100}},{"flashColor":[0,255,255,153],"flashDuration":5,"flashScope":2,"frame":3,"se":{"name":"Ice4","pan":0,"pitch":75,"volume":100}}]}, +{"id":15,"animation1Hue":0,"animation1Name":"Stick","animation2Hue":0,"animation2Name":"HitThunder","frames":[[[0,0,-12,300,0,0,255,1]],[[2,0,-12,200,0,0,255,1]],[[5,0,-12,180,0,0,255,1],[4,0,-12,300,0,0,255,1]],[[6,0,-12,240,0,0,255,1],[100,0,-12,225,0,0,255,1]],[[7,0,-12,255,0,0,255,1],[101,0,-12,225,0,0,255,1]],[[8,0,-12,270,355,0,255,1],[102,0,-12,225,0,0,255,1]],[[8,0,-12,277,354,0,150,1],[103,0,-12,225,0,0,255,1]],[[104,0,-12,225,0,0,255,1]],[[105,0,-12,225,0,0,255,1]],[[106,0,-12,225,0,0,255,1]],[[-1,0,-12,225,0,0,255,1],[106,0,-12,232,20,0,150,1]]],"name":"刺突/雷","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder1","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,255,102,221],"flashDuration":3,"flashScope":1,"frame":2,"se":{"name":"Sword5","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,85,153],"flashDuration":5,"flashScope":2,"frame":3,"se":{"name":"Thunder8","pan":0,"pitch":80,"volume":100}}]}, +{"id":16,"animation1Hue":0,"animation1Name":"Claw","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-26,170,0,0,255,1]],[[1,0,-26,170,0,0,255,1]],[[2,0,-26,170,0,0,255,1]],[[3,0,-26,170,0,0,255,1]],[[4,0,-26,170,0,0,255,1]],[[5,0,-26,170,0,0,255,1]]],"name":"爪/物理","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Attack2","pan":0,"pitch":200,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":1,"frame":1,"se":{"name":"Slash2","pan":0,"pitch":100,"volume":90}}]}, +{"id":17,"animation1Hue":0,"animation1Name":"Claw","animation2Hue":0,"animation2Name":"ClawPhoton","frames":[[[0,0,-26,170,0,0,255,1],[100,0,-10,190,0,0,255,1],[-1,-46,217.5,100,0,0,255,1],[-1,195.5,230.5,100,0,0,255,1],[-1,357,209.5,100,0,0,255,1],[-1,364.5,31,100,0,0,255,1],[-1,340,-151.5,100,0,0,255,1],[-1,267,-201,100,0,0,255,1]],[[1,0,-26,170,0,0,255,1],[101,0,-10,190,0,0,255,1]],[[2,0,-26,170,0,0,255,1],[102,0,-10,190,0,0,255,1]],[[3,0,-26,170,0,0,255,1],[103,0,-10,190,0,0,255,1]],[[4,0,-26,170,0,0,255,1],[104,0,-10,190,0,0,255,1]],[[5,0,-26,170,0,0,255,1],[105,0,-10,190,0,0,255,1]],[[-1,0,-10,0,0,0,0,0],[106,0,-10,190,0,0,255,1]],[[-1,0,-10,0,0,0,0,0],[107,0,-10,190,0,0,255,1]]],"name":"爪/エフェクト","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":0,"frame":0,"se":{"name":"Evasion2","pan":0,"pitch":150,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":1,"frame":1,"se":{"name":"Attack2","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Powerup","pan":0,"pitch":180,"volume":90}}]}, +{"id":18,"animation1Hue":0,"animation1Name":"Claw","animation2Hue":0,"animation2Name":"SlashFire","frames":[[[0,0,-26,170,0,0,255,1]],[[1,0,-26,170,0,0,255,1],[106,-50,30,160,0,0,100,1]],[[2,0,-26,170,0,0,255,1],[107,-50,30,160,0,0,178,1]],[[3,0,-26,170,0,0,255,1],[108,-50,30,160,0,0,255,1]],[[4,0,-26,170,0,0,255,1],[109,-50,30,160,0,0,255,1]],[[5,0,-26,170,0,0,255,1],[110,-50,30,160,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[111,-50,30,160,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[112,-50,30,160,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[113,-50,30,160,0,0,255,1]]],"name":"爪/炎","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Attack2","pan":0,"pitch":200,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":1,"frame":1,"se":{"name":"Slash2","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,136,51,153],"flashDuration":5,"flashScope":2,"frame":3,"se":{"name":"Fire1","pan":0,"pitch":100,"volume":100}}]}, +{"id":19,"animation1Hue":161,"animation1Name":"Claw","animation2Hue":0,"animation2Name":"SlashIce","frames":[[[0,0,-26,170,0,0,255,1]],[[1,0,-26,170,0,0,255,1],[106,-25,-10,160,0,0,100,1]],[[2,0,-26,170,0,0,255,1],[107,-25,-10,160,0,0,180,1]],[[3,0,-26,170,0,0,255,1],[108,-25,-10,160,0,0,255,1]],[[4,0,-26,170,0,0,255,1],[109,-25,-10,160,0,0,255,1]],[[5,0,-26,170,0,0,255,1],[110,-25,-10,160,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[111,-25,-10,160,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[112,-25,-10,160,0,0,255,1]]],"name":"爪/氷","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Attack2","pan":0,"pitch":200,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":1,"frame":1,"se":{"name":"Slash2","pan":0,"pitch":100,"volume":90}},{"flashColor":[0,255,255,153],"flashDuration":5,"flashScope":2,"frame":3,"se":{"name":"Ice4","pan":0,"pitch":75,"volume":100}}]}, +{"id":20,"animation1Hue":17,"animation1Name":"Claw","animation2Hue":0,"animation2Name":"SlashThunder","frames":[[[0,0,-26,170,0,0,255,1]],[[1,0,-26,170,0,0,255,1],[106,-30,0,120,0,0,255,1]],[[2,0,-26,170,0,0,255,1],[107,-35,5,120,0,0,255,1]],[[3,0,-26,170,0,0,255,1],[108,-40,9,120,0,0,255,1]],[[4,0,-26,170,0,0,255,1],[109,-45,14,120,0,0,255,1]],[[5,0,-26,170,0,0,255,1],[110,-49,18,120,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[111,-54,23,120,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[112,-59,27,120,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[113,-64,32,120,0,0,255,1]]],"name":"爪/雷","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Attack2","pan":0,"pitch":200,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":1,"frame":1,"se":{"name":"Slash2","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,85,153],"flashDuration":5,"flashScope":2,"frame":3,"se":{"name":"Thunder8","pan":0,"pitch":80,"volume":100}}]}, +{"id":21,"animation1Hue":0,"animation1Name":"HitSpecial1","animation2Hue":0,"animation2Name":"","frames":[[[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[0,-273,82,100,-20,0,255,1]],[[2,-95,5,180,0,0,255,1],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[1,-176,38,100,-20,0,255,1],[0,72,312,130,-100,0,255,1]],[[3,-95,5,180,0,0,255,1],[2,20,90,260,90,0,255,1],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[1,41,191.5,130,-100,0,255,1]],[[4,-95,5,180,0,0,255,1],[3,20,90,260,90,0,255,1]],[[5,-95,5,180,0,0,255,1],[4,20,90,260,90,0,255,1],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[0,54,-256.5,100,100,0,255,1]],[[6,-95,5,180,0,0,255,1],[5,20,90,260,90,0,255,1],[2,10,-80,200,180,0,255,1],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[1,27,-159.5,100,100,0,255,1],[0,-250,-64,110,30,0,255,1]],[[6,-95,5,180,0,0,0,1],[6,20,90,260,90,0,255,1],[3,10,-80,200,180,0,255,1],[2,-65,30,260,-90,0,255,1],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[1,-155,-12,110,30,0,255,1]],[[4,-95,5,180,0,0,0,1],[4,20,90,260,90,0,0,1],[4,10,-80,200,180,0,255,1],[3,-65,30,260,-90,0,255,1],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[0,332,75,120,190,0,255,1]],[[5,-95,5,180,0,0,0,1],[5,20,90,260,90,0,0,1],[5,10,-80,200,180,0,255,1],[4,-65,30,260,-90,0,255,1],[2,95,40,220,0,1,255,1],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[-1,0,10,0,0,0,0,0],[1,178.5,52,120,190,0,255,1]],[[6,-95,5,180,0,0,0,1],[6,20,90,260,90,0,0,1],[6,10,-80,200,180,0,255,1],[5,-65,30,260,-90,0,255,1],[3,95,40,220,0,1,255,1]],[[6,-95,5,180,0,0,0,1],[6,20,90,260,90,0,0,1],[6,10,-80,200,180,0,0,1],[6,-65,30,260,-90,0,255,1],[4,95,40,220,0,1,255,1]],[[5,-95,5,180,0,0,0,1],[5,20,90,260,90,0,0,1],[5,10,-80,200,180,0,0,1],[5,-65,30,260,-90,0,0,1],[5,95,40,220,0,1,255,1]],[[6,-95,5,180,0,0,0,1],[6,20,90,260,90,0,0,1],[6,10,-80,200,180,0,0,1],[6,-65,30,260,-90,0,0,1],[6,95,40,220,0,1,255,1]],[],[[7,116,15,400,0,0,150,1]],[[8,52,15,240,0,0,255,1]],[[4,20,15,300,0,0,255,1]],[[5,36,15,240,0,0,255,1],[5,4,15,360,45,0,255,1]],[[6,-44,15,320,0,0,255,1]],[[6,-44,17,360,0,0,70,1]]],"name":"打撃/必殺技1","position":1,"timings":[{"flashColor":[255,221,187,187],"flashDuration":2,"flashScope":1,"frame":2,"se":{"name":"Blow1","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,221,221,136],"flashDuration":2,"flashScope":2,"frame":2,"se":null},{"flashColor":[255,221,187,187],"flashDuration":2,"flashScope":1,"frame":6,"se":{"name":"Blow3","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,221,221,136],"flashDuration":2,"flashScope":2,"frame":6,"se":null},{"flashColor":[255,221,187,187],"flashDuration":2,"flashScope":1,"frame":9,"se":{"name":"Blow1","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,221,221,136],"flashDuration":2,"flashScope":2,"frame":9,"se":null},{"flashColor":[255,221,187,187],"flashDuration":2,"flashScope":1,"frame":15,"se":{"name":"Slash1","pan":0,"pitch":90,"volume":90}},{"flashColor":[255,221,221,136],"flashDuration":2,"flashScope":2,"frame":15,"se":{"name":"Thunder5","pan":0,"pitch":120,"volume":90}}]}, +{"id":22,"animation1Hue":0,"animation1Name":"Hit2","animation2Hue":0,"animation2Name":"HitSpecial2","frames":[[[0,24,48,150,0,0,255,1]],[[1,24,48,150,0,0,255,1]],[[2,24,48,150,0,0,255,1],[100,-60,12,195,0,0,255,1]],[[2,24,48,165,0,0,255,1],[101,-60,12,225,0,0,255,1]],[[2,24,48,180,0,0,150,1],[102,-60,12,255,0,0,255,1]],[[103,-60,12,255,0,0,255,1],[100,36,-48,195,0,1,255,1]],[[104,-60,12,255,0,0,255,1],[101,36,-48,225,20,1,255,1]],[[105,-60,12,255,0,0,255,1],[102,36,-48,255,20,1,255,1],[0,-72,-72,150,0,0,255,1]],[[103,36,-48,255,20,1,255,1],[1,-72,-72,150,0,0,255,1]],[[104,36,-48,255,20,1,255,1],[2,-72,-72,150,0,0,255,1],[100,-24,84,195,45,0,255,1]],[[105,36,-48,255,20,1,255,1],[2,-72,-72,165,0,0,255,1],[101,-24,84,225,45,0,255,1]],[[2,-72,-72,180,0,0,150,1],[102,-24,84,255,45,0,255,1]],[[103,-24,84,255,45,0,255,1],[0,-60,60,150,0,0,255,1],[0,36,-48,150,0,0,255,1]],[[104,-24,84,255,45,0,255,1],[1,-60,60,150,0,0,255,1],[1,36,-48,150,0,0,255,1]],[[105,-24,84,255,45,0,255,1],[2,-60,60,150,0,0,255,1],[2,36,-48,150,0,0,255,1],[100,-60,-60,195,0,0,255,1],[100,60,60,195,90,0,255,1]],[[2,-60,60,165,0,0,255,1],[2,36,-48,165,0,0,255,1],[101,-60,-60,225,0,0,255,1],[101,60,60,225,90,0,255,1]],[[2,-60,60,180,0,0,150,1],[2,36,-48,180,0,0,150,1],[102,-60,-60,255,0,0,255,1],[102,60,60,255,90,0,255,1]],[[103,-60,-60,255,0,0,255,1],[103,60,60,255,90,0,255,1],[100,0,0,195,0,0,255,1],[1,0,0,150,0,0,255,1]],[[104,-60,-60,255,0,0,255,1],[104,60,60,255,90,0,255,1],[101,0,0,225,0,1,255,1],[2,0,0,150,0,0,255,1]],[[105,-60,-60,255,0,0,255,1],[105,60,60,255,90,0,255,1],[102,0,0,255,0,1,255,1],[2,0,0,165,0,0,255,1]],[[103,0,0,255,0,1,255,1]],[[104,0,0,270,0,1,255,1]],[[105,0,0,277,0,1,255,1]]],"name":"打撃/必殺技2","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":2,"flashScope":2,"frame":0,"se":{"name":"Blow1","pan":0,"pitch":100,"volume":90}},{"conditions":0,"flashColor":[255,255,221,119],"flashDuration":5,"flashScope":1,"frame":0,"se":null},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Blow1","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,221,119],"flashDuration":5,"flashScope":1,"frame":3,"se":{"name":"Blow3","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":5,"se":{"name":"Blow1","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,221,204],"flashDuration":3,"flashScope":2,"frame":7,"se":{"name":"Blow2","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":9,"se":{"name":"Blow1","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,221,119],"flashDuration":5,"flashScope":1,"frame":12,"se":{"name":"Blow3","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,187],"flashDuration":5,"flashScope":1,"frame":14,"se":{"name":"Blow3","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,255,170],"flashDuration":3,"flashScope":2,"frame":17,"se":{"name":"Blow2","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":18,"se":{"name":"Blow3","pan":0,"pitch":70,"volume":90}},{"flashColor":[255,255,255,170],"flashDuration":3,"flashScope":2,"frame":19,"se":{"name":"Damage2","pan":0,"pitch":120,"volume":100}}]}, +{"id":23,"animation1Hue":0,"animation1Name":"SlashSpecial1","animation2Hue":0,"animation2Name":"","frames":[[[6,-110,-15,300,0,0,255,0],[0,-50,10,180,-45,0,255,1]],[[6,-110,-15,300,0,0,255,0],[1,-50,10,180,-45,0,255,1]],[[7,-110,-15,300,0,0,255,0],[2,-50,10,180,-45,0,255,1]],[[7,-110,-15,300,0,0,255,0],[3,-10,-85,220,-30,1,255,1]],[[8,-110,-15,300,0,0,255,0],[4,-10,-85,220,-30,1,255,1]],[[9,-110,-15,300,0,0,255,0],[5,-10,-85,220,-30,1,255,1]],[[9,-110,-15,300,0,0,255,0],[3,20,-70,240,220,0,255,1]],[[10,-110,-15,300,0,0,255,0],[4,20,-70,240,220,0,255,1]],[[11,-110,-15,300,0,0,255,0],[5,20,-70,240,220,0,255,1]],[[11,-110,-15,300,0,0,255,0],[0,-16,96,200,210,1,255,1]],[[12,-110,-15,300,0,0,255,0],[1,-16,96,200,210,1,255,1]],[[13,-110,-15,300,0,0,255,0],[2,-16,96,200,210,1,255,1]],[[13,-110,-15,300,0,0,255,0]],[[13,-110,-15,300,0,0,255,0]],[[13,-110,-15,300,0,0,255,0],[3,96,0,360,0,0,255,1]],[[14,-110,-15,300,0,0,255,0],[4,0,0,360,0,0,255,1]],[[15,-110,-15,300,0,0,255,1],[5,-64,0,360,0,0,255,1]],[[16,-110,-15,300,0,0,255,1]],[[17,-110,-15,300,0,0,255,1]]],"name":"斬撃/必殺技1","position":1,"timings":[{"flashColor":[255,238,204,221],"flashDuration":3,"flashScope":1,"frame":1,"se":{"name":"Slash1","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,238,204,221],"flashDuration":3,"flashScope":1,"frame":3,"se":{"name":"Sword3","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,238,204,221],"flashDuration":3,"flashScope":1,"frame":5,"se":{"name":"Sword4","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,238,204,221],"flashDuration":3,"flashScope":1,"frame":7,"se":{"name":"Slash1","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,238,204,221],"flashDuration":3,"flashScope":1,"frame":9,"se":{"name":"Sword3","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,238,204,221],"flashDuration":3,"flashScope":1,"frame":11,"se":{"name":"Sword4","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":14,"se":{"name":"Slash1","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,238,204,221],"flashDuration":3,"flashScope":1,"frame":15,"se":{"name":"Sword4","pan":0,"pitch":70,"volume":90}},{"flashColor":[255,238,204,170],"flashDuration":3,"flashScope":2,"frame":15,"se":{"name":"Attack3","pan":0,"pitch":120,"volume":90}}]}, +{"id":24,"animation1Hue":0,"animation1Name":"SlashSpecial2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-12,240,0,0,255,1]],[[1,0,-12,240,0,0,255,1]],[[2,0,-12,240,0,0,255,1]],[[3,0,-12,240,0,0,255,1]],[[4,0,-12,240,0,0,255,1]],[[5,0,-12,240,0,0,255,1]],[[6,0,-12,240,0,0,255,1]],[[7,0,-12,240,0,0,255,1]],[[8,0,-12,240,0,0,255,1]],[[9,0,-12,240,0,0,255,1]],[[10,0,-12,240,0,0,255,1]],[[11,0,-12,240,0,0,255,1]],[[12,0,-12,240,0,0,255,1]],[[13,0,-12,240,0,0,255,1]],[[13,0,-12,240,0,0,255,1],[14,0,-12,240,0,0,100,1]],[[13,0,-12,240,0,0,255,1],[14,0,-12,240,0,0,200,1]],[[13,0,-12,240,0,0,255,1],[14,0,-12,240,0,0,220,1],[15,0,-12,255,0,0,255,1]],[[13,0,-12,240,0,0,255,1],[14,0,-12,240,0,0,255,1],[15,0,-12,270,0,0,255,1]],[[13,0,-12,240,0,0,255,1],[14,0,-12,240,0,0,255,1],[15,0,-12,285,0,0,200,1]]],"name":"斬撃/必殺技2","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Sword4","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,102,0,221],"flashDuration":5,"flashScope":1,"frame":1,"se":null},{"flashColor":[255,255,170,170],"flashDuration":2,"flashScope":2,"frame":1,"se":{"name":"Slash2","pan":0,"pitch":110,"volume":100}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":3,"se":{"name":"Wind7","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,255,170,204],"flashDuration":5,"flashScope":1,"frame":7,"se":{"name":"Slash3","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,170,170],"flashDuration":3,"flashScope":2,"frame":7,"se":{"name":"Wind7","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,255,255],"flashDuration":8,"flashScope":1,"frame":9,"se":{"name":"Slash1","pan":0,"pitch":90,"volume":90}},{"flashColor":[255,255,255,170],"flashDuration":1,"flashScope":3,"frame":14,"se":null},{"flashColor":[255,255,255,255],"flashDuration":8,"flashScope":1,"frame":16,"se":{"name":"Ice4","pan":0,"pitch":90,"volume":90}}]}, +{"id":25,"animation1Hue":0,"animation1Name":"SlashSpecial3","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-96,375,330,0,255,1]],[[1,0,-96,375,330,0,255,1],[12,0,-96,150,0,0,150,0]],[[2,0,-96,375,330,0,255,1],[12,0,-96,210,0,0,200,0]],[[3,0,-96,375,330,0,255,1],[12,0,-96,225,0,0,255,0]],[[4,0,-96,375,330,0,255,1],[12,0,-96,232,0,0,255,0]],[[5,0,-96,375,330,0,255,1],[12,0,-96,240,0,0,150,0]],[[12,0,-96,244,0,0,100,0]],[[0,0,-48,435,40,1,255,1],[12,0,-96,247,0,0,50,0]],[[1,0,-48,435,40,1,255,1],[13,0,-96,150,0,0,150,0]],[[2,0,-48,435,40,1,255,1],[13,0,-96,210,0,0,200,0]],[[3,0,-48,435,40,1,255,1],[13,0,-96,225,0,0,255,0]],[[4,0,-48,435,40,1,255,1],[13,0,-96,232,0,0,255,0]],[[5,0,-48,435,40,1,255,1],[13,0,-96,240,0,0,150,0]],[[13,0,-96,244,0,0,100,0]],[[0,0,-120,435,290,0,255,1],[13,0,-96,247,0,0,50,0]],[[1,0,-120,435,290,0,255,1],[14,0,-96,150,0,0,150,0]],[[2,0,-120,435,290,0,255,1],[14,0,-96,210,0,0,200,0]],[[3,0,-120,435,290,0,255,1],[14,0,-96,225,0,0,255,0]],[[4,0,-120,435,290,0,255,1],[14,0,-96,232,0,0,255,0]],[[5,0,-120,435,290,0,255,1],[14,0,-96,240,0,0,150,0]],[[14,0,-96,244,0,0,100,0]],[[6,0,-108,435,80,0,255,1],[14,0,-96,247,0,0,50,0]],[[7,0,-108,435,80,0,255,1],[16,0,-96,225,0,0,255,0],[15,0,-96,150,0,0,150,0]],[[8,0,-108,435,80,0,255,1],[17,0,-96,270,0,0,255,0],[15,0,-96,210,0,0,200,0]],[[9,0,-108,435,80,0,255,1],[18,0,-96,375,0,0,255,0],[15,0,-96,225,0,0,255,0]],[[10,0,-108,435,80,0,255,1],[15,0,-96,232,0,0,255,0],[19,0,-96,382,0,0,255,0],[-1,0,0,30,0,0,0,0],[-1,0,0,30,0,0,0,0]],[[11,0,-108,435,80,0,255,1],[15,0,-96,240,0,0,150,0],[20,0,-96,390,0,0,255,0]],[[15,0,-96,244,0,0,100,0],[21,0,-96,390,0,0,255,0]],[[15,0,-96,247,0,0,50,0],[22,0,-96,390,0,0,255,0]],[[23,0,-96,390,0,0,255,0]],[[24,0,-96,390,0,0,255,0]],[[25,0,-96,390,0,0,200,0]],[[26,0,-96,390,0,0,150,0]],[[27,0,-96,390,0,0,100,0]]],"name":"斬撃/必殺技3","position":3,"timings":[{"flashColor":[238,170,255,170],"flashDuration":2,"flashScope":1,"frame":1,"se":{"name":"Slash2","pan":0,"pitch":100,"volume":100}},{"flashColor":[187,187,255,187],"flashDuration":2,"flashScope":2,"frame":1,"se":null},{"flashColor":[238,170,255,170],"flashDuration":2,"flashScope":1,"frame":8,"se":{"name":"Slash3","pan":0,"pitch":120,"volume":100}},{"flashColor":[187,187,255,187],"flashDuration":2,"flashScope":2,"frame":8,"se":null},{"flashColor":[238,170,255,170],"flashDuration":2,"flashScope":1,"frame":15,"se":{"name":"Slash2","pan":0,"pitch":100,"volume":100}},{"flashColor":[187,187,255,187],"flashDuration":2,"flashScope":2,"frame":15,"se":null},{"flashColor":[238,170,255,170],"flashDuration":5,"flashScope":1,"frame":22,"se":{"name":"Slash3","pan":0,"pitch":100,"volume":100}},{"flashColor":[187,187,255,187],"flashDuration":5,"flashScope":2,"frame":22,"se":{"name":"Wind6","pan":0,"pitch":150,"volume":70}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":21,"se":{"name":"Sword3","pan":0,"pitch":120,"volume":90}}]}, +{"id":26,"animation1Hue":0,"animation1Name":"StickSpecial1","animation2Hue":0,"animation2Name":"","frames":[[[4,32,48,200,20,1,255,1]],[[5,32,48,200,20,1,255,1]],[[6,32,48,200,20,1,255,1],[0,-100,-93,200,30,0,255,1]],[[1,-100,-93,200,30,0,255,1]],[[2,-100,-93,200,30,0,255,1],[4,-16,48,200,-40,0,255,1]],[[5,-16,48,200,-40,0,255,1]],[[6,-16,48,200,-40,0,255,1],[4,32,-48,200,-30,1,255,1]],[[5,32,-48,200,-30,1,255,1]],[[6,32,-48,200,-30,1,255,1],[0,112,48,200,20,1,255,1]],[[1,112,48,200,20,1,255,1]],[[2,112,48,200,20,1,255,1],[0,-112,0,200,0,0,255,1]],[[1,-112,0,200,0,0,255,1]],[[2,-112,0,200,0,0,255,1]],[],[[-1,334.5,68,200,20,1,255,1],[3,0,0,420,0,0,180,1]],[[4,4,-8,300,0,0,255,1]],[[5,4,-8,300,0,0,255,1]],[[6,4,-8,300,0,0,255,1]],[[7,4,-8,300,0,0,255,1]],[[8,4,-8,300,0,0,255,1]],[[9,4,-8,300,0,0,255,1]]],"name":"刺突/必殺技1","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind6","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,153],"flashDuration":2,"flashScope":1,"frame":2,"se":{"name":"Sword5","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,119],"flashDuration":2,"flashScope":2,"frame":3,"se":{"name":"Slash1","pan":0,"pitch":180,"volume":90}},{"flashColor":[255,255,204,153],"flashDuration":2,"flashScope":1,"frame":4,"se":{"name":"Sword5","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,119],"flashDuration":2,"flashScope":2,"frame":5,"se":{"name":"Slash1","pan":0,"pitch":180,"volume":90}},{"flashColor":[255,255,204,153],"flashDuration":2,"flashScope":1,"frame":6,"se":{"name":"Sword5","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,119],"flashDuration":2,"flashScope":2,"frame":7,"se":{"name":"Slash1","pan":0,"pitch":180,"volume":90}},{"flashColor":[255,255,204,153],"flashDuration":2,"flashScope":1,"frame":8,"se":{"name":"Sword5","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,119],"flashDuration":2,"flashScope":2,"frame":9,"se":{"name":"Slash1","pan":0,"pitch":180,"volume":90}},{"flashColor":[255,255,204,153],"flashDuration":5,"flashScope":1,"frame":12,"se":{"name":"Sword4","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,119],"flashDuration":2,"flashScope":2,"frame":12,"se":{"name":"Slash2","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,204],"flashDuration":5,"flashScope":2,"frame":16,"se":null}]}, +{"id":27,"animation1Hue":160,"animation1Name":"StickSpecial2","animation2Hue":210,"animation2Name":"StickSpecial3","frames":[[[2,-48,72,300,0,0,255,1]],[[3,-48,72,225,0,0,255,1]],[[4,-48,72,255,0,0,255,1],[2,84,-48,300,0,0,255,1],[5,-48,72,150,0,0,255,1]],[[6,-48,72,180,0,0,255,1],[3,84,-48,225,0,0,255,1]],[[7,-48,72,180,0,0,255,1],[4,84,-48,255,0,0,255,1],[5,84,-48,150,0,0,255,1]],[[109,-48,72,195,0,0,255,1],[8,-48,72,180,0,0,255,1],[6,84,-48,180,0,0,255,1],[2,-72,-72,300,0,0,255,1]],[[110,-48,72,195,0,0,255,1],[7,84,-48,180,0,0,255,1],[3,-72,-72,225,0,0,255,1]],[[109,84,-48,195,0,0,255,1],[8,84,-48,180,0,0,255,1],[4,-72,-72,255,0,0,255,1],[5,-72,-72,150,0,0,255,1]],[[110,84,-48,195,0,0,255,1],[6,-72,-72,180,0,0,255,1],[2,60,60,300,0,0,255,1]],[[7,-72,-72,180,0,0,255,1],[3,60,60,225,0,0,255,1]],[[109,-72,-72,195,0,0,255,1],[8,-72,-72,180,0,0,255,1],[4,60,60,255,0,0,255,1],[5,60,60,150,0,0,255,1]],[[110,-72,-72,195,0,0,255,1],[6,60,60,180,0,0,255,1],[102,-72,36,300,0,0,255,1]],[[7,60,60,180,0,0,255,1],[103,-72,36,225,0,0,255,1]],[[109,60,60,195,0,0,255,1],[8,60,60,180,0,0,255,1],[104,-72,36,255,0,0,255,1],[105,-72,36,150,0,0,255,1]],[[110,60,60,195,0,0,255,1],[106,-72,36,180,0,0,255,1],[102,72,0,300,0,0,255,1]],[[107,-72,36,180,0,0,255,1],[103,72,0,225,0,0,255,1]],[[108,-72,36,195,0,0,255,1],[104,72,0,255,0,0,255,1],[105,72,0,150,0,0,255,1]],[[109,-72,36,195,0,0,255,1],[106,72,0,180,0,0,255,1]],[[110,-72,36,195,0,0,255,1],[107,72,0,180,0,0,255,1]],[[-1,84,0,180,0,0,255,1],[108,72,0,195,0,0,255,1]],[[109,72,0,195,0,0,255,1]],[[110,72,0,195,0,0,255,1]]],"name":"刺突/必殺技2","position":1,"timings":[{"flashColor":[187,221,255,238],"flashDuration":2,"flashScope":2,"frame":0,"se":{"name":"Wind5","pan":0,"pitch":80,"volume":80}},{"flashColor":[255,187,119,221],"flashDuration":3,"flashScope":1,"frame":2,"se":{"name":"Sword4","pan":0,"pitch":150,"volume":100}},{"flashColor":[255,187,119,221],"flashDuration":3,"flashScope":1,"frame":4,"se":{"name":"Sword5","pan":0,"pitch":150,"volume":100}},{"flashColor":[187,221,255,187],"flashDuration":2,"flashScope":2,"frame":6,"se":{"name":"Slash2","pan":0,"pitch":150,"volume":80}},{"flashColor":[255,187,119,221],"flashDuration":3,"flashScope":1,"frame":7,"se":{"name":"Sword4","pan":0,"pitch":150,"volume":100}},{"flashColor":[187,221,255,170],"flashDuration":2,"flashScope":2,"frame":9,"se":{"name":"Sword5","pan":0,"pitch":150,"volume":80}},{"flashColor":[255,187,119,221],"flashDuration":3,"flashScope":1,"frame":10,"se":{"name":"Slash2","pan":0,"pitch":150,"volume":100}},{"flashColor":[255,187,119,221],"flashDuration":3,"flashScope":1,"frame":13,"se":{"name":"Sword4","pan":0,"pitch":150,"volume":100}},{"flashColor":[255,187,119,221],"flashDuration":3,"flashScope":1,"frame":16,"se":{"name":"Sword5","pan":0,"pitch":150,"volume":100}},{"flashColor":[255,187,119,221],"flashDuration":3,"flashScope":1,"frame":17,"se":{"name":"Slash2","pan":0,"pitch":150,"volume":100}},{"flashColor":[187,221,255,170],"flashDuration":2,"flashScope":2,"frame":19,"se":{"name":"Sword4","pan":0,"pitch":150,"volume":80}}]}, +{"id":28,"animation1Hue":0,"animation1Name":"ClawSpecial1","animation2Hue":0,"animation2Name":"ClawSpecial2","frames":[[[0,0,-6,240,0,0,255,1]],[[1,0,-6,240,0,0,255,1]],[[2,0,-6,240,0,0,255,1]],[[3,0,-6,240,0,0,255,1]],[[4,0,-6,240,0,0,255,1]],[[5,0,-6,240,0,0,255,1]],[[6,0,-6,240,0,0,255,1]],[[7,0,-6,240,0,0,255,1]],[[8,0,-6,240,0,0,255,1]],[[9,0,-6,240,0,0,255,1]],[[10,0,-6,240,0,0,255,1]],[[11,0,-6,240,0,0,255,1]],[[12,0,-6,240,0,0,255,1]],[[13,0,-6,240,0,0,255,1]],[[14,0,-6,240,0,0,255,1]],[[15,0,-6,240,0,0,255,1]],[[16,0,-6,240,0,0,255,1]],[[17,0,-6,240,0,0,255,1],[100,0,-18,240,250,1,255,1]],[[18,0,-6,240,0,0,255,1],[101,0,-18,240,250,1,255,1]],[[19,0,-6,240,0,0,255,1],[102,0,-18,240,250,1,255,1]],[[20,0,-6,240,0,0,255,1],[103,0,-18,240,250,1,255,1]],[[21,0,-6,240,0,0,255,1],[104,0,-18,240,250,1,255,1]],[[22,0,-6,240,0,0,255,1],[103,0,-18,240,250,1,255,1]],[[104,0,-18,240,250,1,255,1]],[[103,0,-18,240,250,1,255,1]],[[104,0,-18,240,250,1,255,1]],[[105,0,-18,240,250,1,255,1]],[[106,0,-18,240,250,1,255,1]],[[107,0,-18,240,250,1,255,1]],[[108,0,-18,240,250,1,255,1]],[[109,0,-18,240,250,1,255,1]],[[110,0,-18,240,250,1,255,1]],[[111,0,-18,240,250,1,255,1]]],"name":"爪/必殺技","position":1,"timings":[{"flashColor":[255,119,153,187],"flashDuration":3,"flashScope":2,"frame":0,"se":{"name":"Attack3","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,119,153,187],"flashDuration":3,"flashScope":1,"frame":1,"se":{"name":"Slash2","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":3,"se":{"name":"Attack2","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,119,153,187],"flashDuration":3,"flashScope":1,"frame":4,"se":{"name":"Slash3","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":6,"se":{"name":"Attack2","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,119,153,187],"flashDuration":3,"flashScope":1,"frame":7,"se":{"name":"Slash2","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":9,"se":{"name":"Attack2","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,119,153,187],"flashDuration":3,"flashScope":1,"frame":10,"se":{"name":"Slash3","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":16,"se":{"name":"Attack2","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,119,153,187],"flashDuration":15,"flashScope":1,"frame":17,"se":{"name":"Slash1","pan":0,"pitch":80,"volume":90}},{"flashColor":[255,119,153,187],"flashDuration":5,"flashScope":2,"frame":18,"se":{"name":"Monster2","pan":0,"pitch":115,"volume":90}}]}, +{"id":29,"animation1Hue":0,"animation1Name":"ArrowSpecial","animation2Hue":0,"animation2Name":"","frames":[[[0,130,-160,300,-135,0,255,0]],[[1,130,-160,340,-135,0,255,0]],[[2,130,-160,340,-135,0,255,0],[0,150,90,300,-60,0,255,0]],[[3,130,-160,340,-135,0,255,0],[1,150,90,340,-60,0,255,0]],[[3,130,-160,340,-135,0,255,0],[2,150,90,340,-60,0,255,0],[0,-200,-40,300,100,0,255,0]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[1,-200,-40,340,100,0,255,0]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[2,-200,-40,340,100,0,255,0],[0,-130,150,300,40,0,255,0]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[3,-200,-40,340,100,0,255,0],[1,-130,150,340,40,0,255,0]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[3,-200,-40,340,100,0,255,0],[2,-130,150,340,40,0,255,0],[0,-100,-190,300,150,0,255,0]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[3,-200,-40,340,100,0,255,0],[3,-130,150,340,40,0,255,0],[1,-100,-190,340,150,0,255,0]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[3,-200,-40,340,100,0,255,0],[3,-130,150,340,40,0,255,0],[2,-100,-190,340,150,0,255,0]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[3,-200,-40,340,100,0,255,0],[3,-130,150,340,40,0,255,0],[3,-100,-190,340,150,0,255,0]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[3,-200,-40,340,100,0,255,0],[3,-130,150,340,40,0,255,0],[3,-100,-190,340,150,0,255,0],[4,0,-48,600,0,0,255,0]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[3,-200,-40,340,100,0,255,0],[3,-130,150,340,40,0,255,0],[3,-100,-190,340,150,0,255,0],[4,0,-32,380,0,0,255,0]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[3,-200,-40,340,100,0,255,0],[3,-130,150,340,40,0,255,0],[3,-100,-190,340,150,0,255,0],[5,0,-20,380,0,0,255,1]],[[3,130,-160,340,-135,0,255,0],[3,150,90,340,-60,0,255,0],[3,-200,-40,340,100,0,255,0],[3,-130,150,340,40,0,255,0],[3,-100,-190,340,150,0,255,0],[6,0,-20,400,0,0,255,1],[8,0,0,380,0,0,255,1]],[[3,130,-160,340,-135,0,180,0],[3,150,90,340,-60,0,180,0],[3,-200,-40,340,100,0,180,0],[3,-130,150,340,40,0,180,0],[3,-100,-190,340,150,0,180,0],[7,0,-20,400,0,0,255,1],[9,0,0,380,0,0,255,1]],[[3,130,-160,340,-135,0,100,0],[3,150,90,340,-60,0,100,0],[3,-200,-40,340,100,0,100,0],[3,-130,150,340,40,0,100,0],[3,-100,-190,340,150,0,100,0],[7,0,-20,400,0,0,255,1],[10,0,0,380,0,0,255,1]],[[3,130,-160,340,-135,0,0,0],[3,150,90,340,-60,0,0,0],[3,-200,-40,340,100,0,0,0],[3,-130,150,340,40,0,0,0],[3,-100,-190,340,150,0,0,0],[7,0,-20,380,0,0,255,1]],[[3,130,-160,340,-135,0,0,0],[3,150,90,340,-60,0,0,0],[3,-200,-40,340,100,0,0,0],[3,-130,150,340,40,0,0,0],[3,-100,-190,340,150,0,0,0],[7,0,-20,380,0,0,255,1]],[[3,130,-160,340,-135,0,0,0],[3,150,90,340,-60,0,0,0],[3,-200,-40,340,100,0,0,0],[3,-130,150,340,40,0,0,0],[3,-100,-190,340,150,0,0,0],[7,0,-20,380,0,0,180,1]],[[3,130,-160,340,-135,0,0,0],[3,150,90,340,-60,0,0,0],[3,-200,-40,340,100,0,0,0],[3,-130,150,340,40,0,0,0],[3,-100,-190,340,150,0,0,0],[7,0,-20,380,0,0,100,1]]],"name":"矢/必殺技","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Crossbow","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,204,204],"flashDuration":3,"flashScope":1,"frame":2,"se":{"name":"Attack3","pan":0,"pitch":180,"volume":90}},{"flashColor":[255,255,204,204],"flashDuration":3,"flashScope":1,"frame":5,"se":{"name":"Attack3","pan":0,"pitch":180,"volume":90}},{"flashColor":[255,255,204,204],"flashDuration":3,"flashScope":1,"frame":8,"se":{"name":"Attack3","pan":0,"pitch":180,"volume":90}},{"flashColor":[255,255,204,255],"flashDuration":7,"flashScope":1,"frame":13,"se":{"name":"Attack3","pan":0,"pitch":180,"volume":90}},{"flashColor":[255,255,204,204],"flashDuration":5,"flashScope":2,"frame":13,"se":{"name":"Wind6","pan":0,"pitch":180,"volume":90}}]}, +{"id":30,"animation1Hue":0,"animation1Name":"Special1","animation2Hue":0,"animation2Name":"Special2","frames":[[[118,-48,12,195,0,1,255,1]],[[119,-48,12,195,0,1,255,1],[124,0,12,150,0,0,255,1]],[[120,-48,12,195,0,1,255,1],[125,0,12,150,0,0,255,1]],[[121,-48,12,195,0,1,255,1],[126,0,12,150,0,0,255,1]],[[122,-48,12,195,0,1,255,1],[0,48,-24,195,0,0,255,1],[127,0,12,150,0,0,255,1]],[[123,-48,12,195,0,1,255,1],[1,48,-24,195,0,0,255,1],[128,0,12,150,0,0,255,1],[124,-24,-12,180,0,0,255,1]],[[2,48,-24,195,0,0,255,1],[125,-24,-12,195,0,0,255,1]],[[3,48,-24,195,0,0,255,1],[106,-36,-24,195,0,0,255,1],[126,-24,-12,195,0,0,255,1]],[[4,48,-24,195,0,0,255,1],[107,-36,-24,195,0,0,255,1],[127,-24,-12,195,0,0,255,1]],[[5,48,-24,195,0,0,255,1],[108,-36,-24,195,0,0,255,1],[128,-24,-12,195,0,0,255,1],[124,12,0,195,0,0,255,1]],[[109,-36,-24,195,0,0,255,1],[112,12,12,225,0,0,255,1],[125,12,0,195,0,0,255,1]],[[110,-36,-24,195,0,0,255,1],[113,12,12,225,0,0,255,1],[126,12,0,195,0,0,255,1]],[[111,-36,-24,195,0,0,255,1],[114,12,12,225,0,0,255,1],[127,12,0,195,0,0,255,1],[124,-36,-12,195,0,0,255,1]],[[115,12,12,225,0,0,255,1],[128,12,0,195,0,0,255,1],[125,-36,-12,195,0,0,255,1]],[[116,12,12,225,0,0,255,1],[100,0,-120,225,0,0,255,1],[126,-36,-12,195,0,0,255,1]],[[117,12,12,225,0,0,255,1],[101,0,-84,225,0,0,255,1],[102,0,-60,225,0,0,255,1],[127,-36,-12,195,0,0,255,1],[124,0,0,225,0,0,255,1]],[[103,0,-48,225,0,0,255,1],[128,-36,-12,195,0,0,255,1],[125,0,0,225,0,0,255,1]],[[104,0,-36,225,0,0,255,1],[126,0,0,225,0,0,255,1]],[[105,0,-36,225,0,0,200,1],[127,0,0,225,0,0,255,1]],[[128,0,0,225,0,0,255,1]]],"name":"汎用/必殺技1","position":1,"timings":[{"flashColor":[255,255,204,187],"flashDuration":3,"flashScope":2,"frame":0,"se":null},{"flashColor":[255,170,119,204],"flashDuration":3,"flashScope":1,"frame":1,"se":{"name":"Slash1","pan":0,"pitch":110,"volume":100}},{"flashColor":[255,255,255,204],"flashDuration":3,"flashScope":1,"frame":5,"se":{"name":"Slash4","pan":0,"pitch":90,"volume":100}},{"flashColor":[255,170,119,204],"flashDuration":3,"flashScope":1,"frame":8,"se":{"name":"Slash5","pan":0,"pitch":90,"volume":100}},{"flashColor":[255,255,255,187],"flashDuration":3,"flashScope":1,"frame":12,"se":{"name":"Slash2","pan":0,"pitch":110,"volume":100}},{"flashColor":[255,255,187,221],"flashDuration":2,"flashScope":1,"frame":15,"se":{"name":"Slash1","pan":0,"pitch":120,"volume":100}},{"flashColor":[255,255,204,153],"flashDuration":3,"flashScope":2,"frame":15,"se":null},{"flashColor":[255,255,187,221],"flashDuration":2,"flashScope":1,"frame":17,"se":{"name":"Damage2","pan":0,"pitch":110,"volume":100}}]}, +{"id":31,"animation1Hue":0,"animation1Name":"Special3","animation2Hue":0,"animation2Name":"","frames":[[[0,-42,64,200,0,0,255,1]],[[1,-42,64,200,0,0,255,1]],[[2,-42,64,200,0,0,255,1]],[[3,-42,64,200,0,0,255,1]],[[4,-42,64,200,0,0,255,1]],[[5,-42,64,200,0,0,255,1]],[[6,-42,64,200,0,0,255,1]],[[7,-42,64,200,0,0,255,1]],[[8,-42,64,200,0,0,255,1]],[[9,-42,64,200,0,0,255,1]],[[10,-42,64,200,0,0,255,1],[0,2,-48,200,0,1,255,1]],[[11,-42,64,200,0,0,255,1],[1,2,-48,200,0,1,255,1]],[[12,-42,64,200,0,0,255,1],[2,2,-48,200,0,1,255,1]],[[13,-42,64,200,0,0,255,1],[3,2,-48,200,0,1,255,1]],[[14,-42,64,200,0,0,255,1],[4,2,-48,200,0,1,255,1]],[[15,-42,64,200,0,0,255,1],[5,2,-48,200,0,1,255,1]],[[16,-42,64,200,0,0,255,1],[6,2,-48,200,0,1,255,1]],[[17,-42,64,200,0,0,255,1],[7,2,-48,200,0,1,255,1]],[[18,-42,64,200,0,0,255,1],[8,2,-48,200,0,1,255,1]],[[-1,150,100,0,0,0,0,0],[9,2,-48,200,0,1,255,1]],[[-1,150,100,0,0,0,0,0],[10,2,-48,200,0,1,255,1]],[[-1,150,100,0,0,0,0,0],[11,2,-48,200,0,1,255,1]],[[-1,150,100,0,0,0,0,0],[12,2,-48,200,0,1,255,1]],[[-1,150,100,0,0,0,0,0],[13,2,-48,200,0,1,255,1]],[[-1,150,100,0,0,0,0,0],[14,2,-48,200,0,1,255,1]],[[-1,150,100,0,0,0,0,0],[15,2,-48,200,0,1,255,1]],[[-1,150,100,0,0,0,0,0],[16,2,-48,200,0,1,255,1]],[[-1,150,100,0,0,0,0,0],[17,2,-48,200,0,1,255,1]],[[-1,150,100,0,0,0,0,0],[18,2,-48,200,0,1,255,1]]],"name":"汎用/必殺技2","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder3","pan":0,"pitch":90,"volume":90}},{"flashColor":[187,238,255,170],"flashDuration":2,"flashScope":2,"frame":1,"se":{"name":"Slash1","pan":0,"pitch":110,"volume":100}},{"flashColor":[170,238,255,221],"flashDuration":5,"flashScope":1,"frame":1,"se":null},{"flashColor":[170,238,255,221],"flashDuration":5,"flashScope":1,"frame":5,"se":null},{"flashColor":[187,238,255,170],"flashDuration":2,"flashScope":2,"frame":5,"se":{"name":"Slash1","pan":0,"pitch":110,"volume":100}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":10,"se":{"name":"Thunder3","pan":0,"pitch":90,"volume":90}},{"flashColor":[170,238,255,221],"flashDuration":5,"flashScope":1,"frame":11,"se":null},{"flashColor":[187,238,255,170],"flashDuration":2,"flashScope":2,"frame":11,"se":{"name":"Powerup","pan":0,"pitch":180,"volume":100}},{"flashColor":[170,238,255,221],"flashDuration":5,"flashScope":1,"frame":15,"se":null},{"flashColor":[187,238,255,170],"flashDuration":2,"flashScope":2,"frame":15,"se":{"name":"Slash3","pan":0,"pitch":100,"volume":100}}]}, +{"id":32,"animation1Hue":0,"animation1Name":"Breath","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-96,300,0,0,255,1]],[[1,0,-96,300,0,0,255,1]],[[2,0,-96,300,0,0,255,1]],[[3,0,-96,300,0,0,255,1]],[[4,0,-96,375,0,0,255,1]],[[5,0,-96,450,0,0,255,1]],[[5,0,-96,675,0,0,255,1]],[[6,0,-96,525,0,0,255,1]],[[7,0,-96,525,0,0,255,1]],[[8,12,-96,525,0,0,255,1]],[[9,0,-84,525,0,0,255,1],[5,0,-96,525,0,0,255,1]],[[6,0,-96,600,0,0,255,1]],[[7,0,-96,675,0,0,255,1]],[[8,0,-96,675,0,0,255,1]],[[9,0,-96,675,0,0,255,1]],[[10,0,-96,600,0,0,255,1]],[[11,0,-96,600,0,0,255,1]],[[12,0,-96,525,0,0,255,1]],[[13,0,-96,495,0,0,255,1]],[[14,0,-96,450,0,0,255,1]]],"name":"息","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Fire3","pan":0,"pitch":70,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Thunder1","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,102,0,204],"flashDuration":10,"flashScope":2,"frame":5,"se":null}]}, +{"id":33,"animation1Hue":0,"animation1Name":"Pollen","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-180,150,0,0,255,1],[0,-288,-96,150,0,0,255,1],[0,288,-96,150,0,0,255,1]],[[1,0,-180,150,0,0,255,1],[1,-288,-96,150,0,0,255,1],[1,288,-96,150,0,0,255,1]],[[2,0,-168,195,0,0,255,1],[2,-276,-84,195,0,0,255,1],[2,288,-84,195,0,0,255,1]],[[3,0,-168,195,0,0,255,1],[3,-276,-84,195,0,0,255,1],[3,288,-84,195,0,0,255,1]],[[4,0,-168,195,0,0,255,1],[4,-276,-84,195,0,0,255,1],[4,288,-84,195,0,0,255,1]],[[5,0,-168,195,0,0,255,1],[5,-276,-84,195,0,0,255,1],[5,288,-84,195,0,0,255,1],[0,-168,-168,150,0,0,255,1],[0,168,-168,150,0,0,255,1]],[[6,0,-168,195,0,0,255,1],[6,-276,-84,195,0,0,255,1],[6,288,-84,195,0,0,255,1],[1,-168,-168,150,0,0,255,1],[1,168,-168,150,0,0,255,1]],[[7,0,-168,195,0,0,255,1],[7,-276,-84,195,0,0,255,1],[7,288,-84,195,0,0,255,1],[2,-168,-156,195,0,0,255,1],[2,168,-156,195,0,0,255,1]],[[8,0,-168,195,0,0,255,1],[8,-276,-84,195,0,0,255,1],[8,288,-84,195,0,0,255,1],[3,-168,-156,195,0,0,255,1],[3,168,-156,195,0,0,255,1]],[[9,0,-168,210,0,0,200,1],[9,-276,-84,210,0,0,200,1],[9,288,-84,210,0,0,200,1],[4,-168,-156,195,0,0,255,1],[4,168,-156,195,0,0,255,1]],[[10,0,-168,213,0,0,255,1],[10,-276,-84,213,0,0,255,1],[10,288,-84,213,0,0,255,1],[5,-168,-156,195,0,0,255,1],[5,168,-156,195,0,0,255,1]],[[11,-276,-84,213,0,0,255,1],[11,288,-84,213,0,0,255,1],[11,0,-168,213,0,0,255,1],[6,-168,-156,195,0,0,255,1],[6,168,-156,195,0,0,255,1]],[[12,-276,-84,213,0,0,255,1],[12,288,-84,213,0,0,255,1],[12,0,-168,213,0,0,255,1],[7,-168,-156,195,0,0,255,1],[7,168,-156,195,0,0,255,1],[8,0,-24,195,0,0,100,1]],[[13,-276,-84,213,0,0,255,1],[13,288,-84,213,0,0,255,1],[13,0,-168,213,0,0,255,1],[8,-168,-156,195,0,0,255,1],[8,168,-156,195,0,0,255,1],[9,0,-24,195,0,0,150,1]],[[9,-168,-156,195,0,0,255,1],[9,168,-156,195,0,0,255,1],[10,0,-24,195,0,0,255,1]],[[10,-168,-156,195,0,0,255,1],[10,168,-156,195,0,0,255,1],[11,0,-24,195,0,0,255,1]],[[11,-168,-156,195,0,0,255,1],[11,168,-156,195,0,0,255,1],[12,0,-24,195,0,0,255,1]],[[12,-168,-156,195,0,0,255,1],[12,168,-156,195,0,0,255,1],[13,0,-24,195,0,0,255,1]],[[13,-168,-156,195,0,0,255,1],[13,168,-156,195,0,0,255,1]]],"name":"花粉","position":3,"timings":[{"flashColor":[238,136,204,187],"flashDuration":25,"flashScope":2,"frame":0,"se":{"name":"Darkness4","pan":0,"pitch":60,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Darkness3","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,85,238,204],"flashDuration":2,"flashScope":1,"frame":3,"se":null},{"flashColor":[255,85,238,204],"flashDuration":2,"flashScope":1,"frame":5,"se":null},{"flashColor":[255,85,238,187],"flashDuration":2,"flashScope":1,"frame":7,"se":null},{"flashColor":[255,85,238,170],"flashDuration":2,"flashScope":1,"frame":9,"se":null},{"flashColor":[255,85,238,153],"flashDuration":2,"flashScope":1,"frame":11,"se":null}]}, +{"id":34,"animation1Hue":0,"animation1Name":"Sonic","animation2Hue":0,"animation2Name":"","frames":[[[5,-132,-156,225,0,0,150,1]],[[4,-132,-156,225,0,0,200,1]],[[3,-132,-156,225,0,0,255,1],[5,276,-72,225,0,0,150,1]],[[5,-132,-156,225,0,0,255,1],[5,-240,-48,225,0,0,150,1],[4,276,-72,225,0,0,200,1]],[[4,-132,-156,225,0,0,255,1],[4,-240,-48,225,0,0,200,1],[3,276,-72,225,0,0,255,1]],[[3,-132,-156,225,0,0,255,1],[3,-240,-48,225,0,0,255,1],[5,276,-72,225,0,0,255,1]],[[5,-132,-156,225,0,0,255,1],[5,-240,-48,225,0,0,255,1],[4,276,-72,225,0,0,255,1],[5,108,-132,225,0,0,150,1]],[[4,-132,-156,225,0,0,255,1],[4,-240,-48,225,0,0,255,1],[3,276,-72,225,0,0,255,1],[4,108,-132,225,0,0,200,1]],[[3,-132,-156,225,0,0,255,1],[3,-240,-48,225,0,0,255,1],[5,276,-72,225,0,0,255,1],[3,108,-132,225,0,0,255,1]],[[2,-132,-156,225,0,0,255,1],[5,-240,-48,225,0,0,255,1],[4,276,-72,225,0,0,255,1],[5,108,-132,225,0,0,255,1]],[[1,-132,-156,225,0,0,255,1],[4,-240,-48,225,0,0,255,1],[3,276,-72,225,0,0,255,1],[4,108,-132,225,0,0,255,1]],[[0,-132,-156,225,0,0,255,1],[3,-240,-48,225,0,0,255,1],[2,276,-72,225,0,0,255,1],[3,108,-132,225,0,0,255,1]],[[0,-132,-156,195,0,0,150,1],[2,-240,-48,225,0,0,255,1],[1,276,-72,225,0,0,255,1],[5,108,-132,225,0,0,255,1]],[[1,-240,-48,225,0,0,255,1],[0,276,-72,225,0,0,255,1],[4,108,-132,225,0,0,255,1]],[[0,-240,-48,225,0,0,255,1],[0,276,-72,195,0,0,150,1],[3,108,-132,225,0,0,255,1]],[[0,-240,-48,195,0,0,150,1],[2,108,-132,225,0,0,255,1]],[[1,108,-132,225,0,0,255,1]],[[0,108,-132,225,0,0,255,1]],[[0,108,-132,195,0,0,150,1]]],"name":"超音波","position":3,"timings":[{"flashColor":[255,255,119,119],"flashDuration":10,"flashScope":2,"frame":0,"se":{"name":"Sound3","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,221,170,170],"flashDuration":4,"flashScope":1,"frame":2,"se":null},{"flashColor":[255,221,170,170],"flashDuration":4,"flashScope":1,"frame":5,"se":null},{"flashColor":[255,221,170,170],"flashDuration":4,"flashScope":1,"frame":8,"se":null},{"flashColor":[255,221,170,170],"flashDuration":5,"flashScope":1,"frame":11,"se":null}]}, +{"id":35,"animation1Hue":0,"animation1Name":"Mist","animation2Hue":0,"animation2Name":"","frames":[[[0,-228,-36,600,0,0,50,1],[1,264,-36,600,0,0,50,1]],[[0,-204,-36,600,0,0,100,1],[1,240,-36,600,0,0,100,1]],[[0,-180,-36,600,0,0,125,1],[1,216,-36,600,0,0,125,1]],[[0,-156,-36,600,0,0,125,1],[1,192,-36,600,0,0,125,1]],[[0,-132,-36,600,0,0,125,1],[1,168,-36,600,0,0,125,1]],[[0,-108,-36,600,0,0,125,1],[1,144,-36,600,0,0,125,1]],[[0,-84,-36,600,0,0,125,1],[1,120,-36,600,0,0,125,1]],[[0,-60,-36,600,0,0,125,1],[1,96,-36,600,0,0,125,1]],[[0,-36,-36,600,0,0,125,1],[1,72,-36,600,0,0,125,1]],[[0,-12,-36,600,0,0,125,1],[1,48,-36,600,0,0,125,1]],[[0,12,-36,600,0,0,125,1],[1,24,-36,600,0,0,125,1]],[[0,36,-36,600,0,0,125,1],[1,0,-36,600,0,0,125,1]],[[0,60,-36,600,0,0,125,1],[1,-24,-36,600,0,0,125,1]],[[0,72,-36,600,0,0,100,1],[1,-48,-36,600,0,0,100,1]],[[0,72,-36,600,0,0,50,1],[1,-72,-36,600,0,0,50,1]]],"name":"霧","position":3,"timings":[{"flashColor":[136,153,170,204],"flashDuration":15,"flashScope":1,"frame":0,"se":{"name":"Blind","pan":0,"pitch":70,"volume":90}},{"flashColor":[255,255,255,170],"flashDuration":15,"flashScope":2,"frame":0,"se":{"name":"Sand","pan":0,"pitch":110,"volume":90}}]}, +{"id":36,"animation1Hue":0,"animation1Name":"Song","animation2Hue":0,"animation2Name":"","frames":[[[3,-168,0,300,0,0,100,1],[3,-108,-84,300,0,0,100,1],[0,-276,-24,90,0,0,100,1]],[[4,-168,0,300,0,0,150,1],[4,-84,-84,300,0,0,150,1],[0,-252,-48,90,0,0,150,1]],[[5,-168,0,300,0,0,200,1],[3,180,0,300,0,0,100,1],[5,-60,-84,300,0,0,200,1],[0,-228,-60,90,0,0,200,1]],[[6,-168,0,300,0,0,255,1],[4,180,0,300,0,0,150,1],[6,-36,-84,300,0,0,255,1],[0,-192,-60,90,0,0,255,1],[1,-84,-168,150,0,0,50,1]],[[7,-168,0,300,0,0,255,1],[5,180,0,300,0,0,200,1],[7,-12,-84,300,0,0,255,1],[0,-156,-48,90,0,0,255,1],[1,-48,-156,150,0,0,100,1]],[[8,-168,0,300,0,0,200,1],[6,180,0,300,0,0,255,1],[8,12,-84,300,0,0,200,1],[0,-120,-24,90,0,0,255,1],[1,-24,-144,150,0,0,150,1]],[[9,-168,0,300,0,0,150,1],[7,180,0,300,0,0,255,1],[9,36,-84,300,0,0,150,1],[0,-96,-12,90,0,0,255,1],[1,12,-144,150,0,0,150,1]],[[10,-168,0,300,0,0,100,1],[8,180,0,300,0,0,200,1],[10,60,-84,300,0,0,100,1],[0,-72,-12,90,0,0,255,1],[1,48,-156,150,0,0,100,1],[2,-312,-144,105,0,0,100,1],[2,156,24,90,0,0,100,1]],[[9,180,0,300,0,0,150,1],[0,-48,-24,90,0,0,255,1],[1,84,-168,150,0,0,100,1],[2,-288,-132,105,0,0,150,1],[2,204,0,105,0,0,150,1]],[[3,-168,0,300,0,0,100,1],[3,-108,-84,300,0,0,100,1],[10,180,0,300,0,0,100,1],[0,-12,-36,90,0,0,255,1],[2,-264,-84,105,0,0,200,1],[2,240,-24,105,0,0,200,1],[1,120,-180,150,0,0,100,1]],[[4,-168,0,300,0,0,180,1],[4,-84,-84,300,0,0,180,1],[0,12,-48,90,0,0,180,1],[2,-228,-24,105,0,0,180,1],[2,264,-60,105,0,0,180,1],[1,156,-192,150,0,0,180,1]],[[5,-168,0,300,0,0,150,1],[-1,408,29.5,300,0,0,150,1],[5,-60,-84,300,0,0,150,1],[0,36,-60,90,0,0,150,1],[2,-204,0,105,0,0,150,1],[2,300,-96,105,0,0,150,1],[1,192,-192,150,0,0,150,1]],[[-1,-405.5,45,300,0,0,80,1],[-1,180,-2.5,300,0,0,80,1],[-1,-222.5,63.5,300,0,0,80,1],[0,48,-80,90,0,0,180,1],[2,-192,16,105,0,0,180,1],[2,320,-112,105,0,0,180,1],[1,208,-176,150,0,0,180,1]],[[-1,-405.5,45,300,0,0,80,1],[-1,180,-2.5,300,0,0,80,1],[-1,-222.5,63.5,300,0,0,80,1],[0,64,-96,90,0,0,80,1],[2,-176,32,105,0,0,80,1],[2,336,-128,105,0,0,80,1],[1,224,-160,150,0,0,80,1]]],"name":"歌","position":3,"timings":[{"flashColor":[221,221,255,136],"flashDuration":10,"flashScope":2,"frame":0,"se":{"name":"Ice5","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,170],"flashDuration":3,"flashScope":1,"frame":2,"se":null},{"flashColor":[255,170,255,170],"flashDuration":3,"flashScope":1,"frame":5,"se":null}]}, +{"id":37,"animation1Hue":0,"animation1Name":"Howl","animation2Hue":40,"animation2Name":"Recovery4","frames":[[[6,0,0,225,0,0,255,1]],[[7,0,0,225,0,0,255,1],[116,0,0,225,0,0,255,1]],[[7,0,0,450,0,0,255,1],[6,0,0,150,0,0,255,1],[117,0,0,300,0,0,255,1]],[[7,0,0,225,0,0,255,1],[7,0,0,900,0,0,150,1],[117,0,0,315,0,0,255,1]],[[7,0,0,450,0,0,255,1],[6,0,0,150,0,0,255,1],[117,0,0,330,0,0,255,1]],[[7,0,0,225,0,0,255,1],[7,0,0,900,0,0,150,1],[117,0,0,345,0,0,255,1]],[[7,0,0,450,0,0,255,1],[6,0,0,150,0,0,255,1],[117,0,0,360,0,0,255,1]],[[7,0,0,225,0,0,255,1],[7,0,0,900,0,0,150,1],[117,0,0,375,0,0,255,1]],[[7,0,0,450,0,0,255,1],[6,0,0,150,0,0,255,1],[117,0,0,390,0,0,255,1]],[[7,0,0,225,0,0,255,1],[7,0,0,900,0,0,150,1],[117,0,0,405,0,0,200,1]],[[7,0,0,450,0,0,255,1],[117,0,0,420,0,0,150,1]],[[7,0,0,900,0,0,150,1],[117,0,0,420,0,0,100,1]]],"name":"咆哮","position":3,"timings":[{"flashColor":[238,255,238,136],"flashDuration":5,"flashScope":2,"frame":0,"se":null},{"flashColor":[170,255,255,153],"flashDuration":2,"flashScope":1,"frame":0,"se":{"name":"Monster1","pan":0,"pitch":100,"volume":100}},{"flashColor":[170,255,255,136],"flashDuration":2,"flashScope":1,"frame":2,"se":null},{"flashColor":[170,255,255,136],"flashDuration":2,"flashScope":1,"frame":4,"se":null},{"flashColor":[170,255,255,136],"flashDuration":2,"flashScope":1,"frame":6,"se":null},{"flashColor":[170,255,255,136],"flashDuration":2,"flashScope":1,"frame":8,"se":null}]}, +{"id":38,"animation1Hue":0,"animation1Name":"Blow","animation2Hue":0,"animation2Name":"Special2","frames":[[[0,0,-96,225,0,0,255,1]],[[1,0,-96,225,0,0,255,1]],[[2,0,-96,225,0,0,255,1],[124,0,-48,180,0,0,255,1]],[[3,0,-96,225,0,0,255,1],[125,0,-48,180,0,0,255,1]],[[4,0,-96,225,0,0,255,1],[126,0,-48,180,0,0,255,1]],[[5,0,-96,225,0,0,255,1],[127,0,-48,180,0,0,255,1]],[[128,0,-48,180,0,0,255,1]]],"name":"足払い","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind7","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,136,102,255],"flashDuration":3,"flashScope":1,"frame":2,"se":null},{"flashColor":[255,255,255,119],"flashDuration":2,"flashScope":2,"frame":2,"se":{"name":"Blow2","pan":0,"pitch":70,"volume":100}}]}, +{"id":39,"animation1Hue":0,"animation1Name":"Howl","animation2Hue":200,"animation2Name":"Cure4","frames":[[[9,0,0,300,0,0,150,1]],[[8,0,0,300,0,0,100,1],[7,0,0,225,0,0,150,1]],[[9,0,0,300,0,0,150,1],[6,0,0,195,0,0,200,1],[0,0,0,180,0,0,255,1]],[[8,0,0,300,0,0,100,1],[1,0,0,225,0,0,255,1],[112,0,0,75,0,0,255,1]],[[2,0,0,225,0,0,255,1],[1,0,0,225,0,0,150,1],[112,0,0,180,0,0,150,1],[9,0,0,300,0,0,50,1]],[[3,0,0,225,0,0,255,1],[4,0,0,195,0,1,200,1],[112,0,0,180,0,0,100,1]],[[3,0,0,240,0,0,150,1],[4,0,0,240,0,1,150,1]],[[3,0,0,247,0,0,100,1],[5,0,0,240,0,1,150,1]],[],[]],"name":"体当たり","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder2","pan":0,"pitch":80,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Thunder8","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,119,102,221],"flashDuration":5,"flashScope":1,"frame":2,"se":{"name":"Blow3","pan":0,"pitch":50,"volume":100}},{"flashColor":[255,238,170,136],"flashDuration":2,"flashScope":2,"frame":3,"se":null}]}, +{"id":40,"animation1Hue":0,"animation1Name":"Flash","animation2Hue":0,"animation2Name":"","frames":[[[1,0,-10,260,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1]],[[2,0,-10,260,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1]],[[3,0,-10,260,0,0,255,1],[6,0,-10,260,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1]],[[4,0,-10,260,0,0,255,1],[7,0,-10,260,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1]],[[5,0,-10,260,0,0,255,1],[8,0,-10,260,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1]],[[9,0,-10,260,0,0,255,1],[-1,0,-10,0,0,0,0,0],[11,0,-10,280,0,0,255,1]],[[10,0,-10,260,0,0,255,1],[-1,0,-10,0,0,0,0,0],[12,0,-10,280,0,0,255,1]],[[10,0,-10,300,-20,0,255,1],[-1,0,-10,0,0,0,0,0],[13,0,-10,280,0,0,255,1]],[[-1,0,-10,300,-20,0,255,1],[-1,0,-10,0,0,0,0,0],[14,0,-10,330,0,0,200,1]],[[-1,0,-10,300,-20,0,255,1],[-1,0,-10,0,0,0,0,0],[14,0,-10,430,0,0,200,1]]],"name":"閃光","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":2,"frame":0,"se":null},{"flashColor":[255,255,255,255],"flashDuration":3,"flashScope":1,"frame":0,"se":{"name":"Flash2","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Sword1","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,255,255,170],"flashDuration":5,"flashScope":2,"frame":9,"se":null},{"flashColor":[255,255,255,68],"flashDuration":5,"flashScope":1,"frame":7,"se":null},{"flashColor":[255,255,255,119],"flashDuration":5,"flashScope":1,"frame":8,"se":null},{"flashColor":[255,255,255,187],"flashDuration":5,"flashScope":1,"frame":9,"se":null}]}, +{"id":41,"animation1Hue":0,"animation1Name":"Recovery1","animation2Hue":0,"animation2Name":"","frames":[[[20,0,-210,280,0,0,255,1]],[[21,0,-210,280,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1]],[[22,0,-210,280,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1]],[[23,0,-210,280,0,0,255,1],[20,0,-200,220,0,1,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1]],[[24,0,-210,280,0,0,255,1],[21,0,-200,220,0,1,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1]],[[25,0,-210,280,0,0,255,1],[22,0,-200,220,0,1,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1]],[[26,0,-210,280,0,0,255,1],[23,0,-200,220,0,1,255,1],[-1,-23,-201,100,0,0,255,1],[0,0,-212,250,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1]],[[15,0,-180,230,0,0,255,1],[27,0,-212,280,0,0,255,1],[24,0,-200,220,0,1,255,1],[1,0,-212,250,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1]],[[16,0,-180,230,0,0,255,1],[28,0,-212,280,0,0,255,1],[25,0,-200,220,0,1,255,1],[2,0,-212,250,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1],[-1,-23,-201,100,0,0,255,1]],[[29,0,-212,280,0,0,255,1],[17,0,-180,230,0,0,255,1],[26,0,-200,220,0,1,255,1],[3,0,-212,250,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1]],[[27,0,-212,280,0,0,255,1],[18,0,-180,230,0,0,255,1],[27,0,-200,220,0,1,255,1],[4,0,-212,250,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1]],[[28,0,-212,280,0,0,255,1],[19,0,-180,230,0,0,255,1],[5,0,-212,250,0,0,255,1],[28,0,-200,220,0,1,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1]],[[29,0,-212,280,0,0,255,1],[17,0,-180,230,0,0,255,1],[6,0,-212,250,0,0,255,1],[29,0,-200,220,0,1,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1]],[[27,0,-212,280,0,0,255,1],[18,0,-180,230,0,0,255,1],[27,0,-200,220,0,1,255,1],[7,0,-212,250,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1],[-1,0,-180,100,0,0,255,1]],[[28,0,-212,280,0,0,255,1],[19,0,-180,230,0,0,255,1],[28,0,-200,220,0,1,255,1],[8,0,-212,250,0,0,255,1]],[[29,0,-212,280,0,0,255,1],[17,0,-180,230,0,0,255,1],[29,0,-200,220,0,1,255,1],[9,0,-212,250,0,0,255,1]],[[27,0,-212,280,0,0,255,1],[18,0,-180,230,0,0,255,1],[27,0,-200,220,0,1,255,1],[10,0,-212,250,0,0,255,1]],[[28,0,-212,280,0,0,200,1],[19,0,-180,230,0,0,200,1],[28,0,-200,220,0,1,200,1],[11,0,-212,250,0,0,255,1]],[[29,0,-212,280,0,0,127,1],[17,0,-180,230,0,0,127,1],[29,0,-200,220,0,1,127,1],[12,0,-212,250,0,0,255,1],[-1,0,-180,0,0,0,0,0]],[[13,0,-212,250,0,0,255,1],[-1,0,-180,0,0,0,0,0],[-1,0,-180,0,0,0,0,0],[-1,0,-180,0,0,0,0,0]],[[14,0,-212,250,0,0,255,1],[-1,0,-180,0,0,0,0,0],[-1,0,-180,0,0,0,0,0],[-1,0,-180,0,0,0,0,0]]],"name":"回復/単体1","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Heal3","pan":0,"pitch":100,"volume":90}},{"flashColor":[187,255,255,204],"flashDuration":8,"flashScope":1,"frame":0,"se":{"name":"Saint2","pan":0,"pitch":100,"volume":90}},{"flashColor":[187,255,255,204],"flashDuration":10,"flashScope":1,"frame":6,"se":null},{"flashColor":[187,255,255,102],"flashDuration":10,"flashScope":2,"frame":6,"se":null}]}, +{"id":42,"animation1Hue":0,"animation1Name":"Recovery3","animation2Hue":230,"animation2Name":"Recovery4","frames":[[[0,0,0,150,0,0,200,1]],[[1,0,0,150,0,0,200,1],[111,0,0,150,0,0,255,1]],[[2,0,0,150,0,0,200,1],[112,0,0,150,0,0,255,1]],[[3,0,0,150,0,0,200,1],[112,0,0,165,0,0,255,1]],[[4,0,0,150,0,0,200,1],[104,-108,-72,150,0,0,255,1],[112,0,0,150,0,0,255,1]],[[5,0,0,153,0,0,200,1],[106,108,72,150,0,0,255,1],[117,0,0,285,0,0,100,1],[104,-108,-72,75,0,0,255,1],[112,0,0,150,0,0,255,1]],[[6,0,0,156,0,0,200,1],[107,-60,48,105,0,0,255,1],[111,0,0,150,0,0,255,1],[117,0,0,270,0,0,150,1],[106,108,72,90,0,0,255,1]],[[7,0,0,159,0,0,200,1],[112,0,0,150,0,0,255,1],[106,84,-72,150,0,0,255,1],[107,-60,48,60,0,0,255,1],[117,0,0,255,0,0,200,1]],[[8,0,0,162,0,0,200,1],[113,0,0,225,0,0,200,1],[106,84,-72,90,0,0,255,1],[106,-12,132,150,0,0,255,1],[117,0,0,240,0,0,255,1]],[[9,0,0,165,0,0,200,1],[113,0,0,300,0,0,150,1],[106,-12,132,90,0,0,255,1],[106,156,12,90,0,0,255,1],[106,-132,-96,90,0,0,255,1],[116,0,0,255,0,0,255,1]],[[10,0,0,171,0,0,200,1],[113,0,0,375,0,0,100,1],[115,0,0,255,0,0,200,1],[106,-36,-108,90,0,0,255,1],[106,156,12,45,0,0,255,1],[106,-132,-96,45,0,0,255,1]],[[11,0,0,174,0,0,200,1],[113,0,0,390,0,0,60,1],[106,48,-168,90,0,0,255,1],[106,-36,-108,45,0,0,255,1],[114,0,0,255,0,0,150,1]],[[12,0,0,177,0,0,200,1],[113,0,0,405,0,0,30,1],[106,72,144,90,0,0,255,1],[106,48,-168,45,0,0,255,1]],[[13,0,0,180,0,0,200,1],[-1,-300,216,165,0,0,255,1],[106,72,144,60,0,0,255,1]],[[14,0,0,183,0,0,200,1]],[[15,0,0,186,0,0,200,1]],[[16,0,0,189,0,0,200,1]],[[17,0,0,192,0,0,200,1]],[[18,0,0,195,0,0,200,1]],[[19,0,0,198,0,0,200,1]],[[20,0,0,201,0,0,200,1]],[[21,0,0,204,0,0,200,1]],[],[],[]],"name":"回復/単体2","position":1,"timings":[{"flashColor":[187,238,255,136],"flashDuration":2,"flashScope":1,"frame":0,"se":{"name":"Starlight","pan":0,"pitch":150,"volume":80}},{"flashColor":[187,238,255,204],"flashDuration":8,"flashScope":2,"frame":0,"se":{"name":"Saint2","pan":0,"pitch":100,"volume":100}},{"flashColor":[187,238,255,153],"flashDuration":2,"flashScope":1,"frame":2,"se":null},{"flashColor":[187,238,255,136],"flashDuration":2,"flashScope":1,"frame":4,"se":null},{"flashColor":[187,238,255,136],"flashDuration":15,"flashScope":1,"frame":9,"se":null}]}, +{"id":43,"animation1Hue":0,"animation1Name":"Recovery2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,400,0,0,255,1]],[[1,0,0,400,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,150,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[2,0,0,400,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,150,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[3,0,0,400,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,150,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[6,0,-82,500,0,0,60,1],[-1,-103,312,420,0,0,80,1],[4,0,0,400,0,0,255,1],[-1,408,248,100,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,150,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[7,0,-77,510,0,0,120,1],[-1,-77.5,312,420,0,0,128,1],[-1,-200,0,300,0,0,255,1],[-1,200,0,300,0,0,255,1],[5,0,0,400,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,150,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[8,0,-80,520,0,0,180,1],[-1,0,-10,420,0,0,128,1],[-1,-200,0,300,0,0,255,1],[-1,200,0,300,0,0,255,1],[5,2,0,350,-80,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,150,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[6,2,-78,530,0,0,180,1],[-1,200,0,300,0,0,255,1],[-1,-87.5,312,420,0,0,128,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[18,0,144,80,0,0,100,1],[-1,0,150,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[7,0,-78,540,0,0,180,1],[9,-200,0,300,0,0,255,1],[-1,0,-10,420,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[18,0,101,90,0,0,200,1],[-1,0,150,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[8,0,-80,550,0,0,180,1],[10,-200,0,300,0,0,255,1],[-1,-85,255,420,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[18,0,59,100,0,0,255,1],[-1,0,150,0,0,0,0,0],[18,-300,220,60,0,0,100,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[6,0,-80,560,0,0,180,1],[11,-200,0,300,0,0,255,1],[9,200,0,300,0,0,255,1],[-1,-72.5,230,420,0,0,128,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[18,0,16,110,0,0,255,1],[-1,0,150,0,0,0,0,0],[18,-300,181,70,0,0,200,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[7,0,-80,570,0,0,120,1],[12,-200,0,300,0,0,255,1],[10,200,0,300,0,0,255,1],[-1,-130,285,420,0,0,128,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[18,0,-27,100,0,0,255,1],[-1,0,150,0,0,0,0,0],[18,-300,141,80,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[8,0,-80,580,0,0,60,1],[13,-200,0,300,0,0,255,1],[11,200,0,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[18,0,-69,90,0,0,200,1],[18,300,228,70,0,0,100,1],[18,-300,102,90,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[14,-200,0,300,0,0,255,1],[12,200,0,300,0,0,255,1],[17,-200,192,300,0,0,100,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[18,0,-112,80,0,0,100,1],[18,300,193,80,0,0,200,1],[18,-300,63,80,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[15,-200,0,300,0,0,255,1],[13,200,0,300,0,0,255,1],[17,-200,176,300,0,0,170,1],[-1,408,223,100,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[18,300,157,90,0,0,255,1],[18,-300,23,70,0,0,200,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[16,-200,0,300,0,0,255,1],[14,200,0,300,0,0,255,1],[17,-200,160,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[18,300,122,100,0,0,255,1],[18,-300,-16,60,0,0,100,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[17,-200,0,300,0,0,255,1],[15,200,0,300,0,0,255,1],[17,-200,144,300,0,0,170,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[18,300,87,90,0,0,255,1],[-1,-297.5,-137.5,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[17,-200,128,300,0,0,100,1],[16,200,0,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[18,300,51,80,0,0,200,1],[-1,-300,-192,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[17,200,0,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[18,300,16,70,0,0,100,1]]],"name":"回復/全体1","position":3,"timings":[{"flashColor":[187,255,255,204],"flashDuration":8,"flashScope":1,"frame":0,"se":{"name":"Saint4","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Ice4","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":3,"se":{"name":"Heal1","pan":0,"pitch":80,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":4,"se":{"name":"Ice5","pan":0,"pitch":100,"volume":90}},{"flashColor":[187,255,255,136],"flashDuration":10,"flashScope":2,"frame":5,"se":null},{"flashColor":[187,255,255,255],"flashDuration":10,"flashScope":1,"frame":5,"se":null}]}, +{"id":44,"animation1Hue":0,"animation1Name":"Recovery4","animation2Hue":80,"animation2Name":"Recovery5","frames":[[[11,0,-30,150,0,0,255,1]],[[11,0,-30,405,0,0,255,1]],[[11,0,-30,486,0,0,255,1],[0,0,-30,135,0,0,255,1]],[[12,0,-30,405,0,0,255,1],[1,0,-30,162,0,0,255,1],[8,0,-30,567,0,0,255,1]],[[12,0,-30,432,0,0,255,1],[2,0,-30,216,0,0,255,1],[8,0,-30,531,0,0,255,1]],[[13,0,-30,432,0,0,255,1],[3,0,-30,216,0,0,255,1],[9,0,-30,531,0,0,255,1]],[[13,0,-30,439,0,0,255,1],[0,0,-30,216,0,0,255,1],[9,0,-30,513,0,0,255,1]],[[13,0,-30,432,0,0,255,1],[1,0,-30,216,0,0,255,1],[10,0,-30,513,0,0,255,1]],[[13,0,-30,439,0,0,255,1],[2,0,-30,216,0,0,255,1],[10,0,-30,486,0,0,255,1]],[[13,0,-30,270,0,0,255,1],[14,0,-30,405,0,0,255,1]],[[12,0,-30,270,0,0,255,1],[15,0,-30,486,0,0,255,1]],[[11,0,-30,270,0,0,255,1],[16,0,-30,540,0,0,255,1],[4,144,-126,135,0,0,255,1],[4,-144,78,135,0,0,255,1],[114,0,-30,405,0,0,255,1]],[[11,0,-30,135,0,0,255,1],[17,0,-30,540,0,0,255,1],[4,-144,-114,135,0,0,255,1],[4,144,54,135,0,0,255,1],[5,144,-126,162,0,0,255,1],[5,-144,78,162,0,0,255,1],[115,0,-30,405,0,0,255,1]],[[17,0,-30,553,0,0,255,1],[4,12,-162,135,0,0,255,1],[4,12,90,135,0,0,255,1],[5,144,54,216,0,0,255,1],[5,-144,-114,216,0,0,255,1],[6,144,-126,162,0,0,255,1],[6,-144,78,162,0,0,255,1],[116,0,-30,405,0,0,255,1]],[[17,0,-30,567,0,0,255,1],[5,12,-162,270,0,0,255,1],[5,12,90,270,0,0,255,1],[6,-144,-114,216,0,0,255,1],[6,144,54,216,0,0,255,1],[7,144,-126,162,0,0,255,1],[7,-144,78,162,0,0,255,1],[117,0,-30,405,0,0,255,1]],[[17,0,-30,574,0,0,100,1],[6,12,-162,270,0,0,255,1],[6,12,90,270,0,0,255,1],[7,144,54,216,0,0,255,1],[7,-144,-114,216,0,0,255,1],[118,0,-30,405,0,0,255,1]],[[7,12,-162,270,0,0,255,1],[7,12,90,270,0,0,255,1],[119,0,-30,405,0,0,255,1]]],"name":"回復/全体2","position":3,"timings":[{"flashColor":[170,204,255,221],"flashDuration":8,"flashScope":1,"frame":0,"se":{"name":"Ice1","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":8,"se":{"name":"Evasion2","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,255,255,136],"flashDuration":10,"flashScope":2,"frame":9,"se":{"name":"Flash2","pan":0,"pitch":90,"volume":50}},{"conditions":0,"flashColor":[255,255,255,204],"flashDuration":10,"flashScope":1,"frame":9,"se":{"name":"Ice4","pan":0,"pitch":100,"volume":80}}]}, +{"id":45,"animation1Hue":0,"animation1Name":"Cure1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-150,280,0,0,128,1]],[[1,0,-150,280,0,0,200,1],[17,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[2,0,-150,280,0,0,255,1],[17,2,-18,200,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[3,0,-150,280,0,0,255,1],[17,0,-20,300,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[4,0,-150,280,0,0,255,1],[18,0,-20,300,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[5,0,-150,280,0,0,255,1],[19,0,-20,300,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[6,0,-150,280,0,0,255,1],[20,0,-20,300,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[7,0,-150,280,0,0,255,1],[22,0,-20,300,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[8,0,-150,280,0,0,255,1],[23,0,-20,300,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[9,0,-150,280,0,0,255,1],[24,0,-20,300,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[10,0,-150,280,0,0,255,1],[25,0,-20,300,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[11,0,-150,280,0,0,255,1],[26,0,-20,300,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[12,0,-150,280,0,0,255,1],[27,0,-20,300,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[13,0,-150,280,0,0,255,1],[27,0,-20,330,0,0,128,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[14,0,-150,280,0,0,255,1],[27,0,-20,360,0,0,60,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[15,0,-150,280,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1],[-1,0,-20,100,0,0,255,1]],[[16,0,-150,280,0,0,255,1]]],"name":"治療/単体1","position":2,"timings":[{"flashColor":[170,255,255,85],"flashDuration":10,"flashScope":1,"frame":1,"se":{"name":"Ice1","pan":0,"pitch":100,"volume":90}},{"flashColor":[170,255,255,102],"flashDuration":10,"flashScope":1,"frame":2,"se":{"name":"Recovery","pan":0,"pitch":70,"volume":90}},{"flashColor":[170,255,255,204],"flashDuration":4,"flashScope":1,"frame":3,"se":null},{"flashColor":[170,255,255,68],"flashDuration":5,"flashScope":2,"frame":4,"se":null},{"flashColor":[170,255,255,204],"flashDuration":4,"flashScope":1,"frame":6,"se":{"name":"Ice5","pan":0,"pitch":100,"volume":90}},{"flashColor":[170,255,255,119],"flashDuration":10,"flashScope":2,"frame":6,"se":null},{"flashColor":[170,255,255,204],"flashDuration":4,"flashScope":1,"frame":10,"se":null}]}, +{"id":46,"animation1Hue":250,"animation1Name":"Cure3","animation2Hue":0,"animation2Name":"Recovery5","frames":[[[4,0,-144,225,0,0,255,1]],[[5,0,-144,225,0,0,255,1],[1,0,-144,225,0,0,100,1]],[[4,0,-144,225,0,0,255,1],[2,0,-144,225,0,0,100,1],[100,0,0,195,0,0,255,1]],[[5,0,-144,225,0,0,255,1],[1,0,-144,225,0,0,100,1],[101,0,0,225,0,0,255,1]],[[4,0,-144,225,0,0,255,1],[5,0,-156,240,0,0,100,1],[2,0,-144,225,0,0,150,1],[102,0,0,225,0,0,255,1]],[[6,0,-156,240,0,0,255,1],[3,0,-144,225,0,0,150,1],[103,0,0,225,0,0,255,1]],[[5,0,-156,240,0,0,255,1],[2,0,-144,225,0,0,150,1],[104,0,0,225,0,0,255,1]],[[6,0,-156,240,0,0,255,1],[3,0,-144,225,0,0,150,1],[105,0,0,225,0,0,255,1],[120,0,-168,150,180,0,255,1]],[[5,0,-156,240,0,0,255,1],[2,0,-144,225,0,0,150,1],[106,0,0,225,0,0,255,1],[121,0,-180,150,180,0,255,1]],[[6,0,-156,240,0,0,255,1],[3,0,-144,225,0,0,150,1],[107,0,0,225,0,0,255,1],[122,0,-180,150,180,0,255,1]],[[5,0,-156,240,0,0,255,1],[2,0,-144,225,0,0,150,1],[108,0,0,225,0,0,255,1],[123,0,-180,150,180,0,255,1]],[[4,0,-144,225,0,0,255,1],[4,0,-156,240,0,0,100,1],[1,0,-144,225,0,0,150,1],[109,0,0,225,0,0,255,1],[124,0,-180,150,180,0,255,1]],[[4,0,-132,210,0,0,150,1],[1,0,-144,225,0,0,100,1],[125,0,-180,150,180,0,255,1]],[[126,0,-180,150,180,0,255,1]],[[127,0,-180,150,180,0,255,1]],[[128,0,-180,150,180,0,255,1]],[[129,0,-180,150,180,0,255,1]]],"name":"治療/単体2","position":2,"timings":[{"flashColor":[238,255,187,102],"flashDuration":10,"flashScope":2,"frame":0,"se":{"name":"Ice1","pan":0,"pitch":90,"volume":90}},{"flashColor":[204,255,85,170],"flashDuration":8,"flashScope":1,"frame":2,"se":{"name":"Ice5","pan":0,"pitch":100,"volume":90}}]}, +{"id":47,"animation1Hue":0,"animation1Name":"Cure2","animation2Hue":0,"animation2Name":"","frames":[[],[[0,0,-200,200,0,0,255,1],[-1,300,-190,100,0,0,255,1],[-1,300,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[1,0,-200,200,0,0,255,1],[-1,300,-190,100,0,0,255,1],[-1,300,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[2,0,-200,200,0,0,255,1],[0,300,-190,200,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,0,-200,30,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[3,0,-200,200,0,0,255,1],[1,300,-190,200,0,0,255,1],[0,-300,-190,200,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,0,-200,54,0,0,235,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[4,0,-200,200,0,0,255,1],[2,300,-190,200,0,0,255,1],[1,-300,-190,200,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,300,-190,30,0,0,255,1],[25,0,-200,78,0,0,214,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[5,0,-200,200,0,0,255,1],[3,300,-190,200,0,0,255,1],[2,-300,-190,200,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,-300,-190,30,0,0,255,1],[25,300,-190,47,0,0,235,1],[25,0,-200,102,0,0,194,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[6,0,-200,200,0,0,255,1],[4,300,-190,200,0,0,255,1],[3,-300,-190,200,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,-300,-190,47,0,0,235,1],[25,300,-190,64,0,0,214,1],[25,0,-200,126,0,0,173,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[7,0,-200,200,0,0,255,1],[5,300,-190,200,0,0,255,1],[4,-300,-190,200,0,0,255,1],[13,-150,0,300,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,-300,-190,64,0,0,214,1],[25,300,-190,81,0,0,194,1],[25,0,-200,150,0,0,153,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[8,0,-200,200,0,0,255,1],[6,300,-190,200,0,0,255,1],[5,-300,-190,200,0,0,255,1],[14,-150,0,300,0,0,255,1],[13,200,0,300,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,-300,-190,81,0,0,194,1],[25,300,-190,98,0,0,173,1],[25,0,-200,174,0,0,132,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[9,0,-200,200,0,0,255,1],[7,300,-190,200,0,0,255,1],[6,-300,-190,200,0,0,255,1],[15,-150,0,300,0,0,255,1],[14,200,0,300,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,-300,-190,98,0,0,173,1],[25,300,-190,115,0,0,153,1],[25,0,-200,198,0,0,112,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[10,0,-200,200,0,0,255,1],[8,300,-190,200,0,0,255,1],[7,-300,-190,200,0,0,255,1],[16,-150,0,300,0,0,255,1],[15,200,0,300,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,-300,-190,115,0,0,153,1],[25,300,-190,132,0,0,132,1],[25,0,-200,222,0,0,91,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[11,0,-200,200,0,0,255,1],[9,300,-190,200,0,0,255,1],[8,-300,-190,200,0,0,255,1],[17,-150,0,300,0,0,255,1],[16,200,0,300,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,-300,-190,132,0,0,132,1],[25,300,-190,149,0,0,112,1],[25,0,-200,246,0,0,71,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[12,0,-200,200,0,0,255,1],[10,300,-190,200,0,0,255,1],[9,-300,-190,200,0,0,255,1],[18,-150,0,300,0,0,255,1],[17,200,0,300,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,-300,-190,149,0,0,112,1],[25,300,-190,166,0,0,91,1],[25,0,-200,270,0,0,50,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[11,300,-190,200,0,0,255,1],[10,-300,-190,200,0,0,255,1],[19,-150,0,300,0,0,255,1],[18,200,0,300,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[25,-300,-190,166,0,0,91,1],[25,300,-190,183,0,0,71,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1],[-1,150,-190,100,0,0,255,1]],[[12,300,-190,200,0,0,255,1],[11,-300,-190,200,0,0,255,1],[20,-150,0,300,0,0,255,1],[19,200,0,300,0,0,255,1],[-1,-150,0,100,0,0,255,1],[-1,-150,0,100,0,0,255,1],[-1,-150,0,100,0,0,255,1],[-1,-150,0,100,0,0,255,1],[-1,-150,0,100,0,0,255,1],[25,-300,-190,183,0,0,71,1],[25,300,-190,200,0,0,50,1],[-1,-150,0,100,0,0,255,1],[-1,-150,0,100,0,0,255,1],[-1,-150,0,100,0,0,255,1],[-1,-150,0,100,0,0,255,1],[-1,-150,0,100,0,0,255,1]],[[12,-300,-190,200,0,0,255,1],[21,-150,0,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[20,200,0,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[25,-300,-190,200,0,0,50,1]],[[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[22,-150,0,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[21,200,0,300,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[23,-150,0,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[22,200,0,300,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[24,-150,0,300,0,0,200,1],[-1,0,0,0,0,0,0,0],[23,200,0,300,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,-152.5,0,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[24,200,0,300,0,0,200,1]]],"name":"治療/全体1","position":3,"timings":[{"flashColor":[170,255,255,170],"flashDuration":5,"flashScope":2,"frame":0,"se":{"name":"Starlight","pan":0,"pitch":150,"volume":80}},{"flashColor":[170,255,255,221],"flashDuration":20,"flashScope":1,"frame":1,"se":{"name":"Ice4","pan":0,"pitch":120,"volume":90}},{"flashColor":[170,255,255,153],"flashDuration":5,"flashScope":1,"frame":6,"se":{"name":"Ice1","pan":0,"pitch":100,"volume":90}},{"flashColor":[170,255,255,153],"flashDuration":5,"flashScope":1,"frame":9,"se":{"name":"Heal3","pan":0,"pitch":120,"volume":90}},{"flashColor":[170,255,255,153],"flashDuration":5,"flashScope":1,"frame":12,"se":null},{"flashColor":[170,255,255,153],"flashDuration":5,"flashScope":1,"frame":15,"se":null}]}, +{"id":48,"animation1Hue":0,"animation1Name":"Cure4","animation2Hue":0,"animation2Name":"Recovery5","frames":[[[12,0,-50,75,0,0,255,1]],[[0,0,-50,48,0,0,255,1],[12,0,-50,192,0,0,200,1]],[[12,0,-50,240,0,0,200,1],[1,0,-50,288,0,0,255,1]],[[12,0,-50,288,0,0,200,1],[2,0,-50,288,0,0,255,1]],[[12,0,-50,299,0,0,170,1],[3,0,-50,288,0,0,255,1],[110,0,-50,336,0,0,255,1]],[[12,0,-50,312,0,0,150,1],[4,0,-50,288,0,0,255,1],[111,0,-50,432,0,0,255,1]],[[12,0,-50,299,0,0,170,1],[5,0,-50,288,0,0,255,1],[112,0,-50,480,0,0,255,1]],[[12,0,-50,288,0,0,200,1],[6,0,-50,288,0,0,255,1],[113,0,-50,480,0,0,255,1]],[[12,0,-50,299,0,0,170,1],[7,0,-50,288,0,0,255,1],[114,0,-50,480,0,0,255,1]],[[12,0,-50,312,0,0,150,1],[8,0,-50,288,0,0,255,1],[115,0,-50,480,0,0,255,1]],[[12,0,-50,299,0,0,170,1],[9,0,-50,288,0,0,255,1],[116,0,-50,480,0,0,255,1]],[[12,0,-50,264,0,0,200,1],[10,0,-50,288,0,0,255,1],[117,0,-50,480,0,0,255,1]],[[12,0,-50,192,0,0,180,1],[11,0,-50,288,0,0,255,1],[118,0,-50,480,0,0,255,1]],[[12,0,-50,144,0,0,180,1],[119,0,-50,480,0,0,255,1]],[[12,0,-50,120,0,0,150,1]],[[12,0,-50,120,0,0,100,1]],[[12,0,-50,120,0,0,50,1]]],"name":"治療/全体2","position":3,"timings":[{"flashColor":[204,238,255,102],"flashDuration":10,"flashScope":2,"frame":0,"se":{"name":"Ice5","pan":0,"pitch":70,"volume":90}},{"flashColor":[85,187,221,170],"flashDuration":10,"flashScope":1,"frame":1,"se":{"name":"Saint4","pan":0,"pitch":100,"volume":80}}]}, +{"id":49,"animation1Hue":0,"animation1Name":"Revival1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-185,280,0,0,255,1]],[[1,0,-185,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[2,0,-185,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[3,0,-185,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[4,0,-185,280,0,0,255,1],[7,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[5,0,-185,280,0,0,255,1],[8,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[6,0,-185,280,0,0,255,1],[9,0,-187,280,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1]],[[4,0,-185,280,0,0,255,1],[10,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[5,0,-185,280,0,0,255,1],[11,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[6,0,-185,280,0,0,255,1],[12,0,-187,280,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1]],[[4,0,-185,280,0,0,255,1],[13,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[5,0,-185,280,0,0,255,1],[14,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[6,0,-185,280,0,0,255,1],[15,0,-187,280,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1]],[[4,0,-185,280,0,0,255,1],[16,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[5,0,-185,280,0,0,255,1],[17,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[6,0,-185,280,0,0,255,1],[18,0,-187,280,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1]],[[4,0,-185,280,0,0,255,1],[19,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[5,0,-185,280,0,0,255,1],[20,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[6,0,-185,280,0,0,255,1],[21,0,-187,280,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1]],[[4,0,-185,280,0,0,255,1],[22,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[5,0,-185,280,0,0,255,1],[23,0,-187,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[6,0,-185,280,0,0,255,1],[24,0,-187,280,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1]],[[4,0,-185,280,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[3,0,-185,280,0,0,200,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1],[-1,0,-185,100,0,0,255,1]],[[2,2,-185,280,0,0,127,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1],[-1,0,-145,100,0,0,255,1]]],"name":"蘇生1","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic1","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,221,17],"flashDuration":10,"flashScope":1,"frame":3,"se":{"name":"Starlight","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,221,51],"flashDuration":10,"flashScope":1,"frame":4,"se":{"name":"Skill1","pan":0,"pitch":70,"volume":90}},{"flashColor":[255,255,221,68],"flashDuration":10,"flashScope":1,"frame":5,"se":null},{"flashColor":[255,255,221,102],"flashDuration":10,"flashScope":1,"frame":6,"se":null},{"flashColor":[255,255,221,153],"flashDuration":10,"flashScope":1,"frame":13,"se":null},{"flashColor":[255,255,221,17],"flashDuration":10,"flashScope":2,"frame":3,"se":null},{"flashColor":[255,255,221,51],"flashDuration":10,"flashScope":2,"frame":4,"se":null},{"flashColor":[255,255,221,68],"flashDuration":10,"flashScope":2,"frame":5,"se":null},{"flashColor":[255,255,221,85],"flashDuration":20,"flashScope":2,"frame":6,"se":null}]}, +{"id":50,"animation1Hue":0,"animation1Name":"Revival2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,192,225,0,0,255,1]],[[1,0,192,225,0,0,255,1]],[[2,0,192,225,0,0,255,1]],[[3,0,192,225,0,0,255,1]],[[4,0,192,225,0,0,255,1]],[[5,0,192,225,0,0,255,1],[25,0,312,150,0,0,255,1],[11,0,120,150,0,0,255,1],[18,0,312,450,0,0,255,1]],[[6,0,192,225,0,0,255,1],[26,0,312,150,0,0,255,1],[11,0,156,195,0,0,255,1],[18,0,312,375,0,0,255,1]],[[7,0,192,225,0,0,255,1],[27,0,312,150,0,0,255,1],[12,0,156,195,0,0,255,1],[18,0,312,345,0,0,255,1]],[[8,0,192,225,0,0,255,1],[28,0,312,150,0,0,255,1],[13,0,168,210,0,0,255,1],[18,0,312,315,0,0,255,1]],[[9,0,192,225,0,0,255,1],[29,0,312,150,0,0,255,1],[14,0,168,210,0,0,255,1],[15,12,204,225,0,0,255,1],[18,0,312,285,0,0,255,1]],[[10,0,192,225,0,0,255,1],[29,0,312,165,0,0,255,1],[14,0,168,210,0,0,150,1],[16,12,216,225,0,0,255,1],[18,0,312,255,0,0,255,1]],[[10,0,192,225,0,0,180,1],[29,0,312,150,0,0,255,1],[14,0,168,210,0,0,80,1],[17,12,228,225,0,0,255,1],[18,0,312,240,0,0,255,1]],[[29,0,312,165,0,0,255,1],[15,12,240,225,0,0,255,1],[18,0,312,225,0,0,255,1]],[[19,0,216,225,0,0,255,1],[16,12,252,225,0,0,255,1],[18,0,312,210,0,0,200,1]],[[20,0,192,270,0,0,255,1],[17,12,264,225,0,0,255,1],[18,0,312,195,0,0,150,1]],[[21,0,192,270,0,0,255,1],[15,12,276,225,0,0,200,1],[18,0,312,180,0,0,100,1]],[[22,0,192,270,0,0,255,1]],[[23,0,180,285,0,0,255,1]],[[24,0,180,300,0,0,255,1]],[[24,0,168,315,0,0,100,1]]],"name":"蘇生2","position":0,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic2","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":9,"se":{"name":"Ice5","pan":0,"pitch":150,"volume":100}},{"flashColor":[255,255,221,238],"flashDuration":8,"flashScope":1,"frame":13,"se":{"name":"Up3","pan":0,"pitch":130,"volume":80}}]}, +{"id":51,"animation1Hue":149,"animation1Name":"StateDown1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-53,260,180,0,255,1]],[[1,0,-53,260,180,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]],[[2,0,-5,260,180,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]],[[3,0,107,260,180,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[11,-32,-123,100,180,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]],[[4,0,-133,260,0,0,255,1],[10,0,-201,200,180,0,127,1],[11,-120,-123,100,180,0,255,1],[11,-32,-179,100,180,0,255,1],[11,50,-183,100,180,0,255,1],[-1,107.5,-205,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]],[[5,0,-133,260,0,0,255,1],[10,0,-217,200,180,0,255,1],[11,-120,-183,100,180,0,255,1],[11,-32,-247,100,180,0,255,1],[11,50,-247,100,180,0,255,1],[-1,112.5,-263,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]],[[6,0,-133,260,0,0,255,1],[10,0,-233,200,180,0,127,1],[11,-120,-247,100,180,0,255,1],[-1,368,-123,100,0,0,255,1],[11,50,-297,100,180,0,255,1],[11,110,-123,100,180,0,255,1],[11,-64,-123,100,180,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]],[[7,0,-133,260,0,0,255,1],[-1,-408,-216,100,0,0,255,1],[-1,-408,-123,100,0,0,255,1],[-1,-408,-123,100,0,0,255,1],[-1,-408,-123,100,0,0,255,1],[11,110,-135,100,180,0,255,1],[11,-64,-183,100,180,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]],[[8,0,-133,260,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[11,110,-199,100,180,0,255,1],[11,-64,-247,100,180,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]],[[9,0,-133,260,0,0,255,1]],[[4,0,-133,260,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]],[[4,0,-133,260,0,0,200,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]],[[4,0,-133,260,0,0,127,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1],[-1,0,-135,100,0,0,255,1]]],"name":"強化1","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Up4","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Magic1","pan":0,"pitch":100,"volume":90}},{"flashColor":[238,187,204,187],"flashDuration":10,"flashScope":1,"frame":5,"se":null}]}, +{"id":52,"animation1Hue":0,"animation1Name":"StateUp1","animation2Hue":0,"animation2Name":"","frames":[[[0,-3,-175,240,0,0,255,1],[18,0,-35,260,0,0,127,1]],[[1,-3,-175,240,0,0,255,1],[18,0,-35,240,0,0,200,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[2,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[3,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[4,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[5,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[6,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[7,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[8,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[9,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[10,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[11,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[12,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[13,-3,-175,240,0,0,255,1],[18,0,-35,220,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[14,-3,-175,240,0,0,255,1],[18,0,-29,203,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[15,-3,-175,240,0,0,255,1],[18,0,-24,185,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[16,-3,-175,240,0,0,255,1],[18,0,-18,168,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]],[[17,-3,-175,240,0,0,255,1],[18,0,-13,150,0,0,100,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1],[-1,-3,-125,100,0,0,255,1]]],"name":"強化2","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Powerup","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,221,136,119],"flashDuration":5,"flashScope":1,"frame":4,"se":{"name":"Magic4","pan":0,"pitch":120,"volume":80}},{"flashColor":[255,221,136,221],"flashDuration":5,"flashScope":1,"frame":15,"se":null},{"flashColor":[255,221,136,102],"flashDuration":3,"flashScope":2,"frame":15,"se":null}]}, +{"id":53,"animation1Hue":0,"animation1Name":"StateUp2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-60,180,0,0,255,1]],[[1,0,-60,180,0,0,255,1]],[[2,0,-60,180,0,0,255,1]],[[3,0,-60,180,0,0,255,1]],[[4,0,-60,180,0,0,255,1]],[[5,0,-60,180,0,0,255,1]],[[6,0,-60,180,0,0,255,1]],[[7,0,-60,180,0,0,255,1]],[[8,0,-60,180,0,0,255,1]],[[9,0,-60,180,0,0,255,1]],[[10,0,-60,180,0,0,255,1]],[[11,0,-60,180,0,0,255,1]],[[12,0,-60,180,0,0,255,1]],[[13,0,-60,180,0,0,255,1],[23,0,-60,180,0,0,50,0]],[[23,0,-60,180,0,0,100,0],[14,0,-60,180,0,0,255,1]],[[23,0,-60,180,0,0,150,0],[15,0,-60,180,0,0,255,1],[-1,0,0,30,0,0,0,0]],[[23,0,-60,180,0,0,200,0],[16,0,-60,180,0,0,255,1]],[[23,0,-60,180,0,0,255,0],[17,0,-60,180,0,0,255,1]],[[23,0,-60,180,0,0,255,0],[18,0,-60,180,0,0,255,1]],[[23,0,-60,180,0,0,255,0],[19,0,-60,180,0,0,255,1]],[[23,0,-60,180,0,0,255,0],[20,0,-60,180,0,0,255,1]],[[23,0,-60,180,0,0,255,0],[21,0,-60,180,0,0,255,1]],[[23,0,-60,180,0,0,255,0],[22,0,-60,180,0,0,255,1]],[[23,0,-60,180,0,0,255,0],[22,0,-60,180,0,0,255,1]],[[23,0,-60,180,0,0,200,0],[22,0,-60,180,0,0,200,1]],[[23,0,-60,180,0,0,150,0],[22,0,-60,180,0,0,150,1]],[[23,0,-60,180,0,0,100,0],[22,0,-60,180,0,0,100,1]],[[23,0,-60,180,0,0,50,0],[22,0,-60,180,0,0,50,1]]],"name":"強化3","position":1,"timings":[{"flashColor":[204,238,255,204],"flashDuration":20,"flashScope":1,"frame":0,"se":{"name":"Up1","pan":0,"pitch":80,"volume":80}},{"flashColor":[238,255,255,136],"flashDuration":5,"flashScope":2,"frame":0,"se":null},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":9,"se":{"name":"Ice4","pan":0,"pitch":90,"volume":80}}]}, +{"id":54,"animation1Hue":0,"animation1Name":"StateDown1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-64,260,0,0,255,1]],[[1,0,-10,260,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]],[[2,0,-10,260,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,-41.5,-312,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]],[[3,0,-130,260,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[11,-32,-272,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]],[[4,0,-130,260,0,0,255,1],[10,0,-206,200,0,0,127,1],[11,-120,-280,100,0,0,255,1],[11,-32,-204,100,0,0,255,1],[11,50,-312,100,0,0,255,1],[-1,107.5,-230,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]],[[5,0,-130,260,0,0,255,1],[10,0,-190,200,0,0,255,1],[11,-120,-208,100,0,0,255,1],[11,-32,-144,100,0,0,255,1],[11,50,-272,100,0,0,255,1],[-1,112.5,-288,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]],[[6,0,-130,260,0,0,255,1],[10,0,-176,200,0,0,127,1],[11,-120,-144,100,0,0,255,1],[-1,368,-120,100,0,0,255,1],[11,50,-208,100,0,0,255,1],[11,110,-224,100,0,0,255,1],[11,-64,-272,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]],[[7,0,-130,260,0,0,255,1],[-1,-408,-241,100,0,0,255,1],[-1,-408,-95,100,0,0,255,1],[-1,-408,-87,100,0,0,255,1],[-1,-408,-95,100,0,0,255,1],[11,110,-160,100,0,0,255,1],[11,-64,-208,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]],[[8,0,-130,260,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[11,110,-96,100,0,0,255,1],[11,-64,-144,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]],[[9,0,-130,260,0,0,255,1]],[[4,0,-130,260,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]],[[4,0,-130,260,0,0,200,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]],[[4,0,-130,260,0,0,127,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1],[-1,0,-160,100,0,0,255,1]]],"name":"弱体1","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Down2","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Magic2","pan":0,"pitch":100,"volume":90}},{"flashColor":[153,204,255,187],"flashDuration":10,"flashScope":1,"frame":5,"se":null}]}, +{"id":55,"animation1Hue":0,"animation1Name":"StateDown2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-168,195,0,0,100,0]],[[2,0,-168,195,0,0,150,0]],[[3,0,-168,195,0,0,255,0]],[[2,0,-168,195,0,0,255,0]],[[1,0,-168,195,0,0,255,0]],[[4,0,-168,195,0,0,255,0]],[[5,0,-168,195,0,0,255,0]],[[6,0,-168,195,0,0,255,0]],[[7,0,-168,195,0,0,255,0]],[[8,0,-168,195,0,0,255,0]],[[9,0,-168,195,0,0,255,0]],[[10,0,-168,195,0,0,255,0]],[[11,0,-168,195,0,0,255,0]],[[12,0,-168,195,0,0,255,0]],[[13,0,-168,195,0,0,255,0]],[[14,0,-168,195,0,0,255,0]],[[15,0,-168,195,0,0,255,0]],[[16,0,-168,195,0,0,255,0]],[[17,0,-168,195,0,0,255,0]],[[18,0,-168,195,0,0,255,0]],[[19,0,-168,195,0,0,255,0]],[[20,0,-168,195,0,0,255,0]],[[21,0,-168,195,0,0,255,0]],[[22,0,-168,195,0,0,255,0]],[[23,0,-168,195,0,0,255,0]],[[24,0,-168,195,0,0,255,0]],[[20,0,-168,195,0,0,200,0]],[[21,0,-168,195,0,0,100,0]],[[22,0,-168,195,0,0,50,0]]],"name":"弱体2","position":2,"timings":[{"flashColor":[0,0,0,204],"flashDuration":5,"flashScope":2,"frame":0,"se":{"name":"Stare","pan":0,"pitch":110,"volume":70}},{"flashColor":[0,0,0,204],"flashDuration":18,"flashScope":1,"frame":6,"se":{"name":"Earth2","pan":0,"pitch":70,"volume":80}}]}, +{"id":56,"animation1Hue":0,"animation1Name":"StateDown3","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-12,150,0,0,150,1]],[[1,0,-12,150,0,0,200,1]],[[2,0,-12,150,0,0,255,1]],[[5,0,-12,150,0,0,100,0],[3,0,-12,150,0,0,255,1]],[[5,0,-12,150,0,0,150,0],[4,0,-12,150,0,0,255,1]],[[5,0,-12,150,0,0,200,0],[4,0,-12,150,0,0,255,1]],[[5,0,-12,150,0,0,255,0],[4,0,-12,150,0,0,255,1]],[[5,0,-12,150,0,0,255,0],[4,0,-12,150,0,0,200,1]],[[5,0,-12,150,0,0,255,0],[4,0,-12,150,0,0,150,1]],[[5,0,-12,150,0,0,255,0],[4,0,-12,150,0,0,100,1]],[[5,0,-12,150,0,0,255,0],[4,0,-12,150,0,0,50,1]],[[5,0,-12,150,0,0,255,0]],[[5,0,-12,150,0,0,255,0]],[[5,0,-12,150,0,0,255,0]],[[6,0,-12,247,0,0,255,0],[16,0,-12,247,0,0,255,1]],[[7,0,-12,247,0,0,255,0],[17,0,-12,247,0,0,255,1]],[[8,0,-12,247,0,0,255,0],[18,0,-12,247,0,0,255,1]],[[9,0,-12,247,0,0,255,0],[19,0,-12,247,0,0,255,1]],[[10,0,-12,247,0,0,255,0],[20,0,-12,247,0,0,255,1]],[[11,0,-12,247,0,0,255,0],[21,0,-12,247,0,0,255,1]],[[12,0,-12,247,0,0,255,0],[22,0,-12,247,0,0,255,1]],[[13,0,-12,247,0,0,200,0],[23,0,-12,247,0,0,255,1]],[[14,0,-12,247,0,0,150,0],[24,0,-12,247,0,0,255,1]],[[15,0,-12,247,0,0,100,0],[25,0,-12,247,0,0,255,1]]],"name":"弱体3","position":1,"timings":[{"flashColor":[255,51,221,204],"flashDuration":15,"flashScope":0,"frame":0,"se":{"name":"Blind","pan":0,"pitch":120,"volume":80}},{"flashColor":[255,68,221,187],"flashDuration":5,"flashScope":2,"frame":14,"se":{"name":"Crash","pan":0,"pitch":120,"volume":80}},{"flashColor":[255,51,221,204],"flashDuration":15,"flashScope":1,"frame":14,"se":null}]}, +{"id":57,"animation1Hue":0,"animation1Name":"Curse","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-228,270,0,0,255,1]],[[1,0,-228,270,0,0,255,1]],[[2,0,-228,270,0,0,255,1]],[[3,0,-228,270,0,0,255,1]],[[4,0,-228,270,0,0,255,1]],[[5,0,-228,270,0,0,255,1],[10,60,-228,270,340,0,255,1],[10,-96,-228,270,10,0,255,1]],[[6,0,-228,270,0,0,255,1],[11,60,-228,270,340,0,255,1],[11,-96,-228,270,10,0,255,1]],[[7,0,-228,270,0,0,255,1],[12,60,-228,270,340,0,255,1],[12,-96,-228,270,10,0,255,1],[10,120,-228,270,350,0,255,1],[10,-144,-228,270,15,0,255,1]],[[8,0,-228,270,0,0,255,1],[13,60,-228,270,340,0,255,1],[13,-96,-228,270,10,0,255,1],[11,120,-228,270,350,0,255,1],[11,-144,-228,270,15,0,255,1]],[[9,0,-228,270,0,0,255,1],[15,60,-228,270,340,0,255,1],[15,-96,-228,270,10,0,255,1],[12,120,-228,270,350,0,255,1],[12,-144,-228,270,15,0,255,1],[10,-132,-192,270,175,0,255,1],[10,120,-192,270,190,0,255,1]],[[8,0,-228,270,0,0,255,1],[14,60,-228,270,340,0,255,1],[14,-96,-228,270,10,0,255,1],[13,120,-228,270,350,0,255,1],[13,-144,-228,270,15,0,255,1],[11,-132,-192,270,175,0,255,1],[11,120,-192,270,190,0,255,1]],[[9,0,-228,270,0,0,255,1],[15,60,-228,270,340,0,255,1],[15,-96,-228,270,10,0,255,1],[15,120,-228,270,350,0,255,1],[15,-144,-228,270,15,0,255,1],[12,-132,-192,270,175,0,255,1],[12,120,-192,270,190,0,255,1]],[[8,0,-228,270,0,0,255,1],[14,60,-228,270,340,0,255,1],[14,-96,-228,270,10,0,255,1],[14,120,-228,270,350,0,255,1],[14,-144,-228,270,15,0,255,1],[13,-132,-192,270,175,0,255,1],[13,120,-192,270,190,0,255,1]],[[9,0,-228,270,0,0,255,1],[15,60,-228,270,340,0,255,1],[15,-96,-228,270,10,0,255,1],[15,120,-228,270,350,0,255,1],[15,-144,-228,270,15,0,255,1],[15,-132,-192,270,175,0,255,1],[15,120,-192,270,190,0,255,1]],[[8,0,-228,270,0,0,255,1],[14,60,-228,270,340,0,255,1],[14,-96,-228,270,10,0,255,1],[14,120,-228,270,350,0,255,1],[14,-144,-228,270,15,0,255,1],[14,-132,-192,270,175,0,255,1],[14,120,-192,270,190,0,255,1]],[[9,0,-228,270,0,0,255,1],[15,60,-228,270,340,0,255,1],[15,-96,-228,270,10,0,255,1],[15,120,-228,270,350,0,255,1],[15,-144,-228,270,15,0,255,1],[15,-132,-192,270,175,0,255,1],[15,120,-192,270,190,0,255,1]],[[8,0,-228,270,0,0,255,1],[14,60,-228,270,340,0,255,1],[14,-96,-228,270,10,0,255,1],[14,120,-228,270,350,0,255,1],[14,-144,-228,270,15,0,255,1],[14,-132,-192,270,175,0,255,1],[14,120,-192,270,190,0,255,1]],[[8,0,-228,270,0,0,150,1],[14,60,-228,270,340,0,150,1],[14,-96,-228,270,10,0,150,1],[14,120,-228,270,350,0,150,1],[14,-144,-228,270,15,0,150,1],[14,-132,-192,270,175,0,150,1],[14,120,-192,270,190,0,150,1]],[[8,0,-228,270,0,0,100,1],[14,60,-228,270,340,0,100,1],[14,-96,-228,270,10,0,100,1],[14,120,-228,270,350,0,100,1],[14,-144,-228,270,15,0,100,1],[14,-132,-192,270,175,0,100,1],[14,120,-192,270,190,0,100,1]]],"name":"呪縛","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind5","pan":0,"pitch":80,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Darkness4","pan":0,"pitch":60,"volume":100}},{"flashColor":[255,204,136,187],"flashDuration":5,"flashScope":1,"frame":5,"se":null},{"flashColor":[255,255,170,170],"flashDuration":5,"flashScope":2,"frame":5,"se":{"name":"Darkness1","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,238,136,136],"flashDuration":2,"flashScope":1,"frame":8,"se":null},{"flashColor":[255,238,136,136],"flashDuration":2,"flashScope":1,"frame":10,"se":null},{"flashColor":[255,238,136,136],"flashDuration":2,"flashScope":1,"frame":12,"se":null},{"flashColor":[255,238,136,136],"flashDuration":2,"flashScope":1,"frame":14,"se":null}]}, +{"id":58,"animation1Hue":0,"animation1Name":"Absorb","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,300,0,0,150,1]],[[0,0,0,270,0,0,200,1],[20,0,0,300,60,0,100,1]],[[1,0,0,270,0,0,180,1],[20,0,0,300,40,0,180,1]],[[20,0,0,300,20,0,180,1],[2,0,0,240,0,0,255,1]],[[4,0,0,225,0,0,255,1],[20,0,0,270,0,0,180,1]],[[6,0,0,225,0,0,255,1],[21,0,0,240,340,0,180,1]],[[7,0,0,225,0,0,255,1],[22,0,0,195,320,0,180,1],[8,0,0,150,0,0,255,1]],[[9,0,0,195,0,0,255,1],[23,0,0,150,300,0,180,1]],[[10,0,0,225,0,0,255,1]],[[11,0,0,255,0,0,255,1]],[[12,0,0,255,0,0,255,1]],[[13,0,0,255,0,0,255,1]],[[14,0,0,255,0,0,255,1]],[[15,0,0,255,0,0,255,1]],[[16,0,0,255,0,0,255,1]],[[17,0,0,255,0,0,255,1]],[[18,0,0,255,0,0,255,1]],[[19,0,0,255,0,0,255,1]]],"name":"吸収","position":1,"timings":[{"flashColor":[255,102,68,153],"flashDuration":5,"flashScope":2,"frame":0,"se":{"name":"Darkness1","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Twine","pan":0,"pitch":150,"volume":70}},{"flashColor":[255,0,0,204],"flashDuration":6,"flashScope":1,"frame":6,"se":null}]}, +{"id":59,"animation1Hue":0,"animation1Name":"StatePoison","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-126.5,200,0,0,255,1]],[[1,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[2,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[3,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[4,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[5,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[6,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[7,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[8,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[9,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[10,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[11,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[12,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[13,0,-126,200,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1],[-1,0,-130,100,0,0,255,1]],[[14,0,-126,200,0,0,255,1]]],"name":"毒","position":2,"timings":[{"flashColor":[102,255,153,102],"flashDuration":3,"flashScope":1,"frame":1,"se":{"name":"Poison","pan":0,"pitch":100,"volume":90}},{"flashColor":[102,255,153,221],"flashDuration":3,"flashScope":1,"frame":3,"se":null},{"flashColor":[102,255,153,136],"flashDuration":8,"flashScope":1,"frame":5,"se":null}]}, +{"id":60,"animation1Hue":0,"animation1Name":"StateDark","animation2Hue":0,"animation2Name":"","frames":[[[19,0,0,280,0,0,255,0]],[[18,0,0,265,0,0,255,0],[-1,0,0,250,-5,0,145,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[17,0,0,260,0,0,255,0],[0,0,0,250,0,0,100,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[16,0,0,260,0,0,255,0],[1,0,0,250,0,0,60,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[15,0,0,260,0,0,255,0],[2,0,0,250,0,0,95,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[14,0,0,260,0,0,255,0],[3,0,0,250,0,0,130,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[13,0,0,260,0,0,255,0],[4,0,0,250,0,0,165,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,2,0,260,0,0,255,0],[5,0,0,250,0,0,200,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,300,0,0,127,0],[6,0,0,250,0,0,237,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,260,0,0,200,0],[7,0,0,250,0,0,237,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,100,0,0,255,1],[8,0,0,250,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,100,0,0,255,1],[9,0,0,250,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,100,0,0,255,1],[10,0,0,250,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,-2.5,0,260,0,0,60,0],[11,0,0,250,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,280,0,0,127,0],[12,0,0,250,5,0,255,0],[-1,245,-74,100,0,0,255,1],[-1,408,-76,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,280,0,0,127,0],[12,0,0,260,8,0,200,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,280,0,0,127,0],[12,0,0,270,11,0,127,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]]],"name":"暗闇","position":1,"timings":[{"flashColor":[0,0,0,68],"flashDuration":20,"flashScope":1,"frame":2,"se":{"name":"Blind","pan":0,"pitch":100,"volume":90}},{"flashColor":[0,0,0,34],"flashDuration":20,"flashScope":2,"frame":2,"se":null},{"flashColor":[0,0,0,170],"flashDuration":20,"flashScope":1,"frame":3,"se":{"name":"Darkness2","pan":0,"pitch":80,"volume":50}},{"flashColor":[0,0,0,68],"flashDuration":20,"flashScope":2,"frame":3,"se":null},{"flashColor":[0,0,0,255],"flashDuration":10,"flashScope":1,"frame":4,"se":null},{"flashColor":[0,0,0,85],"flashDuration":10,"flashScope":2,"frame":4,"se":null},{"flashColor":[0,0,0,119],"flashDuration":10,"flashScope":2,"frame":6,"se":null},{"flashColor":[0,0,0,255],"flashDuration":10,"flashScope":1,"frame":13,"se":null}]}, +{"id":61,"animation1Hue":0,"animation1Name":"StateSilent","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-2,280,0,0,255,1]],[[1,0,-2,280,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1]],[[2,0,-2,280,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1]],[[3,0,-2,280,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1]],[[4,0,-2,280,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1]],[[5,0,-2,280,0,0,255,1],[6,0,-2,180,0,0,255,0],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1]],[[-1,0,-2,280,0,0,255,1],[7,0,-2,180,0,0,255,0],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1]],[[-1,-2.5,-2,280,0,0,255,1],[8,0,-2,180,0,0,255,0],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1]],[[-1,0,-2,280,0,0,255,1],[9,0,-2,180,0,0,255,0],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1]],[[-1,0,-2,280,0,0,255,1],[10,0,-2,180,0,0,255,0],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1],[-1,0,-2,100,0,0,255,1]],[[12,40,-217.5,130,0,0,255,0],[11,0,-2,180,0,0,255,0]],[[13,40,-218,130,0,0,255,0],[11,0,-2,180,0,0,255,0]],[[14,40,-218,130,0,0,255,0],[11,0,-2,180,0,0,255,0]],[[15,40,-218,130,0,0,255,0],[11,0,-2,180,0,0,255,0]],[[16,40,-218,130,0,0,255,0],[11,0,-2,180,0,0,255,0]],[[17,40,-218,130,0,0,255,0],[11,0,-2,180,0,0,255,0]],[[18,40,-218,130,0,0,255,0],[11,0,-2,180,0,0,255,0]],[[18,40,-218,130,0,0,255,0],[11,0,-2,180,0,0,255,0]],[[18,40,-218,130,0,0,255,0],[11,0,-2,180,0,0,255,0]],[[18,40,-218,130,0,0,255,0],[11,0,-2,180,0,0,255,0]],[[18,40,-218,130,0,0,255,0],[11,0,-2,180,0,0,255,0]]],"name":"沈黙","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Silence","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,153,255],"flashDuration":6,"flashScope":1,"frame":5,"se":{"name":"Sound2","pan":0,"pitch":80,"volume":70}},{"flashColor":[255,255,255,255],"flashDuration":3,"flashScope":1,"frame":15,"se":{"name":"Flash1","pan":0,"pitch":70,"volume":70}}]}, +{"id":62,"animation1Hue":0,"animation1Name":"StateSleep","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,300,0,0,255,1]],[[1,0,0,300,0,0,255,1],[-1,365,-39,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[2,0,0,300,0,0,255,1],[9,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[3,0,0,300,0,0,255,1],[10,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,0,300,0,0,255,1],[11,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,300,0,0,255,1],[12,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[6,0,0,300,0,0,255,1],[13,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[7,0,0,300,0,0,255,1],[14,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[8,0,0,300,0,0,255,1],[15,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[8,0,0,300,0,0,127,1],[16,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,300,0,0,255,1],[17,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,2.5,0,300,0,0,196,1],[18,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,300,0,0,138,1],[19,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,-2.5,300,0,0,79,1],[20,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,300,0,0,20,1],[21,0,0,280,0,0,255,1]]],"name":"睡眠","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Up1","pan":0,"pitch":50,"volume":70}},{"flashColor":[170,221,255,255],"flashDuration":6,"flashScope":1,"frame":5,"se":{"name":"Sleep","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":3,"flashScope":1,"frame":14,"se":null}]}, +{"id":63,"animation1Hue":0,"animation1Name":"StateChaos","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-30,300,0,0,255,0]],[[1,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[2,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[3,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[4,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[5,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[6,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[7,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[8,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[9,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[10,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[11,0,-30,300,0,0,255,0],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[12,0,-30,300,0,0,255,0],[-1,0,-80,130,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[13,0,-30,300,0,0,255,0],[-1,0,-80,130,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[14,0,-30,300,0,0,255,0],[17,0,-32,130,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[15,0,-30,300,0,0,100,0],[18,0,-32,130,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,-30,100,0,0,255,1]],[[16,0,-30,300,0,0,50,0],[19,0,-32,130,0,0,255,1]],[[-1,0,-30,300,0,0,255,1],[20,0,-32,130,0,0,255,1]],[[-1,0,-30,300,0,0,255,1],[21,0,-32,130,0,0,255,1]],[[-1,0,-30,300,0,0,255,1],[22,0,-32,130,0,0,255,1]],[[-1,0,-30,300,0,0,255,1],[23,0,-32,130,0,0,255,1]],[[-1,0,-30,300,0,0,255,1],[23,0,-32,130,0,0,255,1]],[[-1,0,-30,300,0,0,255,1],[23,0,-32,130,0,0,255,1]]],"name":"混乱","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Absorb2","pan":0,"pitch":50,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":4,"se":{"name":"Raise2","pan":0,"pitch":70,"volume":80}},{"flashColor":[255,255,187,187],"flashDuration":5,"flashScope":1,"frame":15,"se":null}]}, +{"id":64,"animation1Hue":0,"animation1Name":"StateParalys","animation2Hue":0,"animation2Name":"","frames":[[[18,0,0,350,0,0,180,1]],[[19,0,0,300,0,0,218,1],[-1,0,-10,100,0,0,255,1],[-1,0,-40,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1]],[[20,0,0,250,0,0,255,1],[-1,2.5,-10,280,0,0,255,1],[-1,0,-40,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1]],[[18,0,0,200,0,0,203,1],[6,0,-10,240,0,0,255,1],[-1,0,-40,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1]],[[19,0,0,150,0,0,152,1],[7,0,-10,240,0,0,255,1],[-1,0,-40,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1],[-1,0,-10,100,0,0,255,1]],[[20,0,0,100,0,0,100,1],[8,0,-10,240,0,0,255,1]],[[-1,0,-10,0,0,0,0,0],[9,0,-10,240,0,0,255,1]],[[-1,0,-10,0,0,0,0,0],[10,0,-10,240,0,0,255,1]],[[-1,0,-10,0,0,0,0,0],[11,0,-10,240,0,0,255,1]],[[-1,0,-10,0,0,0,0,0],[12,0,-10,240,0,0,255,1]],[[-1,0,-10,0,0,0,0,0],[13,0,-10,240,0,0,255,1]],[[-1,408,-242,100,0,0,255,1],[14,0,-10,240,0,0,255,1],[0,0,-40,250,0,0,255,1]],[[-1,407,-194.5,100,0,0,255,1],[15,0,-10,240,0,0,255,1],[1,0,-40,250,0,0,255,1]],[[-1,375,-211,100,0,0,255,1],[16,0,-10,240,0,0,255,1],[2,0,-40,250,0,0,255,1]],[[-1,0,-10,0,0,0,0,0],[-1,0,-10,0,0,0,0,0],[3,0,-40,250,0,0,255,1]],[[-1,0,-10,0,0,0,0,0],[-1,0,-10,0,0,0,0,0],[4,0,-40,250,0,0,255,1]],[[-1,0,-10,0,0,0,0,0],[-1,0,-10,0,0,0,0,0],[5,0,-40,250,0,0,200,1]]],"name":"麻痺","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Darkness1","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":3,"se":{"name":"Paralyze3","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,136,102],"flashDuration":5,"flashScope":1,"frame":4,"se":null},{"flashColor":[255,255,136,102],"flashDuration":5,"flashScope":1,"frame":7,"se":null},{"flashColor":[255,255,136,102],"flashDuration":5,"flashScope":1,"frame":10,"se":null},{"flashColor":[255,255,136,102],"flashDuration":6,"flashScope":1,"frame":13,"se":null}]}, +{"id":65,"animation1Hue":0,"animation1Name":"StateDeath","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,180,0,0,255,0]],[[2,0,0,180,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[3,0,0,180,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,255,0]],[[5,0,0,180,0,0,255,0]],[[5,0,0,180,0,0,255,0]],[[5,0,0,180,0,0,200,0],[6,0,0,150,0,0,100,0]],[[5,0,0,180,0,0,100,0],[7,0,0,150,0,0,200,0]],[[5,0,0,180,0,0,50,0],[8,0,0,150,0,0,255,0],[12,0,0,250,0,0,255,1]],[[5,0,0,180,0,0,0,0],[9,0,0,150,0,0,255,0],[13,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,0,0],[10,0,0,150,0,0,255,0],[14,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,0,0],[10,0,0,150,0,0,255,0],[15,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,0,0],[10,0,0,150,0,0,255,0],[16,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,0,0],[10,0,0,150,0,0,255,0],[17,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,0,0],[10,0,0,150,0,0,255,0],[18,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,0,0],[10,0,0,150,0,0,255,0],[19,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,0,0],[10,0,0,150,0,0,255,0],[-1,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,0,0],[10,0,0,150,0,0,255,0],[-1,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,0,0],[10,0,0,150,0,0,200,0],[-1,0.5,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,180,0,0,0,0],[10,0,0,150,0,0,100,0],[-1,-2.5,-2.5,250,0,0,255,1],[-1,408,240.5,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]]],"name":"即死","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Stare","pan":0,"pitch":120,"volume":90}},{"flashColor":[0,0,0,68],"flashDuration":5,"flashScope":2,"frame":8,"se":{"name":"Darkness5","pan":0,"pitch":90,"volume":80}},{"flashColor":[0,0,0,119],"flashDuration":5,"flashScope":2,"frame":9,"se":null},{"flashColor":[0,0,0,153],"flashDuration":15,"flashScope":1,"frame":10,"se":null},{"flashColor":[0,0,0,153],"flashDuration":10,"flashScope":2,"frame":10,"se":null},{"flashColor":[153,0,0,187],"flashDuration":5,"flashScope":2,"frame":10,"se":null},{"flashColor":[51,0,0,255],"flashDuration":15,"flashScope":1,"frame":11,"se":null},{"flashColor":[51,0,0,221],"flashDuration":15,"flashScope":1,"frame":12,"se":null}]}, +{"id":66,"animation1Hue":0,"animation1Name":"Fire1","animation2Hue":0,"animation2Name":"","frames":[[[23,0,-160,180,0,0,200,1],[23,0,-176,200,0,0,255,0],[0,0,-230,300,0,0,255,0],[-1,408,312,100,0,0,255,1],[14,0,-200,300,0,0,255,0]],[[25,0,-200,250,0,0,200,1],[25,0,-273,353,0,0,152,0],[2,0,-230,300,0,0,255,0],[-1,207.5,-45,300,0,0,255,0],[18,0,-208,300,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[26,0,-200,250,0,0,200,1],[26,0,-304,400,0,0,100,0],[3,0,-230,300,0,0,255,0],[-1,105,-52.5,300,0,0,255,0],[19,0,-200,300,0,0,255,0]],[[27,0,-200,250,0,0,200,1],[-1,408,312,100,0,0,255,0],[4,0,-230,300,0,0,255,0],[-1,112.5,-35,300,0,0,255,0],[20,0,-200,300,0,0,255,0]],[[28,0,-200,250,0,0,200,1],[-1,408,309.5,100,0,0,255,0],[5,0,-230,300,0,0,255,0],[-1,82.5,-97.5,300,0,0,255,0],[21,0,-200,300,0,0,255,0]],[[26,0,-200,250,0,0,200,1],[22,0,-200,300,0,0,255,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[3,0,-230,300,0,0,255,0]],[[27,0,-200,250,0,0,200,1],[-1,408,312,100,0,0,255,0],[4,0,-230,300,0,0,255,0]],[[28,0,-200,250,0,0,200,1],[-1,408,312,100,0,0,255,0],[5,0,-230,300,0,0,255,0]],[[26,0,-200,250,0,0,200,1],[-1,408,312,100,0,0,255,1],[3,0,-230,300,0,0,255,0]],[[27,0,-200,250,0,0,200,1],[-1,405.5,312,100,0,0,255,0],[6,0,-230,300,0,0,255,0]],[[28,0,-200,250,0,0,200,1],[-1,408,312,100,0,0,255,0],[7,0,-230,300,0,0,255,0]]],"name":"炎/単体1","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Fire3","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,204,119,255],"flashDuration":15,"flashScope":1,"frame":1,"se":null},{"flashColor":[255,204,119,170],"flashDuration":5,"flashScope":2,"frame":2,"se":null},{"flashColor":[255,204,119,255],"flashDuration":5,"flashScope":1,"frame":4,"se":null},{"flashColor":[255,204,119,255],"flashDuration":5,"flashScope":1,"frame":7,"se":null}]}, +{"id":67,"animation1Hue":0,"animation1Name":"Fire2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-120,195,0,0,255,1]],[[1,0,-96,150,0,0,255,1]],[[1,0,-132,210,0,0,255,1]],[[2,0,-132,225,0,0,255,1]],[[3,0,-132,225,0,0,255,1]],[[4,0,-132,225,0,0,255,1]],[[5,0,-120,210,0,0,255,1]],[[5,0,-120,210,0,0,150,1]]],"name":"炎/単体2","position":2,"timings":[{"flashColor":[255,102,34,221],"flashDuration":3,"flashScope":1,"frame":0,"se":{"name":"Fire2","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,102,34,204],"flashDuration":5,"flashScope":1,"frame":2,"se":null}]}, +{"id":68,"animation1Hue":0,"animation1Name":"Fire1","animation2Hue":0,"animation2Name":"","frames":[[[29,-276,115.5,200,0,0,128,0],[29,-301,86.5,200,0,0,0,0],[29,-308,21,330,0,0,0,0],[29,-26,-71,200,0,1,0,0],[29,-96.5,-93.5,200,0,0,0,0],[29,-91.5,-93.5,200,0,0,0,0],[-1,30,0,0,0,0,0,0],[-1,30,0,0,0,0,0,0],[-1,30,-10,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[0,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[29,-308,84.5,200,0,0,0,0],[29,-308,29,330,0,0,0,0],[29,-63.5,-63.5,200,0,1,0,0],[29,-136,-86,200,0,0,0,0],[29,-156,-101,200,0,0,0,0],[29,310,130,200,0,0,128,0],[29,320,122,200,0,0,0,0],[29,320,-18,320,0,0,0,0],[0,-130,-90,250,0,1,255,1],[1,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[8,-275,102,200,0,0,255,1],[0,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,128,0],[29,0,50,200,0,0,0,0],[29,-20,32.5,200,0,0,0,0],[29,310,130,200,0,0,255,0],[29,320,122,200,0,0,0,0],[29,320,-18,320,0,0,0,0],[1,-130,-90,250,0,1,255,1],[2,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[9,-276,102,200,0,0,255,1],[1,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,255,0],[29,0,50,200,0,0,0,0],[29,10,-85,200,0,0,0,0],[29,310,130,200,0,0,255,0],[8,320,122,200,0,0,255,1],[0,320,-18,320,0,0,255,1],[2,-130,-90,250,0,1,255,1],[3,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[10,-276,102,200,0,0,255,1],[2,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,255,0],[8,0,50,200,0,0,255,1],[0,10,-85,300,0,0,255,1],[29,310,130,200,0,0,255,0],[9,320,122,200,0,0,255,1],[1,320,-18,320,0,0,255,1],[3,-130,-90,250,0,1,255,1],[4,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[11,-276,102,200,0,0,255,1],[3,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,255,0],[9,0,50,200,0,0,255,1],[1,10,-85,300,0,0,255,1],[29,310,130,200,0,0,255,0],[10,320,122,200,0,0,255,1],[2,320,-18,320,0,0,255,1],[4,-130,-90,250,0,1,255,1],[5,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[12,-276,102,200,0,0,255,1],[4,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,255,0],[10,0,50,200,0,0,255,1],[2,10,-85,300,0,0,255,1],[29,310,130,200,0,0,255,0],[11,320,122,200,0,0,255,1],[3,320,-18,320,0,0,255,1],[5,-130,-90,250,0,1,255,1],[3,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[13,-276,102,200,0,0,255,1],[5,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,255,0],[11,0,50,200,0,0,255,1],[3,10,-85,300,0,0,255,1],[29,310,130,200,0,0,255,0],[12,320,122,200,0,0,255,1],[4,320,-18,320,0,0,255,1],[3,-130,-90,250,0,1,255,1],[4,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[13,-276,102,200,0,0,128,1],[3,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,255,0],[12,0,50,200,0,0,255,1],[4,10,-85,300,0,0,255,1],[29,310,130,200,0,0,255,0],[13,320,122,200,0,0,255,1],[5,320,-18,320,0,0,255,1],[4,-130,-90,250,0,1,255,1],[5,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[13,-276,102,200,0,0,0,1],[4,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,255,0],[13,0,50,200,0,0,255,1],[5,10,-85,300,0,0,255,1],[29,310,130,200,0,0,255,0],[13,320,122,200,0,0,128,1],[3,320,-18,320,0,0,255,1],[5,-130,-90,250,0,1,255,1],[6,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[13,-276,102,200,0,0,0,1],[5,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,255,0],[13,0,50,200,0,0,128,1],[3,10,-85,300,0,0,255,1],[29,310,130,200,0,0,255,0],[13,320,122,200,0,0,0,1],[4,320,-18,320,0,0,255,1],[6,-130,-90,250,0,1,255,1],[7,200,-80,250,0,1,255,1]],[[29,-276,116,200,0,0,255,0],[13,-276,102,200,0,0,0,1],[6,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,255,0],[13,0,50,200,0,0,0,1],[4,10,-85,300,0,0,255,1],[29,310,130,200,0,0,255,0],[13,320,122,200,0,0,0,1],[5,320,-18,320,0,0,255,1],[7,-130,-90,250,0,1,255,1]],[[29,-276,116,200,0,0,128,0],[13,-276,102,200,0,0,0,1],[7,-280,-50,330,0,0,255,1],[29,30,63,200,0,1,255,0],[13,0,50,200,0,0,0,1],[5,10,-85,300,0,0,255,1],[29,310,130,200,0,0,255,0],[13,320,122,200,0,0,0,1],[6,320,-18,320,0,0,255,1]],[[29,-276,116,200,0,0,0,0],[13,-276,102,200,0,0,0,1],[7,-280,-50,330,0,0,0,1],[29,30,63,200,0,1,255,0],[13,0,50,200,0,0,0,1],[6,10,-85,300,0,0,255,1],[29,310,130,200,0,0,128,0],[13,320,122,200,0,0,0,1],[7,320,-18,320,0,0,255,1]],[[29,-276,116,200,0,0,0,0],[13,-276,102,200,0,0,0,1],[7,-280,-50,330,0,0,0,1],[29,30,63,200,0,1,128,0],[13,0,50,200,0,0,0,1],[7,10,-85,300,0,0,255,1],[13,408,155,200,0,0,0,1],[13,320,122,200,0,0,0,1],[7,320,-18,320,0,0,0,1]]],"name":"炎/全体1","position":3,"timings":[{"flashColor":[255,153,0,153],"flashDuration":5,"flashScope":2,"frame":0,"se":{"name":"Fire3","pan":0,"pitch":80,"volume":90}},{"flashColor":[255,221,0,221],"flashDuration":5,"flashScope":1,"frame":1,"se":null},{"flashColor":[255,153,0,153],"flashDuration":5,"flashScope":2,"frame":4,"se":{"name":"Explosion1","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,221,0,221],"flashDuration":5,"flashScope":1,"frame":5,"se":null},{"flashColor":[255,153,0,153],"flashDuration":5,"flashScope":2,"frame":9,"se":{"name":"Fire2","pan":0,"pitch":80,"volume":90}}]}, +{"id":69,"animation1Hue":0,"animation1Name":"Fire2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-24,255,0,0,255,1]],[[1,0,-24,255,0,0,255,1]],[[2,0,-24,255,0,0,255,1],[0,-300,-48,255,0,0,255,1],[7,0,-108,240,0,0,200,1]],[[3,0,-24,255,0,0,255,1],[1,-300,-48,255,0,0,255,1],[8,0,-108,240,0,0,150,1]],[[4,0,-24,255,0,0,255,1],[2,-300,-48,255,0,0,255,1],[7,-300,-108,240,0,0,200,1]],[[3,-300,-48,255,0,0,255,1],[5,0,-24,255,0,0,255,1],[0,288,-48,255,0,0,255,1],[0,-132,12,150,0,0,255,1],[8,-300,-108,240,0,0,150,1]],[[5,0,-24,255,0,0,180,1],[4,-300,-48,255,0,0,255,1],[1,288,-48,255,0,0,255,1],[1,-132,-12,195,0,0,255,1]],[[5,-300,-48,255,0,0,255,1],[2,288,-48,255,0,0,255,1],[2,-132,-12,180,0,0,255,1],[0,120,12,150,0,0,255,1],[7,288,-108,240,0,0,200,1]],[[5,-300,-48,255,0,0,150,1],[3,288,-48,255,0,0,255,1],[3,-132,-12,180,0,0,255,1],[1,120,-12,180,0,0,255,1],[8,288,-108,240,0,0,150,1]],[[4,288,-48,255,0,0,255,1],[4,-132,-12,180,0,0,255,1],[-1,96,0,180,0,0,255,1],[2,120,-12,180,0,0,255,1]],[[5,288,-48,255,0,0,255,1],[5,-132,-12,180,0,0,255,1],[3,120,-12,180,0,0,200,1]],[[5,288,-48,255,0,0,150,1],[5,-132,-12,180,0,0,150,1],[4,120,-12,180,0,0,200,1]],[[5,120,-12,180,0,0,200,1]],[[5,120,-12,180,0,0,100,1]]],"name":"炎/全体2","position":3,"timings":[{"flashColor":[255,187,68,153],"flashDuration":5,"flashScope":2,"frame":0,"se":{"name":"Fire3","pan":0,"pitch":90,"volume":100}},{"flashColor":[255,102,0,187],"flashDuration":5,"flashScope":1,"frame":0,"se":null},{"flashColor":[255,153,0,204],"flashDuration":3,"flashScope":1,"frame":3,"se":null},{"flashColor":[255,187,68,153],"flashDuration":5,"flashScope":2,"frame":5,"se":null},{"flashColor":[255,119,0,187],"flashDuration":3,"flashScope":1,"frame":6,"se":null}]}, +{"id":70,"animation1Hue":330,"animation1Name":"PreSpecial1","animation2Hue":0,"animation2Name":"Fire3","frames":[[[0,0,-72,330,0,0,255,1]],[[1,0,-72,330,0,0,255,1]],[[2,0,-72,330,0,0,255,1]],[[3,0,-72,330,0,0,255,1]],[[4,0,-72,330,0,0,255,1],[17,0,-72,390,0,0,150,1]],[[5,0,-72,330,0,0,255,1],[18,0,-72,345,0,0,255,1]],[[6,0,-72,330,0,0,255,1],[19,0,-72,345,0,0,255,1]],[[20,0,-72,345,0,0,255,1],[7,0,-72,330,0,0,255,1]],[[8,0,-72,330,0,0,255,1],[22,0,-84,420,0,0,255,1]],[[9,0,-72,330,0,0,255,1],[23,0,-84,420,0,0,255,1]],[[10,0,-72,330,0,0,255,1],[24,0,-84,420,0,0,255,1]],[[11,0,-72,330,0,0,255,1],[25,0,-84,450,0,0,255,1],[100,0,-96,240,0,0,50,0]],[[12,0,-72,330,0,0,255,1],[20,0,-84,300,0,0,200,1],[22,0,-84,375,0,0,255,1],[26,0,-84,450,0,0,255,1],[100,0,-96,240,0,0,100,0]],[[13,0,-72,330,0,0,255,1],[26,0,-84,465,0,0,200,1],[125,0,72,525,0,0,50,1],[100,0,-96,240,0,0,100,0]],[[14,0,-72,330,0,0,255,1],[26,0,-84,480,0,0,180,1],[125,0,72,525,0,0,100,1],[100,0,-96,240,0,0,100,0]],[[15,0,-72,330,0,0,255,1],[26,0,-84,487,0,0,150,1],[125,0,72,525,0,0,150,1],[100,0,-96,240,0,0,100,0]],[[16,0,-72,330,0,0,255,1],[26,0,-84,495,0,0,120,1],[125,0,72,525,0,0,180,1],[100,0,-96,240,0,0,100,0]],[[26,0,-84,502,0,0,100,1],[16,0,-72,330,0,0,200,1],[125,0,72,525,0,0,180,1],[100,0,-96,240,0,0,100,0]],[[16,0,-72,330,0,0,150,1],[26,0,-84,502,0,0,70,1],[125,0,72,525,0,0,180,1],[100,0,-96,240,0,0,100,0]],[[16,0,-72,330,0,0,100,1],[26,0,-84,502,0,0,40,1],[125,0,72,525,0,0,180,1],[100,0,-96,240,0,0,100,0]],[[16,0,-72,330,0,0,50,1],[125,0,72,525,0,0,180,1],[100,0,-96,240,0,0,100,0]],[[125,0,72,525,0,0,180,1],[100,0,-96,240,0,0,100,0]],[[125,0,72,525,0,0,180,1],[100,0,-96,240,0,0,100,0]],[[125,0,72,525,0,0,180,1],[100,0,-96,240,0,0,60,0],[102,0,-120,300,0,0,255,0]],[[125,0,72,525,0,0,180,1],[100,0,-96,240,0,0,40,0],[103,0,-132,330,0,0,255,0]],[[125,0,72,525,0,0,180,1],[100,0,-96,240,0,0,20,0],[104,0,-132,337,0,0,255,0],[114,-228,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[105,0,-132,345,0,0,255,0],[115,-228,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[106,0,-132,345,0,0,255,0],[116,-228,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[107,0,-132,345,0,0,255,0],[117,-228,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[114,228,-84,240,0,0,255,0],[108,0,-132,345,0,0,255,0],[118,-228,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[115,228,-84,240,0,0,255,0],[109,0,-132,345,0,0,255,0],[119,-228,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[116,228,-84,240,0,0,255,0],[110,0,-132,345,0,0,255,0],[120,-228,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[117,228,-84,240,0,0,255,0],[111,0,-132,345,0,0,255,0],[121,-228,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[118,228,-84,240,0,0,255,0],[112,0,-132,345,0,0,255,0],[122,-228,-84,240,0,0,255,0],[114,-312,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[119,228,-84,240,0,0,255,0],[113,0,-132,345,0,0,255,0],[123,-228,-84,240,0,0,255,0],[115,-312,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[120,228,-84,240,0,0,255,0],[108,0,-132,345,0,0,255,0],[124,-228,-84,240,0,0,255,0],[116,-312,-84,240,0,0,255,0]],[[125,0,72,525,0,0,180,1],[121,228,-84,240,0,0,255,0],[109,0,-132,345,0,0,255,0],[114,300,-80,240,0,0,255,1],[117,-312,-84,240,0,0,255,1]],[[125,2.5,69.5,525,0,0,180,1],[122,228,-84,240,0,0,255,0],[110,0,-132,345,0,0,255,0],[115,300,-80,240,0,0,255,1],[119,-312,-84,240,0,0,255,1]],[[125,0,72,525,0,0,180,1],[123,228,-84,240,0,0,255,0],[111,0,-132,345,0,0,255,0],[116,300,-80,240,0,0,255,1],[120,-312,-84,240,0,0,255,1]],[[125,0,72,525,0,0,180,1],[124,228,-84,240,0,0,255,0],[112,0,-132,345,0,0,255,0],[117,300,-80,240,0,0,255,1],[121,-312,-84,240,0,0,255,1]],[[125,0,72,525,0,0,180,1],[113,0,-132,345,0,0,255,0],[-1,-198,274,240,0,0,255,0],[118,300,-80,240,0,0,255,1],[122,-312,-84,240,0,0,255,1]],[[125,0,72,525,0,0,180,1],[108,0,-132,345,0,0,255,0],[-1,-198,274,240,0,0,255,0],[119,300,-80,240,0,0,255,1],[123,-312,-84,240,0,0,255,1]],[[125,0,72,525,0,0,180,1],[109,0,-132,345,0,0,255,0],[-1,-198,274,240,0,0,255,0],[120,300,-80,240,0,0,255,1],[124,-312,-84,240,0,0,255,1]],[[125,0,72,525,0,0,180,1],[110,0,-132,345,0,0,255,0],[-1,-198,274,240,0,0,255,0],[121,300,-80,240,0,0,255,1]],[[126,0,72,525,0,0,180,1],[111,0,-132,345,0,0,255,0],[-1,-198,274,240,0,0,255,0],[122,300,-80,240,0,0,255,1]],[[126,0,72,525,0,0,180,1],[112,0,-132,345,0,0,255,0],[-1,-198,274,240,0,0,255,0],[123,300,-80,240,0,0,255,1]],[[126,0,72,525,0,0,180,1],[113,0,-132,345,0,0,255,0],[-1,-198,274,240,0,0,255,0],[124,300,-80,240,0,0,255,1]],[[126,0,72,525,0,0,180,1],[108,0,-132,345,0,0,255,0],[-1,-198,274,240,0,0,255,0]],[[126,0,72,525,0,0,180,1],[109,0,-132,345,0,0,197,0],[-1,-198,274,240,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[126,0,72,525,0,0,180,1],[110,0,-132,345,0,0,138,0],[-1,-198,274,240,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[126,0,72,525,0,0,180,1],[111,0,-132,345,0,0,80,0],[-1,-198,274,240,0,0,255,0]]],"name":"炎/全体3","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind2","pan":0,"pitch":70,"volume":65}},{"flashColor":[255,34,0,136],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic1","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,85,0,153],"flashDuration":5,"flashScope":2,"frame":9,"se":{"name":"Fire2","pan":0,"pitch":110,"volume":80}},{"flashColor":[255,187,51,204],"flashDuration":5,"flashScope":2,"frame":22,"se":{"name":"Explosion2","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,221,51,255],"flashDuration":5,"flashScope":1,"frame":23,"se":null},{"flashColor":[255,221,51,255],"flashDuration":5,"flashScope":1,"frame":29,"se":null}]}, +{"id":71,"animation1Hue":0,"animation1Name":"Ice1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,200,0,0,255,1]],[[1,0,0,200,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[2,0,0,200,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[3,0,0,200,0,0,255,1],[14,0,0,130,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,0,200,0,0,255,1],[14,0,0,168,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,0,200,0,0,0,1],[14,0,0,205,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,0,200,0,0,0,1],[14,0,0,243,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,0,200,0,0,0,1],[14,0,0,280,0,0,128,1],[5,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,0,200,0,0,0,1],[14,0,0,280,0,0,0,1],[6,0,0,250,0,0,255,1],[13,0,0,100,0,0,255,1]],[[4,0,0,200,0,0,0,1],[14,0,0,280,0,0,0,1],[7,0,0,250,0,0,255,1],[13,0,0,143,15,0,255,1]],[[4,0,0,200,0,0,0,1],[14,0,0,280,0,0,0,1],[8,0,0,250,0,0,255,1],[13,0,0,185,30,0,255,1]],[[4,0,0,200,0,0,0,1],[14,0,0,280,0,0,0,1],[9,0,0,250,0,0,255,1],[13,0,0,228,45,0,255,1]],[[4,0,0,200,0,0,0,1],[14,0,0,280,0,0,0,1],[10,0,0,250,0,0,255,1],[13,0,0,270,60,0,255,1]],[[4,0,0,200,0,0,0,1],[14,0,0,280,0,0,0,1],[11,0,0,250,0,0,255,1],[13,0,0,270,80,0,128,1]],[[4,0,0,200,0,0,0,1],[14,0,0,280,0,0,0,1],[12,0,0,250,0,0,255,1]]],"name":"氷/単体1","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Starlight","pan":0,"pitch":150,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Wind1","pan":0,"pitch":80,"volume":70}},{"flashColor":[136,255,255,238],"flashDuration":5,"flashScope":1,"frame":3,"se":{"name":"Crash","pan":0,"pitch":150,"volume":90}},{"flashColor":[136,255,255,68],"flashDuration":5,"flashScope":2,"frame":3,"se":null},{"flashColor":[136,255,255,136],"flashDuration":5,"flashScope":2,"frame":4,"se":null},{"flashColor":[136,255,255,238],"flashDuration":5,"flashScope":1,"frame":9,"se":{"name":"Ice1","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":13,"se":{"name":"Sword2","pan":0,"pitch":150,"volume":90}}]}, +{"id":72,"animation1Hue":60,"animation1Name":"Ice3","animation2Hue":0,"animation2Name":"HitIce","frames":[[[-1,0,-132,195,0,0,255,1],[5,-12,-108,120,0,0,150,1]],[[-1,0,-132,195,0,0,255,1],[5,-12,-108,120,0,0,255,1]],[[0,0,-132,195,0,0,255,1],[5,-12,-120,135,0,0,255,1]],[[6,-12,-132,165,0,0,255,1],[1,0,-144,225,0,0,255,1]],[[7,-12,-132,165,0,0,255,1],[2,0,-144,225,0,0,255,1]],[[8,-12,-132,165,0,0,255,0],[3,0,-144,229,0,0,230,1],[105,0,-144,225,0,0,255,1]],[[8,-12,-132,165,0,0,255,0],[4,0,-144,232,0,0,230,1],[106,0,-144,165,0,0,255,1]],[[8,-12,-132,165,0,0,255,0],[4,0,-144,236,0,0,200,1],[107,0,-144,172,0,0,255,1]],[[8,-12,-132,165,0,0,255,0],[4,0,-144,239,0,0,180,1],[106,0,-144,180,0,0,255,1]],[[8,-12,-132,165,0,0,255,0],[4,0,-144,243,0,0,150,1],[107,0,-144,193,0,0,200,1]],[[8,-12,-132,165,0,0,180,0],[4,0,-144,246,0,0,120,1],[106,0,-144,207,0,0,180,1]],[[8,-12,-132,165,0,0,100,0],[4,0,-144,250,0,0,80,1],[107,0,-144,220,0,0,100,1]]],"name":"氷/単体2","position":2,"timings":[{"flashColor":[187,238,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Ice4","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder1","pan":0,"pitch":150,"volume":90}},{"flashColor":[187,238,255,187],"flashDuration":5,"flashScope":1,"frame":3,"se":null}]}, +{"id":73,"animation1Hue":0,"animation1Name":"Ice1","animation2Hue":0,"animation2Name":"Ice2","frames":[[[100,-240,80,350,0,0,255,1],[-1,-140,92.5,250,0,0,0,0],[-1,-315,-61.5,100,0,0,0,1],[-1,-275,-18,100,0,0,0,1],[-1,-169.5,50,250,0,0,0,0],[-1,-137.5,30,250,0,0,0,0],[100,320,64,350,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[100,-80,176,350,0,1,255,1]],[[101,-240,80,350,0,0,255,1],[-1,-80,107.5,250,0,0,0,0],[-1,-265,116,100,0,0,0,1],[-1,-240,107,100,0,0,0,1],[-1,-194.5,127.5,250,0,0,0,0],[-1,-245,22.5,250,0,0,0,0],[101,320,64,350,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[101,-80,176,350,0,1,255,1]],[[102,-240,80,350,0,0,255,1],[-1,0,-200,250,0,0,0,0],[-1,-285.5,-234.5,100,0,0,0,1],[-1,-260.5,-218.5,100,0,0,0,1],[-1,-279.5,-187.5,250,0,0,0,0],[-1,-282.5,30,250,0,0,0,0],[102,320,64,350,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[102,-80,176,350,0,1,255,1]],[[103,-240,80,350,0,0,255,1],[-1,-2.5,-200,250,0,0,0,0],[-1,-318,-239,100,0,0,0,1],[-1,-338,-234,100,0,0,0,1],[-1,-280,-192.5,250,0,0,0,0],[-1,-222.5,82.5,250,0,0,0,0],[103,320,64,350,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[103,-80,176,350,0,1,255,1]],[[104,-240,80,350,0,0,255,1],[-1,17.5,177.5,250,0,0,0,0],[-1,-408,274.5,100,0,0,0,1],[-1,-408,246.5,100,0,0,0,1],[109,-280,-190,250,0,0,100,0],[109,272,-200,250,0,0,100,0],[104,320,64,350,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[104,-80,176,350,0,1,255,1]],[[105,-240,80,350,0,0,255,1],[109,0,-200,250,0,0,100,0],[-1,-370.5,164.5,100,0,0,0,1],[-1,-402.5,224,100,0,0,0,1],[110,-280,-192,250,0,0,188,0],[110,272,-200,250,0,0,188,0],[105,320,64,350,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[105,-80,176,350,0,1,255,1]],[[106,-240,80,350,0,0,255,1],[110,0,-200,250,0,0,188,0],[-1,-388,52,100,0,0,0,1],[-1,-408,187,100,0,0,0,1],[111,-280,-190,250,0,0,255,0],[111,272,-200,250,0,0,255,0],[106,320,64,350,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[106,-80,176,350,0,1,255,1]],[[107,-240,80,350,0,0,255,1],[111,0,-200,250,0,0,255,0],[-1,-390,145.5,100,0,0,0,1],[-1,-408,155,100,0,0,0,1],[112,-280,-190,250,0,0,255,0],[112,272,-200,250,0,0,255,0],[107,320,64,350,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[107,-80,176,350,0,1,255,1]],[[108,-226.5,0,350,0,0,255,1],[112,0,-200,250,0,0,255,0],[-1,-385,236.5,100,0,0,0,1],[-1,-405,179,100,0,0,0,1],[113,-280,-190,250,0,0,255,0],[113,272,-200,250,0,0,255,0],[108,336,-20,350,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[108,-60,100,350,0,1,255,1]],[[107,-224,0,350,0,0,0,1],[113,0,-200,250,0,0,255,0],[-1,-405.5,230,100,0,0,0,1],[-1,-408,212.5,100,0,0,0,1],[114,-280,-190,250,0,0,255,0],[114,272,-200,250,0,0,255,0]],[[108,0,0,350,0,0,0,1],[114,0,-200,250,0,0,255,0],[-1,-360.5,218.5,100,0,0,0,1],[-1,-408,233.5,100,0,0,0,1],[115,-280,-190,250,0,0,255,0],[115,272,-200,250,0,0,255,0]],[[108,0,0,350,0,0,0,1],[115,0,-200,250,0,0,255,0],[-1,-358,149,100,0,0,0,1],[-1,-408,236.5,100,0,0,0,1],[116,-280,-190,250,0,0,255,0],[116,272,-200,250,0,0,255,0]],[[-1,-55,37.5,350,0,0,0,1],[116,0,-200,250,0,0,255,0],[-1,-365.5,203.5,100,0,0,0,1],[-1,-396,161,100,0,0,0,1],[117,-280,-190,250,0,0,255,0],[117,272,-200,250,0,0,255,0]],[[-1,0,0,350,0,0,0,1],[117,0,-200,250,0,0,255,0],[-1,-315,220.5,100,0,0,0,1],[-1,-360,180,100,0,0,0,1],[118,-280,-190,250,0,0,255,0],[118,272,-200,250,0,0,255,0]],[[-1,0,0,350,0,0,0,1],[118,0,-200,250,0,0,255,0],[-1,-315.5,209.5,100,0,0,0,1],[-1,-338.5,196.5,100,0,0,0,1],[118,-280,-190,250,0,0,255,0],[118,272,-200,250,0,0,255,0]],[[-1,-340,57.5,350,0,0,0,1],[118,0,-200,250,0,0,255,0],[-1,-400.5,86,100,0,0,0,1],[-1,-322.5,250.5,100,0,0,0,1],[118,-280,-80,250,0,0,255,0],[118,272,-200,250,0,0,255,0]],[[-1,17.5,95,350,0,0,0,1],[118,0,-112,250,0,0,255,0],[-1,-375,-227.5,100,0,0,0,1],[-1,-340,-154.5,100,0,0,0,1],[118,-280,20,250,0,0,255,0],[118,272,-200,250,0,0,255,0],[119,-280,60,220,0,0,255,1],[8,-270,32,200,0,0,255,1]],[[-1,-60,37.5,350,0,0,0,1],[118,0,16,250,0,0,255,0],[119,2,50,220,0,0,255,1],[8,0,0,200,0,0,255,1],[118,-280,20,250,0,0,255,0],[118,272,-112,250,0,0,255,0],[120,-280,60,220,0,0,255,1],[10,-270,32,275,0,0,255,1]],[[-1,32.5,180,350,0,0,0,1],[118,0,16,250,0,0,255,0],[120,0,50,220,0,0,255,1],[10,0,0,275,0,0,255,1],[118,-280,20,250,0,0,255,0],[118,272,16,250,0,0,255,0],[120,-280,60,220,0,0,255,1],[11,-270,32,350,0,0,255,1],[8,280,50,200,0,0,255,1],[119,280,50,220,0,0,255,1]],[[-1,175,200,350,0,0,0,1],[118,0,16,250,0,0,255,0],[120,0,50,220,0,0,255,1],[11,0,2,350,0,0,255,1],[118,-280,20,250,0,0,255,0],[118,272,16,250,0,0,255,0],[120,-280,60,220,0,0,255,1],[12,-270,32,350,0,0,255,1],[10,280,50,275,0,0,255,1],[120,280,50,220,0,0,255,1]],[[-1,-167.5,182.5,350,0,0,0,1],[118,0,16,250,0,0,255,0],[120,0,50,220,0,0,255,1],[12,0,0,350,0,0,255,1],[118,-280,20,250,0,0,255,0],[118,272,16,250,0,0,255,0],[120,-280,60,220,0,0,255,1],[-1,-402.5,-225,100,0,0,0,1],[11,280,50,350,0,0,255,1],[120,280,50,220,0,0,255,1]],[[-1,-15,285,350,0,0,0,1],[118,0,16,250,0,0,188,0],[120,0,50,220,0,0,188,1],[12,2.5,312,350,0,0,0,1],[118,-280,20,250,0,0,188,0],[118,272,16,250,0,0,188,0],[120,-280,60,220,0,0,188,1],[-1,-408,312,100,0,0,0,1],[12,280,50,350,0,0,255,1],[120,280,50,220,0,0,188,1]],[[-1,-160,312,350,0,0,0,1],[118,0,16,250,0,0,180,0],[120,0,50,220,0,0,180,1],[12,2.5,312,350,0,0,180,1],[118,-280,20,250,0,0,180,0],[118,272,16,250,0,0,180,0],[120,-280,60,220,0,0,180,1],[-1,-408,312,100,0,0,0,1],[120,280,50,220,0,0,180,1]],[[-1,-160,312,350,0,0,0,1],[118,0,16,250,0,0,140,0],[120,0,50,220,0,0,140,1],[12,2.5,312,350,0,0,140,1],[118,-280,20,250,0,0,140,0],[118,272,16,250,0,0,140,0],[120,-280,60,220,0,0,140,1],[-1,-408,312,100,0,0,0,1],[120,280,50,220,0,0,140,1]],[[-1,-160,312,350,0,0,0,1],[118,0,16,250,0,0,60,0],[120,0,50,220,0,0,60,1],[12,2.5,312,350,0,0,60,1],[118,-280,20,250,0,0,60,0],[118,272,16,250,0,0,60,0],[120,-280,60,220,0,0,60,1],[-1,-408,312,100,0,0,0,1],[120,280,50,220,0,0,60,1]]],"name":"氷/全体1","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder4","pan":0,"pitch":80,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":5,"se":{"name":"Flash2","pan":0,"pitch":150,"volume":90}},{"flashColor":[153,255,255,153],"flashDuration":5,"flashScope":1,"frame":16,"se":{"name":"Earth1","pan":0,"pitch":130,"volume":70}},{"flashColor":[153,255,255,153],"flashDuration":5,"flashScope":2,"frame":17,"se":{"name":"Ice5","pan":0,"pitch":100,"volume":90}},{"flashColor":[153,255,255,153],"flashDuration":5,"flashScope":1,"frame":20,"se":{"name":"Sword2","pan":0,"pitch":150,"volume":90}},{"flashColor":[153,255,255,153],"flashDuration":5,"flashScope":2,"frame":20,"se":null}]}, +{"id":74,"animation1Hue":0,"animation1Name":"Ice4","animation2Hue":0,"animation2Name":"","frames":[[[0,-192,-96,255,0,0,100,1],[1,0,-96,255,0,0,100,1],[2,204,-96,255,0,0,100,1]],[[1,-216,-96,255,0,0,150,1],[2,0,-96,255,0,0,150,1],[3,204,-96,255,0,0,150,1]],[[2,-216,-96,255,0,0,200,1],[3,0,-96,255,0,0,200,1],[0,204,-96,255,0,0,200,1]],[[3,-216,-96,255,0,0,255,1],[0,0,-96,255,0,0,255,1],[1,204,-96,255,0,0,255,1]],[[0,-216,-96,255,0,0,255,1],[1,0,-96,255,0,0,255,1],[2,204,-96,255,0,0,255,1]],[[1,-216,-96,255,0,0,255,1],[2,0,-96,255,0,0,255,1],[3,204,-96,255,0,0,255,1]],[[2,-216,-96,255,0,0,255,1],[3,0,-96,255,0,0,255,1],[0,204,-96,255,0,0,255,1]],[[3,-216,-96,255,0,0,255,1],[0,0,-96,255,0,0,255,1],[1,204,-96,255,0,0,255,1]],[[0,-216,-96,255,0,0,255,1],[1,0,-96,255,0,0,255,1],[2,204,-96,255,0,0,255,1]],[[1,-216,-96,255,0,0,255,1],[2,0,-96,255,0,0,255,1],[3,204,-96,255,0,0,255,1]],[[2,-216,-96,255,0,0,255,1],[3,0,-96,255,0,0,255,1],[0,204,-96,255,0,0,255,1]],[[3,-216,-96,255,0,0,255,1],[0,0,-96,255,0,0,255,1],[1,204,-96,255,0,0,255,1]],[[0,-216,-96,255,0,0,200,1],[1,0,-96,255,0,0,255,1],[2,204,-96,255,0,0,200,1]],[[1,-216,-96,255,0,0,170,1],[2,0,-96,255,0,0,200,1],[3,204,-96,255,0,0,170,1]],[[2,-216,-96,255,0,0,100,1],[3,0,-96,255,0,0,120,1],[0,204,-96,255,0,0,100,1]],[[3,-216,-96,255,0,0,50,1],[0,0,-96,255,0,0,80,1],[1,204,-96,255,0,0,50,1]]],"name":"氷/全体2","position":3,"timings":[{"flashColor":[255,255,255,136],"flashDuration":15,"flashScope":2,"frame":0,"se":{"name":"Wind6","pan":0,"pitch":80,"volume":90}},{"flashColor":[221,255,255,102],"flashDuration":8,"flashScope":1,"frame":2,"se":{"name":"Thunder6","pan":0,"pitch":90,"volume":80}},{"conditions":0,"flashColor":[221,255,255,102],"flashDuration":8,"flashScope":1,"frame":7,"se":null}]}, +{"id":75,"animation1Hue":150,"animation1Name":"PreSpecial1","animation2Hue":0,"animation2Name":"Ice5","frames":[[[0,0,-72,330,0,0,255,1]],[[1,0,-72,330,0,0,255,1]],[[2,0,-72,330,0,0,255,1]],[[3,0,-72,330,0,0,255,1]],[[4,0,-72,330,0,0,255,1],[17,0,-72,390,0,0,150,1]],[[5,0,-72,330,0,0,255,1],[18,0,-72,345,0,0,255,1]],[[6,0,-72,330,0,0,255,1],[19,0,-72,345,0,0,255,1]],[[20,0,-72,345,0,0,255,1],[7,0,-72,330,0,0,255,1]],[[8,0,-72,330,0,0,255,1],[22,0,-84,420,0,0,255,1]],[[9,0,-72,330,0,0,255,1],[23,0,-84,420,0,0,255,1]],[[10,0,-72,330,0,0,255,1],[24,0,-84,420,0,0,255,1]],[[11,0,-72,330,0,0,255,1],[25,0,-84,450,0,0,255,1],[100,0,-108,240,0,0,50,0]],[[12,0,-72,330,0,0,255,1],[20,0,-84,300,0,0,200,1],[22,0,-84,375,0,0,255,1],[26,0,-84,450,0,0,255,1],[100,0,-108,240,0,0,100,0]],[[13,0,-72,330,0,0,255,1],[26,0,-84,465,0,0,200,1],[100,0,-108,240,0,0,150,0]],[[14,0,-72,330,0,0,255,1],[26,0,-84,480,0,0,180,1],[100,0,-108,240,0,0,150,0]],[[15,0,-72,330,0,0,255,1],[26,0,-84,487,0,0,150,1],[100,0,-108,240,0,0,150,0],[123,-288,-96,225,0,0,50,1],[123,264,-96,225,270,1,50,1]],[[16,0,-72,330,0,0,255,1],[26,0,-84,495,0,0,120,1],[100,0,-108,240,0,0,150,0],[123,-288,-96,225,0,0,100,1],[123,264,-96,225,270,1,100,1]],[[26,0,-84,502,0,0,100,1],[16,0,-72,330,0,0,200,1],[100,0,-108,240,0,0,150,0],[123,-288,-96,225,0,0,150,1],[123,264,-96,225,270,1,150,1]],[[16,0,-72,330,0,0,150,1],[26,0,-84,502,0,0,70,1],[100,0,-108,240,0,0,140,0],[123,-288,-96,225,0,0,200,1],[123,264,-96,225,270,1,200,1]],[[16,0,-72,330,0,0,100,1],[26,0,-84,502,0,0,40,1],[100,0,-108,240,0,0,130,0],[123,264,-96,225,270,1,200,1],[123,-288,-96,225,0,0,200,1]],[[16,0,-72,330,0,0,50,1],[100,0,-108,240,0,0,120,0],[123,-288,-96,225,0,0,200,1],[123,264,-96,225,270,1,200,1]],[[100,0,-108,240,0,0,100,0],[123,-288,-96,225,0,0,200,1],[123,264,-96,225,270,1,200,1]],[[100,0,-108,240,0,0,80,0],[123,-288,-96,225,0,0,200,1],[123,264,-96,225,270,1,200,1]],[[100,0,-108,240,0,0,60,0],[123,-288,-96,225,0,0,150,1],[123,264,-96,225,270,1,150,1],[101,-192,12,336,0,0,255,0],[101,192,12,336,0,0,255,0]],[[100,0,-108,240,0,0,40,0],[123,-288,-96,225,0,0,100,1],[123,264,-96,225,270,1,100,1],[102,-192,12,337,0,0,255,0],[102,192,12,337,0,0,255,0]],[[100,0,-108,240,0,0,20,0],[123,-288,-96,225,0,0,50,1],[123,264,-96,225,270,1,50,1],[103,-192,12,337,0,0,255,0],[103,192,12,337,0,0,255,0]],[[104,-192,12,337,0,0,255,0],[104,192,12,337,0,0,255,0]],[[105,-192,12,337,0,0,255,0],[105,192,12,337,0,0,255,0]],[[106,-192,12,337,0,0,255,0],[106,192,12,337,0,0,255,0]],[[107,-192,12,337,0,0,255,0],[107,192,12,337,0,0,255,0]],[[108,-192,12,337,0,0,255,0],[108,192,12,337,0,0,255,0]],[[109,-192,12,337,0,0,255,0],[109,192,12,337,0,0,255,0]],[[110,-192,12,337,0,0,255,0],[110,192,12,337,0,0,255,0]],[[111,-192,12,337,0,0,255,0],[111,192,12,337,0,0,255,0]],[[112,-192,12,337,0,0,255,0],[112,192,12,337,0,0,255,0]],[[113,-192,12,337,0,0,255,0],[113,192,12,337,0,0,255,0]],[[114,-192,12,337,0,0,255,0],[114,192,12,337,0,0,255,0]],[[115,-192,12,337,0,0,255,0],[115,192,12,337,0,0,255,0]],[[116,-192,12,337,0,0,255,0],[116,192,12,337,0,0,255,0]],[[117,-192,12,337,0,0,255,0],[117,192,12,337,0,0,255,0]],[[118,-192,12,337,0,0,255,0],[118,192,12,337,0,0,255,0]],[[119,-192,12,337,0,0,255,0],[119,192,12,337,0,0,255,0]],[[120,-192,12,337,0,0,255,0],[120,192,12,337,0,0,255,0]],[[120,-192,12,337,0,0,255,0],[120,192,12,337,0,0,255,0]],[[121,-192,12,337,0,0,255,0],[121,192,12,337,0,0,255,0]],[[122,-192,12,337,0,0,255,0],[122,192,12,337,0,0,255,0]],[[122,-192,12,337,0,0,150,0],[122,192,12,337,0,0,150,0]]],"name":"氷/全体3","position":3,"timings":[{"flashColor":[255,34,0,136],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind2","pan":0,"pitch":70,"volume":65}},{"flashColor":[255,34,0,136],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic1","pan":0,"pitch":100,"volume":80}},{"flashColor":[136,221,255,153],"flashDuration":5,"flashScope":2,"frame":9,"se":{"name":"Ice4","pan":0,"pitch":100,"volume":70}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":19,"se":{"name":"Crash","pan":0,"pitch":150,"volume":70}},{"flashColor":[153,221,255,255],"flashDuration":5,"flashScope":1,"frame":23,"se":{"name":"Sand","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,187,51,204],"flashDuration":5,"flashScope":0,"frame":23,"se":{"name":"Ice5","pan":0,"pitch":100,"volume":90}},{"flashColor":[136,221,255,204],"flashDuration":5,"flashScope":2,"frame":26,"se":{"name":"Ice1","pan":0,"pitch":100,"volume":75}},{"flashColor":[153,221,255,255],"flashDuration":5,"flashScope":1,"frame":29,"se":null},{"flashColor":[136,221,255,170],"flashDuration":5,"flashScope":2,"frame":32,"se":null},{"flashColor":[153,221,255,255],"flashDuration":10,"flashScope":1,"frame":32,"se":null}]}, +{"id":76,"animation1Hue":0,"animation1Name":"Thunder1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-312,300,0,0,255,0]],[],[[1,0,-220,300,0,0,255,0],[4,0,-220,300,0,0,255,0]],[[2,0,-220,300,0,0,255,0],[5,0,-220,300,0,0,255,0]],[[3,0,-220,300,0,0,255,0],[6,0,-220,300,0,0,255,0]],[[1,0,-220,300,0,0,255,0],[7,0,-220,300,0,0,255,0]],[[-1,0,-20,0,0,0,0,0],[7,0,-212,320,0,0,100,0]]],"name":"雷/単体1","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder6","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,187,221],"flashDuration":5,"flashScope":2,"frame":1,"se":null},{"flashColor":[255,255,187,221],"flashDuration":5,"flashScope":1,"frame":2,"se":null},{"flashColor":[255,255,187,221],"flashDuration":5,"flashScope":1,"frame":4,"se":null}]}, +{"id":77,"animation1Hue":0,"animation1Name":"Thunder2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,300,0,0,255,1]],[[1,0,0,225,0,0,255,1],[1,0,0,300,90,0,255,1]],[[2,0,0,300,0,0,255,1],[2,0,0,150,45,1,255,1]],[[-1,0,0,225,90,0,255,1],[3,0,0,195,0,0,255,1]],[[4,0,0,195,0,0,255,1]],[[5,0,0,195,0,0,255,1]],[[3,0,0,240,0,0,255,1]],[[4,0,0,240,0,0,255,1]],[[5,0,0,240,0,1,255,1]],[[3,0,0,255,0,0,150,1]],[[4,0,0,270,0,0,100,1]],[[3,0,0,285,0,0,60,1]],[],[],[]],"name":"雷/単体2","position":1,"timings":[{"flashColor":[255,255,187,153],"flashDuration":5,"flashScope":2,"frame":0,"se":{"name":"Thunder3","pan":0,"pitch":85,"volume":100}},{"flashColor":[255,255,51,170],"flashDuration":3,"flashScope":1,"frame":3,"se":{"name":"Thunder8","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,51,187],"flashDuration":3,"flashScope":1,"frame":7,"se":null}]}, +{"id":78,"animation1Hue":0,"animation1Name":"Thunder1","animation2Hue":0,"animation2Name":"","frames":[[[8,0,-20,400,0,0,128,0]],[[9,0,-21,387,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,20,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1]],[[10,0,-22,373,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,20,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1]],[[11,0,-24,360,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,20,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1]],[[8,0,-25,347,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,20,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1]],[[9,0,-26,333,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,20,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1]],[[10,0,-27,320,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,20,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1]],[[11,0,-28,307,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,20,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1]],[[8,0,-30,293,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,20,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1]],[[9,0,-31,280,0,0,182,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[10,0,-32,275,0,0,100,0],[0,-16.5,-92.5,260,0,0,180,0],[-1,0,0,100,0,0,255,1],[-1,0,20,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1],[-1,-75,50,100,0,0,255,1]],[[12,0,-50,280,0,1,255,0],[0,-280,-90.5,260,0,0,180,0],[-1,0,0,0,0,0,0,0],[4,0,-64,380,0,0,255,0]],[[13,0,-50,280,0,1,255,0],[1,-256,-68,260,0,0,255,0],[0,289,-114.5,260,0,0,180,0],[5,0,-50,380,0,0,255,0]],[[14,0,-50,280,0,1,255,0],[2,-256,-68,260,0,0,255,0],[1,248,-94,230,0,1,255,0],[6,0,-50,380,0,0,255,0],[4,-275,0,200,0,0,255,0]],[[12,0,-50,280,0,1,255,0],[3,-256,-68,260,0,0,255,0],[2,248,-94,230,0,1,255,0],[7,0,-50,380,0,0,255,0],[5,-275,16,200,0,0,255,0]],[[13,0,-50,280,0,1,255,0],[1,-256,-68,260,0,0,255,0],[3,248,-94,230,0,1,255,0],[-1,0,0,0,0,0,0,0],[6,-275,16,200,0,0,255,0],[4,260,-48,200,0,0,255,0]],[[14,0,-50,280,0,1,255,0],[2,-256,-68,260,0,0,255,0],[1,248,-94,230,0,1,255,0],[-1,0,0,0,0,0,0,0],[7,-275,16,200,0,0,255,0],[5,260,-20,200,0,0,255,0]],[[12,0,-50,280,0,1,255,0],[3,-256,-68,260,0,0,255,0],[2,248,-94,230,0,1,255,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[6,260,-20,200,0,0,255,0]],[[13,0,-50,280,0,1,255,0],[1,-256,-68,260,0,0,255,0],[3,248,-94,230,0,1,255,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[7,260,-20,200,0,0,255,0]],[[14,0,-50,280,0,1,255,0],[2,-256,-68,260,0,0,255,0],[1,248,-94,230,0,1,255,0]],[[12,0,-50,280,0,1,180,0],[3,-256,-68,260,0,0,180,0],[2,248,-94,230,0,1,180,0]],[[13,0,-50,280,0,1,100,0],[1,-256,-68,260,0,0,100,0],[3,248,-94,230,0,1,100,0]]],"name":"雷/全体1","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder1","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Paralyze1","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,153,255],"flashDuration":10,"flashScope":1,"frame":9,"se":{"name":"Thunder6","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,153,255],"flashDuration":5,"flashScope":2,"frame":9,"se":null},{"flashColor":[255,255,153,170],"flashDuration":5,"flashScope":2,"frame":10,"se":null},{"flashColor":[255,255,153,255],"flashDuration":5,"flashScope":2,"frame":14,"se":{"name":"Thunder5","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,153,255],"flashDuration":5,"flashScope":1,"frame":15,"se":null},{"flashColor":[255,255,153,68],"flashDuration":5,"flashScope":2,"frame":18,"se":null}]}, +{"id":79,"animation1Hue":0,"animation1Name":"Thunder3","animation2Hue":0,"animation2Name":"Thunder4","frames":[[],[[1,0,-132,315,0,0,255,1]],[[2,0,-132,315,0,0,255,1]],[[3,0,-132,315,0,0,255,1],[103,288,-108,225,0,0,255,1]],[[4,0,-132,315,0,0,255,1],[0,0,-156,375,0,0,255,1],[104,288,-108,225,0,0,255,1],[107,288,-60,225,0,0,255,1]],[[1,0,-132,315,0,0,255,1],[105,288,-108,225,0,0,255,1],[108,288,-60,225,0,0,200,1]],[[2,0,-132,315,0,0,255,1],[103,-252,-108,225,0,0,255,1],[105,288,-108,225,0,0,100,1]],[[3,0,-132,315,0,0,255,1],[104,-252,-108,225,0,0,255,1],[103,192,-84,150,0,0,255,1],[107,-264,-60,225,0,0,255,1]],[[4,0,-132,315,0,0,255,1],[105,-252,-108,225,0,0,255,1],[104,192,-84,150,0,0,255,1],[108,-264,-60,225,0,0,200,1]],[[1,0,-132,315,0,0,255,1],[105,-252,-108,225,0,0,100,1],[105,192,-84,150,0,0,255,1],[103,-180,-84,150,0,0,255,1]],[[2,0,-132,315,0,0,255,1],[105,192,-84,150,0,0,100,1],[104,-180,-84,150,0,0,255,1]],[[0,0,-84,375,180,1,255,1],[3,0,-132,315,0,0,255,1],[105,-180,-84,150,0,0,255,1]],[[1,0,-132,315,0,0,255,1],[105,-180,-84,150,0,0,100,1]],[[1,0,-132,315,0,0,150,1]]],"name":"雷/全体2","position":3,"timings":[{"flashColor":[255,255,255,238],"flashDuration":3,"flashScope":2,"frame":0,"se":{"name":"Thunder10","pan":0,"pitch":120,"volume":100}},{"flashColor":[255,255,204,170],"flashDuration":1,"flashScope":1,"frame":1,"se":{"name":"Thunder9","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,170,170],"flashDuration":3,"flashScope":2,"frame":4,"se":null},{"flashColor":[255,255,221,170],"flashDuration":3,"flashScope":1,"frame":9,"se":null},{"flashColor":[255,255,170,170],"flashDuration":3,"flashScope":2,"frame":9,"se":null}]}, +{"id":80,"animation1Hue":230,"animation1Name":"PreSpecial1","animation2Hue":0,"animation2Name":"Thunder5","frames":[[[0,0,-72,330,0,0,255,1]],[[1,0,-72,330,0,0,255,1]],[[2,0,-72,330,0,0,255,1]],[[3,0,-72,330,0,0,255,1]],[[4,0,-72,330,0,0,255,1],[17,0,-72,390,0,0,150,1]],[[5,0,-72,330,0,0,255,1],[18,0,-72,345,0,0,255,1]],[[6,0,-72,330,0,0,255,1],[19,0,-72,345,0,0,255,1]],[[20,0,-72,345,0,0,255,1],[7,0,-72,330,0,0,255,1]],[[8,0,-72,330,0,0,255,1],[22,0,-84,420,0,0,255,1]],[[9,0,-72,330,0,0,255,1],[23,0,-84,420,0,0,255,1]],[[10,0,-72,330,0,0,255,1],[24,0,-84,420,0,0,255,1]],[[11,0,-72,330,0,0,255,1],[25,0,-84,450,0,0,255,1],[100,0,-96,240,0,0,50,0]],[[12,0,-72,330,0,0,255,1],[20,0,-84,300,0,0,200,1],[22,0,-84,375,0,0,255,1],[26,0,-84,450,0,0,255,1],[100,0,-96,240,0,0,100,0]],[[13,0,-72,330,0,0,255,1],[26,0,-84,465,0,0,200,1],[100,0,-96,240,0,0,150,0]],[[14,0,-72,330,0,0,255,1],[26,0,-84,480,0,0,180,1],[100,0,-96,240,0,0,150,0]],[[15,0,-72,330,0,0,255,1],[26,0,-84,487,0,0,150,1],[100,0,-96,240,0,0,150,0],[120,0,-216,180,0,0,255,1]],[[16,0,-72,330,0,0,255,1],[26,0,-84,495,0,0,120,1],[100,0,-96,240,0,0,150,0],[116,0,-216,210,0,0,255,1]],[[26,0,-84,502,0,0,100,1],[16,0,-72,330,0,0,200,1],[100,0,-96,240,0,0,150,0],[117,0,-216,225,0,0,255,1]],[[16,0,-72,330,0,0,150,1],[26,0,-84,502,0,0,70,1],[100,0,-96,240,0,0,140,0],[118,0,-216,300,0,0,255,1]],[[16,0,-72,330,0,0,100,1],[26,0,-84,502,0,0,40,1],[100,0,-96,240,0,0,130,0],[119,0,-216,330,0,0,255,1]],[[16,0,-72,330,0,0,50,1],[100,0,-96,240,0,0,120,0],[116,0,-216,330,45,0,255,1]],[[100,0,-96,240,0,0,100,0],[120,0,-216,330,45,0,255,1]],[[100,0,-96,240,0,0,80,0],[101,0,12,337,0,0,255,1],[116,-264,-180,255,0,0,255,1]],[[100,0,-96,240,0,0,60,0],[102,0,12,337,0,0,255,1],[117,-264,-180,270,0,0,255,1]],[[100,0,-96,240,0,0,40,0],[103,0,12,337,0,0,255,1],[118,-264,-180,270,0,0,255,1],[116,276,-24,255,270,0,255,1]],[[100,0,-96,240,0,0,20,0],[104,0,12,337,0,0,255,1],[106,-228,12,337,0,0,255,1],[119,-264,-180,270,0,0,255,1],[117,276,-24,285,270,0,255,1]],[[105,0,12,337,0,0,255,1],[107,-228,12,337,0,0,255,1],[120,-264,-180,270,0,0,255,1],[118,276,-24,285,270,0,255,1]],[[108,-228,12,337,0,0,255,1],[111,-96,12,337,0,1,255,1],[119,276,-24,285,270,0,255,1]],[[109,-228,12,337,0,0,255,1],[112,-96,12,337,0,1,255,1],[120,276,-24,285,270,0,255,1],[116,144,-204,255,0,0,255,1]],[[110,-228,12,337,0,0,255,1],[113,-96,12,337,0,1,255,1],[111,96,12,337,0,0,255,1],[117,144,-204,255,0,0,255,1]],[[114,-96,12,337,0,1,255,1],[112,96,12,337,0,0,255,1],[118,144,-204,255,0,0,255,1],[116,-300,-36,255,110,0,255,1]],[[115,-96,12,337,0,1,255,1],[113,96,12,337,0,0,255,1],[101,-156,12,337,0,1,255,1],[119,144,-204,255,0,0,255,1],[116,-300,-36,285,110,0,255,1]],[[114,96,12,337,0,0,255,1],[102,-156,12,337,0,1,255,1],[120,144,-204,255,0,0,255,1],[118,-300,-36,285,110,0,255,1]],[[115,96,12,337,0,0,255,1],[103,-156,12,337,0,1,255,1],[106,240,12,337,0,1,255,1],[119,-300,-36,285,110,0,255,1]],[[104,-156,12,337,0,1,255,1],[107,240,12,337,0,1,255,1],[120,-300,-36,285,110,0,255,1],[116,0,24,255,125,0,255,1]],[[105,-156,12,337,0,1,255,1],[108,240,12,337,0,1,255,1],[106,-204,12,337,0,0,255,1],[117,0,24,270,125,0,255,1]],[[109,240,12,337,0,1,255,1],[107,-204,12,337,0,0,255,1],[118,0,24,270,125,0,255,1],[116,-252,-204,255,0,0,255,1]],[[110,240,12,337,0,1,255,1],[108,-204,12,337,0,0,255,1],[111,-204,12,337,0,1,255,1],[119,0,24,270,125,0,255,1],[117,-252,-204,270,0,0,255,1]],[[109,-204,12,337,0,0,255,1],[112,-204,12,337,0,1,255,1],[106,252,12,337,0,0,255,1],[120,0,24,270,125,0,255,1],[118,-252,-204,270,0,0,255,1],[116,204,-228,255,90,0,255,1]],[[110,-204,12,337,0,0,255,1],[113,-204,12,337,0,1,255,1],[107,252,12,337,0,0,255,1],[101,0,12,337,0,0,255,1],[119,-252,-204,270,0,0,255,1],[117,204,-228,255,90,0,255,1]],[[114,-204,12,337,0,1,255,1],[108,252,12,337,0,0,255,1],[102,0,12,337,0,0,255,1],[120,-252,-204,270,0,0,255,1],[118,204,-228,255,90,0,255,1]],[[115,-204,12,337,0,1,255,1],[109,252,12,337,0,0,255,1],[103,0,12,337,0,0,255,1],[119,204,-228,255,90,0,255,1]],[[110,252,12,337,0,0,255,1],[104,0,12,337,0,0,255,1],[120,204,-228,255,90,0,255,1]],[[105,0,12,337,0,0,255,1]]],"name":"雷/全体3","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind2","pan":0,"pitch":70,"volume":65}},{"flashColor":[255,34,0,136],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic1","pan":0,"pitch":100,"volume":80}},{"flashColor":[221,102,255,153],"flashDuration":5,"flashScope":2,"frame":9,"se":null},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":10,"se":{"name":"Monster2","pan":0,"pitch":100,"volume":75}},{"flashColor":[255,221,255,221],"flashDuration":5,"flashScope":2,"frame":21,"se":{"name":"Thunder9","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,221,255,221],"flashDuration":5,"flashScope":1,"frame":22,"se":null},{"flashColor":[255,221,255,221],"flashDuration":5,"flashScope":1,"frame":27,"se":null},{"flashColor":[255,221,255,221],"flashDuration":5,"flashScope":1,"frame":29,"se":null},{"flashColor":[255,221,255,221],"flashDuration":5,"flashScope":2,"frame":29,"se":null},{"flashColor":[255,221,255,221],"flashDuration":5,"flashScope":2,"frame":33,"se":null},{"flashColor":[255,221,255,221],"flashDuration":5,"flashScope":1,"frame":34,"se":null}]}, +{"id":81,"animation1Hue":0,"animation1Name":"Water1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,250,0,0,255,1]],[[1,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[2,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[3,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[6,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[7,0,0,250,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[8,0,0,250,0,0,255,1],[21,0,0,220,0,0,188,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[9,0,0,250,0,0,255,1],[21,0,0,280,0,0,255,1],[13,0,0,280,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[10,0,0,250,0,0,255,1],[21,0,0,300,0,0,180,1],[22,0,0,280,0,0,255,1],[14,0,0,280,0,0,255,1]],[[22,0,0,300,0,0,255,1],[15,0,0,280,0,0,255,1]],[[22,0,0,300,0,0,0,1],[16,0,0,280,0,0,255,1]],[[22,0,0,300,0,0,0,1],[17,0,0,280,0,0,255,1]],[[22,0,0,300,0,0,0,1],[18,0,0,280,0,0,255,1]],[[22,0,0,300,0,0,0,1],[19,0,0,280,0,0,100,1]]],"name":"水/単体1","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Water5","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Liquid","pan":0,"pitch":150,"volume":90}},{"flashColor":[136,255,255,153],"flashDuration":5,"flashScope":1,"frame":9,"se":{"name":"Water2","pan":0,"pitch":130,"volume":90}},{"flashColor":[136,255,255,153],"flashDuration":5,"flashScope":2,"frame":10,"se":null}]}, +{"id":82,"animation1Hue":0,"animation1Name":"Water3","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,90,0,0,150,1]],[[0,0,0,120,0,0,255,1]],[[0,0,0,150,0,0,255,1]],[[1,0,0,150,0,0,255,1],[7,0,0,225,0,0,255,1]],[[2,0,0,150,0,0,255,1],[8,0,0,225,0,0,255,1]],[[2,0,0,157,0,0,255,1],[9,0,0,225,0,0,255,1]],[[1,0,0,157,0,0,255,1],[10,0,0,225,0,0,255,1]],[[3,0,0,300,0,0,255,1],[0,0,0,225,0,0,100,1],[11,0,0,255,0,0,255,1]],[[12,0,0,270,0,0,255,1],[3,0,0,315,0,0,255,1]],[[13,0,0,270,0,0,255,1],[4,0,0,150,0,0,255,1]],[[14,0,0,270,0,0,255,1],[5,0,0,195,0,0,255,1]],[[14,0,0,277,0,0,180,1],[6,0,0,199,0,0,255,1]],[[14,0,0,282,0,0,100,1],[4,0,0,204,0,0,255,1]],[[5,0,0,207,0,0,180,1]],[[6,0,0,210,0,0,100,1]]],"name":"水/単体2","position":1,"timings":[{"flashColor":[0,204,255,153],"flashDuration":10,"flashScope":2,"frame":0,"se":{"name":"Dive","pan":0,"pitch":135,"volume":90}},{"flashColor":[119,204,255,170],"flashDuration":7,"flashScope":1,"frame":7,"se":{"name":"Water1","pan":0,"pitch":100,"volume":100}}]}, +{"id":83,"animation1Hue":0,"animation1Name":"Water2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,500,0,0,100,1]],[[1,0,0,482,0,0,152,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[2,0,0,464,0,0,203,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[3,0,0,445,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,0,427,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,409,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[6,0,0,391,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[7,0,0,373,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[8,0,0,355,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[9,0,0,336,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[10,0,0,318,0,0,200,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[11,0,0,300,0,0,128,1]],[[12,0,0,330,0,0,255,0],[17,0,192,300,0,0,100,1]],[[13,0,0,330,0,0,255,0],[18,0,128,300,0,0,200,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[14,0,0,330,0,0,255,0],[19,0,64,300,0,0,255,1],[12,-290,0,330,0,0,255,0],[17,-290,92,300,0,0,100,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[15,0,0,330,0,0,255,0],[20,0,0,300,0,0,255,1],[13,-290,0,330,0,0,255,0],[18,-290,28,300,0,0,200,1],[-1,0,-100,100,0,0,255,1],[-1,0,-120,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[16,0,2.5,330,0,0,255,0],[21,0,0,300,0,0,255,1],[14,-290,0,330,0,0,255,0],[19,-290,-64,300,0,0,255,1],[12,290,0,330,0,0,255,0],[17,290,72,300,0,0,100,1]],[[14,2.5,0,330,0,0,255,0],[22,0,0,300,0,0,255,1],[15,-290,0,330,0,0,255,0],[20,-290,-100,300,0,0,255,1],[13,290,0,330,0,0,255,0],[18,290,8,300,0,0,200,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[15,0,0,330,0,0,255,0],[23,0,0,300,0,0,255,1],[16,-290,0,330,0,0,255,0],[21,-290,-100,300,0,0,255,1],[14,290,0,330,0,0,255,0],[19,290,-56,300,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[16,0,0,330,0,0,255,0],[24,0,0,300,0,0,255,1],[14,-290,0,330,0,0,255,0],[22,-290,-100,300,0,0,255,1],[15,290,0,330,0,0,255,0],[20,290,-120,300,0,0,255,1]],[[14,0,0,330,0,0,255,0],[25,2.5,0,300,0,0,255,1],[15,-290,0,330,0,0,255,0],[23,-290,-100,300,0,0,255,1],[16,290,0,330,0,0,255,0],[21,290,-120,300,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[15,0,0,330,0,0,255,0],[26,0,0,300,0,0,255,1],[16,-290,0,330,0,0,255,0],[24,-290,-100,300,0,0,255,1],[14,290,0,330,0,0,255,0],[22,290,-120,300,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[16,0,0,330,0,0,255,0],[17,0,0,300,0,0,255,1],[14,-290,0,330,0,0,255,0],[25,-290,-100,300,0,0,255,1],[15,290,0,330,0,0,255,0],[23,290,-120,300,0,0,255,1]],[[14,0,0,330,0,0,255,0],[18,0,0,300,0,0,255,1],[15,-290,0,330,0,0,255,0],[26,-290,-100,300,0,0,255,1],[16,290,0,330,0,0,255,0],[24,290,-120,300,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[15,0,0,330,0,0,200,0],[19,0,0,300,0,0,200,1],[16,-290,0,330,0,0,200,0],[17,-290,-100,300,0,0,200,1],[14,290,0,330,0,0,200,0],[25,290,-120,300,0,0,200,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[16,0,0,330,0,0,128,0],[20,0,0,300,0,0,128,1],[14,-290,0,330,0,0,128,0],[18,-290,-100,300,0,0,128,1],[15,290,0,330,0,0,128,0],[26,290,-120,300,0,0,128,1]]],"name":"水/全体1","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Water5","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Liquid","pan":0,"pitch":150,"volume":90}},{"flashColor":[153,204,255,153],"flashDuration":5,"flashScope":2,"frame":11,"se":{"name":"Water4","pan":0,"pitch":90,"volume":90}},{"flashColor":[153,204,255,238],"flashDuration":10,"flashScope":1,"frame":13,"se":{"name":"Water1","pan":0,"pitch":100,"volume":90}}]}, +{"id":84,"animation1Hue":0,"animation1Name":"Water4","animation2Hue":0,"animation2Name":"","frames":[[[3,-360,-96,300,0,0,100,0],[3,0,-96,300,0,0,100,0],[3,360,-96,300,0,0,100,0]],[[0,-360,-96,300,0,0,150,0],[0,360,-96,300,0,0,150,0],[0,0,-96,300,0,0,150,0]],[[1,-360,-96,300,0,0,200,0],[1,360,-96,300,0,0,200,0],[1,0,-96,300,0,0,200,0]],[[2,-360,-96,300,0,0,200,0],[2,360,-96,300,0,0,200,0],[2,0,-96,300,0,0,200,0]],[[3,-360,-96,300,0,0,200,0],[3,360,-96,300,0,0,200,0],[3,0,-96,300,0,0,200,0]],[[0,-360,-96,300,0,0,200,0],[0,360,-96,300,0,0,200,0],[0,0,-96,300,0,0,200,0]],[[1,-360,-96,300,0,0,200,0],[1,360,-96,300,0,0,200,0],[1,0,-96,300,0,0,200,0]],[[2,-360,-96,300,0,0,200,0],[2,360,-96,300,0,0,200,0],[2,0,-96,300,0,0,200,0]],[[3,-360,-96,300,0,0,200,0],[3,360,-96,300,0,0,200,0],[3,0,-96,300,0,0,200,0]],[[0,-360,-96,300,0,0,200,0],[0,360,-96,300,0,0,200,0],[0,0,-96,300,0,0,200,0]],[[1,-360,-96,300,0,0,200,0],[1,360,-96,300,0,0,200,0],[1,0,-96,300,0,0,200,0]],[[2,-360,-96,300,0,0,200,0],[2,360,-96,300,0,0,200,0],[2,0,-96,300,0,0,200,0]],[[3,-360,-96,300,0,0,200,0],[3,360,-96,300,0,0,200,0],[3,0,-96,300,0,0,200,0]],[[0,-360,-96,300,0,0,180,0],[0,360,-96,300,0,0,180,0],[0,0,-96,300,0,0,180,0]],[[1,-360,-96,300,0,0,120,0],[1,360,-96,300,0,0,120,0],[1,0,-96,300,0,0,120,0]]],"name":"水/全体2","position":3,"timings":[{"flashColor":[221,238,238,170],"flashDuration":10,"flashScope":2,"frame":0,"se":{"name":"Water1","pan":0,"pitch":50,"volume":100}},{"flashColor":[187,255,255,255],"flashDuration":5,"flashScope":1,"frame":2,"se":null},{"flashColor":[187,255,255,255],"flashDuration":5,"flashScope":1,"frame":6,"se":null},{"flashColor":[187,255,255,255],"flashDuration":5,"flashScope":1,"frame":9,"se":null}]}, +{"id":85,"animation1Hue":180,"animation1Name":"PreSpecial1","animation2Hue":0,"animation2Name":"Water5","frames":[[[0,0,-72,330,0,0,255,1]],[[1,0,-72,330,0,0,255,1]],[[2,0,-72,330,0,0,255,1]],[[3,0,-72,330,0,0,255,1]],[[4,0,-72,330,0,0,255,1],[17,0,-72,390,0,0,150,1]],[[5,0,-72,330,0,0,255,1],[18,0,-72,345,0,0,255,1]],[[6,0,-72,330,0,0,255,1],[19,0,-72,345,0,0,255,1]],[[20,0,-72,345,0,0,255,1],[7,0,-72,330,0,0,255,1]],[[8,0,-72,330,0,0,255,1],[22,0,-84,420,0,0,255,1]],[[9,0,-72,330,0,0,255,1],[23,0,-84,420,0,0,255,1]],[[10,0,-72,330,0,0,255,1],[24,0,-84,420,0,0,255,1]],[[11,0,-72,330,0,0,255,1],[25,0,-84,450,0,0,255,1],[100,0,-96,240,0,0,50,0]],[[12,0,-72,330,0,0,255,1],[20,0,-84,300,0,0,200,1],[22,0,-84,375,0,0,255,1],[26,0,-84,450,0,0,255,1],[100,0,-96,240,0,0,100,0]],[[13,0,-72,330,0,0,255,1],[26,0,-84,465,0,0,200,1],[100,0,-96,240,0,0,150,0]],[[14,0,-72,330,0,0,255,1],[26,0,-84,480,0,0,180,1],[100,0,-96,240,0,0,150,0]],[[15,0,-72,330,0,0,255,1],[26,0,-84,487,0,0,150,1],[100,0,-96,240,0,0,150,0]],[[16,0,-72,330,0,0,255,1],[26,0,-84,495,0,0,120,1],[100,0,-96,240,0,0,150,0]],[[26,0,-84,502,0,0,100,1],[16,0,-72,330,0,0,200,1],[100,0,-96,240,0,0,150,0]],[[16,0,-72,330,0,0,150,1],[26,0,-84,502,0,0,70,1],[100,0,-96,240,0,0,140,0]],[[16,0,-72,330,0,0,100,1],[26,0,-84,502,0,0,40,1],[100,0,-96,240,0,0,130,0]],[[16,0,-72,330,0,0,50,1],[100,0,-96,240,0,0,120,0]],[[-1,0,-72,330,0,0,120,1],[100,0,-96,240,0,0,100,0]],[[100,0,-96,240,0,0,80,0]],[[100,0,-96,240,0,0,60,0],[101,0,96,427,0,0,255,0]],[[100,0,-96,240,0,0,40,0],[102,0,96,427,0,0,255,0]],[[100,0,-96,240,0,0,20,0],[103,0,96,427,0,0,255,0]],[[104,0,96,427,0,0,255,0]],[[105,0,96,427,0,0,255,0]],[[106,0,96,427,0,0,255,0]],[[107,0,96,427,0,0,255,0]],[[108,0,96,427,0,0,255,0]],[[109,0,96,427,0,0,255,0]],[[110,0,96,427,0,0,255,0]],[[111,0,96,427,0,0,255,0]],[[112,0,96,427,0,0,255,0]],[[113,0,96,427,0,0,255,0]],[[114,0,96,427,0,0,255,0]],[[115,0,96,427,0,0,255,0]],[[116,0,96,427,0,0,255,0]],[[117,0,96,427,0,0,255,0]],[[118,0,96,427,0,0,255,0]],[[109,0,96,427,0,0,255,0]],[[111,0,96,427,0,0,255,0]],[[113,0,96,427,0,0,255,0]],[[115,0,96,427,0,0,255,0]],[[117,0,96,427,0,0,255,0]],[[109,0,96,427,0,0,255,0]],[[111,0,96,427,0,0,255,0]],[[113,0,96,427,0,0,255,0]],[[115,0,96,427,0,0,255,0]],[[116,0,96,427,0,0,200,0]],[[117,0,96,427,0,0,150,0]],[[118,0,96,427,0,0,80,0]]],"name":"水/全体3","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind2","pan":0,"pitch":70,"volume":65}},{"flashColor":[255,34,0,136],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic1","pan":0,"pitch":100,"volume":80}},{"flashColor":[68,170,255,153],"flashDuration":5,"flashScope":2,"frame":9,"se":{"name":"Wind1","pan":0,"pitch":120,"volume":75}},{"flashColor":[170,204,255,204],"flashDuration":5,"flashScope":2,"frame":23,"se":{"name":"Water1","pan":0,"pitch":50,"volume":90}},{"flashColor":[170,204,255,204],"flashDuration":5,"flashScope":1,"frame":24,"se":{"name":"Water2","pan":0,"pitch":65,"volume":90}},{"flashColor":[170,204,255,204],"flashDuration":5,"flashScope":1,"frame":29,"se":null},{"flashColor":[170,204,255,204],"flashDuration":5,"flashScope":1,"frame":34,"se":null},{"flashColor":[170,204,255,204],"flashDuration":5,"flashScope":1,"frame":39,"se":null},{"flashColor":[170,204,255,204],"flashDuration":5,"flashScope":1,"frame":44,"se":null}]}, +{"id":86,"animation1Hue":0,"animation1Name":"Earth1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,350,0,0,255,0],[-1,0,0,0,0,0,0,0],[8,0,0,230,0,0,0,0]],[[1,0,0,350,0,0,255,0],[-1,0,0,100,0,0,255,1],[8,0,0,230,0,0,0,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[2,0,0,350,0,0,255,0],[-1,0,0,100,0,0,255,1],[8,0,0,230,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[3,0,0,350,0,0,255,0],[-1,0,0,100,0,0,255,1],[9,0,0,230,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,0,350,0,0,255,0],[-1,0,0,100,0,0,255,1],[10,0,0,230,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,0,350,0,0,255,0],[-1,0,0,100,0,0,255,1],[11,0,0,230,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[6,0,0,350,0,0,255,0],[-1,0,0,100,0,0,255,1],[12,0,0,230,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[7,0,0,350,0,0,255,0],[-1,0,0,0,0,0,0,0],[13,0,0,230,0,0,255,0]],[[7,0,0,350,0,0,0,0],[-1,0,0,0,0,0,0,0],[14,0,0,230,0,0,255,0]],[[7,0,0,350,0,0,0,0],[-1,0,0,0,0,0,0,0],[15,0,0,230,0,0,255,0]],[[7,0,0,350,0,0,0,0],[-1,0,0,0,0,0,0,0],[16,0,0,230,0,0,255,0]],[[7,0,0,350,0,0,0,0],[-1,0,0,0,0,0,0,0],[16,0,0,230,0,0,255,0]],[[7,0,-2.5,350,0,0,0,0],[6,0,0,300,0,0,255,0],[17,0,0,250,0,0,255,0],[16,0,0,230,0,0,255,0]],[[7,0,0,350,0,0,0,0],[5,0,0,300,0,0,255,0],[18,0,0,250,0,0,255,0],[16,0,0,207,0,0,203,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[7,0,0,350,0,0,0,0],[4,0,0,300,0,0,255,0],[19,0,0,250,0,0,255,0],[-1,-22.5,25,183,0,0,152,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[7,0,0,350,0,0,0,0],[3,0,0,300,0,0,255,0],[20,0,0,250,0,0,255,0]],[[7,0,0,350,0,0,0,0],[2,0,0,300,0,0,255,0],[21,0,0,250,0,0,255,0],[16,0,0,360,0,0,0,0]],[[7,0,0,350,0,0,0,0],[1,0,0,300,0,0,200,0],[22,0,0,260,0,0,255,0],[16,0,0,360,0,0,0,0]],[[7,0,0,350,0,0,0,0],[0,0,0,300,0,0,100,0],[23,0,0,270,0,0,255,0],[16,0,0,360,0,0,0,0]],[[7,0,0,350,0,0,0,0],[24,0,0,280,0,0,255,0],[16,0,0,360,0,0,0,0]]],"name":"土/単体1","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Earth1","pan":0,"pitch":150,"volume":90}},{"flashColor":[204,136,68,153],"flashDuration":2,"flashScope":1,"frame":5,"se":{"name":"Break","pan":0,"pitch":100,"volume":90}},{"flashColor":[204,136,68,153],"flashDuration":2,"flashScope":1,"frame":7,"se":null},{"flashColor":[204,136,68,153],"flashDuration":4,"flashScope":1,"frame":9,"se":{"name":"Explosion1","pan":0,"pitch":150,"volume":90}},{"flashColor":[204,136,68,153],"flashDuration":5,"flashScope":1,"frame":12,"se":null},{"flashColor":[221,170,102,204],"flashDuration":5,"flashScope":2,"frame":12,"se":null}]}, +{"id":87,"animation1Hue":0,"animation1Name":"Earth3","animation2Hue":0,"animation2Name":"","frames":[[[0,12,96,375,0,0,255,0]],[[0,0,-144,300,0,0,255,0]],[[0,0,-108,240,0,0,255,0],[1,0,-108,240,0,0,100,1]],[[1,0,-72,210,0,0,255,0]],[[1,0,-24,180,0,0,255,0]],[[2,0,24,240,0,0,255,0]],[[3,0,24,225,0,0,255,0]],[[4,0,24,240,0,0,255,0]],[[5,0,24,247,0,0,255,0]],[[6,0,24,252,0,0,180,0]],[[6,0,24,255,0,0,100,0]],[]],"name":"土/単体2","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder2","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,153,0,255],"flashDuration":5,"flashScope":1,"frame":5,"se":{"name":"Earth5","pan":0,"pitch":50,"volume":100}},{"flashColor":[204,153,34,187],"flashDuration":3,"flashScope":2,"frame":6,"se":null}]}, +{"id":88,"animation1Hue":0,"animation1Name":"Earth2","animation2Hue":0,"animation2Name":"","frames":[[[13,-180,-90,180,0,1,100,0],[-1,-355,115,180,0,1,255,0],[-1,-240,187.5,180,0,1,0,0],[13,175,-115,180,0,1,100,0],[-1,-25,75,180,0,1,255,0],[-1,207.5,95,180,0,1,0,0],[13,-320,-10,200,0,0,100,0],[-1,-408,147.5,200,0,0,255,0],[-1,-382.5,130,200,0,0,0,0],[13,375,-10,200,0,0,100,0],[-1,97.5,227.5,200,0,0,255,0],[-1,32.5,167.5,200,0,0,0,0],[13,30,25,220,0,0,100,0],[-1,-145,240,220,0,0,255,0],[-1,-97.5,200,220,0,0,0,0],[-1,0,30,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[13,-180,-90,180,0,1,126,0],[-1,-355,115,180,0,1,255,0],[-1,-240,187.5,180,0,1,0,0],[13,175,-115,180,0,1,126,0],[-1,-25,75,180,0,1,255,0],[-1,207.5,95,180,0,1,0,0],[13,-320,-10,200,0,0,126,0],[-1,-408,147.5,200,0,0,255,0],[-1,-382.5,130,200,0,0,0,0],[13,375,-10,200,0,0,126,0],[-1,97.5,227.5,200,0,0,255,0],[-1,32.5,167.5,200,0,0,0,0],[13,30,25,220,0,0,126,0],[-1,-145,240,220,0,0,255,0],[-1,-97.5,200,220,0,0,0,0],[-1,0,30,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[13,-180,-90,180,0,1,152,0],[-1,-355,115,180,0,1,255,0],[-1,-240,187.5,180,0,1,0,0],[13,175,-115,180,0,1,152,0],[-1,-25,75,180,0,1,255,0],[-1,207.5,95,180,0,1,0,0],[13,-320,-10,200,0,0,152,0],[-1,-408,147.5,200,0,0,255,0],[-1,-382.5,130,200,0,0,0,0],[13,375,-10,200,0,0,152,0],[-1,97.5,227.5,200,0,0,255,0],[-1,32.5,167.5,200,0,0,0,0],[13,30,25,220,0,0,152,0],[-1,-145,240,220,0,0,255,0],[-1,-97.5,200,220,0,0,0,0],[-1,0,30,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[13,-180,-90,180,0,1,177,0],[-1,-272.5,105,180,0,1,255,0],[-1,-272.5,77.5,180,0,1,0,0],[13,175,-115,180,0,1,177,0],[-1,2.5,62.5,180,0,1,255,0],[-1,7.5,80,180,0,1,0,0],[13,-320,-10,200,0,0,177,0],[-1,-395,142.5,200,0,0,255,0],[-1,-390,95,200,0,0,0,0],[13,375,-10,200,0,0,177,0],[-1,225,162.5,200,0,0,255,0],[-1,232.5,192.5,200,0,0,0,0],[13,30,25,220,0,0,177,0],[-1,-82.5,207.5,220,0,0,255,0],[-1,-102.5,220,220,0,0,0,0],[-1,0,30,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[13,-180,-90,180,0,1,203,0],[-1,-372.5,237.5,180,0,1,255,0],[-1,-322.5,292,180,0,1,0,0],[13,175,-115,180,0,1,203,0],[-1,7.5,187.5,180,0,1,255,0],[-1,-80,265,180,0,1,0,0],[13,-320,-10,200,0,0,203,0],[-1,-408,232.5,200,0,0,255,0],[-1,-357.5,155,200,0,0,0,0],[13,375,-10,200,0,0,203,0],[-1,177.5,245,200,0,0,255,0],[-1,147.5,260,200,0,0,0,0],[13,30,25,220,0,0,203,0],[-1,-115,257.5,220,0,0,255,0],[-1,-97.5,230,220,0,0,0,0],[-1,0,30,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[13,-180,-90,180,0,1,255,0],[-1,-182.5,-90,180,0,1,255,0],[-1,-182.5,-90,180,0,1,0,0],[13,175,-115,180,0,1,255,0],[-1,175,-115,180,0,1,255,0],[-1,177.5,-117.5,180,0,1,0,0],[13,-320,-10,200,0,0,255,0],[-1,-355,45,200,0,0,255,0],[-1,-395,100,200,0,0,0,0],[13,375,-10,200,0,0,255,0],[-1,300,72.5,200,0,0,255,0],[-1,262.5,105,200,0,0,0,0],[13,30,25,220,0,0,255,0],[-1,-32.5,87.5,220,0,0,255,0],[-1,-50,102.5,220,0,0,0,0],[-1,0,30,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[16,-180,-90,180,0,1,255,0],[9,-180,-90,180,0,1,255,0],[2,-180,-90,180,0,1,255,0],[13,175,-115,180,0,1,255,0],[7,175,-115,180,0,1,255,0],[2,175,-115,180,0,1,0,0],[13,-320,-10,200,0,0,255,0],[7,-320,-10,200,0,0,255,0],[2,-320,-10,200,0,0,0,0],[13,375,-10,200,0,0,255,0],[7,375,-10,200,0,0,255,0],[2,375,-10,200,0,0,0,0],[13,30,25,220,0,0,255,0],[7,30,25,220,0,0,255,0],[2,30,25,220,0,0,0,0]],[[17,-180,-90,180,0,1,255,0],[10,-180,-90,180,0,1,255,0],[3,-180,-90,180,0,1,255,0],[16,175,-115,180,0,1,255,0],[9,175,-115,180,0,1,255,0],[2,175,-115,180,0,1,255,0],[13,-320,-10,200,0,0,255,0],[7,-320,-10,200,0,0,255,0],[2,-320,-10,200,0,0,0,0],[13,375,-10,200,0,0,255,0],[7,375,-10,200,0,0,255,0],[2,375,-10,200,0,0,0,0],[13,30,25,220,0,0,255,0],[7,30,25,220,0,0,255,0],[2,30,25,220,0,0,0,0]],[[17,-180,-90,180,0,1,255,0],[11,-180,-90,180,0,1,255,0],[4,-180,-90,180,0,1,255,0],[17,175,-115,180,0,1,255,0],[10,175,-115,180,0,1,255,0],[3,175,-115,180,0,1,255,0],[16,-320,-10,200,0,0,255,0],[9,-320,-10,200,0,0,255,0],[2,-320,-10,200,0,0,255,0],[13,375,-10,200,0,0,255,0],[7,375,-10,200,0,0,255,0],[2,375,-10,200,0,0,0,0],[13,30,25,220,0,0,255,0],[7,30,25,220,0,0,255,0],[2,30,25,220,0,0,0,0]],[[17,-180,-90,180,0,1,255,0],[12,-180,-90,180,0,1,255,0],[5,-180,-90,180,0,1,255,0],[17,175,-115,180,0,1,255,0],[11,175,-115,180,0,1,255,0],[4,175,-115,180,0,1,255,0],[17,-320,-10,200,0,0,255,0],[10,-320,-10,200,0,0,255,0],[3,-320,-10,200,0,0,255,0],[16,375,-10,200,0,0,255,0],[9,375,-10,200,0,0,255,0],[2,375,-10,200,0,0,255,0],[13,30,25,220,0,0,255,0],[7,30,25,220,0,0,255,0],[2,30,25,220,0,0,0,0]],[[17,-180,-90,180,0,1,255,0],[12,-180,-90,180,0,1,0,0],[6,-180,-90,180,0,1,255,0],[17,175,-115,180,0,1,255,0],[12,175,-115,180,0,1,255,0],[5,175,-115,180,0,1,255,0],[17,-320,-10,200,0,0,255,0],[11,-320,-10,200,0,0,255,0],[4,-320,-10,200,0,0,255,0],[17,375,-10,200,0,0,255,0],[10,375,-10,200,0,0,255,0],[3,375,-10,200,0,0,255,0],[16,30,25,220,0,0,255,0],[9,30,25,220,0,0,255,0],[2,30,25,220,0,0,255,0]],[[17,-180,-90,180,0,1,255,0],[12,-180,-90,180,0,1,0,0],[6,-180,-90,180,0,1,255,0],[17,175,-115,180,0,1,255,0],[12,175,-115,180,0,1,0,0],[6,175,-115,180,0,1,255,0],[17,-320,-10,200,0,0,255,0],[12,-320,-10,200,0,0,255,0],[5,-320,-10,200,0,0,255,0],[17,375,-10,200,0,0,255,0],[11,375,-10,200,0,0,255,0],[4,375,-10,200,0,0,255,0],[17,30,25,220,0,0,255,0],[10,30,25,220,0,0,255,0],[3,30,25,220,0,0,255,0]],[[17,-180,-90,180,0,1,255,0],[12,-180,-90,180,0,1,0,0],[6,-180,-90,180,0,1,255,0],[17,175,-115,180,0,1,255,0],[12,175,-115,180,0,1,0,0],[6,175,-115,180,0,1,255,0],[17,-320,-10,200,0,0,255,0],[12,-320,-10,200,0,0,0,0],[6,-320,-10,200,0,0,255,0],[17,375,-10,200,0,0,255,0],[12,375,-10,200,0,0,255,0],[5,375,-10,200,0,0,255,0],[17,30,25,220,0,0,255,0],[11,30,25,220,0,0,255,0],[4,30,25,220,0,0,255,0]],[[17,-180,-90,180,0,1,255,0],[12,-180,-90,180,0,1,0,0],[6,-180,-90,180,0,1,255,0],[17,175,-115,180,0,1,255,0],[12,175,-115,180,0,1,0,0],[6,175,-115,180,0,1,255,0],[17,-320,-10,200,0,0,255,0],[12,-320,-10,200,0,0,0,0],[6,-320,-10,200,0,0,255,0],[17,375,-10,200,0,0,255,0],[12,375,-10,200,0,0,0,0],[6,375,-10,200,0,0,255,0],[17,30,25,220,0,0,255,0],[12,30,25,220,0,0,255,0],[5,30,25,220,0,0,255,0]],[[17,-180,-90,180,0,1,255,0],[12,-180,-90,180,0,1,0,0],[6,-180,-90,180,0,1,255,0],[17,175,-115,180,0,1,255,0],[12,175,-115,180,0,1,0,0],[6,175,-115,180,0,1,255,0],[17,-320,-10,200,0,0,255,0],[12,-320,-10,200,0,0,0,0],[6,-320,-10,200,0,0,255,0],[17,375,-10,200,0,0,255,0],[12,375,-10,200,0,0,0,0],[6,375,-10,200,0,0,255,0],[17,30,25,220,0,0,255,0],[12,30,25,220,0,0,0,0],[6,30,25,220,0,0,255,0]],[[17,-180,-90,180,0,1,255,0],[12,-180,-90,180,0,1,0,0],[-1,-282.5,32.5,180,0,1,255,0],[17,175,-115,180,0,1,255,0],[12,175,-115,180,0,1,0,0],[-1,15,-30,180,0,1,255,0],[17,-320,-10,200,0,0,255,0],[12,-320,-10,200,0,0,0,0],[-1,-407.5,67.5,200,0,0,255,0],[17,375,-10,200,0,0,255,0],[12,375,-10,200,0,0,0,0],[-1,265,155,200,0,0,255,0],[17,30,25,220,0,0,255,0],[12,30,25,220,0,0,0,0]],[[17,-180,-90,180,0,1,255,0],[12,-180,-90,180,0,1,0,0],[-1,-282.5,32.5,180,0,1,255,0],[17,175,-115,180,0,1,255,0],[12,175,-115,180,0,1,0,0],[-1,15,-30,180,0,1,255,0],[17,-320,-10,200,0,0,255,0],[12,-320,-10,200,0,0,0,0],[-1,-407.5,67.5,200,0,0,255,0],[17,375,-10,200,0,0,255,0],[12,375,-10,200,0,0,0,0],[-1,265,155,200,0,0,255,0],[17,30,25,220,0,0,255,0],[12,30,25,220,0,0,0,0]],[[17,-180,-90,180,0,1,203,0],[12,-180,-90,180,0,1,33,0],[-1,-282.5,32.5,180,0,1,255,0],[17,175,-115,180,0,1,203,0],[12,175,-115,180,0,1,33,0],[-1,15,-30,180,0,1,255,0],[17,-320,-10,200,0,0,203,0],[12,-320,-10,200,0,0,33,0],[-1,-407.5,67.5,200,0,0,255,0],[17,375,-10,200,0,0,203,0],[12,375,-10,200,0,0,33,0],[-1,265,155,200,0,0,255,0],[17,30,25,220,0,0,203,0],[12,30,25,220,0,0,33,0],[-1,0,30,100,0,0,255,1],[-1,0,30,100,0,0,255,1]],[[17,-180,-90,180,0,1,152,0],[12,-180,-90,180,0,1,67,0],[-1,-282.5,32.5,180,0,1,255,0],[17,175,-115,180,0,1,152,0],[12,175,-115,180,0,1,67,0],[-1,15,-30,180,0,1,255,0],[17,-320,-10,200,0,0,152,0],[12,-320,-10,200,0,0,67,0],[-1,-407.5,67.5,200,0,0,255,0],[17,375,-10,200,0,0,152,0],[12,375,-10,200,0,0,67,0],[-1,265,155,200,0,0,255,0],[17,30,25,220,0,0,152,0],[12,30,25,220,0,0,67,0],[-1,0,30,100,0,0,255,1],[-1,0,30,100,0,0,255,1]],[[17,-180,-90,180,0,1,100,0],[12,-180,-90,180,0,1,100,0],[-1,-282.5,32.5,180,0,1,255,0],[17,175,-115,180,0,1,100,0],[12,175,-115,180,0,1,100,0],[-1,15,-30,180,0,1,255,0],[17,-320,-10,200,0,0,100,0],[12,-320,-10,200,0,0,100,0],[-1,-407.5,67.5,200,0,0,255,0],[17,375,-10,200,0,0,100,0],[12,375,-10,200,0,0,100,0],[-1,265,155,200,0,0,255,0],[17,30,25,220,0,0,100,0],[12,30,25,220,0,0,100,0]]],"name":"土/全体1","position":3,"timings":[{"flashColor":[255,221,170,170],"flashDuration":3,"flashScope":1,"frame":5,"se":{"name":"Earth1","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,221,170,170],"flashDuration":5,"flashScope":2,"frame":5,"se":{"name":"Fire3","pan":0,"pitch":50,"volume":100}},{"flashColor":[255,221,170,170],"flashDuration":3,"flashScope":1,"frame":7,"se":{"name":"Earth1","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,221,170,170],"flashDuration":3,"flashScope":1,"frame":9,"se":{"name":"Explosion1","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":10,"se":{"name":"Earth1","pan":0,"pitch":80,"volume":90}}]}, +{"id":89,"animation1Hue":0,"animation1Name":"Earth4","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-144,300,0,0,255,0]],[[0,-228,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,1],[7,-204,-24,225,0,0,255,0],[7,300,48,120,0,0,255,0]],[[0,252,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,0],[7,-204,-144,225,0,0,255,0],[7,300,-60,120,0,0,255,0],[7,408,-48,225,0,0,255,0]],[[1,252,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,0],[1,252,-144,300,0,0,255,1],[1,-228,-144,300,0,0,255,1],[1,0,-144,300,0,0,255,0],[7,-204,-156,225,0,0,255,0],[7,300,-84,120,0,0,255,0],[1,0,-144,300,0,0,255,1],[2,-12,-72,225,0,0,255,0],[7,408,-72,225,0,0,255,0]],[[1,-228,-144,300,0,0,255,0],[1,252,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,0],[7,-204,-168,225,0,0,180,0],[7,300,-96,120,0,0,255,0],[3,-12,-72,225,0,0,255,0],[7,408,-84,225,0,0,255,0],[-1,0,-96,30,0,0,0,0],[-1,0,-96,30,0,0,0,0],[-1,0,-96,30,0,0,0,0],[-1,0,-96,30,0,0,0,0],[-1,0,-96,30,0,0,0,0],[-1,0,-96,30,0,0,0,0],[-1,0,-96,30,0,0,0,0],[-1,0,-96,30,0,0,0,0],[-1,0,-96,30,0,0,0,0]],[[1,252,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,0],[7,300,-108,120,0,0,255,0],[1,252,-144,300,0,0,255,1],[1,0,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,1],[1,0,-144,300,0,0,255,1],[4,-12,-72,225,0,0,255,0],[4,-12,-72,225,0,0,200,1],[2,-324,-48,195,0,0,255,0],[7,168,72,225,0,0,255,0],[7,408,-96,225,0,0,150,0],[2,-324,-48,195,0,0,200,1]],[[1,252,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,0],[5,-12,-72,225,0,0,255,0],[3,-324,-48,195,0,0,255,0],[7,168,-24,225,0,0,255,0],[7,-408,0,225,0,0,255,0]],[[1,252,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,1],[1,252,-144,300,0,0,255,1],[1,0,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,1],[6,-12,-72,225,0,0,255,0],[4,-324,-48,195,0,0,255,0],[4,-324,-48,195,0,0,100,1],[2,300,-48,195,0,0,255,0],[2,300,-48,195,0,0,100,1],[7,168,-48,225,0,0,255,0],[7,-252,0,120,0,0,255,0],[7,-408,-96,225,0,0,255,0],[6,-12,-72,225,0,0,100,1]],[[1,252,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,0],[6,-12,-72,225,0,0,255,0],[5,-324,-48,195,0,0,255,0],[3,300,-48,195,0,0,255,0],[7,168,-60,225,0,0,255,0],[7,-252,-60,120,0,0,255,0],[7,-408,-108,225,0,0,255,0],[7,408,36,150,0,0,255,0]],[[1,252,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,1],[1,252,-144,300,0,0,255,1],[1,0,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,1],[6,-12,-72,225,0,0,255,0],[6,-324,-48,195,0,0,255,0],[6,-324,-48,195,0,0,100,1],[6,-12,-72,225,0,0,100,1],[4,300,-48,195,0,0,255,0],[4,300,-48,195,0,0,100,1],[7,168,-72,225,0,0,150,0],[7,-252,-84,120,0,0,255,0],[7,-408,-120,225,0,0,150,0],[7,408,0,150,0,0,255,0]],[[1,252,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,0],[6,-12,-72,225,0,0,180,0],[6,-324,-48,195,0,0,255,0],[5,300,-48,195,0,0,255,0],[7,-252,-96,120,0,0,255,0],[7,408,-12,150,0,0,255,0]],[[1,-228,-144,300,0,0,255,0],[1,252,-144,300,0,0,255,0],[1,252,-144,300,0,0,200,1],[1,-228,-144,300,0,0,200,1],[1,0,-144,300,0,0,255,0],[1,0,-144,300,0,0,200,1],[6,-12,-72,225,0,0,100,0],[6,-324,-48,195,0,0,255,0],[6,300,-48,195,0,0,255,0],[7,-252,-108,120,0,0,255,0],[7,408,-24,150,0,0,150,0]],[[1,-228,-144,300,0,0,255,0],[1,252,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,0],[6,-324,-48,195,0,0,180,0],[6,300,-48,195,0,0,255,0],[7,-252,-120,120,0,0,150,0]],[[1,-228,-144,300,0,0,255,0],[1,252,-144,300,0,0,255,0],[1,252,-144,300,0,0,150,1],[1,-228,-144,300,0,0,150,1],[1,0,-144,300,0,0,255,0],[1,0,-144,300,0,0,150,1],[6,-324,-48,195,0,0,100,0],[6,300,-48,195,0,0,255,0]],[[1,252,-144,300,0,0,255,0],[1,-228,-144,300,0,0,255,0],[1,0,-144,300,0,0,255,0],[6,300,-48,195,0,0,180,0]],[[6,300,-48,195,0,0,100,0],[1,252,-144,300,0,0,150,0],[1,-228,-144,300,0,0,150,0],[1,0,-144,300,0,0,150,0]],[[6,300,-48,195,0,0,80,0],[1,252,-144,300,0,0,80,0],[1,-228,-144,300,0,0,80,0],[1,0,-144,300,0,0,80,0]]],"name":"土/全体2","position":3,"timings":[{"flashColor":[221,102,0,170],"flashDuration":3,"flashScope":2,"frame":0,"se":{"name":"Earth4","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,204,68,119],"flashDuration":1,"flashScope":1,"frame":1,"se":{"name":"Earth1","pan":0,"pitch":100,"volume":100}},{"flashColor":[204,136,34,221],"flashDuration":5,"flashScope":2,"frame":3,"se":{"name":"Earth5","pan":0,"pitch":100,"volume":100}},{"conditions":1,"flashColor":[255,170,51,102],"flashDuration":2,"flashScope":1,"frame":3,"se":null},{"flashColor":[255,170,34,119],"flashDuration":2,"flashScope":1,"frame":5,"se":null},{"conditions":1,"flashColor":[255,170,136,119],"flashDuration":2,"flashScope":1,"frame":7,"se":null},{"conditions":1,"flashColor":[255,170,136,85],"flashDuration":5,"flashScope":1,"frame":10,"se":null}]}, +{"id":90,"animation1Hue":350,"animation1Name":"PreSpecial1","animation2Hue":0,"animation2Name":"Earth5","frames":[[[0,0,-72,330,0,0,255,1]],[[1,0,-72,330,0,0,255,1]],[[2,0,-72,330,0,0,255,1]],[[3,0,-72,330,0,0,255,1]],[[4,0,-72,330,0,0,255,1],[17,0,-72,390,0,0,150,1]],[[5,0,-72,330,0,0,255,1],[18,0,-72,345,0,0,255,1]],[[6,0,-72,330,0,0,255,1],[19,0,-72,345,0,0,255,1]],[[20,0,-72,345,0,0,255,1],[7,0,-72,330,0,0,255,1]],[[8,0,-72,330,0,0,255,1],[22,0,-84,420,0,0,255,1]],[[9,0,-72,330,0,0,255,1],[23,0,-84,420,0,0,255,1]],[[10,0,-72,330,0,0,255,1],[24,0,-84,420,0,0,255,1]],[[11,0,-72,330,0,0,255,1],[25,0,-84,450,0,0,255,1],[100,24,-84,300,0,0,50,0]],[[12,0,-72,330,0,0,255,1],[20,0,-84,300,0,0,200,1],[22,0,-84,375,0,0,255,1],[26,0,-84,450,0,0,255,1],[100,24,-84,300,0,0,100,0]],[[13,0,-72,330,0,0,255,1],[26,0,-84,465,0,0,200,1],[100,24,-84,300,0,0,150,0]],[[14,0,-72,330,0,0,255,1],[26,0,-84,480,0,0,180,1],[100,24,-84,300,0,0,150,0]],[[15,0,-72,330,0,0,255,1],[26,0,-84,487,0,0,150,1],[100,24,-84,300,0,0,150,0]],[[16,0,-72,330,0,0,255,1],[26,0,-84,495,0,0,120,1],[100,24,-84,300,0,0,150,0]],[[26,0,-84,502,0,0,100,1],[16,0,-72,330,0,0,200,1],[100,24,-84,300,0,0,150,0]],[[16,0,-72,330,0,0,150,1],[26,0,-84,502,0,0,70,1],[100,24,-84,300,0,0,140,0]],[[16,0,-72,330,0,0,100,1],[26,0,-84,502,0,0,40,1],[100,24,-84,300,0,0,130,0]],[[16,0,-72,330,0,0,50,1],[100,24,-84,300,0,0,120,0]],[[-1,0,-72,330,0,0,120,1],[100,24,-84,300,0,0,100,0]],[[100,24,-84,300,0,0,80,0]],[[100,24,-84,300,0,0,60,0]],[[100,24,-84,300,0,0,40,0]],[[100,24,-84,300,0,0,20,0],[101,0,-252,405,0,0,255,0]],[[101,0,-72,405,0,0,255,0]],[[102,0,12,405,0,0,255,0]],[[103,0,12,405,0,0,255,0]],[[104,0,12,405,0,0,255,0],[121,-192,-48,277,0,0,255,0]],[[105,0,12,405,0,0,255,0],[122,-192,-48,277,0,0,255,0]],[[106,0,12,405,0,0,255,0],[123,-192,-48,277,0,0,255,0],[121,276,-48,277,0,0,255,0]],[[107,0,12,405,0,0,255,0],[124,-192,-48,277,0,0,255,0],[122,276,-48,277,0,0,255,0]],[[108,0,12,405,0,0,255,0],[125,-192,-48,277,0,0,255,0],[123,276,-48,277,0,0,255,0]],[[109,0,12,405,0,0,255,0],[126,-192,-48,277,0,0,255,0],[124,276,-48,277,0,0,255,0]],[[110,0,12,405,0,0,255,0],[127,-192,-48,277,0,0,255,0],[125,276,-48,277,0,0,255,0]],[[111,0,12,405,0,0,255,0],[128,-192,-48,277,0,0,255,0],[126,276,-48,277,0,0,255,0]],[[112,0,12,405,0,0,255,0],[129,-192,-48,277,0,0,255,0],[127,276,-48,277,0,0,255,0]],[[113,0,12,405,0,0,255,0],[128,276,-48,277,0,0,255,0]],[[114,0,12,405,0,0,255,0],[129,276,-48,277,0,0,255,0]],[[115,0,12,405,0,0,255,0]],[[116,0,12,405,0,0,255,0]],[[117,0,12,405,0,0,255,0]],[[118,0,12,405,0,0,255,0]],[[119,0,12,405,0,0,255,0]],[[120,0,12,405,0,0,255,0]],[[101,0,12,405,0,0,255,0]],[[101,0,12,405,0,0,200,0]],[[101,0,12,405,0,0,150,0]],[[101,0,12,405,0,0,100,0]]],"name":"土/全体3","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind2","pan":0,"pitch":70,"volume":65}},{"flashColor":[255,34,0,136],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic1","pan":0,"pitch":100,"volume":80}},{"flashColor":[238,136,0,153],"flashDuration":5,"flashScope":2,"frame":9,"se":{"name":"Earth4","pan":0,"pitch":125,"volume":75}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":26,"se":{"name":"Damage4","pan":0,"pitch":50,"volume":100}},{"flashColor":[238,187,0,187],"flashDuration":5,"flashScope":1,"frame":27,"se":{"name":"Break","pan":0,"pitch":50,"volume":90}},{"flashColor":[238,187,0,187],"flashDuration":5,"flashScope":2,"frame":27,"se":{"name":"Earth1","pan":0,"pitch":100,"volume":90}},{"flashColor":[238,187,0,204],"flashDuration":5,"flashScope":1,"frame":33,"se":null},{"flashColor":[238,187,0,204],"flashDuration":5,"flashScope":1,"frame":37,"se":null}]}, +{"id":91,"animation1Hue":0,"animation1Name":"Wind1","animation2Hue":0,"animation2Name":"","frames":[[[-1,0,-150,0,0,0,0,0],[0,0,-180,260,0,0,180,0]],[[-1,0,-150,0,0,0,0,0],[1,0,-180,260,0,0,180,0]],[[-1,0,-150,0,0,0,0,0],[2,0,-180,260,0,0,180,0],[15,0,-200,240,0,0,180,0]],[[9,0,-180,230,0,0,180,0],[3,0,-180,260,0,0,180,0],[16,0,-200,240,0,0,255,1]],[[10,0,-180,230,0,0,180,0],[4,0,-180,260,0,0,180,0],[17,0,-200,240,0,0,255,1]],[[11,2.5,-180,230,0,0,180,0],[5,0,-180,260,0,0,180,0],[18,0,-200,240,0,0,255,1]],[[12,0,-180,230,0,0,180,0],[6,0,-180,260,0,0,180,0],[19,0,-200,240,0,0,255,1]],[[13,0,-180,230,0,0,180,0],[7,0,-180,260,0,0,180,0],[20,0,-200,240,0,0,255,1]],[[14,0,-180,230,0,0,180,0],[8,0,-180,260,0,0,180,0],[21,0,-200,240,0,0,255,1]],[[12,0,-180,230,0,0,180,0],[6,0,-180,260,0,0,180,0],[19,0,-200,240,0,0,255,1]],[[13,0,-180,230,0,0,180,0],[7,0,-180,260,0,0,180,0],[20,0,-200,240,0,0,255,1]],[[14,0,-180,230,0,0,180,0],[8,0,-180,260,0,0,180,0],[21,0,-200,240,0,0,255,1]],[[12,0,-180,230,0,0,180,0],[6,0,-180,260,0,0,180,0],[22,0,-200,240,0,0,255,1]],[[7,0,-180,260,0,0,180,0],[13,0,-180,230,0,0,180,0],[23,0,-198,240,0,0,255,1]],[[14,0,-180,230,0,0,180,0],[8,0,-180,260,0,0,180,0],[24,0,-198,240,0,0,255,1]]],"name":"風/単体1","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind3","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,221,187,187],"flashDuration":5,"flashScope":1,"frame":5,"se":null},{"flashColor":[255,221,187,119],"flashDuration":5,"flashScope":1,"frame":8,"se":null},{"flashColor":[255,221,187,153],"flashDuration":7,"flashScope":2,"frame":4,"se":null}]}, +{"id":92,"animation1Hue":0,"animation1Name":"Wind3","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,375,0,0,255,1]],[[1,0,0,375,0,0,255,1]],[[2,-12,0,345,0,0,255,1],[1,0,0,375,0,0,130,1]],[[3,-12,0,300,0,0,255,1],[8,0,12,225,0,0,255,1]],[[4,-12,0,375,0,0,255,1],[9,0,12,375,0,0,255,1]],[[5,-12,0,375,0,0,255,1],[10,0,12,390,0,0,255,1]],[[6,-12,0,375,0,0,255,1],[11,0,12,390,0,0,255,1]],[[7,-12,0,375,0,0,255,1],[12,0,12,390,0,0,255,1]],[[13,0,12,390,0,0,255,1]],[[13,0,12,405,0,0,200,1]],[[13,0,12,420,0,0,150,1]]],"name":"風/単体2","position":1,"timings":[{"flashColor":[204,221,102,187],"flashDuration":3,"flashScope":0,"frame":0,"se":{"name":"Wind5","pan":0,"pitch":100,"volume":100}},{"flashColor":[204,221,119,204],"flashDuration":3,"flashScope":1,"frame":2,"se":null},{"flashColor":[204,221,102,170],"flashDuration":3,"flashScope":2,"frame":3,"se":null}]}, +{"id":93,"animation1Hue":0,"animation1Name":"Wind2","animation2Hue":0,"animation2Name":"","frames":[[[0,-47.5,-160,400,-10,0,150,1],[0,50,0,340,0,1,0,1]],[[0,0,0,360,20,0,255,1],[0,50,0,340,0,1,0,1]],[[1,0,0,300,20,0,255,1],[0,50,0,340,0,1,0,1]],[[2,0,0,300,20,0,255,1],[0,50,0,340,0,1,255,1],[13,408,248,100,0,0,0,1],[13,408,280,100,0,0,0,1],[13,408,232.5,100,0,0,0,1],[13,-135,-175,260,90,0,255,0],[13,408,203,260,0,0,0,0],[13,408,203,260,0,0,0,0],[13,408,0,260,0,0,0,0],[13,408,203,260,0,0,0,0],[8,-135,-175,260,90,0,180,0]],[[3,0,0,300,20,0,255,1],[1,50,0,340,0,1,255,1],[0,-250,-150,380,0,0,255,1],[14,408,310.5,100,0,0,0,1],[14,408,215,100,0,0,0,1],[14,-135,-175,260,90,0,255,0],[13,290,-25,260,50,0,255,0],[14,408,245,260,0,0,0,0],[14,408,0,260,0,0,0,0],[14,408,245,260,0,0,0,0],[9,-135,-175,260,90,0,180,0],[8,290,-25,260,50,0,180,0]],[[4,0,0,300,20,0,255,1],[2,50,0,340,0,1,255,1],[1,-250,-150,380,0,0,255,1],[14,408,293,100,0,0,0,1],[14,408,195,100,0,0,0,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[13,-175,-100,260,0,0,255,0],[14,408,0,260,0,0,0,0],[14,408,245,260,0,0,0,0],[10,-135,-175,260,90,0,180,0],[9,290,-25,260,50,0,180,0],[8,-175,-100,260,0,0,180,0]],[[5,0,0,300,20,0,255,1],[3,50,0,340,0,1,255,1],[2,-250,-150,380,0,0,255,1],[0,-200,100,260,-20,0,255,1],[14,408,250,100,0,0,0,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[13,90,0,260,-30,0,255,0],[14,408,268,260,0,0,0,0],[11,-135,-175,260,90,0,180,0],[10,290,-25,260,50,0,180,0],[9,-175,-100,260,0,0,180,0],[8,90,0,260,-30,0,180,0]],[[6,0,0,300,20,0,255,1],[4,50,0,340,0,1,255,1],[3,-250,-150,380,0,0,255,1],[1,-200,100,260,-20,0,255,1],[0,350,-100,260,30,1,255,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[14,90,0,260,-30,0,255,0],[13,-290,50,260,-40,0,255,0],[12,-135,-175,260,90,0,180,0],[11,290,-25,260,50,0,180,0],[10,-175,-100,260,0,0,180,0],[9,90,0,260,-30,0,180,0],[8,-290,50,260,-40,0,180,0]],[[7,0,0,300,20,0,255,1],[5,50,0,340,0,1,255,1],[4,-250,-150,380,0,0,255,1],[2,-200,100,260,-20,0,255,1],[1,350,-100,260,30,1,255,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[14,90,0,260,-30,0,255,0],[14,-290,50,260,-40,0,255,0],[12,-135,-175,260,90,0,0,0],[12,290,-25,260,50,0,0,0],[11,-175,-100,260,0,0,180,0],[10,90,0,260,-30,0,180,0],[9,-290,50,260,-40,0,180,0]],[[6,-408,50,100,20,0,0,1],[6,50,0,340,0,1,255,1],[5,-250,-155,380,0,0,255,1],[3,-200,100,260,-20,0,255,1],[2,350,-100,260,30,1,255,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[14,90,0,260,-30,0,255,0],[14,-290,50,260,-40,0,255,0],[12,-135,-175,260,90,0,0,0],[12,290,-25,260,50,0,0,0],[12,-175,-100,260,0,0,180,0],[11,90,0,260,-30,0,180,0],[10,-290,50,260,-40,0,180,0]],[[7,-369,33,100,20,0,0,1],[7,50,0,340,0,1,255,1],[6,-250,-150,380,0,0,255,1],[4,-200,100,260,-20,0,255,1],[3,350,-100,260,30,1,255,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[14,90,0,260,-30,0,255,0],[14,-290,50,260,-40,0,255,0],[12,-135,-175,260,90,0,0,0],[12,290,-25,260,50,0,0,0],[12,-175,-100,260,0,0,0,0],[12,90,0,260,-30,0,180,0],[11,-290,50,260,-40,0,180,0]],[[7,-408,118,100,20,0,0,1],[7,-408,240,100,0,0,0,1],[7,-250,-150,380,0,0,255,1],[5,-200,100,260,-20,0,255,1],[4,347.5,-100,260,30,1,255,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[14,90,0,260,-30,0,255,0],[14,-290,50,260,-40,0,255,0],[12,-135,-175,260,90,0,0,0],[12,290,-25,260,50,0,0,0],[12,-175,-100,260,0,0,0,0],[12,90,0,260,-30,0,180,0],[12,-290,50,260,-40,0,180,0]],[[6,408,218,100,20,0,0,1],[6,133,195,100,0,0,0,1],[6,-177,-107,380,0,0,0,1],[6,-200,100,260,-20,0,255,1],[5,350,-100,260,30,1,255,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[14,90,0,260,-30,0,255,0],[14,-290,50,260,-40,0,255,0]],[[7,285,198,100,20,0,0,1],[7,308,148,100,0,0,0,1],[7,93,93,380,0,0,0,1],[7,-200,100,260,-20,0,255,1],[6,350,-100,260,30,1,255,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[14,90,0,260,-30,0,255,0],[14,-290,50,260,-40,0,255,0]],[[7,-408,222,100,20,0,0,1],[7,-376,243,100,0,0,0,1],[7,-208,258,380,0,0,0,1],[7,90,295,100,-20,0,0,1],[7,350,-100,260,30,1,255,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[14,90,0,260,-30,0,255,0],[14,-290,50,260,-40,0,255,0]],[[14,208,245.5,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,185,285,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[14,90,0,260,-30,0,255,0],[14,-290,50,260,-40,0,255,0]],[[14,208,245.5,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,185,285,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,-135,-175,260,90,0,255,0],[14,290,-25,260,50,0,255,0],[14,-175,-100,260,0,0,255,0],[14,90,0,260,-30,0,255,0],[14,-290,50,260,-40,0,255,0]],[[14,208,245.5,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,185,285,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,-135,-175,260,90,0,203,0],[14,290,-25,260,50,0,203,0],[14,-175,-100,260,0,0,203,0],[14,90,0,260,-30,0,203,0],[14,-290,50,260,-40,0,203,0]],[[14,208,245.5,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,185,285,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,-135,-175,260,90,0,152,0],[14,290,-25,260,50,0,152,0],[14,-175,-100,260,0,0,152,0],[14,90,0,260,-30,0,152,0],[14,-290,50,260,-40,0,152,0]],[[14,208,245.5,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,185,285,100,0,0,0,1],[14,185,235,100,0,0,0,1],[14,-135,-175,260,90,0,100,0],[14,290,-25,260,50,0,100,0],[14,-175,-100,260,0,0,100,0],[14,90,0,260,-30,0,100,0],[14,-290,50,260,-40,0,100,0]]],"name":"風/全体1","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind5","pan":0,"pitch":120,"volume":90}},{"flashColor":[170,255,221,204],"flashDuration":5,"flashScope":1,"frame":2,"se":null},{"flashColor":[170,255,221,119],"flashDuration":5,"flashScope":2,"frame":2,"se":{"name":"Wind2","pan":0,"pitch":150,"volume":90}},{"flashColor":[170,255,221,204],"flashDuration":5,"flashScope":1,"frame":5,"se":null},{"flashColor":[170,255,221,119],"flashDuration":5,"flashScope":2,"frame":5,"se":{"name":"Wind2","pan":0,"pitch":150,"volume":90}},{"flashColor":[170,255,221,204],"flashDuration":5,"flashScope":1,"frame":8,"se":null},{"flashColor":[170,255,221,119],"flashDuration":5,"flashScope":2,"frame":8,"se":{"name":"Wind2","pan":0,"pitch":150,"volume":90}}]}, +{"id":94,"animation1Hue":0,"animation1Name":"Wind4","animation2Hue":0,"animation2Name":"","frames":[[[0,-276,-72,300,0,0,100,0]],[[1,-240,-72,300,0,0,150,0],[6,36,-276,600,0,0,50,0]],[[2,-204,-72,300,0,0,200,0],[7,36,-276,600,0,0,100,0]],[[3,-168,-72,300,0,0,200,0],[8,36,-276,600,0,0,130,0]],[[-1,-216,-84,300,0,0,100,0],[4,-120,-72,300,0,0,200,0],[9,36,-276,600,0,0,150,0]],[[0,-72,-72,300,0,0,200,0],[5,36,-276,600,0,0,150,0]],[[1,-24,-72,300,0,0,200,0],[6,36,-276,600,0,0,150,0]],[[2,24,-72,300,0,0,200,0],[7,36,-276,600,0,0,150,0]],[[3,48,-72,300,0,0,200,0],[8,36,-276,600,0,0,150,0]],[[4,48,-72,300,0,0,200,0],[9,36,-276,600,0,0,150,0]],[[0,24,-72,300,0,0,200,0],[5,36,-276,600,0,0,150,0]],[[1,0,-72,300,0,0,200,0],[6,36,-276,600,0,0,150,0]],[[2,-60,-72,300,0,0,200,0],[7,36,-276,600,0,0,150,0]],[[3,-96,-72,300,0,0,200,0],[8,36,-276,600,0,0,150,0]],[[4,-84,-72,300,0,0,200,0],[9,36,-276,600,0,0,150,0]],[[0,-48,-72,300,0,0,200,0],[5,36,-276,600,0,0,150,0]],[[1,-48,-72,300,0,0,200,0],[6,36,-276,600,0,0,150,0]],[[2,-12,-72,300,0,0,200,0],[7,36,-276,600,0,0,150,0]],[[3,36,-72,300,0,0,200,0],[8,36,-276,600,0,0,150,0]],[[4,84,-72,300,0,0,200,0],[9,36,-276,600,0,0,150,0]],[[0,144,-72,300,0,0,200,0],[5,36,-276,600,0,0,150,0]],[[4,204,-72,300,0,0,200,0],[6,36,-276,600,0,0,150,0]],[[0,264,-72,300,0,0,200,0],[7,36,-276,600,0,0,120,0]],[[1,336,-72,300,0,0,150,0],[8,36,-276,600,0,0,100,0]],[[2,408,-72,300,0,0,100,0],[9,36,-276,600,0,0,70,0]]],"name":"風/全体2","position":3,"timings":[{"flashColor":[255,221,187,153],"flashDuration":15,"flashScope":2,"frame":0,"se":{"name":"Wind5","pan":0,"pitch":80,"volume":100}},{"flashColor":[255,255,187,153],"flashDuration":3,"flashScope":1,"frame":1,"se":{"name":"Sand","pan":0,"pitch":70,"volume":100}},{"flashColor":[255,255,187,153],"flashDuration":1,"flashScope":1,"frame":3,"se":null},{"flashColor":[255,255,204,153],"flashDuration":3,"flashScope":1,"frame":5,"se":null},{"flashColor":[255,255,187,153],"flashDuration":3,"flashScope":1,"frame":10,"se":null},{"flashColor":[255,255,187,153],"flashDuration":3,"flashScope":1,"frame":15,"se":null},{"flashColor":[255,255,187,153],"flashDuration":3,"flashScope":1,"frame":17,"se":null},{"flashColor":[255,255,187,153],"flashDuration":3,"flashScope":1,"frame":20,"se":null}]}, +{"id":95,"animation1Hue":60,"animation1Name":"PreSpecial1","animation2Hue":0,"animation2Name":"Wind5","frames":[[[0,0,-72,330,0,0,255,1]],[[1,0,-72,330,0,0,255,1]],[[2,0,-72,330,0,0,255,1]],[[3,0,-72,330,0,0,255,1]],[[4,0,-72,330,0,0,255,1],[17,0,-72,390,0,0,150,1]],[[5,0,-72,330,0,0,255,1],[18,0,-72,345,0,0,255,1]],[[6,0,-72,330,0,0,255,1],[19,0,-72,345,0,0,255,1]],[[20,0,-72,345,0,0,255,1],[7,0,-72,330,0,0,255,1]],[[8,0,-72,330,0,0,255,1],[22,0,-84,420,0,0,255,1]],[[9,0,-72,330,0,0,255,1],[23,0,-84,420,0,0,255,1]],[[10,0,-72,330,0,0,255,1],[24,0,-84,420,0,0,255,1]],[[11,0,-72,330,0,0,255,1],[25,0,-84,450,0,0,255,1],[100,-12,-96,255,0,0,50,0]],[[12,0,-72,330,0,0,255,1],[20,0,-84,300,0,0,200,1],[22,0,-84,375,0,0,255,1],[26,0,-84,450,0,0,255,1],[100,-12,-96,255,0,0,100,0]],[[13,0,-72,330,0,0,255,1],[26,0,-84,465,0,0,200,1],[100,-12,-96,255,0,0,150,0]],[[14,0,-72,330,0,0,255,1],[26,0,-84,480,0,0,180,1],[100,-12,-96,255,0,0,150,0]],[[15,0,-72,330,0,0,255,1],[26,0,-84,487,0,0,150,1],[100,-12,-96,255,0,0,150,0]],[[16,0,-72,330,0,0,255,1],[26,0,-84,495,0,0,120,1],[100,-12,-96,255,0,0,150,0]],[[26,0,-84,502,0,0,100,1],[16,0,-72,330,0,0,200,1],[100,-12,-96,255,0,0,150,0]],[[16,0,-72,330,0,0,150,1],[26,0,-84,502,0,0,70,1],[100,-12,-96,255,0,0,140,0]],[[16,0,-72,330,0,0,100,1],[26,0,-84,502,0,0,40,1],[100,-12,-96,255,0,0,130,0]],[[16,0,-72,330,0,0,50,1],[100,-12,-96,255,0,0,120,0]],[[-1,0,-72,330,0,0,120,1],[100,-12,-96,255,0,0,100,0]],[[100,-12,-96,255,0,0,80,0],[101,0,96,427,0,0,255,0]],[[100,-12,-96,255,0,0,60,0],[102,0,96,427,0,0,255,0],[123,-72,-84,300,0,0,255,1]],[[100,-12,-96,255,0,0,40,0],[103,0,96,427,0,0,255,0],[124,-72,-84,300,0,0,255,1],[123,288,0,300,340,1,255,1]],[[100,-12,-96,255,0,0,20,0],[104,0,96,427,0,0,255,0],[125,-72,-84,300,0,0,255,1],[124,288,0,300,340,1,255,1]],[[105,0,96,427,0,0,255,0],[126,-72,-84,300,0,0,255,1],[125,288,0,300,340,1,255,1]],[[106,0,96,427,0,0,255,0],[127,-72,-84,300,0,0,255,1],[126,288,0,300,340,1,255,1],[123,132,-132,225,180,1,255,1]],[[107,0,96,427,0,0,255,0],[127,288,0,300,340,1,255,1],[124,84,-216,225,180,1,255,1]],[[108,0,96,427,0,0,255,0],[123,288,-96,300,45,0,255,1],[125,84,-216,225,180,1,255,1],[123,-240,-48,300,125,1,255,1]],[[109,0,96,427,0,0,255,0],[124,288,-96,300,45,0,255,1],[126,84,-216,225,180,1,255,1],[124,-240,-48,300,125,1,255,1]],[[110,0,96,427,0,0,255,0],[125,288,-96,300,45,0,255,1],[127,84,-216,225,180,1,255,1],[125,-240,-48,300,125,1,255,1]],[[111,0,96,427,0,0,255,0],[126,-240,-48,300,125,1,255,1],[126,288,-96,300,45,0,255,1]],[[112,0,96,427,0,0,255,0],[127,-240,-48,300,125,1,255,1],[127,288,-96,300,45,0,255,1]],[[113,0,96,427,0,0,255,0]],[[114,0,96,427,0,0,255,0],[123,-24,-132,345,90,0,255,1]],[[115,0,96,427,0,0,255,0],[124,-24,-132,345,90,0,255,1],[123,264,-36,240,0,1,255,1]],[[116,0,96,427,0,0,255,0],[125,-24,-132,345,90,0,255,1],[124,264,-36,240,0,1,255,1],[123,-288,24,240,315,0,255,1]],[[117,0,96,427,0,0,255,0],[126,-24,-132,345,90,0,255,1],[125,264,-36,240,0,1,255,1],[124,-288,24,240,315,0,255,1]],[[118,0,96,427,0,0,255,0],[127,-24,-132,345,90,0,255,1],[126,264,-36,240,0,1,255,1],[125,-288,24,240,315,0,255,1]],[[118,0,96,427,0,0,180,0],[-1,-24,-132,345,90,0,255,1],[127,264,-36,240,0,1,180,1],[126,-288,24,240,315,0,180,1]],[[118,0,96,427,0,0,100,0],[-1,-24,-132,345,90,0,255,1],[-1,369,-6,240,0,1,180,1],[127,-288,24,240,315,0,100,1]]],"name":"風/全体3","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind2","pan":0,"pitch":70,"volume":65}},{"flashColor":[255,34,0,136],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic1","pan":0,"pitch":100,"volume":80}},{"flashColor":[136,221,0,170],"flashDuration":5,"flashScope":2,"frame":9,"se":{"name":"Wind2","pan":0,"pitch":125,"volume":75}},{"flashColor":[187,221,170,187],"flashDuration":5,"flashScope":1,"frame":23,"se":null},{"flashColor":[187,221,170,187],"flashDuration":5,"flashScope":2,"frame":23,"se":{"name":"Skill2","pan":0,"pitch":100,"volume":90}},{"flashColor":[187,221,170,204],"flashDuration":5,"flashScope":1,"frame":29,"se":{"name":"Wind5","pan":0,"pitch":80,"volume":90}},{"flashColor":[187,221,170,187],"flashDuration":5,"flashScope":2,"frame":29,"se":null},{"flashColor":[187,221,170,221],"flashDuration":5,"flashScope":1,"frame":35,"se":null},{"flashColor":[187,221,170,153],"flashDuration":5,"flashScope":2,"frame":35,"se":null}]}, +{"id":96,"animation1Hue":0,"animation1Name":"Holy1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-290,300,0,0,255,1]],[[1,0,-290,300,0,0,255,1]],[[2,0,-290,300,0,0,255,1]],[[3,0,-290,300,0,0,255,1]],[[3,0,-290,300,0,0,255,1]],[[3,0,-290,300,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[4,5,-270,330,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[5,5,-270,330,0,0,255,1],[9,0,-210,260,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[6,5,-270,330,0,0,255,1],[10,0,-210,260,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[7,5,-270,330,0,0,255,1],[11,0,-210,260,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[12,0,-210,260,0,0,255,1],[16,0,-240,340,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[13,0,-210,260,0,0,255,1],[17,0,-240,340,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[14,0,-210,260,0,0,255,1],[18,0,-240,340,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[15,0,-210,260,0,0,255,1],[19,0,-240,340,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[15,0,-210,260,0,0,0,1],[20,0,-240,340,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[15,0,-210,260,0,0,0,1],[21,0,-240,340,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[15,0,-210,260,0,0,0,1],[22,0,-240,340,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[15,0,-210,260,0,0,0,1],[23,0,-240,340,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[15,0,-210,260,0,0,0,1],[24,0,-240,340,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[15,0,-210,260,0,0,0,1],[25,0,-240,340,0,0,255,1]],[[3,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,255,1],[15,0,-210,260,0,0,0,1],[26,0,-240,340,0,0,255,1]],[[2,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,187,1]],[[1,0,-290,300,0,0,255,1],[8,5,-270,330,0,0,118,1]]],"name":"光/単体1","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Up3","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,221,204],"flashDuration":3,"flashScope":1,"frame":6,"se":{"name":"Reflection","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,221,136],"flashDuration":7,"flashScope":2,"frame":7,"se":{"name":"Sword4","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,221,170],"flashDuration":3,"flashScope":1,"frame":8,"se":{"name":"Reflection","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":9,"se":{"name":"Sword4","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":10,"se":{"name":"Reflection","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":11,"se":{"name":"Sword4","pan":0,"pitch":150,"volume":90}}]}, +{"id":97,"animation1Hue":0,"animation1Name":"Holy3","animation2Hue":0,"animation2Name":"","frames":[[[1,0,0,300,0,0,255,1],[0,0,0,375,0,0,50,1],[0,0,0,150,0,0,255,1]],[[2,0,0,300,0,0,255,1],[0,0,0,390,0,0,150,1],[0,0,0,180,0,0,150,1]],[[3,0,0,300,0,0,255,1],[0,0,0,405,0,0,255,1]],[[4,0,0,300,0,0,255,1],[0,0,0,412,0,0,200,1]],[[5,0,0,300,0,0,255,1],[0,0,0,420,0,0,150,1]],[[6,0,0,300,0,0,255,1],[0,0,0,427,0,0,100,1]],[[7,0,0,300,0,0,255,1]],[[8,0,0,300,0,0,255,1]],[[9,0,0,300,0,0,255,1]],[[10,0,0,300,0,0,255,1]],[[11,0,0,300,0,0,255,1]],[[12,0,0,300,0,0,255,1]],[[13,0,0,300,0,0,255,1]],[[14,0,0,300,0,0,255,1]],[[14,0,0,300,0,0,150,1]]],"name":"光/単体2","position":1,"timings":[{"flashColor":[255,255,221,85],"flashDuration":3,"flashScope":2,"frame":0,"se":{"name":"Ice4","pan":0,"pitch":70,"volume":90}},{"flashColor":[255,255,170,187],"flashDuration":3,"flashScope":1,"frame":6,"se":null},{"flashColor":[255,255,221,170],"flashDuration":5,"flashScope":2,"frame":6,"se":{"name":"Saint4","pan":0,"pitch":115,"volume":100}}]}, +{"id":98,"animation1Hue":0,"animation1Name":"Holy2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-144,380,0,0,180,1]],[[0,2,-144,400,0,0,255,1]],[[1,0,-144,400,0,0,255,1]],[[2,0,-144,400,0,0,255,1]],[[3,0,-144,400,0,0,255,1]],[[4,0,-144,400,0,0,203,1],[7,0,-50,380,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,10,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,0,-144,400,0,0,152,1],[8,0,-50,380,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,10,100,0,0,255,1],[-1,0,-30,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[6,0,-144,400,0,0,100,1],[9,0,-50,380,0,0,255,1]],[[6,0,-144,410,0,0,60,1],[10,0,-50,380,0,0,255,1]],[[-1,-165,-85,410,0,0,60,1],[11,0,-50,380,0,0,255,1]],[[-1,-165,-85,410,0,0,60,1],[12,0,-50,380,0,0,255,1]],[[-1,-161,232.5,100,0,0,0,1],[-1,-168.5,202.5,300,0,0,0,1],[-1,-176,227.5,100,0,0,0,1],[-1,-263.5,205,300,0,0,0,1],[16,-310,-75,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[13,0,-50,380,0,0,255,1]],[[-1,-408,249.5,100,0,0,0,1],[-1,274.5,-7.5,300,0,0,0,1],[-1,-408,312,100,0,0,0,1],[-1,92,28,300,0,0,0,1],[-1,-408,305.5,100,0,0,0,1],[-1,2,-4.5,300,0,0,0,1],[-1,-408,290.5,100,0,0,0,1],[-1,279.5,110.5,300,0,0,0,1],[17,-310,-75,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[14,0,-50,380,0,0,255,1]],[[29,-310,95,100,0,0,0,1],[-1,-310,-312,300,0,0,255,1],[29,-100,49,100,0,0,0,1],[24,-110,-180,300,0,0,0,1],[-1,373,207,100,0,0,0,1],[-1,291,18.5,300,0,0,0,1],[-1,374.5,117.5,100,0,0,0,1],[-1,285.5,119,300,0,0,0,1],[18,-310,-75,300,0,0,255,1],[16,-110,-120,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[15,0,-50,380,0,0,255,1]],[[25,-310,95,200,0,0,255,1],[23,-310,-312,300,0,0,255,1],[29,-100,49,100,0,0,0,1],[24,-112,-178,300,0,0,0,1],[-1,408,94.5,100,0,0,0,1],[24,94,-122,300,0,0,0,1],[-1,408,95,100,0,0,0,1],[-1,-24.5,36.5,300,0,0,0,1],[19,-310,-75,300,0,0,255,1],[17,-112.5,-120,300,0,0,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0]],[[26,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[29,-100,49,100,0,0,0,1],[-1,-110,-312,300,0,0,255,1],[29,98,112,100,0,0,0,1],[24,96,-122,300,0,0,0,1],[29,322,75,100,0,0,0,1],[24,320,-156,300,0,0,0,1],[20,-310,-75,300,0,0,255,1],[18,-110,-120,300,0,0,255,1],[16,100,-60,300,0,0,255,1],[-1,0,0,0,0,0,0,0]],[[27,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[25,-100,49,200,0,0,255,1],[23,-110,-312,300,0,0,255,1],[28,98,112,100,0,0,0,1],[24,96,-122,300,0,0,0,1],[29,322,75,100,0,0,0,1],[24,320,-156,300,0,0,0,1],[21,-310,-75,300,0,0,255,1],[19,-110,-120,300,0,0,255,1],[17,100,-60,300,0,0,255,1]],[[28,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[26,-100,49,200,0,0,255,1],[24,-110.5,-180,300,0,0,255,1],[-1,-83.5,244.5,100,0,0,0,1],[-1,96,-312,300,0,0,255,1],[-1,287,257.5,100,0,0,0,1],[-1,90,49,300,0,0,0,1],[22,-310,-75,300,0,0,255,1],[20,-110,-120,300,0,0,255,1],[18,100,-60,300,0,0,255,1],[16,320,-95,300,0,0,255,1]],[[29,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[27,-100,49,200,0,0,255,1],[24,-110.5,-180,300,0,0,255,1],[25,98,110,200,0,0,255,1],[23,96,-312,300,0,0,255,1],[-1,302,222.5,100,0,0,0,1],[-1,320,-156.5,300,0,0,255,1],[-1,-312.5,-75,300,0,0,0,1],[21,-110,-120,300,0,0,255,1],[19,100,-60,300,0,0,255,1],[17,320,-95,300,0,0,255,1]],[[29,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[28,-100,49,200,0,0,255,1],[24,-110.5,-180,300,0,0,255,1],[26,98,112,200,0,0,255,1],[24,96,-122,300,0,0,255,1],[29,322,75,100,0,0,0,1],[-1,320,-312,300,0,0,255,1],[-1,-237.5,12.5,300,0,0,0,1],[22,-110,-120,300,0,0,255,1],[20,100,-60,300,0,0,255,1],[18,320,-95,300,0,0,255,1]],[[29,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[29,-100.5,49,200,0,0,255,1],[24,-110.5,-180,300,0,0,255,1],[27,96,112,200,0,0,255,1],[24,96,-122,300,0,0,255,1],[25,320,75,200,0,0,255,1],[23,320,-312,300,0,0,255,1],[-1,-207.5,-10,300,0,0,0,1],[-1,-408,50,300,0,0,0,1],[21,100,-60,300,0,0,255,1],[19,320,-95,300,0,0,255,1]],[[29,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[29,-100,49,200,0,0,255,1],[24,-110.5,-180,300,0,0,255,1],[28,98,112,200,0,0,255,1],[24,96,-122,300,0,0,255,1],[26,322,75,200,0,0,255,1],[24,320,-156.5,300,0,0,255,1],[-1,-305,240,300,0,0,0,1],[-1,-217.5,235,300,0,0,0,1],[22,100,-60,300,0,0,255,1],[20,320,-95,300,0,0,255,1]],[[29,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[29,-100.5,49,200,0,0,255,1],[24,-110.5,-180,300,0,0,255,1],[29,98.5,112,200,0,0,255,1],[24,96,-122,300,0,0,255,1],[27,322,75,200,0,0,255,1],[24,320,-156.5,300,0,0,255,1],[-1,-272.5,20,300,0,0,0,1],[-1,-170,-12.5,300,0,0,0,1],[-1,-297.5,92.5,300,0,0,0,1],[21,320,-95,300,0,0,255,1]],[[29,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[29,-100.5,49,200,0,0,255,1],[24,-110.5,-180,300,0,0,255,1],[29,98.5,112,200,0,0,255,1],[24,96,-122,300,0,0,255,1],[28,322,75,200,0,0,255,1],[24,320,-156.5,300,0,0,255,1],[-1,-277.5,17.5,300,0,0,0,1],[-1,-287.5,27.5,300,0,0,0,1],[-1,-190,60,300,0,0,0,1],[22,320,-95,300,0,0,255,1]],[[29,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[29,-100.5,49,200,0,0,255,1],[24,-110.5,-180,300,0,0,255,1],[29,98.5,112,200,0,0,255,1],[24,96,-122,300,0,0,255,1],[29,322.5,75,200,0,0,255,1],[24,320,-156.5,300,0,0,255,1]],[[29,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[29,-100.5,49,200,0,0,255,1],[24,-110.5,-180,300,0,0,255,1],[29,98.5,112,200,0,0,255,1],[24,96,-122,300,0,0,255,1],[29,322.5,75,200,0,0,255,1],[24,320,-156.5,300,0,0,255,1]],[[29,-310,95,200,0,0,255,1],[24,-310,-125,300,0,0,255,1],[29,-100.5,49,200,0,0,255,1],[24,-110.5,-180,300,0,0,255,1],[29,98.5,112,200,0,0,255,1],[24,96,-122,300,0,0,255,1],[29,322.5,75,200,0,0,255,1],[24,320,-156.5,300,0,0,255,1]],[[29,-310,95,200,0,0,120,1],[24,-310,-125,300,0,0,120,1],[29,-100.5,49,200,0,0,120,1],[24,-110.5,-180,300,0,0,120,1],[29,98.5,112,200,0,0,120,1],[24,96,-122,300,0,0,120,1],[29,322.5,75,200,0,0,120,1],[24,320,-156.5,300,0,0,120,1]],[[29,-310,95,200,0,0,60,1],[24,-310,-125,300,0,0,60,1],[29,-100.5,49,200,0,0,60,1],[24,-110.5,-180,300,0,0,60,1],[29,98.5,112,200,0,0,60,1],[24,96,-122,300,0,0,60,1],[29,322,75,200,0,0,60,1],[24,320,-156.5,300,0,0,60,1]]],"name":"光/全体1","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Starlight","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":1,"se":{"name":"Ice5","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Up1","pan":0,"pitch":80,"volume":90}},{"flashColor":[255,255,221,204],"flashDuration":3,"flashScope":1,"frame":13,"se":{"name":"Skill3","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,221,119],"flashDuration":6,"flashScope":2,"frame":13,"se":null},{"flashColor":[255,255,221,204],"flashDuration":6,"flashScope":2,"frame":14,"se":{"name":"Sword2","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,221,204],"flashDuration":3,"flashScope":1,"frame":15,"se":{"name":"Sword2","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,221,204],"flashDuration":3,"flashScope":1,"frame":17,"se":{"name":"Sword2","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,221,204],"flashDuration":3,"flashScope":1,"frame":19,"se":{"name":"Sword2","pan":0,"pitch":150,"volume":90}}]}, +{"id":99,"animation1Hue":0,"animation1Name":"Holy4","animation2Hue":0,"animation2Name":"","frames":[[[18,0,-132,405,0,0,255,1],[0,0,84,450,0,0,100,1],[23,0,84,150,0,0,150,1]],[[18,0,-120,405,0,0,255,1],[19,0,-108,390,0,0,150,1],[23,0,84,195,0,0,180,1],[0,0,84,390,0,0,150,1]],[[19,0,-120,405,0,0,255,1],[23,0,84,225,0,0,255,1],[0,0,84,300,0,0,200,1]],[[19,0,-108,405,0,0,200,1],[23,0,84,240,0,0,180,1],[24,0,84,150,0,0,255,1],[0,0,84,270,0,0,200,1]],[[19,0,-108,405,0,0,255,1],[24,0,84,225,0,0,255,1],[0,0,84,225,0,0,200,1]],[[19,0,-108,405,0,0,200,1],[24,0,84,300,0,0,255,1],[0,0,84,150,0,0,100,1]],[[19,0,-108,405,0,0,255,1],[1,0,-84,300,0,0,255,1],[24,0,84,270,0,0,200,1]],[[19,0,-108,405,0,0,150,1],[18,0,-108,405,0,0,255,1],[13,0,-72,300,0,0,255,1],[-1,0,108,30,0,0,0,0],[2,0,-84,300,0,0,255,1]],[[18,0,-108,375,0,0,200,1],[3,0,-72,300,0,0,255,1],[14,0,-84,300,0,0,255,1],[24,-252,96,270,0,0,200,1],[1,264,-72,300,0,1,255,1],[1,-264,-72,300,0,0,255,1],[24,252,96,270,0,0,200,1]],[[4,0,-60,300,0,0,255,1],[15,0,-48,300,0,0,255,1],[20,0,96,300,0,0,255,1],[5,0,-72,300,0,0,255,1],[2,-264,-72,300,0,0,255,1],[13,-264,-72,300,0,0,255,1],[13,264,-60,300,0,0,255,1],[2,252,-60,300,0,1,255,1]],[[22,0,96,300,0,0,255,1],[16,0,-36,300,0,0,255,1],[15,0,-24,225,0,0,255,1],[8,0,-132,300,0,0,255,1],[3,-264,-72,300,0,0,255,1],[14,-264,-72,300,0,0,255,1],[14,264,-60,300,0,0,255,1],[3,264,-60,300,0,1,255,1]],[[6,0,-60,300,0,0,255,1],[17,0,-36,300,0,0,255,1],[22,0,96,330,0,0,160,1],[9,0,-132,300,0,0,255,1],[18,0,-36,300,0,0,255,1],[4,-264,-72,300,0,0,255,1],[8,-264,-156,300,0,0,255,1],[15,-264,-24,225,0,0,255,1],[15,264,-24,225,0,0,255,1],[8,264,-156,300,0,0,255,1],[4,264,-72,300,0,0,255,1],[20,-264,84,300,0,0,255,1],[20,264,84,300,0,0,255,1]],[[7,0,-60,300,0,0,255,1],[10,0,-132,300,0,0,255,1],[18,-264,-60,300,0,0,255,1],[9,-264,-156,300,0,0,255,1],[18,264,-48,300,0,0,255,1],[9,264,-156,300,0,0,255,1],[22,-264,84,300,0,0,255,1],[22,264,84,300,0,0,255,1],[4,-192,12,150,0,0,255,1],[4,192,12,150,0,0,255,1]],[[11,0,-132,300,0,0,255,1],[10,-264,-156,300,0,0,255,1],[10,264,-156,300,0,0,255,1],[22,-264,84,330,0,0,160,1],[22,264,84,330,0,0,160,1],[18,-192,-60,300,0,0,255,1],[5,-192,12,150,0,0,255,1],[13,-192,12,150,0,0,255,1],[18,192,-60,300,0,0,255,1],[13,192,12,150,0,0,255,1],[5,192,12,150,0,0,255,1]],[[12,0,-132,300,0,0,255,1],[11,-264,-156,300,0,0,255,1],[11,264,-156,300,0,0,255,1],[6,-192,12,150,0,0,255,1],[18,-192,-204,300,0,0,150,1],[6,192,12,150,0,0,255,1],[18,192,-204,300,0,0,150,1],[13,336,12,150,0,0,255,1],[4,-336,12,150,0,0,255,1],[18,336,-204,300,0,0,150,1],[4,336,12,150,0,0,255,1],[13,-336,12,150,0,0,255,1]],[[12,0,-132,315,0,0,150,1],[12,-264,-156,300,0,0,255,1],[12,264,-156,300,0,0,255,1],[7,-192,12,150,0,0,255,1],[7,192,12,150,0,0,255,1],[18,336,-60,300,0,0,255,1],[18,-336,-60,300,0,0,255,1],[5,-336,12,150,0,0,255,1],[5,336,12,150,0,0,255,1]],[[12,-264,-156,315,0,0,150,1],[12,264,-156,315,0,0,150,1],[6,-336,12,150,0,0,255,1],[18,-336,-204,300,0,0,150,1],[6,336,12,150,0,0,255,1],[18,336,-204,300,0,0,150,1]],[[7,-336,12,150,0,0,255,1],[7,336,12,150,0,0,255,1]]],"name":"光/全体2","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Skill1","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":8,"se":{"name":"Explosion1","pan":0,"pitch":150,"volume":100}},{"flashColor":[255,255,204,204],"flashDuration":5,"flashScope":1,"frame":8,"se":{"name":"Saint4","pan":0,"pitch":120,"volume":90}},{"conditions":0,"flashColor":[255,255,187,153],"flashDuration":5,"flashScope":2,"frame":9,"se":null}]}, +{"id":100,"animation1Hue":360,"animation1Name":"PreSpecial2","animation2Hue":0,"animation2Name":"Holy5","frames":[[[0,0,-72,330,0,0,255,1]],[[1,0,-72,330,0,0,255,1]],[[2,0,-72,330,0,0,255,1]],[[3,0,-72,330,0,0,255,1]],[[4,0,-72,330,0,0,255,1],[17,0,-72,390,0,0,150,1]],[[5,0,-72,330,0,0,255,1],[18,0,-72,345,0,0,255,1]],[[6,0,-72,330,0,0,255,1],[19,0,-72,345,0,0,255,1]],[[20,0,-72,345,0,0,255,1],[7,0,-72,330,0,0,255,1]],[[8,0,-72,330,0,0,255,1],[22,0,-84,420,0,0,255,1]],[[9,0,-72,330,0,0,255,1],[23,0,-84,420,0,0,255,1]],[[10,0,-72,330,0,0,255,1],[24,0,-84,420,0,0,255,1]],[[11,0,-72,330,0,0,255,1],[25,0,-84,450,0,0,255,1],[100,0,-72,330,0,0,50,0]],[[12,0,-72,330,0,0,255,1],[20,0,-84,300,0,0,200,1],[22,0,-84,375,0,0,255,1],[26,0,-84,450,0,0,255,1],[100,0,-72,330,0,0,100,0]],[[13,0,-72,330,0,0,255,1],[26,0,-84,465,0,0,200,1],[-1,0,72,525,0,0,50,1],[100,0,-72,330,0,0,150,0]],[[14,0,-72,330,0,0,255,1],[26,0,-84,480,0,0,180,1],[-1,0,72,525,0,0,100,1],[100,0,-72,330,0,0,150,0]],[[15,0,-72,330,0,0,255,1],[26,0,-84,487,0,0,150,1],[-1,0,72,525,0,0,150,1],[100,0,-72,330,0,0,150,0]],[[16,0,-72,330,0,0,255,1],[26,0,-84,495,0,0,120,1],[-1,0,72,525,0,0,180,1],[100,0,-72,330,0,0,150,0]],[[26,0,-84,502,0,0,100,1],[16,0,-72,330,0,0,200,1],[-1,0,72,525,0,0,180,1],[100,0,-72,330,0,0,150,0]],[[16,0,-72,330,0,0,150,1],[26,0,-84,502,0,0,70,1],[100,0,-72,330,0,0,140,0],[101,0,-84,225,0,0,100,1]],[[16,0,-72,330,0,0,100,1],[26,0,-84,502,0,0,40,1],[100,0,-72,330,0,0,130,0],[102,0,-84,225,0,0,100,1]],[[16,0,-72,330,0,0,50,1],[100,0,-72,330,0,0,120,0],[103,0,-84,225,0,0,100,1]],[[100,0,-72,330,0,0,100,0],[104,0,-84,225,0,0,120,1]],[[100,0,-72,330,0,0,80,0],[105,0,-84,225,0,0,150,1]],[[100,0,-72,330,0,0,60,0],[106,0,-84,255,0,0,180,1]],[[100,0,-72,330,0,0,40,0],[107,0,-84,277,0,0,200,1]],[[100,0,-72,330,0,0,20,0],[108,0,-84,285,0,0,220,1]],[[109,0,-84,288,0,0,240,1]],[[110,0,-84,291,0,0,255,1],[118,0,96,427,0,0,255,1]],[[111,0,-84,294,0,0,255,1],[119,0,96,427,0,0,255,1]],[[112,0,-84,300,0,0,255,1],[120,0,96,427,0,0,255,1]],[[113,0,-84,300,0,0,255,1],[121,0,96,427,0,0,255,1]],[[114,0,-84,300,0,0,255,1],[122,0,96,427,0,0,255,1]],[[115,0,-84,300,0,0,255,1],[123,0,96,427,0,0,255,1]],[[116,0,-84,300,0,0,255,1],[124,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[125,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[126,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[123,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[124,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[125,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[126,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[123,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[124,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[125,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[126,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[123,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,255,1],[122,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,200,1],[121,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,150,1],[120,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,100,1],[119,0,96,427,0,0,255,1]],[[117,0,-84,300,0,0,50,1],[118,0,96,427,0,0,255,1]]],"name":"光/全体3","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind2","pan":0,"pitch":70,"volume":65}},{"flashColor":[255,34,0,136],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic1","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,255,187,153],"flashDuration":10,"flashScope":2,"frame":9,"se":{"name":"Skill3","pan":0,"pitch":110,"volume":75}},{"flashColor":[187,221,170,187],"flashDuration":5,"flashScope":0,"frame":19,"se":{"name":"Ice5","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,204,187],"flashDuration":10,"flashScope":2,"frame":22,"se":null},{"flashColor":[255,255,204,187],"flashDuration":3,"flashScope":0,"frame":27,"se":{"name":"Ice4","pan":0,"pitch":80,"volume":90}},{"flashColor":[255,255,204,187],"flashDuration":3,"flashScope":1,"frame":30,"se":null},{"flashColor":[255,255,204,187],"flashDuration":3,"flashScope":1,"frame":33,"se":null},{"flashColor":[255,255,204,187],"flashDuration":3,"flashScope":1,"frame":36,"se":null},{"flashColor":[255,255,204,187],"flashDuration":10,"flashScope":1,"frame":39,"se":null}]}, +{"id":101,"animation1Hue":0,"animation1Name":"Darkness1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,280,0,0,255,0]],[[1,-2,0,260,0,0,255,0]],[[2,0,0,240,0,0,255,0]],[[3,0,0,220,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[4,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[5,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[6,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[7,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[3,0,0,200,0,0,255,0],[8,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[4,0,0,200,0,0,255,0],[9,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[5,0,0,200,0,0,255,0],[10,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[6,-10,-10,180,0,0,255,0],[11,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1],[-1,0,0,0,0,0,0,0]],[[7,10,10,180,0,0,255,0],[12,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[3,0,0,200,0,0,255,0],[13,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[4,0,0,200,0,0,255,0],[14,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[5,0,0,200,0,0,255,0],[15,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[6,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[7,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[3,0,0,180,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[5,0,0,220,0,0,180,0],[16,0,0,200,0,0,255,0],[-1,0,0,100,0,0,0,1]],[[-1,0,0,100,0,0,0,1],[17,0,0,180,0,0,255,0],[-1,-65,27.5,260,0,0,100,0]],[[-1,0,0,100,0,0,0,1],[18,0,0,160,0,0,255,0],[-1,15,15,280,0,0,100,0]]],"name":"闇/単体1","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Darkness1","pan":0,"pitch":100,"volume":90}},{"flashColor":[136,136,187,221],"flashDuration":3,"flashScope":2,"frame":9,"se":null},{"flashColor":[136,136,187,221],"flashDuration":5,"flashScope":2,"frame":11,"se":null},{"flashColor":[119,119,187,238],"flashDuration":3,"flashScope":1,"frame":10,"se":null},{"flashColor":[119,119,187,238],"flashDuration":5,"flashScope":1,"frame":12,"se":null}]}, +{"id":102,"animation1Hue":0,"animation1Name":"Darkness3","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,150,0,0,200,0]],[[1,0,0,195,0,0,255,0]],[[2,0,0,225,0,0,255,0],[2,0,0,300,0,0,150,0],[4,0,0,300,0,1,255,1]],[[3,0,0,225,0,0,255,0],[5,0,0,300,0,1,255,1],[2,0,0,315,0,0,100,0]],[[0,0,0,225,0,0,255,0],[6,0,0,300,0,1,255,1]],[[1,0,0,225,0,0,255,0],[7,0,0,300,0,1,255,1]],[[2,0,0,225,0,0,255,0],[8,0,0,300,0,1,255,1]],[[3,0,0,225,0,0,255,0]],[[0,0,0,225,0,0,255,0]],[[1,0,0,225,0,0,255,0]],[[2,0,0,225,0,0,255,0],[4,0,0,300,90,1,255,1]],[[3,0,0,225,0,0,255,0],[5,0,0,300,90,1,255,1]],[[0,0,0,225,0,0,255,0],[6,0,0,300,90,1,255,1]],[[1,0,0,225,0,0,200,0],[7,0,0,300,90,1,255,1]],[[2,0,0,225,0,0,150,0],[8,0,0,300,90,1,255,1]],[[3,0,0,225,0,0,100,0]]],"name":"闇/単体2","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Darkness3","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,102,221,153],"flashDuration":15,"flashScope":1,"frame":2,"se":null},{"flashColor":[238,102,221,170],"flashDuration":5,"flashScope":2,"frame":2,"se":null},{"flashColor":[255,102,221,153],"flashDuration":5,"flashScope":2,"frame":10,"se":null}]}, +{"id":103,"animation1Hue":0,"animation1Name":"Darkness2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-50,200,0,0,100,0]],[[1,0,-50,255,0,0,180,0],[-1,-390.5,22.5,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[2,0,-50,310,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[3,0,-50,365,0,0,255,0],[-1,-408,207.5,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,-50,420,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[0,0,-50,475,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[1,0,-50,530,0,0,255,0],[-1,-235,175,300,0,0,160,0],[-1,-105,0,300,0,0,160,0],[-1,110,0,300,0,0,160,0],[-1,300,0,300,0,0,160,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[2,0,-50,585,0,0,200,0],[-1,-95,97.5,400,0,0,200,0],[-1,-102.5,-2,400,0,0,200,0],[-1,110,0,400,0,0,200,0],[-1,300,0,400,0,0,200,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[3,0,-50,640,0,0,160,0],[-1,-52.5,180,500,0,0,255,0],[-1,-102.5,0,500,0,0,255,0],[-1,110,0,500,0,0,255,0],[-1,300,0,500,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[4,0,-50,640,0,0,160,0],[-1,-52.5,180,500,0,0,255,0],[-1,-102.5,0,500,0,0,255,0],[-1,110,0,500,0,0,255,0],[-1,300,0,500,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,-290,-170,320,0,0,100,0],[8,-290,-312,300,0,0,255,0],[-1,403,309.5,100,0,0,0,1]],[[6,-290,-170,320,0,0,255,0],[9,-290,-128,360,0,0,255,0],[11,-290,-70,360,0,0,255,0]],[[7,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[12,-290,-70,360,0,0,255,0],[5,-105,-230,320,0,0,100,0],[8,-105,-312,300,0,0,255,0]],[[5,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[13,-290,-70,360,0,0,255,0],[6,-105,-230,320,0,0,255,0],[9,-105,-128,360,0,0,255,0],[11,-105,-130,360,0,1,255,0]],[[6,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[14,-290,-70,360,0,0,255,0],[7,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[12,-105,-130,360,0,1,255,0],[5,110,-145,320,0,0,100,0],[8,110,-312,300,0,0,255,0]],[[7,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[15,-290,-70,360,0,0,255,0],[5,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[13,-105,-130,360,0,1,255,0],[6,110,-145,320,0,0,255,0],[9,110,-64,360,0,0,255,0],[11,110,-45,360,0,0,255,0]],[[5,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[16,-290,-70,360,0,0,255,0],[6,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[14,-105,-130,360,0,1,255,0],[7,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[12,110,-45,360,0,0,255,0],[5,300,-220,320,0,0,100,0],[8,300,-312,300,0,0,255,0]],[[6,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[17,-290,-70,360,0,0,255,0],[7,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[15,-105,-130,360,0,1,255,0],[5,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[13,110,-45,360,0,0,255,0],[6,300,-220,320,0,0,255,0],[9,300,-128,360,0,0,255,0],[11,300,-110,360,0,1,255,0]],[[7,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[18,-290,-70,360,0,0,255,0],[5,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[16,-105,-130,360,0,1,255,0],[6,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[14,110,-45,360,0,0,255,0],[7,300,-220,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[12,300,-110,360,0,1,255,0]],[[5,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[19,-290,-70,360,0,0,255,0],[6,-105,-230,320,0,0,255,0],[-1,405.5,312,100,0,0,0,1],[17,-105,-130,360,0,1,255,0],[7,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[15,110,-45,360,0,0,255,0],[5,300,-220,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[13,300,-110,360,0,1,255,0]],[[6,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[20,-290,-70,360,0,0,255,0],[7,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[18,-105,-130,360,0,1,255,0],[5,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[16,110,-45,360,0,0,255,0],[6,300,-220,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[14,300,-110,360,0,1,255,0]],[[5,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[16,-290,-70,360,0,0,255,0],[5,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[19,-105,-130,360,0,1,255,0],[6,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[17,110,-45,360,0,0,255,0],[7,300,-220,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[15,300,-110,360,0,1,255,0]],[[6,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[17,-290,-70,360,0,0,255,0],[6,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[20,-105,-130,360,0,1,255,0],[7,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[18,110,-45,360,0,0,255,0],[5,300,-220,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[16,300,-110,360,0,1,255,0]],[[7,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[18,-290,-70,360,0,0,255,0],[5,-105,-230,320,0,0,255,0],[-1,405.5,312,100,0,0,0,1],[16,-105,-130,360,0,1,255,0],[5,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[19,110,-45,360,0,0,255,0],[6,300,-220,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[17,300,-110,360,0,1,255,0]],[[5,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[19,-290,-70,360,0,0,255,0],[6,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[17,-105,-130,360,0,1,255,0],[6,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[20,110,-45,360,0,0,255,0],[7,300,-220,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[18,300,-110,360,0,1,255,0]],[[6,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[20,-290,-70,360,0,0,255,0],[7,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[18,-105,-130,360,0,1,255,0],[7,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[16,110,-45,360,0,0,255,0],[5,300,-220,320,0,0,255,0],[-1,408,309.5,100,0,0,0,1],[19,300,-110,360,0,1,255,0]],[[7,-290,-170,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[16,-290,-70,360,0,0,255,0],[5,-105,-230,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[19,-105,-130,360,0,1,255,0],[5,110,-145,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[17,110,-45,360,0,0,255,0],[6,300,-220,320,0,0,255,0],[-1,408,312,100,0,0,0,1],[20,300,-110,360,0,1,255,0]],[[6,-290,-170,320,0,0,197,0],[-1,408,312,100,0,0,27,1],[17,-290,-70,360,0,0,197,0],[6,-105,-230,320,0,0,197,0],[-1,408,312,100,0,0,27,1],[20,-105,-130,360,0,1,197,0],[7,110,-145,320,0,0,197,0],[-1,408,312,100,0,0,27,1],[18,110,-45,360,0,0,197,0],[5,300,-220,320,0,0,197,0],[-1,408,312,100,0,0,27,1],[16,300,-110,360,0,1,197,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[7,-290,-170,320,0,0,138,0],[-1,408,312,100,0,0,53,1],[18,-290,-70,360,0,0,138,0],[5,-105,-230,320,0,0,138,0],[-1,408,312,100,0,0,53,1],[16,-105,-130,360,0,1,138,0],[5,110,-145,320,0,0,138,0],[-1,408,309.5,100,0,0,53,1],[19,110,-45,360,0,0,138,0],[6,300,-220,320,0,0,138,0],[-1,408,312,100,0,0,53,1],[17,300,-110,360,0,1,138,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[5,-290,-170,320,0,0,80,0],[-1,408,312,100,0,0,80,1],[19,-290,-70,360,0,0,80,0],[6,-105,-230,320,0,0,80,0],[-1,408,312,100,0,0,80,1],[17,-105,-130,360,0,1,80,0],[6,110,-145,320,0,0,80,0],[-1,408,312,100,0,0,80,1],[20,110,-45,360,0,0,80,0],[7,300,-220,320,0,0,80,0],[-1,408,312,100,0,0,80,1],[18,300,-110,360,0,1,80,0]]],"name":"闇/全体1","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Darkness4","pan":0,"pitch":100,"volume":90}},{"flashColor":[187,170,221,255],"flashDuration":5,"flashScope":2,"frame":9,"se":{"name":"Thunder3","pan":0,"pitch":50,"volume":90}},{"flashColor":[51,34,85,255],"flashDuration":3,"flashScope":1,"frame":11,"se":null},{"flashColor":[51,34,85,255],"flashDuration":3,"flashScope":1,"frame":13,"se":{"name":"Thunder3","pan":0,"pitch":50,"volume":90}},{"flashColor":[51,34,85,255],"flashDuration":3,"flashScope":1,"frame":15,"se":null},{"flashColor":[51,34,85,255],"flashDuration":7,"flashScope":1,"frame":17,"se":null}]}, +{"id":104,"animation1Hue":0,"animation1Name":"Darkness4","animation2Hue":0,"animation2Name":"","frames":[[[5,0,0,300,0,0,180,1],[9,0,0,300,0,0,180,1]],[[6,0,0,345,0,0,200,1],[10,0,0,345,0,0,200,1]],[[7,0,0,390,0,0,230,1],[11,0,0,390,0,0,230,1],[-1,0,0,30,0,0,0,0],[13,0,0,150,0,0,255,1]],[[8,0,0,420,0,0,255,1],[12,0,0,420,0,0,255,1],[-1,0,0,30,0,0,0,0],[14,0,0,240,0,0,255,1]],[[5,0,0,450,0,0,255,1],[9,0,0,450,0,0,255,1],[-1,0,0,30,0,0,0,0],[15,0,0,300,0,0,255,1]],[[6,0,0,450,0,0,255,1],[10,0,0,450,0,0,255,1],[-1,0,0,30,0,0,0,0],[16,0,0,330,0,0,255,1]],[[7,0,0,450,0,0,255,1],[11,0,0,450,0,0,255,1],[16,0,0,360,0,0,255,1]],[[8,0,0,450,0,0,255,1],[12,0,0,450,0,0,255,1],[16,0,0,390,0,0,255,1]],[[5,0,0,450,0,0,255,1],[9,0,0,450,0,0,255,1],[13,0,0,420,0,0,255,1]],[[6,0,0,450,0,0,255,1],[10,0,0,450,0,0,255,1],[0,0,0,375,0,0,255,1],[14,0,0,435,0,0,255,1]],[[7,0,0,450,0,0,255,1],[11,0,0,450,0,0,255,1],[1,0,0,375,0,0,255,1],[15,0,0,450,0,0,255,1]],[[8,0,0,450,0,0,255,1],[12,0,0,450,0,0,255,1],[2,0,0,375,0,0,255,1],[16,0,0,465,0,0,255,1]],[[5,0,0,450,0,0,255,1],[9,0,0,450,0,0,255,1],[3,0,0,375,0,0,255,1],[16,0,0,480,0,0,255,1]],[[6,0,0,450,0,0,255,1],[10,0,0,450,0,0,255,1],[4,0,0,375,0,0,255,1],[16,0,0,495,0,0,200,1]],[[7,0,0,450,0,0,255,1],[11,0,0,450,0,0,255,1],[0,0,0,375,0,0,255,1],[16,0,0,502,0,0,150,1],[17,0,0,600,0,0,255,1],[21,-300,-108,105,0,0,255,1],[21,300,72,105,0,0,255,1]],[[8,0,0,450,0,0,255,1],[12,0,0,450,0,0,255,1],[1,0,0,375,0,0,255,1],[18,0,0,600,0,0,255,1],[22,-300,-108,150,0,0,255,1],[22,300,72,150,0,0,255,1]],[[5,0,0,450,0,0,255,1],[9,0,0,450,0,0,255,1],[2,0,0,375,0,0,255,1],[19,0,0,600,0,0,255,1],[23,-300,-108,150,0,0,255,1],[23,300,72,150,0,0,255,1]],[[6,0,0,450,0,0,255,1],[10,0,0,450,0,0,255,1],[3,0,0,375,0,0,255,1],[20,0,0,600,0,0,255,1],[24,-300,-108,150,0,0,255,1],[24,300,72,150,0,0,255,1],[21,216,-192,75,0,0,255,1]],[[7,0,0,450,0,0,255,1],[11,0,0,450,0,0,255,1],[4,0,0,375,0,0,255,1],[17,0,0,600,0,0,255,1],[25,-300,-108,150,0,0,255,1],[25,300,72,150,0,0,255,1],[22,216,-192,120,0,0,255,1]],[[8,0,0,450,0,0,255,1],[12,0,0,450,0,0,255,1],[0,0,0,375,0,0,255,1],[18,0,0,600,0,0,255,1],[23,216,-192,120,0,0,255,1],[21,-264,72,75,0,0,255,1]],[[5,0,0,450,0,0,255,1],[9,0,0,450,0,0,255,1],[1,0,0,375,0,0,255,1],[19,0,0,600,0,0,255,1],[24,216,-192,120,0,0,255,1],[22,-264,72,120,0,0,255,1]],[[6,0,0,450,0,0,255,1],[10,0,0,450,0,0,255,1],[2,0,0,375,0,0,255,1],[20,0,0,600,0,0,255,1],[25,216,-192,120,0,0,255,1],[23,-264,72,120,0,0,255,1]],[[7,0,0,450,0,0,255,1],[11,0,0,450,0,0,255,1],[3,0,0,375,0,0,255,1],[17,0,0,600,0,0,255,1],[24,-264,72,120,0,0,255,1],[21,-132,-228,105,0,0,255,1]],[[8,0,0,450,0,0,255,1],[12,0,0,450,0,0,255,1],[4,0,0,375,0,0,255,1],[18,0,0,600,0,0,255,1],[25,-264,72,120,0,0,255,1],[22,-132,-228,150,0,0,255,1]],[[5,0,0,450,0,0,255,1],[9,0,0,450,0,0,255,1],[0,0,0,375,0,0,255,1],[19,0,0,600,0,0,255,1],[23,-132,-228,150,0,0,255,1],[21,312,-12,75,0,0,255,1]],[[6,0,0,450,0,0,255,1],[10,0,0,450,0,0,255,1],[1,0,0,375,0,0,255,1],[20,0,0,600,0,0,255,1],[24,-132,-228,150,0,0,255,1],[22,312,-12,120,0,0,255,1]],[[7,0,0,450,0,0,255,1],[11,0,0,450,0,0,255,1],[2,0,0,375,0,0,255,1],[17,0,0,600,0,0,255,1],[25,-132,-228,150,0,0,255,1],[23,312,-12,120,0,0,255,1]],[[8,0,0,450,0,0,255,1],[12,0,0,450,0,0,255,1],[3,0,0,375,0,0,255,1],[18,0,0,600,0,0,255,1],[24,312,-12,120,0,0,255,1]],[[5,0,0,450,0,0,255,1],[9,0,0,450,0,0,255,1],[4,0,0,375,0,0,255,1],[19,0,0,600,0,0,255,1],[25,312,-12,120,0,0,255,1]],[[6,0,0,450,0,0,255,1],[10,0,0,450,0,0,255,1],[0,0,0,375,0,0,255,1]],[[7,0,0,450,0,0,255,1],[11,0,0,450,0,0,255,1],[1,0,0,375,0,0,255,1]],[[8,0,0,450,0,0,255,1],[12,0,0,450,0,0,255,1],[2,0,0,375,0,0,255,1]],[[5,0,0,450,0,0,255,1],[9,0,0,450,0,0,255,1],[3,0,0,375,0,0,255,1]],[[6,0,0,450,0,0,255,1],[10,0,0,450,0,0,255,1],[4,0,0,375,0,0,255,1]],[[7,0,0,450,0,0,255,1],[11,0,0,450,0,0,200,1],[4,0,0,270,0,0,255,1]],[[8,0,0,450,0,0,255,1],[12,0,0,450,0,0,150,1],[4,0,0,150,0,0,255,1]],[[5,0,0,450,0,0,100,1],[9,0,0,450,0,0,100,1]]],"name":"闇/全体2","position":3,"timings":[{"flashColor":[0,0,0,255],"flashDuration":10,"flashScope":1,"frame":0,"se":{"name":"Teleport","pan":0,"pitch":100,"volume":100}},{"conditions":0,"flashColor":[255,136,255,170],"flashDuration":5,"flashScope":2,"frame":9,"se":null},{"flashColor":[255,119,238,204],"flashDuration":3,"flashScope":1,"frame":14,"se":{"name":"Blind","pan":0,"pitch":100,"volume":80}},{"conditions":0,"flashColor":[255,136,255,170],"flashDuration":5,"flashScope":2,"frame":14,"se":null},{"flashColor":[255,119,238,170],"flashDuration":3,"flashScope":1,"frame":17,"se":null},{"flashColor":[255,119,238,170],"flashDuration":3,"flashScope":1,"frame":20,"se":null},{"flashColor":[255,119,238,170],"flashDuration":3,"flashScope":1,"frame":23,"se":null},{"flashColor":[255,119,238,170],"flashDuration":8,"flashScope":1,"frame":26,"se":null}]}, +{"id":105,"animation1Hue":0,"animation1Name":"PreSpecial3","animation2Hue":0,"animation2Name":"Darkness5","frames":[[[0,0,-72,330,0,0,255,0]],[[1,0,-72,330,0,0,255,0]],[[2,0,-72,330,0,0,255,0]],[[3,0,-72,330,0,0,255,0]],[[4,0,-72,330,0,0,255,0],[17,0,-72,390,0,0,150,0]],[[5,0,-72,330,0,0,255,0],[18,0,-72,345,0,0,255,0]],[[6,0,-72,330,0,0,255,0],[19,0,-72,345,0,0,255,0]],[[20,0,-72,345,0,0,255,0],[7,0,-72,330,0,0,255,0]],[[8,0,-72,330,0,0,255,0],[22,0,-84,420,0,0,255,0]],[[9,0,-72,330,0,0,255,0],[23,0,-84,420,0,0,255,0]],[[10,0,-72,330,0,0,255,0],[24,0,-84,420,0,0,255,0]],[[11,0,-72,330,0,0,255,0],[25,0,-84,450,0,0,255,0],[100,-24,-84,315,0,0,50,0]],[[12,0,-72,330,0,0,255,0],[20,0,-84,300,0,0,200,0],[22,0,-84,375,0,0,255,0],[26,0,-84,450,0,0,255,0],[100,-24,-84,315,0,0,100,0]],[[13,0,-72,330,0,0,255,0],[26,0,-84,465,0,0,200,0],[125,0,72,525,0,0,50,0],[100,-24,-84,315,0,0,150,0]],[[14,0,-72,330,0,0,255,0],[26,0,-84,480,0,0,180,0],[125,0,72,525,0,0,100,0],[100,-24,-84,315,0,0,150,0]],[[15,0,-72,330,0,0,255,0],[26,0,-84,487,0,0,150,0],[125,0,72,525,0,0,150,0],[100,-24,-84,315,0,0,150,0]],[[16,0,-72,330,0,0,255,0],[26,0,-84,495,0,0,120,0],[125,0,72,525,0,0,180,0],[100,-24,-84,315,0,0,150,0]],[[26,0,-84,502,0,0,100,0],[16,0,-72,330,0,0,200,0],[125,0,72,525,0,0,180,0],[100,-24,-84,315,0,0,150,0]],[[16,0,-72,330,0,0,150,0],[26,0,-84,502,0,0,70,0],[125,0,72,525,0,0,180,0],[100,-24,-84,315,0,0,140,0]],[[16,0,-72,330,0,0,100,0],[26,0,-84,502,0,0,40,0],[125,0,72,525,0,0,180,0],[100,-24,-84,315,0,0,130,0],[101,0,-132,150,0,0,255,0]],[[16,0,-72,330,0,0,50,0],[125,0,72,525,0,0,180,0],[100,-24,-84,315,0,0,120,0],[101,0,-156,210,0,0,255,0]],[[125,0,72,525,0,0,180,0],[100,-24,-84,315,0,0,100,0],[101,0,-168,240,0,0,255,0]],[[125,0,72,525,0,0,180,0],[100,-24,-84,315,0,0,80,0],[101,0,-165,240,0,0,255,0]],[[125,0,72,525,0,0,180,0],[100,-24,-84,315,0,0,60,0],[101,0,-161,240,0,0,255,0]],[[125,0,72,525,0,0,180,0],[100,-24,-84,315,0,0,40,0],[101,0,-156,240,0,0,255,0]],[[125,0,72,525,0,0,180,0],[100,-24,-84,315,0,0,20,0],[102,0,-144,300,0,0,255,0]],[[103,0,-132,375,0,0,255,0]],[[104,0,-120,450,0,0,255,0]],[[105,0,-108,480,0,0,255,0]],[[106,0,-96,495,0,0,255,0]],[[107,0,-96,510,0,0,255,0]],[[108,0,-96,525,0,0,255,0]],[[109,0,-96,525,0,0,255,0]],[[111,0,-96,525,0,0,255,0]],[[112,0,-96,525,0,0,255,0]],[[113,0,-96,525,0,0,255,0]],[[114,0,-96,525,0,0,255,0]],[[115,0,-96,525,0,0,255,0]],[[116,0,-96,525,0,0,255,0]],[[117,0,-96,525,0,0,255,0]],[[118,0,-96,525,0,0,255,0]],[[119,0,-96,525,0,0,255,0]],[[120,0,-96,525,0,0,255,0]],[[121,0,-96,525,0,0,255,0]],[[122,0,-96,525,0,0,255,0]],[[123,0,-96,525,0,0,255,0]],[[124,0,-96,525,0,0,255,0]],[[110,0,-96,525,0,0,255,0]],[[111,0,-96,525,0,0,255,0]],[[112,0,-96,525,0,0,255,0]],[[113,0,-96,525,0,0,255,0]],[[114,0,-96,525,0,0,255,0]],[[115,0,-96,525,0,0,255,0]],[[116,0,-96,525,0,0,255,0]],[[117,0,-96,525,0,0,255,0]],[[118,0,-96,525,0,0,255,0]],[[119,0,-96,525,0,0,255,0]],[[120,0,-96,525,0,0,255,0]],[[121,0,-96,525,0,0,200,0]],[[122,0,-96,525,0,0,150,0]],[[123,0,-96,525,0,0,100,0]],[[124,0,-96,525,0,0,50,0]]],"name":"闇/全体3","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind2","pan":0,"pitch":70,"volume":65}},{"flashColor":[255,34,0,136],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic1","pan":0,"pitch":100,"volume":80}},{"flashColor":[153,51,102,153],"flashDuration":10,"flashScope":2,"frame":9,"se":{"name":"Darkness4","pan":0,"pitch":90,"volume":75}},{"flashColor":[187,221,170,187],"flashDuration":5,"flashScope":0,"frame":25,"se":{"name":"Magic2","pan":0,"pitch":50,"volume":90}},{"flashColor":[170,51,136,187],"flashDuration":10,"flashScope":1,"frame":34,"se":{"name":"Wind1","pan":0,"pitch":70,"volume":90}},{"flashColor":[51,0,34,187],"flashDuration":15,"flashScope":2,"frame":34,"se":{"name":"Thunder4","pan":0,"pitch":70,"volume":90}},{"flashColor":[170,51,136,187],"flashDuration":10,"flashScope":1,"frame":46,"se":null},{"flashColor":[51,0,34,187],"flashDuration":10,"flashScope":2,"frame":46,"se":null}]}, +{"id":106,"animation1Hue":20,"animation1Name":"Magic1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,300,0,0,255,1]],[[1,0,0,288,0,0,255,1]],[[2,0,0,276,0,0,255,1]],[[3,0,0,264,0,0,255,1],[10,0,0,220,0,0,80,0]],[[4,0,0,252,0,0,255,1],[6,0,0,200,0,0,138,0]],[[5,0,0,240,0,0,255,1],[7,0,0,195,0,0,197,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,150,0,0,0,0],[8,0,0,203,0,0,200,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,75,0,0,0,0],[9,0,0,200,0,0,255,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,0,0,0,0,0,0,0],[10,0,0,200,0,0,255,0]],[[-1,0,0,0,0,0,0,0],[6,0,0,200,0,0,255,0]],[[-1,0,0,0,0,0,0,0],[7,0,0,200,0,0,255,0]],[[-1,0,0,0,0,0,0,0],[8,0,0,200,0,0,255,0]],[[-1,0,0,0,0,0,0,0],[9,0,0,200,0,0,255,0]],[[-1,25,20,260,0,0,60,1],[-1,10,7.5,180,-45,0,255,1],[7,0,0,200,0,0,230,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[-1,282.5,30,140,-45,0,255,1],[-1,40,10,220,0,0,60,1],[8,0,0,180,0,0,180,0],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[11,0,0,260,0,0,255,1],[9,0,0,100,0,0,139,0],[-1,295,153,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[12,0,0,200,0,0,255,1]],[[13,0,0,220,0,0,100,1]]],"name":"無属性/単体1","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Darkness1","pan":0,"pitch":150,"volume":90}},{"flashColor":[221,238,255,204],"flashDuration":5,"flashScope":2,"frame":4,"se":{"name":"Flash2","pan":0,"pitch":150,"volume":90}},{"flashColor":[221,238,255,187],"flashDuration":10,"flashScope":1,"frame":6,"se":{"name":"Thunder6","pan":0,"pitch":150,"volume":90}},{"flashColor":[221,238,255,187],"flashDuration":5,"flashScope":1,"frame":15,"se":{"name":"Ice2","pan":0,"pitch":150,"volume":90}}]}, +{"id":107,"animation1Hue":0,"animation1Name":"Explosion1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,225,0,0,255,0]],[[1,0,0,225,0,0,255,0]],[[2,0,0,345,0,0,255,0]],[[3,0,0,345,0,0,255,0]],[[4,0,0,345,0,0,255,0]],[[5,0,0,345,0,0,255,0]],[[6,0,0,352,0,0,255,0]],[[7,0,0,360,0,0,255,0]],[[8,0,0,360,0,0,255,0]],[[9,0,0,360,0,0,255,0]],[[10,0,0,360,0,0,255,0]],[[10,0,0,367,0,0,200,0]]],"name":"無属性/単体2","position":1,"timings":[{"flashColor":[255,255,119,170],"flashDuration":5,"flashScope":2,"frame":0,"se":{"name":"Explosion2","pan":0,"pitch":105,"volume":100}},{"flashColor":[255,255,102,170],"flashDuration":5,"flashScope":1,"frame":1,"se":null}]}, +{"id":108,"animation1Hue":0,"animation1Name":"Magic2","animation2Hue":0,"animation2Name":"","frames":[[[0,-310,-20,300,0,0,100,1]],[[1,-310,-20,280,0,0,200,1]],[[2,-310,-20,260,0,0,255,1],[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[0,30,45,300,0,0,100,1]],[[3,-310,-20,240,0,0,255,1],[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[1,30,45,280,0,0,200,1]],[[4,-310,-20,220,0,0,255,1],[6,-310,-20,280,0,0,80,0],[-1,-408,312,100,0,0,0,1],[2,30,45,260,0,0,255,1],[-1,-408,309.5,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[0,-105,-160,300,0,0,100,1]],[[5,-310,-20,220,0,0,255,1],[7,-310,-20,269,0,0,138,0],[-1,-408,312,100,0,0,0,1],[3,30,45,240,0,0,255,1],[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[1,-105,-160,280,0,0,200,1]],[[0,-310,-20,220,0,0,255,1],[8,-310,-20,258,0,0,197,0],[-1,-408,312,100,0,0,0,1],[4,30,45,220,0,0,255,1],[6,30,45,280,0,0,80,0],[-1,-408,312,100,0,0,0,1],[2,-105,-160,260,0,0,255,1],[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[0,250,-110,300,0,0,100,1]],[[1,-310,-20,220,0,0,255,1],[9,-310,-20,247,0,0,255,0],[-1,-408,312,100,0,0,0,1],[5,30,45,220,0,0,255,1],[7,30,45,269,0,0,138,0],[-1,-408,312,100,0,0,0,1],[3,-105,-160,240,0,0,255,1],[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[1,250,-110,280,0,0,200,1]],[[2,-310,-20,220,0,0,255,1],[10,-310,-20,236,0,0,255,0],[-1,-408,312,100,0,0,0,1],[0,30,45,220,0,0,255,1],[8,30,45,258,0,0,197,0],[-1,-408,312,100,0,0,0,1],[4,-105,-160,220,0,0,255,1],[6,-105,-160,280,0,0,80,0],[-1,-408,312,100,0,0,0,1],[2,250,-110,260,0,0,255,1]],[[3,-310,-20,220,0,0,255,1],[6,-310,-20,225,0,0,255,0],[-1,-408,309.5,100,0,0,0,1],[1,30,45,220,0,0,255,1],[9,30,45,247,0,0,255,0],[-1,-408,312,100,0,0,0,1],[5,-105,-160,220,0,0,255,1],[7,-105,-160,269,0,0,138,0],[-1,-408,312,100,0,0,0,1],[3,250,-110,240,0,0,255,1]],[[4,-310,-20,220,0,0,255,1],[7,-310,-20,215,0,0,255,0],[-1,-408,312,100,0,0,0,1],[2,30,45,220,0,0,255,1],[10,30,45,236,0,0,255,0],[-1,-408,312,100,0,0,0,1],[0,-105,-160,220,0,0,255,1],[8,-105,-160,258,0,0,197,0],[-1,-408,312,100,0,0,0,1],[4,250,-110,220,0,0,255,1],[6,250,-110,280,0,0,80,0]],[[5,-310,-20,220,0,0,255,1],[8,-310,-20,204,0,0,255,0],[-1,-408,312,100,0,0,0,1],[3,30,45,220,0,0,255,1],[6,30,45,225,0,0,255,0],[-1,-408,312,100,0,0,0,1],[1,-105,-160,220,0,0,255,1],[9,-105,-160,247,0,0,255,0],[-1,-408,312,100,0,0,0,1],[5,250,-110,220,0,0,255,1],[7,250,-110,269,0,0,138,0]],[[0,-310,-20,220,0,0,255,1],[9,-310,-20,193,0,0,255,0],[-1,-408,312,100,0,0,0,1],[4,30,45,220,0,0,255,1],[7,30,45,215,0,0,255,0],[-1,-408,312,100,0,0,0,1],[2,-105,-160,220,0,0,255,1],[10,-105,-160,236,0,0,255,0],[-1,-408,312,100,0,0,0,1],[0,250,-110,220,0,0,255,1],[8,250,-110,258,0,0,197,0]],[[1,-310,-20,220,0,0,255,1],[10,-310,-20,182,0,0,255,0],[-1,-408,312,100,0,0,0,1],[5,30,45,220,0,0,255,1],[8,30,45,204,0,0,255,0],[-1,-408,312,100,0,0,0,1],[3,-105,-160,220,0,0,255,1],[6,-105,-160,225,0,0,255,0],[-1,-408,312,100,0,0,0,1],[1,250,-110,220,0,0,255,1],[9,250,-110,247,0,0,255,0]],[[2,-310,-20,220,0,0,255,1],[6,-310,-20,171,0,0,255,0],[-1,-408,312,100,0,0,0,1],[0,30,45,220,0,0,255,1],[9,30,45,193,0,0,255,0],[-1,-408,312,100,0,0,0,1],[4,-105,-160,220,0,0,255,1],[7,-105,-160,215,0,0,255,0],[-1,-408,312,100,0,0,0,1],[2,250,-110,220,0,0,255,1],[10,250,-110,236,0,0,255,0]],[[3,-310,-20,220,0,0,255,1],[7,-310,-20,160,0,0,255,0],[-1,-408,312,100,0,0,0,1],[1,30,45,220,0,0,255,1],[10,30,45,182,0,0,255,0],[-1,-408,312,100,0,0,0,1],[5,-105,-160,220,0,0,255,1],[8,-105,-160,204,0,0,255,0],[-1,-408,312,100,0,0,0,1],[3,250,-110,220,0,0,255,1],[6,250,-110,225,0,0,255,0]],[[4,-310,-20,220,0,0,255,1],[8,-310,-20,100,0,0,255,0],[-1,-408,312,100,0,0,0,1],[2,30,45,220,0,0,255,1],[6,30,45,171,0,0,255,0],[-1,-408,312,100,0,0,0,1],[0,-105,-160,220,0,0,255,1],[9,-105,-160,193,0,0,255,0],[-1,-408,312,100,0,0,0,1],[4,250,-110,220,0,0,255,1],[7,250,-110,215,0,0,255,0]],[[5,-310,-20,220,0,0,255,1],[9,-310,-20,220,0,0,180,0],[11,-310,-20,200,0,0,255,0],[3,30,45,220,0,0,255,1],[7,30,45,160,0,0,255,0],[-1,-408,312,100,0,0,0,1],[1,-105,-160,220,0,0,255,1],[10,-105,-160,182,0,0,255,0],[-1,-408,312,100,0,0,0,1],[5,250,-110,220,0,0,255,1],[8,250,-110,204,0,0,255,0]],[[10,-310,-20,220,0,0,0,1],[10,-310,-20,300,0,0,100,0],[12,-310,-20,200,0,0,255,0],[4,30,45,220,0,0,255,1],[8,30,45,100,0,0,255,0],[-1,-408,312,100,0,0,0,1],[2,-105,-160,220,0,0,255,1],[6,-105,-160,171,0,0,255,0],[-1,-408,312,100,0,0,0,1],[0,250,-110,220,0,0,255,1],[9,250,-110,193,0,0,255,0]],[[-1,-408,309.5,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[15,-310,-20,240,0,0,255,0],[5,30,45,220,0,0,255,1],[9,30,45,220,0,0,180,0],[11,30,45,200,0,0,255,0],[3,-105,-160,220,0,0,255,1],[7,-105,-160,160,0,0,255,0],[-1,-408,312,100,0,0,0,1],[1,250,-110,220,0,0,255,1],[10,250,-110,182,0,0,255,0]],[[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[16,-310,-20,260,0,0,255,0],[10,30,45,220,0,0,0,1],[10,30,45,300,0,0,100,0],[12,30,45,200,0,0,255,0],[4,-105,-160,220,0,0,255,1],[8,-105,-160,100,0,0,255,0],[-1,-408,312,100,0,0,0,1],[2,250,-110,220,0,0,255,1],[6,250,-110,171,0,0,255,0]],[[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[17,-310,-20,280,0,0,255,0],[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[15,30,45,240,0,0,255,0],[5,-105,-160,220,0,0,255,1],[9,-105,-160,220,0,0,180,0],[11,-105,-160,200,0,0,255,0],[3,250,-110,220,0,0,255,1],[7,250,-110,160,0,0,255,0]],[[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[18,-310,-20,280,0,0,255,0],[-1,-408,312,100,0,0,0,1],[-1,-408,287,100,0,0,0,1],[16,30,45,260,0,0,255,0],[10,-105,-160,220,0,0,0,1],[10,-105,-160,300,0,0,100,0],[12,-105,-160,200,0,0,255,0],[4,250,-110,220,0,0,255,1],[8,250,-110,100,0,0,255,0]],[[-1,-408,174.5,100,0,0,0,1],[-1,-408,209.5,100,0,0,0,1],[-1,-408,189.5,100,0,0,0,1],[-1,-408,194.5,100,0,0,0,1],[-1,-408,199.5,100,0,0,0,1],[17,30,45,280,0,0,255,0],[-1,-408,202,100,0,0,0,1],[-1,-408,167,100,0,0,0,1],[15,-105,-160,240,0,0,255,0],[5,250,-110,220,0,0,255,1],[9,250,-110,220,0,0,180,0],[11,250,-110,200,0,0,255,0]],[[-1,-408,142,100,0,0,0,1],[-1,-408,187,100,0,0,0,1],[-1,-408,149.5,100,0,0,0,1],[-1,-408,157,100,0,0,0,1],[-1,-408,159.5,100,0,0,0,1],[18,30,45,280,0,0,255,0],[-1,-408,184.5,100,0,0,0,1],[-1,-408,224.5,100,0,0,0,1],[16,-105,-160,260,0,0,255,0],[10,250,-110,220,0,0,0,1],[10,250,-110,300,0,0,100,0],[12,250,-110,200,0,0,255,0]],[[-1,-408,184.5,100,0,0,0,1],[-1,-408,194.5,100,0,0,0,1],[-1,-408,142,100,0,0,0,1],[-1,-408,142,100,0,0,0,1],[-1,-408,139.5,100,0,0,0,1],[-1,-408,124.5,100,0,0,0,1],[-1,-408,134.5,100,0,0,0,1],[-1,-408,124.5,100,0,0,0,1],[17,-105,-160,280,0,0,255,0],[-1,-408,137,100,0,0,0,1],[-1,-408,162,100,0,0,0,1],[15,250,-110,240,0,0,255,0]],[[-1,-408,144.5,100,0,0,0,1],[-1,-408,157,100,0,0,0,1],[-1,-408,139.5,100,0,0,0,1],[-1,-408,147,100,0,0,0,1],[-1,-408,139.5,100,0,0,0,1],[-1,-408,149.5,100,0,0,0,1],[-1,-408,152,100,0,0,0,1],[-1,-408,139.5,100,0,0,0,1],[18,-105,-160,280,0,0,255,0],[-1,-408,117,100,0,0,0,1],[-1,-408,94.5,100,0,0,0,1],[16,250,-110,260,0,0,255,0]],[[-1,-408,-3,100,0,0,0,1],[-1,-408,4.5,100,0,0,0,1],[-1,-408,24.5,100,0,0,0,1],[-1,-408,2,100,0,0,0,1],[-1,-408,-20.5,100,0,0,0,1],[-1,-408,17,100,0,0,0,1],[-1,-408,42,100,0,0,0,1],[-1,-408,39.5,100,0,0,0,1],[-1,-408,57,100,0,0,0,1],[-1,-408,47,100,0,0,0,1],[-1,-408,34.5,100,0,0,0,1],[17,250,-110,280,0,0,255,0]],[[-1,-408,44.5,100,0,0,0,1],[-1,-390.5,49.5,100,0,0,0,1],[-1,-408,54.5,100,0,0,0,1],[-1,-408,52,100,0,0,0,1],[-1,-408,92,100,0,0,0,1],[-1,-408,84.5,100,0,0,0,1],[-1,-368,62,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[-1,-408,312,100,0,0,0,1],[18,250,-110,280,0,0,255,0]]],"name":"無属性/全体1","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Wind2","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Evasion2","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":4,"se":{"name":"Wind2","pan":0,"pitch":150,"volume":90}},{"flashColor":[221,238,255,255],"flashDuration":5,"flashScope":2,"frame":18,"se":{"name":"Explosion1","pan":0,"pitch":100,"volume":90}},{"flashColor":[221,238,255,170],"flashDuration":5,"flashScope":2,"frame":20,"se":null},{"flashColor":[255,221,170,255],"flashDuration":5,"flashScope":1,"frame":19,"se":null},{"flashColor":[255,221,170,187],"flashDuration":5,"flashScope":1,"frame":21,"se":{"name":"Explosion2","pan":0,"pitch":120,"volume":90}},{"flashColor":[255,221,170,187],"flashDuration":5,"flashScope":1,"frame":23,"se":null}]}, +{"id":109,"animation1Hue":0,"animation1Name":"Explosion2","animation2Hue":0,"animation2Name":"Explosion1","frames":[[[0,0,0,450,0,0,255,1]],[[1,0,0,450,0,0,255,1]],[[2,0,0,525,0,0,255,1]],[[3,0,0,525,0,0,255,1]],[[4,0,0,495,0,0,255,1]],[[5,0,0,405,0,0,255,1]],[[6,0,0,405,0,0,255,1]],[[7,0,0,405,0,0,255,1]],[[8,0,0,405,0,0,255,1]],[[9,0,0,405,0,0,255,1]],[[10,0,0,405,0,0,255,1]],[[11,0,0,405,0,0,255,1]],[[12,0,0,450,0,0,255,1]],[[13,0,0,450,0,0,255,1],[24,0,0,450,0,0,255,1],[100,-300,12,300,0,0,255,1],[100,312,-48,300,0,0,255,1]],[[14,0,0,450,0,0,255,1],[25,0,0,450,0,0,255,1],[101,-300,12,300,0,0,255,1],[101,312,-48,300,0,0,255,1]],[[15,0,0,450,0,0,255,1],[26,0,0,450,0,0,255,1],[102,-300,12,300,0,0,255,1],[102,312,-48,300,0,0,255,1]],[[16,0,0,450,0,0,255,1],[27,0,0,450,0,0,255,1],[103,-300,12,300,0,0,255,1],[103,312,-48,300,0,0,255,1]],[[17,0,0,450,0,0,255,1],[28,0,0,450,0,0,255,1],[104,-300,12,300,0,0,255,1],[104,312,-48,300,0,0,255,1],[100,12,72,300,0,0,255,1]],[[18,0,0,450,0,0,255,1],[29,0,0,450,0,0,255,1],[105,-300,12,300,0,0,255,1],[105,312,-48,300,0,0,255,1],[101,12,72,300,0,0,255,1]],[[19,0,0,450,0,0,255,1],[106,-300,12,300,0,0,200,1],[106,312,-48,300,0,0,200,1],[102,12,72,300,0,0,255,1]],[[20,0,0,450,0,0,255,1],[107,-300,12,300,0,0,150,1],[107,312,-48,300,0,0,150,1],[103,12,72,300,0,0,255,1]],[[22,0,0,450,0,0,200,1],[108,-300,12,300,0,0,100,1],[108,312,-48,300,0,0,100,1],[104,12,72,300,0,0,255,1]],[[23,0,0,450,0,0,150,1],[105,12,72,300,0,0,255,1]],[[23,0,0,465,0,0,100,1],[106,12,72,300,0,0,200,1]],[[23,0,0,472,0,0,50,1],[107,12,72,300,0,0,150,1]],[[108,12,72,300,0,0,100,1]]],"name":"無属性/全体2","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Sand","pan":0,"pitch":100,"volume":100}},{"flashColor":[255,255,187,187],"flashDuration":5,"flashScope":1,"frame":1,"se":{"name":"Flash2","pan":0,"pitch":120,"volume":80}},{"conditions":0,"flashColor":[255,238,221,136],"flashDuration":6,"flashScope":2,"frame":2,"se":null},{"flashColor":[255,221,170,187],"flashDuration":2,"flashScope":1,"frame":10,"se":{"name":"Explosion2","pan":0,"pitch":110,"volume":100}},{"conditions":1,"flashColor":[255,255,221,221],"flashDuration":3,"flashScope":2,"frame":11,"se":null},{"flashColor":[255,221,170,187],"flashDuration":3,"flashScope":1,"frame":13,"se":null},{"flashColor":[255,221,170,187],"flashDuration":10,"flashScope":1,"frame":16,"se":null}]}, +{"id":110,"animation1Hue":0,"animation1Name":"Meteor","animation2Hue":0,"animation2Name":"Gun2","frames":[[[0,240,-192,225,0,0,100,0]],[[0,240,-192,195,0,0,150,0]],[[0,240,-192,180,0,0,180,0]],[[0,240,-192,165,0,0,200,0]],[[0,240,-192,157,0,0,200,0],[2,-240,0,225,0,0,100,0]],[[0,240,-192,150,0,0,200,0],[2,-240,0,195,0,0,150,0]],[[0,240,-192,150,0,0,150,0],[2,-240,0,180,0,0,180,0]],[[0,240,-192,150,0,0,100,0],[2,-240,0,165,0,0,200,0]],[[0,240,-192,150,0,0,50,0],[2,-240,0,157,0,0,200,0],[0,-240,-192,225,0,0,100,0]],[[0,240,-192,150,0,0,20,0],[2,-240,0,150,0,0,200,0],[0,-240,-192,195,0,0,150,0]],[[2,-240,0,150,0,0,150,0],[0,-240,-192,180,0,0,180,0]],[[2,-240,0,150,0,0,100,0],[0,-240,-192,165,0,0,200,0]],[[2,-240,0,150,0,0,50,0],[0,-240,-192,157,0,0,200,0],[2,240,0,225,0,0,100,0]],[[2,-240,0,150,0,0,20,0],[0,-240,-192,150,0,0,200,0],[2,240,0,195,0,0,150,0]],[[0,-240,-192,150,0,0,150,0],[2,240,0,180,0,0,180,0]],[[0,-240,-192,150,0,0,100,0],[2,240,0,165,0,0,200,0]],[[0,-240,-192,150,0,0,50,0],[2,240,0,157,0,0,200,0],[1,0,-96,300,0,0,100,0]],[[0,-240,-192,150,0,0,20,0],[2,240,0,150,0,0,200,0],[1,0,-96,270,0,0,150,0]],[[2,240,0,150,0,0,150,0],[1,0,-96,255,0,0,180,0]],[[2,240,0,150,0,0,100,0],[1,0,-96,240,0,0,200,0]],[[2,240,0,150,0,0,50,0],[1,0,-96,232,0,0,200,0]],[[2,240,0,150,0,0,20,0],[1,0,-96,228,0,0,200,0]],[[1,0,-96,225,0,0,200,0]],[[1,0,-96,225,0,0,200,0]],[[1,0,-96,225,0,0,255,0],[103,0,-96,300,0,0,255,1],[1,0,-96,225,0,0,150,1]],[[1,0,-96,225,0,0,255,0],[1,0,-96,270,0,0,200,1],[104,0,-96,427,0,0,255,1]],[[1,0,-96,285,0,0,150,1],[105,0,-96,427,0,0,255,1]],[[1,0,-96,292,0,0,100,0],[106,0,-96,427,0,0,255,1]],[[1,0,-96,300,0,0,60,0],[107,0,-96,427,0,0,255,1]],[[1,0,-96,304,0,0,30,0],[108,0,-96,427,0,0,255,1]],[[109,0,-96,427,0,0,255,1]],[[110,0,-96,427,0,0,255,1]],[[111,0,-96,427,0,0,255,1]],[[112,0,-96,427,0,0,255,1]],[[112,0,-96,420,0,0,150,1],[3,156,-84,240,0,0,255,0]],[[112,0,-96,412,0,0,50,1],[4,156,-84,240,0,0,255,0]],[[5,156,-84,240,0,0,255,0],[3,-168,-96,240,0,0,255,0],[15,120,84,300,0,0,255,1]],[[6,156,-84,240,0,0,255,0],[4,-168,-96,240,0,0,255,0],[16,120,84,300,0,0,255,1]],[[7,156,-84,240,0,0,255,0],[5,-168,-96,240,0,0,255,0],[3,240,-84,270,0,0,255,0],[17,120,84,300,0,0,255,1],[15,-204,72,300,0,0,255,1]],[[8,156,-84,240,0,0,255,0],[6,-168,-96,240,0,0,255,0],[4,240,-84,270,0,0,255,0],[3,-336,-84,270,0,0,255,0],[18,120,84,300,0,0,255,1],[16,-204,72,300,0,0,255,1]],[[9,156,-84,240,0,0,255,0],[7,-168,-96,240,0,0,255,0],[5,240,-84,270,0,0,255,0],[4,-336,-84,270,0,0,255,0],[19,120,84,300,0,0,255,1],[17,-204,72,300,0,0,255,1],[15,192,96,330,0,0,255,1]],[[10,156,-84,240,0,0,255,0],[8,-168,-96,240,0,0,255,0],[6,240,-84,270,0,0,255,0],[5,-336,-84,270,0,0,255,0],[20,120,84,300,0,0,255,1],[18,-204,72,300,0,0,255,1],[15,-384,96,330,0,0,255,1],[16,192,96,330,0,0,255,1]],[[11,156,-84,240,0,0,255,0],[9,-168,-96,240,0,0,255,0],[7,240,-84,270,0,0,255,0],[6,-336,-84,270,0,0,255,0],[21,120,84,300,0,0,255,1],[19,-204,72,300,0,0,255,1],[16,-384,96,330,0,0,255,1],[17,192,96,330,0,0,255,1]],[[12,156,-84,240,0,0,255,0],[10,-168,-96,240,0,0,255,0],[8,240,-84,270,0,0,255,0],[7,-336,-84,270,0,0,255,0],[20,-204,72,300,0,0,255,1],[17,-384,96,330,0,0,255,1],[18,192,96,330,0,0,255,1]],[[13,156,-84,240,0,0,255,0],[11,-168,-96,240,0,0,255,0],[9,240,-84,270,0,0,255,0],[8,-336,-84,270,0,0,255,0],[3,-12,-108,300,0,0,255,0],[21,-204,72,300,0,0,255,1],[18,-384,96,330,0,0,255,1],[19,192,96,330,0,0,255,1]],[[14,156,-84,240,0,0,255,0],[12,-168,-96,240,0,0,255,0],[10,240,-84,270,0,0,255,0],[9,-336,-84,270,0,0,255,0],[4,-12,-108,300,0,0,255,0],[19,-384,96,330,0,0,255,1],[20,192,96,330,0,0,255,1]],[[13,-168,-96,240,0,0,255,0],[11,240,-84,270,0,0,255,0],[10,-336,-84,270,0,0,255,0],[5,-12,-108,300,0,0,255,0],[20,-384,96,330,0,0,255,1],[21,192,96,330,0,0,255,1],[15,-72,96,360,0,0,255,1]],[[14,-168,-96,240,0,0,255,0],[12,240,-84,270,0,0,255,0],[11,-336,-84,270,0,0,255,0],[6,-12,-108,300,0,0,255,0],[3,-252,-84,240,0,0,255,0],[21,-384,96,330,0,0,255,1],[16,-72,96,360,0,0,255,1]],[[13,240,-84,270,0,0,255,0],[12,-336,-84,270,0,0,255,0],[3,108,-84,240,0,0,255,0],[7,-12,-108,300,0,0,255,0],[4,-252,-84,240,0,0,255,0],[17,-72,96,360,0,0,255,1]],[[14,240,-84,270,0,0,255,0],[13,-336,-84,270,0,0,255,0],[4,108,-84,240,0,0,255,0],[8,-12,-108,300,0,0,255,0],[5,-252,-84,240,0,0,255,0],[18,-72,96,360,0,0,255,1],[15,-300,84,300,0,0,255,1]],[[14,-336,-84,270,0,0,255,0],[9,-12,-108,300,0,0,255,0],[5,108,-84,240,0,0,255,0],[6,-252,-84,240,0,0,255,0],[3,312,-84,270,0,0,255,0],[19,-72,96,360,0,0,255,1],[16,-300,84,300,0,0,255,1],[15,72,84,300,0,0,255,1]],[[10,-12,-108,300,0,0,255,0],[6,108,-84,240,0,0,255,0],[7,-252,-84,240,0,0,255,0],[4,312,-84,270,0,0,255,0],[20,-72,96,360,0,0,255,1],[17,-300,84,300,0,0,255,1],[16,72,84,300,0,0,255,1]],[[11,-12,-108,300,0,0,255,0],[8,-252,-84,240,0,0,255,0],[7,108,-84,240,0,0,255,0],[5,312,-84,270,0,0,255,0],[3,-192,-108,300,0,0,255,0],[21,-72,96,360,0,0,255,1],[18,-300,84,300,0,0,255,1],[17,72,84,300,0,0,255,1],[15,264,96,330,0,0,255,1]],[[12,-12,-108,300,0,0,255,0],[9,-252,-84,240,0,0,255,0],[6,312,-84,270,0,0,255,0],[8,108,-84,240,0,0,255,0],[4,-192,-108,300,0,0,255,0],[3,-408,-84,240,0,0,255,0],[19,-300,84,300,0,0,255,1],[18,72,84,300,0,0,255,1],[16,264,96,330,0,0,255,1]],[[13,-12,-108,300,0,0,255,0],[10,-252,-84,240,0,0,255,0],[7,312,-84,270,0,0,255,0],[9,108,-84,240,0,0,255,0],[5,-192,-108,300,0,0,255,0],[4,-408,-84,240,0,0,255,0],[20,-300,84,300,0,0,255,1],[19,72,84,300,0,0,255,1],[17,264,96,330,0,0,255,1],[15,-252,96,360,0,0,255,1]],[[14,-12,-108,300,0,0,255,0],[11,-252,-84,240,0,0,255,0],[8,312,-84,270,0,0,255,0],[10,108,-84,240,0,0,255,0],[6,-192,-108,300,0,0,255,0],[5,-408,-84,240,0,0,255,0],[21,-300,84,300,0,0,255,1],[20,72,84,300,0,0,255,1],[18,264,96,330,0,0,255,1],[16,-252,96,360,0,0,255,1]],[[12,-252,-84,240,0,0,255,0],[9,312,-84,270,0,0,255,0],[11,108,-84,240,0,0,255,0],[7,-192,-108,300,0,0,255,0],[6,-408,-84,240,0,0,255,0],[21,72,84,300,0,0,255,1],[19,264,96,330,0,0,255,1],[17,-252,96,360,0,0,255,1]],[[13,-252,-84,240,0,0,255,0],[10,312,-84,270,0,0,255,0],[12,108,-84,240,0,0,255,0],[8,-192,-108,300,0,0,255,0],[7,-408,-84,240,0,0,255,0],[20,264,96,330,0,0,255,1],[18,-252,96,360,0,0,255,1]],[[14,-252,-84,240,0,0,255,0],[11,312,-84,270,0,0,255,0],[9,-192,-108,300,0,0,255,0],[13,108,-84,240,0,0,255,0],[8,-408,-84,240,0,0,255,0],[21,264,96,330,0,0,255,1],[19,-252,96,360,0,0,255,1]],[[12,312,-84,270,0,0,255,0],[10,-192,-108,300,0,0,255,0],[14,108,-84,240,0,0,255,0],[9,-408,-84,240,0,0,255,0],[20,-252,96,360,0,0,255,1]],[[13,312,-84,270,0,0,255,0],[11,-192,-108,300,0,0,255,0],[10,-408,-84,240,0,0,255,0],[21,-252,96,360,0,0,255,1]],[[14,312,-84,270,0,0,255,0],[12,-192,-108,300,0,0,255,0],[11,-408,-84,240,0,0,255,0]],[[13,-192,-108,300,0,0,255,0],[12,-408,-84,240,0,0,255,0]],[[14,-192,-108,300,0,0,255,0],[13,-408,-84,240,0,0,255,0]],[[14,-408,-84,240,0,0,255,0]]],"name":"無属性/全体3","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Thunder7","pan":0,"pitch":80,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":23,"se":{"name":"Battle3","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,255,221,187],"flashDuration":8,"flashScope":2,"frame":24,"se":null},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":34,"se":{"name":"Explosion1","pan":0,"pitch":90,"volume":90}},{"flashColor":[255,221,102,204],"flashDuration":3,"flashScope":2,"frame":36,"se":null},{"flashColor":[255,187,102,204],"flashDuration":5,"flashScope":1,"frame":37,"se":{"name":"Fire3","pan":0,"pitch":130,"volume":95}},{"flashColor":[255,102,68,221],"flashDuration":5,"flashScope":1,"frame":40,"se":{"name":"Fire3","pan":0,"pitch":130,"volume":95}},{"flashColor":[255,221,102,204],"flashDuration":3,"flashScope":2,"frame":41,"se":null},{"flashColor":[255,204,0,221],"flashDuration":5,"flashScope":1,"frame":46,"se":{"name":"Fire3","pan":0,"pitch":130,"volume":95}},{"flashColor":[255,153,51,238],"flashDuration":5,"flashScope":1,"frame":50,"se":{"name":"Fire3","pan":0,"pitch":130,"volume":95}},{"flashColor":[255,204,102,170],"flashDuration":3,"flashScope":2,"frame":50,"se":null},{"flashColor":[255,221,51,204],"flashDuration":3,"flashScope":1,"frame":52,"se":{"name":"Fire3","pan":0,"pitch":130,"volume":95}},{"flashColor":[255,170,85,153],"flashDuration":3,"flashScope":2,"frame":54,"se":null},{"flashColor":[255,153,119,221],"flashDuration":5,"flashScope":1,"frame":55,"se":{"name":"Fire3","pan":0,"pitch":130,"volume":95}}]}, +{"id":111,"animation1Hue":0,"animation1Name":"Gun1","animation2Hue":0,"animation2Name":"","frames":[[[11,0,0,250,0,0,255,1],[1,0,0,200,0,0,200,0],[0,0,0,280,0,0,255,1]],[[17,0,0,250,0,0,255,0],[12,0,0,230,0,0,255,1],[1,0,0,300,0,0,255,0]],[[2,0,0,240,0,0,255,0],[13,0,0,250,0,0,255,1],[18,0,0,250,0,0,255,0]],[[2,0,0,240,0,0,255,0],[14,0,0,250,0,0,255,1],[19,0,0,250,0,0,255,0]],[[2,0,0,240,0,0,255,0],[15,0,0,250,0,0,255,1],[20,0,0,250,0,0,255,0]],[[2,0,0,240,0,0,255,0],[16,0,0,250,0,0,255,1]],[[2,0,0,240,0,0,255,0]],[[2,0,0,240,0,0,255,0]],[[2,0,0,240,0,0,255,0]],[[4,0,0,240,0,0,255,0]],[[5,0,0,240,0,0,255,0]],[[7,0,0,240,0,0,255,0]],[[8,0,0,240,0,0,188,0]],[[10,0,0,240,0,0,100,0]]],"name":"銃撃/単発","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Gun1","pan":0,"pitch":110,"volume":90}},{"flashColor":[255,238,204,119],"flashDuration":5,"flashScope":2,"frame":1,"se":null},{"flashColor":[255,238,204,204],"flashDuration":5,"flashScope":1,"frame":2,"se":null}]}, +{"id":112,"animation1Hue":0,"animation1Name":"Gun3","animation2Hue":0,"animation2Name":"","frames":[[[0,24,72,180,0,0,255,1]],[[1,24,72,180,0,0,255,1]],[[2,24,72,180,0,0,255,1],[0,-36,12,180,0,1,255,1]],[[1,-36,12,180,0,1,255,1],[8,24,72,180,0,0,255,0],[3,24,72,180,0,0,255,1]],[[2,-36,12,180,0,1,255,1],[9,24,72,180,0,0,255,0],[4,24,72,180,0,0,255,1],[0,36,-24,180,0,1,255,1]],[[10,24,72,180,0,0,255,0],[5,24,72,180,0,0,255,1],[8,-36,12,180,0,1,255,0],[3,-36,12,180,0,1,255,1],[1,36,-24,180,0,1,255,1]],[[2,36,-24,180,0,1,255,1],[11,24,72,180,0,0,255,0],[9,-36,12,180,0,1,255,0],[6,24,72,180,0,0,255,1],[4,-36,12,180,0,1,255,1],[0,-48,-60,180,0,0,255,1]],[[12,24,72,180,0,0,255,0],[7,24,72,180,0,0,255,1],[8,36,-24,180,0,1,255,0],[10,-36,12,180,0,1,255,0],[5,-36,12,180,0,1,255,1],[3,36,-24,180,0,1,255,1],[1,-48,-60,180,0,0,255,1]],[[11,-36,12,180,0,1,255,0],[9,36,-24,180,0,1,255,0],[2,-48,-60,180,0,0,255,1],[13,24,72,180,0,0,255,0],[6,-36,12,180,0,1,255,1],[4,36,-24,180,0,1,255,1],[0,24,-96,180,0,0,255,1]],[[14,24,72,180,0,0,255,0],[12,-36,12,180,0,1,255,0],[8,-48,-60,180,0,0,255,0],[7,-36,12,180,0,1,255,1],[10,36,-24,180,0,1,255,0],[5,36,-24,180,0,1,255,1],[3,-48,-60,180,0,0,255,1],[1,24,-96,180,0,0,255,1]],[[15,24,72,180,0,0,255,0],[9,-48,-60,180,0,0,255,0],[11,36,-24,180,0,1,255,0],[2,24,-96,180,0,1,255,1],[13,-36,12,180,0,1,255,0],[6,36,-24,180,0,1,255,1],[4,-48,-60,180,0,0,255,1]],[[16,24,72,180,0,0,255,0],[14,-36,12,180,0,1,255,0],[7,36,-24,180,0,1,255,1],[12,36,-24,180,0,1,255,0],[8,24,-96,180,0,1,255,0],[10,-48,-60,180,0,0,255,0],[5,-48,-60,180,0,0,255,1],[3,24,-96,180,0,1,255,1],[-1,0,0,30,0,0,0,0]],[[16,24,72,180,0,0,255,0],[11,-48,-60,180,0,0,255,0],[13,36,-24,180,0,1,255,0],[9,24,-96,180,0,1,255,0],[6,-48,-60,180,0,0,255,1],[15,-36,12,180,0,1,255,0],[4,24,-96,180,0,1,255,1]],[[16,24,72,180,0,0,255,0],[12,-48,-60,180,0,0,255,0],[14,36,-24,180,0,1,255,0],[10,24,-96,180,0,1,255,0],[7,-48,-60,180,0,0,255,1],[16,-36,12,180,0,1,255,0],[5,24,-96,180,0,1,255,1]],[[16,24,72,180,0,0,255,0],[16,-36,12,180,0,1,255,0],[15,36,-24,180,0,1,255,0],[13,-48,-60,180,0,0,255,0],[11,24,-96,180,0,1,255,0],[6,24,-96,180,0,1,255,1]],[[16,24,72,180,0,0,255,0],[16,-36,12,180,0,1,255,0],[16,36,-24,180,0,1,255,0],[12,24,-96,180,0,1,255,0],[7,24,-96,180,0,1,255,1],[14,-48,-60,180,0,0,255,0]],[[16,24,72,180,0,0,255,0],[16,-36,12,180,0,1,255,0],[16,36,-24,180,0,1,255,0],[13,24,-96,180,0,1,255,0],[15,-48,-60,180,0,0,255,0]],[[16,24,72,180,0,0,255,0],[16,-36,12,180,0,1,255,0],[16,36,-24,180,0,1,255,0],[16,-48,-60,180,0,0,255,0],[14,24,-96,180,0,1,255,0]],[[16,24,72,180,0,0,255,0],[16,-36,12,180,0,1,255,0],[16,36,-24,180,0,1,255,0],[16,-48,-60,180,0,0,255,0],[15,24,-96,180,0,1,255,0]],[[16,24,72,180,0,0,255,0],[16,-36,12,180,0,1,255,0],[16,36,-24,180,0,1,255,0],[16,-48,-60,180,0,0,255,0],[16,24,-96,180,0,1,255,0]],[[16,24,72,180,0,0,150,0],[16,-36,12,180,0,1,150,0],[16,36,-24,180,0,1,150,0],[16,-48,-60,180,0,0,150,0],[16,24,-96,180,0,1,150,0]],[[16,24,72,180,0,0,100,0],[16,-36,12,180,0,1,100,0],[16,36,-24,180,0,1,100,0],[16,-48,-60,180,0,0,100,0],[16,24,-96,180,0,1,100,0]],[[16,24,72,180,0,0,50,0],[16,-36,12,180,0,1,50,0],[16,36,-24,180,0,1,50,0],[16,-48,-60,180,0,0,50,0],[16,24,-96,180,0,1,50,0]]],"name":"銃撃/連発","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Gun2","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,255,221,136],"flashDuration":1,"flashScope":1,"frame":2,"se":null},{"flashColor":[255,255,221,136],"flashDuration":1,"flashScope":1,"frame":4,"se":null},{"flashColor":[255,255,221,136],"flashDuration":1,"flashScope":1,"frame":6,"se":null},{"flashColor":[255,255,221,136],"flashDuration":1,"flashScope":1,"frame":8,"se":null},{"flashColor":[255,255,221,136],"flashDuration":3,"flashScope":1,"frame":10,"se":null}]}, +{"id":113,"animation1Hue":0,"animation1Name":"Gun1","animation2Hue":0,"animation2Name":"","frames":[[[2,-250,-3,280,0,0,255,0],[1,-250,-3,260,0,0,188,0],[11,-250,-3,280,0,0,255,1],[0,-250,-3,280,0,0,255,1],[1,-354,-166,140,0,0,255,0]],[[2,-250,-3,280,0,0,255,0],[2,34,-112,320,0,0,255,0],[17,-250,-3,280,0,0,255,0],[1,34,-112,300,0,0,188,0],[1,-250,-3,280,0,0,255,0],[12,-250,-3,280,0,0,255,1],[11,34,-112,320,0,0,255,1],[0,34,-112,320,0,0,255,1],[1,-42.5,72,140,0,0,255,0]],[[2,-250,-3,280,0,0,255,0],[2,34,-112,320,0,0,255,0],[2,280,10,260,0,0,255,0],[18,-250,-3,280,0,0,255,0],[17,34,-112,320,0,0,255,0],[1,280,10,240,0,0,188,0],[13,-250,-3,280,0,0,255,1],[12,34,-112,320,0,0,255,1],[11,280,10,260,0,0,255,1],[0,-250,-3,280,0,0,0,1],[1,34,-112,320,0,0,255,0],[0,280,10,260,0,0,255,1],[1,256.5,-152.5,140,0,0,255,0]],[[2,-250,-3,280,0,0,255,0],[2,34,-112,320,0,0,255,0],[2,280,10,260,0,0,255,0],[19,-250,-3,280,0,0,255,0],[18,34,-112,320,0,0,255,0],[17,280,10,260,0,0,255,0],[14,-250,-3,280,0,0,255,1],[13,34,-112,320,0,0,255,1],[12,280,10,260,0,0,255,1],[1,280,10,260,0,0,255,0]],[[2,-250,-3,280,0,0,255,0],[2,34,-112,320,0,0,255,0],[2,280,10,260,0,0,255,0],[20,-250,-3,280,0,0,255,0],[19,34,-112,320,0,0,255,0],[18,280,10,260,0,0,255,0],[15,-250,-3,280,0,0,255,1],[14,34,-112,320,0,0,255,1],[13,280,10,260,0,0,255,1]],[[2,-250,-3,280,0,0,255,0],[2,34,-112,320,0,0,255,0],[2,280,10,260,0,0,255,0],[20,-250,-3,280,0,0,0,0],[20,34,-112,320,0,0,255,0],[19,280,10,260,0,0,255,0],[16,-250,-3,280,0,0,255,1],[15,34,-112,320,0,0,255,1],[14,280,10,260,0,0,255,1]],[[2,-250,-3,280,0,0,255,0],[2,34,-112,320,0,0,255,0],[2,280,10,260,0,0,255,0],[20,34,-112,320,0,0,0,0],[20,280,8,260,0,0,255,0],[16,34,-112,320,0,0,255,1],[15,280,10,260,0,0,255,1]],[[2,-250,-3,280,0,0,255,0],[2,34,-112,320,0,0,255,0],[2,280,10,260,0,0,255,0],[16,280,10,260,0,0,255,1]],[[2,-250,-3,280,0,0,255,0],[2,34,-112,320,0,0,255,0],[2,280,10,260,0,0,255,0]],[[2,-250,-3,280,0,0,255,0],[2,34,-112,320,0,0,255,0],[2,280,10,260,0,0,255,0]],[[2,-250,-3,280,0,0,255,0],[2,34,-112,320,0,0,255,0],[2,280,10,260,0,0,255,0]],[[4,-250,-3,280,0,0,255,0],[4,34,-112,320,0,0,255,0],[4,280,10,260,0,0,255,0]],[[5,-250,-3,280,0,0,255,0],[5,34,-112,320,0,0,255,0],[5,280,10,260,0,0,255,0]],[[7,-250,-3,280,0,0,255,0],[7,34,-112,320,0,0,255,0],[7,280,10,260,0,0,255,0]],[[8,-250,-3,280,0,0,188,0],[8,34,-112,320,0,0,188,0],[8,280,10,260,0,0,188,0]],[[10,-250,-3,280,0,0,100,0],[10,34,-112,320,0,0,100,0],[10,280,10,260,0,0,100,0]]],"name":"銃撃/全体","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Gun1","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,153],"flashDuration":2,"flashScope":2,"frame":2,"se":{"name":"Gun1","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,153],"flashDuration":2,"flashScope":1,"frame":3,"se":null},{"flashColor":[255,255,204,153],"flashDuration":2,"flashScope":2,"frame":4,"se":{"name":"Gun1","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,153],"flashDuration":5,"flashScope":1,"frame":5,"se":null}]}, +{"id":114,"animation1Hue":0,"animation1Name":"Gun2","animation2Hue":0,"animation2Name":"","frames":[[[0,240,-168,135,0,0,125,1],[0,-240,-24,135,0,0,125,1]],[[0,-240,-24,135,0,0,255,1],[0,240,-168,135,0,0,255,1]],[[0,-240,-24,135,0,0,125,1],[0,240,-168,135,0,0,125,1]],[[0,-240,-24,135,0,0,255,1],[0,240,-168,135,0,0,255,1]],[[0,-240,-24,135,0,0,125,1],[0,240,-168,135,0,0,125,1]],[[0,-240,-24,135,0,0,255,1],[0,240,-168,135,0,0,255,1]],[[0,-240,-24,135,0,0,125,1],[0,240,-168,135,0,0,125,1]],[[0,-240,-24,135,0,0,255,1],[0,240,-168,135,0,0,255,1]],[[0,-240,-24,135,0,0,255,1],[0,240,-168,135,0,0,255,1]],[[0,-240,-24,135,0,0,255,1],[0,240,-168,135,0,0,255,1]],[[0,-200,-36,135,0,0,255,1],[0,199,-156,135,0,0,255,1]],[[0,-159,-48,135,0,0,255,1],[0,159,-144,135,0,0,255,1]],[[0,-120,-60,135,0,0,255,1],[0,120,-132,135,0,0,255,1]],[[0,-80,-72,135,0,0,255,1],[0,79,-120,135,0,0,255,1]],[[0,-39,-84,135,0,0,255,1],[0,39,-108,135,0,0,255,1]],[[0,0,-96,135,0,0,255,1],[0,0,-96,135,0,0,255,1],[1,0,-96,135,0,0,255,0],[1,0,-96,165,0,0,200,1]],[[1,0,-96,135,0,0,255,0],[1,0,-96,225,0,0,150,1]],[[1,0,-96,135,0,0,255,0],[1,0,-96,240,0,0,140,1]],[[1,0,-96,135,0,0,255,0],[1,0,-96,247,0,0,120,1]],[[1,0,-96,135,0,0,255,0],[1,0,-96,252,0,0,100,1]],[[1,0,-96,135,0,0,255,0],[1,0,-96,255,0,0,50,1]],[[1,0,-96,135,0,0,255,0]],[[1,0,-96,135,0,0,255,0],[3,0,-96,300,0,0,255,1]],[[1,0,-96,135,0,0,255,0],[4,0,-96,427,0,0,255,1]],[[1,0,-96,135,0,0,255,0],[5,0,-96,427,0,0,255,1]],[[1,0,-96,135,0,0,255,0],[6,0,-96,427,0,0,255,1]],[[1,0,-96,135,0,0,255,0],[7,0,-96,427,0,0,255,1]],[[1,0,-96,135,0,0,255,0],[8,0,-96,427,0,0,255,1],[2,324,-24,375,45,0,255,1],[2,-312,-264,375,120,1,255,1]],[[1,0,-96,135,0,0,255,0],[9,0,-96,427,0,0,255,1],[2,288,-156,300,340,0,255,1],[2,-300,-96,300,340,0,255,1]],[[1,0,-96,135,0,0,255,0],[10,0,-96,427,0,0,255,1],[2,240,-216,180,300,0,255,1],[2,-252,-12,180,50,1,255,1]],[[1,0,-96,135,0,0,255,0],[11,0,-96,427,0,0,255,1],[2,156,-192,120,60,0,255,1],[2,-180,12,120,130,0,255,1]],[[1,0,-96,135,0,0,255,0],[12,0,-96,427,0,0,255,1],[2,96,-168,75,45,0,255,1],[2,-108,-24,75,160,1,255,1]],[[1,0,-96,135,0,0,150,0],[12,0,-96,427,0,0,100,1],[13,0,-96,427,0,0,255,1]],[[1,0,-96,135,0,0,100,0],[14,0,-96,450,0,0,255,1]],[[13,0,-96,427,0,0,255,0],[15,0,-96,450,0,0,255,1]],[[16,0,-96,427,0,0,255,1],[13,-216,-108,300,0,1,255,1]],[[17,0,-96,435,0,0,255,1],[14,-216,-108,375,0,1,255,1]],[[18,0,-96,450,0,0,255,1],[15,-216,-108,375,0,1,255,1],[13,228,-48,300,0,0,255,1]],[[19,0,-96,450,0,0,255,1],[16,-216,-108,375,0,1,255,1],[14,228,-48,375,0,1,255,1]],[[20,0,-96,450,0,0,255,1],[17,-216,-108,375,0,1,255,1],[15,228,-48,375,0,1,255,1]],[[21,0,-96,450,0,0,255,1],[18,-216,-108,375,0,1,255,1],[16,228,-48,375,0,1,255,1]],[[22,0,-96,450,0,0,255,1],[19,-216,-108,375,0,1,255,1],[17,228,-48,375,0,1,255,1]],[[23,0,-96,450,0,0,255,1],[20,-216,-108,375,0,1,255,1],[18,228,-48,375,0,1,255,1]],[[24,0,-96,450,0,0,255,1],[21,-216,-108,375,0,1,255,1],[19,228,-48,375,0,1,255,1]],[[22,-216,-108,382,0,1,255,1],[20,228,-48,375,0,1,255,1]],[[23,-216,-108,382,0,1,255,1],[21,228,-48,375,0,1,255,1]],[[24,-216,-108,382,0,1,255,1],[22,228,-48,382,0,1,255,1]],[[23,228,-48,382,0,1,255,1]],[[24,228,-48,382,0,1,255,1]]],"name":"銃撃/必殺技","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Phone","pan":0,"pitch":150,"volume":55}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":10,"se":{"name":"Skill1","pan":0,"pitch":95,"volume":80}},{"flashColor":[255,238,153,102],"flashDuration":8,"flashScope":2,"frame":15,"se":{"name":"Skill2","pan":0,"pitch":100,"volume":80}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":22,"se":{"name":"Ice4","pan":0,"pitch":120,"volume":80}},{"flashColor":[255,255,221,187],"flashDuration":8,"flashScope":2,"frame":23,"se":null},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":26,"se":{"name":"Battle3","pan":0,"pitch":100,"volume":85}},{"flashColor":[255,255,187,238],"flashDuration":5,"flashScope":1,"frame":32,"se":null},{"flashColor":[255,255,204,221],"flashDuration":10,"flashScope":2,"frame":32,"se":{"name":"Explosion2","pan":0,"pitch":100,"volume":90}},{"flashColor":[255,255,187,238],"flashDuration":3,"flashScope":1,"frame":37,"se":null},{"flashColor":[255,255,187,238],"flashDuration":3,"flashScope":1,"frame":40,"se":null}]}, +{"id":115,"animation1Hue":0,"animation1Name":"Laser1","animation2Hue":0,"animation2Name":"","frames":[[[0,49,-282,300,0,0,255,1],[5,5,10,300,0,0,0,0]],[[1,49,-282,300,0,0,255,1],[5,5,10,300,0,0,255,0]],[[13,5,-182,200,0,0,255,0],[2,49,-282,300,0,0,255,1],[6,5,10,300,0,0,255,0]],[[14,5,-182,200,0,0,255,0],[3,49,-282,300,0,0,255,1],[7,5,10,300,0,0,255,0]],[[15,5,-182,200,0,0,255,0],[4,49,-282,300,0,0,255,1],[8,5,10,300,0,0,255,0]],[[16,5,-182,200,0,0,255,0],[2,49,-282,300,0,0,255,1],[9,5,10,300,0,0,255,0]],[[17,5,-182,200,0,0,255,0],[3,49,-282,300,0,0,255,1],[10,5,10,300,0,0,255,0],[5,5,15,280,0,0,255,0]],[[18,5,-182,200,0,0,255,0],[4,49,-282,300,0,0,255,1],[11,5,10,300,0,0,255,0],[6,5,15,280,0,0,255,0]],[[19,5,-182,200,0,0,255,0],[2,49,-282,300,0,0,255,1],[12,5,10,300,0,0,255,0],[7,5,15,280,0,0,255,0]],[[20,5,-182,200,0,0,255,0],[3,49,-282,300,0,0,255,1],[8,5,15,280,0,0,255,0]],[[17,5,-182,200,0,0,255,0],[4,49,-282,300,0,0,255,1],[9,5,15,280,0,0,255,0]],[[18,5,-182,200,0,0,255,0],[2,49,-282,300,0,0,255,1],[10,5,15,280,0,0,255,0]],[[19,5,-182,200,0,0,188,0],[3,49,-282,300,0,0,188,1],[11,5,15,280,0,0,188,0]],[[20,5,-182,200,0,0,100,0],[4,49,-282,300,0,0,100,1],[12,5,15,280,0,0,100,0]]],"name":"レーザー/単発","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Laser1","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,255,204,170],"flashDuration":5,"flashScope":2,"frame":1,"se":{"name":"Paralyze2","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,255,204,204],"flashDuration":5,"flashScope":1,"frame":2,"se":{"name":"Evasion2","pan":0,"pitch":130,"volume":90}},{"flashColor":[255,255,204,204],"flashDuration":5,"flashScope":1,"frame":5,"se":null},{"flashColor":[255,255,204,204],"flashDuration":5,"flashScope":1,"frame":8,"se":null}]}, +{"id":116,"animation1Hue":0,"animation1Name":"Laser2","animation2Hue":0,"animation2Name":"","frames":[[[0,-210,-60,260,0,0,255,1],[0,150,-80,330,0,1,0,1]],[[1,-210,-60,260,0,0,255,1],[0,150,-80,330,0,1,0,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[2,-210,-60,260,0,0,255,1],[0,150,-80,330,0,1,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[3,-210,-60,260,0,0,255,1],[1,150,-80,330,0,1,255,1],[-1,-364,225.5,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[4,-210,-60,260,0,0,255,1],[2,150,-80,330,0,1,255,1],[7,-210,-60,260,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[5,-210,-60,260,0,0,255,1],[3,150,-80,330,0,1,255,1],[8,-210,-60,260,0,0,255,1],[-1,0,-100,100,0,0,255,1],[14,-200,0,300,0,0,255,1],[14,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[6,-210,-60,260,0,0,255,1],[4,150,-80,330,0,1,255,1],[9,-210,-60,260,0,0,255,1],[7,150,-80,330,0,1,255,1],[15,-200,0,300,0,0,255,1],[15,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[7,-210,-60,260,0,0,0,1],[5,150,-80,330,0,1,255,1],[10,-210,-60,260,0,0,255,1],[8,150,-80,330,0,1,255,1],[16,-200,0,300,0,0,255,1],[16,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[7,-210,-60,260,0,0,0,1],[6,150,-80,330,0,1,255,1],[11,-210,-60,260,0,0,255,1],[9,150,-80,330,0,1,255,1],[17,-200,0,300,0,0,255,1],[17,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[12,-210,-60,260,0,0,255,1],[5,150,-80,330,0,1,0,1],[10,150,-80,330,0,1,255,1],[-1,0,-100,100,0,0,255,1],[18,-200,0,300,0,0,255,1],[18,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[13,-210,-60,260,0,0,255,1],[6,150,-80,330,0,1,255,1],[11,150,-80,330,0,1,255,1],[-1,0,-100,100,0,0,255,1],[19,-200,0,300,0,0,255,1],[19,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[9,-210,-60,260,0,0,255,1],[12,150,-80,330,0,1,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[20,-200,0,300,0,0,255,1],[20,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[10,-210,-60,260,0,0,255,1],[13,150,-80,330,0,1,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[21,-200,0,300,0,0,255,1],[21,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[11,-210,-60,260,0,0,255,1],[10,150,-80,330,0,1,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[14,-200,0,300,0,0,255,1],[14,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[12,-210,-60,260,0,0,255,1],[11,150,-80,330,0,1,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[15,-200,0,300,0,0,255,1],[15,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[13,-210,-60,260,0,0,255,1],[12,150,-80,330,0,1,255,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[16,-200,0,300,0,0,255,1],[16,200,0,300,0,0,255,1]],[[10,-210,-60,260,0,0,255,1],[13,150,-80,330,0,1,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[17,-200,0,300,0,0,255,1],[17,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[11,-210,-60,260,0,0,203,1],[10,150,-80,330,0,1,203,1],[-1,0,-100,100,0,0,170,1],[-1,0,-100,100,0,0,170,1],[18,-200,0,300,0,0,255,1],[18,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[12,-210,-60,260,0,0,152,1],[11,150,-80,330,0,1,152,1],[-1,0,-100,100,0,0,85,1],[-1,0,-100,100,0,0,85,1],[19,-200,0,300,0,0,255,1],[19,200,0,300,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1],[-1,0,-100,100,0,0,255,1]],[[13,-210,-60,260,0,0,100,1],[12,150,-80,330,0,1,100,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[20,-200,0,300,0,0,203,1],[20,200,0,300,0,0,203,1]],[[-1,-237.5,-65,260,0,0,100,1],[-1,-60,217.5,330,0,1,100,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[14,-200,0,300,0,0,152,1],[14,200,0,300,0,0,152,1]],[[-1,-207.5,-65,260,0,0,100,1],[-1,110,-75,330,0,1,100,1],[-1,0,0,0,0,0,0,0],[-1,0,0,0,0,0,0,0],[15,-200,0,300,0,0,100,1],[15,200,0,300,0,0,100,1]]],"name":"レーザー/全体","position":3,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Powerup","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":2,"se":{"name":"Paralyze2","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,255,170,187],"flashDuration":5,"flashScope":1,"frame":5,"se":{"name":"Explosion1","pan":0,"pitch":150,"volume":90}},{"flashColor":[255,255,170,187],"flashDuration":10,"flashScope":2,"frame":5,"se":null},{"flashColor":[255,255,170,187],"flashDuration":10,"flashScope":1,"frame":7,"se":{"name":"Thunder1","pan":0,"pitch":50,"volume":90}},{"flashColor":[255,255,170,187],"flashDuration":10,"flashScope":2,"frame":7,"se":null}]}, +{"id":117,"animation1Hue":0,"animation1Name":"Light1","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-132,195,0,0,255,1]],[[1,0,-132,195,0,0,255,1]],[[2,0,-132,195,0,0,255,1]],[[3,0,-132,195,0,0,255,1],[24,0,-132,195,0,0,50,1]],[[4,0,-132,195,0,0,255,1],[25,0,-132,195,0,0,100,1]],[[5,0,-132,195,0,0,255,1],[26,0,-132,195,0,0,200,1]],[[6,0,-132,195,0,0,255,1],[27,0,-132,195,0,0,255,1]],[[7,0,-132,195,0,0,255,1],[28,0,-132,195,0,0,255,1]],[[5,0,-132,195,0,0,255,1],[29,0,-132,195,0,0,255,1]],[[6,0,-132,195,0,0,255,1],[24,0,-132,195,0,0,255,1]],[[7,0,-132,195,0,0,255,1],[25,0,-132,195,0,0,255,1]],[[8,0,-132,195,0,0,255,1],[26,0,-132,195,0,0,255,1]],[[9,0,-132,195,0,0,255,1],[27,0,-132,195,0,0,255,1]],[[10,0,-132,195,0,0,255,1],[28,0,-132,195,0,0,255,1]],[[11,0,-132,195,0,0,255,1],[29,0,-132,195,0,0,255,1]],[[12,0,-132,195,0,0,255,1],[24,0,-132,195,0,0,255,1]],[[13,0,-132,195,0,0,255,1],[25,0,-132,195,0,0,255,1]],[[14,0,-132,195,0,0,255,1],[26,0,-132,195,0,0,255,1]],[[15,0,-132,195,0,0,255,1],[27,0,-132,195,0,0,255,1]],[[16,0,-132,195,0,0,255,1],[28,0,-132,195,0,0,255,1]],[[17,0,-132,195,0,0,255,1],[29,0,-132,195,0,0,255,1]],[[18,0,-132,195,0,0,255,1],[24,0,-132,195,0,0,255,1]],[[19,0,-132,195,0,0,255,1],[25,0,-132,195,0,0,255,1]],[[20,0,-132,195,0,0,255,1],[26,0,-132,195,0,0,255,1]],[[21,0,-132,195,0,0,255,1],[27,0,-132,195,0,0,255,1]],[[22,0,-132,195,0,0,255,1],[28,0,-132,195,0,0,255,1]],[[23,0,-132,195,0,0,255,1],[29,0,-132,195,0,0,255,1]],[[18,0,-132,195,0,0,255,1],[24,0,-132,195,0,0,255,1]],[[19,0,-132,195,0,0,255,1],[25,0,-132,195,0,0,255,1]],[[20,0,-132,195,0,0,255,1],[26,0,-132,195,0,0,255,1]],[[21,0,-132,195,0,0,255,1],[27,0,-132,195,0,0,255,1]],[[22,0,-132,195,0,0,255,1],[28,0,-132,195,0,0,255,1]],[[23,0,-132,195,0,0,255,1],[29,0,-132,195,0,0,255,1]],[[18,0,-132,195,0,0,200,1],[24,0,-132,195,0,0,200,1]],[[19,0,-132,195,0,0,150,1],[25,0,-132,195,0,0,150,1]],[[20,0,-132,195,0,0,100,1],[26,0,-132,195,0,0,100,1]],[[21,0,-132,195,0,0,50,1],[27,0,-132,195,0,0,50,1]]],"name":"光の柱1","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic2","pan":0,"pitch":150,"volume":70}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":7,"se":{"name":"Up3","pan":0,"pitch":150,"volume":90}}]}, +{"id":118,"animation1Hue":0,"animation1Name":"Light2","animation2Hue":0,"animation2Name":"","frames":[[[0,0,-132,195,0,0,255,1]],[[1,0,-132,195,0,0,255,1]],[[2,0,-132,195,0,0,255,1]],[[3,0,-132,195,0,0,255,1],[24,0,-132,195,0,0,50,1]],[[4,0,-132,195,0,0,255,1],[25,0,-132,195,0,0,100,1]],[[5,0,-132,195,0,0,255,1],[26,0,-132,195,0,0,200,1]],[[6,0,-132,195,0,0,255,1],[27,0,-132,195,0,0,255,1]],[[7,0,-132,195,0,0,255,1],[28,0,-132,195,0,0,255,1]],[[5,0,-132,195,0,0,255,1],[29,0,-132,195,0,0,255,1]],[[6,0,-132,195,0,0,255,1],[24,0,-132,195,0,0,255,1]],[[7,0,-132,195,0,0,255,1],[25,0,-132,195,0,0,255,1]],[[8,0,-132,195,0,0,255,1],[26,0,-132,195,0,0,255,1]],[[9,0,-132,195,0,0,255,1],[27,0,-132,195,0,0,255,1]],[[10,0,-132,195,0,0,255,1],[28,0,-132,195,0,0,255,1]],[[11,0,-132,195,0,0,255,1],[29,0,-132,195,0,0,255,1]],[[12,0,-132,195,0,0,255,1],[24,0,-132,195,0,0,255,1]],[[13,0,-132,195,0,0,255,1],[25,0,-132,195,0,0,255,1]],[[14,0,-132,195,0,0,255,1],[26,0,-132,195,0,0,255,1]],[[15,0,-132,195,0,0,255,1],[27,0,-132,195,0,0,255,1]],[[16,0,-132,195,0,0,255,1],[28,0,-132,195,0,0,255,1]],[[17,0,-132,195,0,0,255,1],[29,0,-132,195,0,0,255,1]],[[18,0,-132,195,0,0,255,1],[24,0,-132,195,0,0,255,1]],[[19,0,-132,195,0,0,255,1],[25,0,-132,195,0,0,255,1]],[[20,0,-132,195,0,0,255,1],[26,0,-132,195,0,0,255,1]],[[21,0,-132,195,0,0,255,1],[27,0,-132,195,0,0,255,1]],[[22,0,-132,195,0,0,255,1],[28,0,-132,195,0,0,255,1]],[[23,0,-132,195,0,0,255,1],[29,0,-132,195,0,0,255,1]],[[18,0,-132,195,0,0,255,1],[24,0,-132,195,0,0,255,1]],[[19,0,-132,195,0,0,255,1],[25,0,-132,195,0,0,255,1]],[[20,0,-132,195,0,0,255,1],[26,0,-132,195,0,0,255,1]],[[21,0,-132,195,0,0,255,1],[27,0,-132,195,0,0,255,1]],[[22,0,-132,195,0,0,255,1],[28,0,-132,195,0,0,255,1]],[[23,0,-132,195,0,0,255,1],[29,0,-132,195,0,0,255,1]],[[18,0,-132,195,0,0,200,1],[24,0,-132,195,0,0,200,1]],[[19,0,-132,195,0,0,150,1],[25,0,-132,195,0,0,150,1]],[[20,0,-132,195,0,0,100,1],[26,0,-132,195,0,0,100,1]],[[21,0,-132,195,0,0,50,1],[27,0,-132,195,0,0,50,1]]],"name":"光の柱2","position":2,"timings":[{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":0,"se":{"name":"Magic2","pan":0,"pitch":150,"volume":70}},{"flashColor":[255,255,255,255],"flashDuration":5,"flashScope":0,"frame":7,"se":{"name":"Up3","pan":0,"pitch":150,"volume":80}}]}, +{"id":119,"animation1Hue":0,"animation1Name":"Light3","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,375,0,0,255,1]],[[1,0,0,375,0,0,255,1]],[[2,0,0,375,0,0,255,1]],[[3,0,0,375,0,0,255,1]],[[4,0,0,375,0,0,255,1]],[[5,0,0,375,0,0,255,1]],[[6,0,0,375,0,0,255,1]],[[7,0,0,375,0,0,255,1]],[[8,0,0,375,0,0,255,1]],[[9,0,0,375,0,0,255,1]],[[10,0,0,375,0,0,255,1]],[[11,0,0,375,0,0,255,1]],[[12,0,0,375,0,0,255,1]],[[13,0,0,375,0,0,255,1]],[[14,0,0,375,0,0,255,1]],[[15,0,0,375,0,0,255,1]],[[16,0,0,375,0,0,255,1]],[[17,0,0,375,0,0,255,1]],[[18,0,0,375,0,0,255,1]],[[19,0,0,375,0,0,255,1]],[[20,0,0,375,0,0,255,1]],[[21,0,0,375,0,0,255,1]],[[22,0,0,375,0,0,187,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[23,0,0,375,0,0,118,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1],[-1,0,0,100,0,0,255,1]],[[24,0,0,375,0,0,50,1]]],"name":"光の弾","position":1,"timings":[{"flashColor":[255,255,255,255],"flashDuration":15,"flashScope":0,"frame":0,"se":{"name":"Teleport","pan":0,"pitch":90,"volume":80}}]}, +{"id":120,"animation1Hue":0,"animation1Name":"Light4","animation2Hue":0,"animation2Name":"","frames":[[[0,0,0,180,0,0,255,1]],[[0,0,0,300,0,0,255,1]],[[1,0,0,300,0,0,255,1]],[[2,0,0,300,0,0,255,1]],[[3,0,0,300,0,0,255,1]],[[4,0,0,300,0,0,255,1]],[[5,0,0,300,0,0,255,1]],[[6,0,0,300,0,0,255,1]],[[7,0,0,300,0,0,255,1]],[[8,0,0,300,0,0,255,1]],[[9,0,0,300,0,0,255,1]],[[10,0,0,300,0,0,255,1]],[[11,0,0,300,0,0,255,1]],[[12,0,0,300,0,0,255,1]],[[13,0,0,300,0,0,255,1]],[[14,0,0,300,0,0,255,1]],[[15,0,0,300,0,0,255,1]],[[16,0,0,300,0,0,255,1]],[[17,0,0,300,0,0,255,1]],[[18,0,0,300,0,0,255,1]],[[19,0,0,300,0,0,255,1]],[[20,0,0,300,0,0,255,1]],[[21,0,0,300,0,0,255,1]],[[22,0,0,300,0,0,255,1]],[[23,0,0,300,0,0,255,1]],[[24,0,0,300,0,0,255,1]],[[25,0,0,300,0,0,255,1]],[[26,0,0,300,0,0,255,1]],[[27,0,0,300,0,0,200,1]],[[28,0,0,300,0,0,180,1]],[[29,0,0,300,0,0,150,1]]],"name":"放射線","position":1,"timings":[{"flashColor":[255,255,204,204],"flashDuration":10,"flashScope":2,"frame":0,"se":{"name":"Ice4","pan":0,"pitch":70,"volume":80}}]} +] \ No newline at end of file diff --git a/data/Armors.json b/data/Armors.json new file mode 100644 index 0000000..d042319 --- /dev/null +++ b/data/Armors.json @@ -0,0 +1,7 @@ +[ +null, +{"id":1,"atypeId":5,"description":"","etypeId":2,"traits":[{"code":22,"dataId":1,"value":0}],"iconIndex":128,"name":"盾","note":"","params":[0,0,0,10,0,0,0,0],"price":300}, +{"id":2,"atypeId":1,"description":"","etypeId":3,"traits":[{"code":22,"dataId":1,"value":0}],"iconIndex":130,"name":"帽子","note":"","params":[0,0,0,10,0,0,0,0],"price":300}, +{"id":3,"atypeId":1,"description":"","etypeId":4,"traits":[{"code":22,"dataId":1,"value":0}],"iconIndex":135,"name":"服","note":"","params":[0,0,0,10,0,0,0,0],"price":300}, +{"id":4,"atypeId":1,"description":"","etypeId":5,"traits":[{"code":22,"dataId":1,"value":0}],"iconIndex":145,"name":"指輪","note":"","params":[0,0,0,0,10,0,0,0],"price":300} +] \ No newline at end of file diff --git a/data/Classes.json b/data/Classes.json new file mode 100644 index 0000000..005025b --- /dev/null +++ b/data/Classes.json @@ -0,0 +1,7 @@ +[ +null, +{"id":1,"expParams":[30,20,30,30],"traits":[{"code":23,"dataId":0,"value":1},{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":22,"dataId":2,"value":0.04},{"code":41,"dataId":1,"value":0},{"code":51,"dataId":2,"value":0},{"code":52,"dataId":1,"value":0},{"code":52,"dataId":3,"value":0},{"code":52,"dataId":5,"value":0}],"learnings":[{"level":1,"note":"","skillId":8},{"level":1,"note":"","skillId":10}],"name":"姫","note":"","params":[[1,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200,1250,1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900,1950,2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3150,3200,3250,3300,3350,3400,3450,3500,3550,3600,3650,3700,3750,3800,3850,3900,3950,4000,4050,4100,4150,4200,4250,4300,4350,4400,4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000,5050,5100,5150,5200,5250,5300,5350],[0,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070],[1,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277]]}, +{"id":2,"expParams":[30,20,30,30],"traits":[{"code":23,"dataId":0,"value":1},{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":22,"dataId":2,"value":0.04},{"code":41,"dataId":1,"value":0},{"code":51,"dataId":4,"value":0},{"code":52,"dataId":1,"value":0},{"code":52,"dataId":3,"value":0},{"code":52,"dataId":4,"value":0},{"code":52,"dataId":5,"value":0},{"code":52,"dataId":6,"value":0}],"learnings":[],"name":"侍女","note":"","params":[[1,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200,1250,1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900,1950,2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3150,3200,3250,3300,3350,3400,3450,3500,3550,3600,3650,3700,3750,3800,3850,3900,3950,4000,4050,4100,4150,4200,4250,4300,4350,4400,4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000,5050,5100,5150,5200,5250,5300,5350],[0,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070],[1,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277]]}, +{"id":3,"expParams":[30,20,30,30],"traits":[{"code":23,"dataId":0,"value":1},{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":22,"dataId":2,"value":0.04},{"code":41,"dataId":1,"value":0},{"code":51,"dataId":1,"value":0},{"code":52,"dataId":1,"value":0}],"learnings":[],"name":"","note":"","params":[[1,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200,1250,1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900,1950,2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3150,3200,3250,3300,3350,3400,3450,3500,3550,3600,3650,3700,3750,3800,3850,3900,3950,4000,4050,4100,4150,4200,4250,4300,4350,4400,4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000,5050,5100,5150,5200,5250,5300,5350],[0,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070],[1,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277]]}, +{"id":4,"expParams":[30,20,30,30],"traits":[{"code":23,"dataId":0,"value":1},{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":22,"dataId":2,"value":0.04},{"code":41,"dataId":1,"value":0},{"code":51,"dataId":1,"value":0},{"code":52,"dataId":1,"value":0}],"learnings":[],"name":"","note":"","params":[[1,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200,1250,1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900,1950,2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3150,3200,3250,3300,3350,3400,3450,3500,3550,3600,3650,3700,3750,3800,3850,3900,3950,4000,4050,4100,4150,4200,4250,4300,4350,4400,4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000,5050,5100,5150,5200,5250,5300,5350],[0,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070],[1,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277]]} +] \ No newline at end of file diff --git a/data/CommonEvents.json b/data/CommonEvents.json new file mode 100644 index 0000000..2bc9c27 --- /dev/null +++ b/data/CommonEvents.json @@ -0,0 +1,7 @@ +[ +null, +{"id":1,"list":[{"code":0,"indent":0,"parameters":[]}],"name":"","switchId":1,"trigger":0}, +{"id":2,"list":[{"code":0,"indent":0,"parameters":[]}],"name":"","switchId":1,"trigger":0}, +{"id":3,"list":[{"code":0,"indent":0,"parameters":[]}],"name":"","switchId":1,"trigger":0}, +{"id":4,"list":[{"code":0,"indent":0,"parameters":[]}],"name":"","switchId":1,"trigger":0} +] \ No newline at end of file diff --git a/data/Enemies.json b/data/Enemies.json new file mode 100644 index 0000000..a6ed392 --- /dev/null +++ b/data/Enemies.json @@ -0,0 +1,7 @@ +[ +null, +{"id":1,"actions":[{"conditionParam1":0,"conditionParam2":0,"conditionType":0,"rating":5,"skillId":1}],"battlerHue":0,"battlerName":"Bat","dropItems":[{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0}],"exp":0,"traits":[{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":31,"dataId":1,"value":0}],"gold":0,"name":"こうもり","note":"","params":[200,0,30,30,30,30,30,30]}, +{"id":2,"actions":[{"conditionParam1":0,"conditionParam2":0,"conditionType":0,"rating":5,"skillId":1}],"battlerHue":0,"battlerName":"Slime","dropItems":[{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0}],"exp":0,"traits":[{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":31,"dataId":1,"value":0}],"gold":0,"name":"スライム","note":"","params":[250,0,30,30,30,30,30,30]}, +{"id":3,"actions":[{"conditionParam1":0,"conditionParam2":0,"conditionType":0,"rating":5,"skillId":1}],"battlerHue":0,"battlerName":"Orc","dropItems":[{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0}],"exp":0,"traits":[{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":31,"dataId":1,"value":0}],"gold":0,"name":"オーク","note":"","params":[300,0,30,30,30,30,30,30]}, +{"id":4,"actions":[{"conditionParam1":0,"conditionParam2":0,"conditionType":0,"rating":5,"skillId":1}],"battlerHue":0,"battlerName":"Minotaur","dropItems":[{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0}],"exp":0,"traits":[{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":31,"dataId":1,"value":0}],"gold":0,"name":"ミノタウロス","note":"","params":[500,0,30,30,30,30,30,30]} +] \ No newline at end of file diff --git a/data/Items.json b/data/Items.json new file mode 100644 index 0000000..1b356c2 --- /dev/null +++ b/data/Items.json @@ -0,0 +1,11 @@ +[ +null, +{"id":1,"animationId":41,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[{"code":11,"dataId":0,"value1":0,"value2":500}],"hitType":0,"iconIndex":315,"itypeId":1,"name":"タニシ","note":"","occasion":3,"price":50,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0}, +{"id":2,"animationId":41,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[{"code":12,"dataId":0,"value1":0,"value2":200}],"hitType":0,"iconIndex":276,"itypeId":1,"name":"アヤメ","note":"","occasion":3,"price":100,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0}, +{"id":3,"animationId":45,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[{"code":22,"dataId":4,"value1":1,"value2":0},{"code":22,"dataId":5,"value1":1,"value2":0},{"code":22,"dataId":6,"value1":1,"value2":0},{"code":22,"dataId":7,"value1":1,"value2":0},{"code":22,"dataId":8,"value1":1,"value2":0},{"code":22,"dataId":9,"value1":1,"value2":0},{"code":22,"dataId":10,"value1":1,"value2":0}],"hitType":0,"iconIndex":242,"itypeId":1,"name":"ザリガニ","note":"","occasion":3,"price":200,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0}, +{"id":4,"animationId":49,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"b.mhp / 2","type":3,"variance":20},"description":"","effects":[{"code":22,"dataId":1,"value1":1,"value2":0}],"hitType":0,"iconIndex":194,"itypeId":1,"name":"ゴミ","note":"","occasion":3,"price":300,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0}, +{"id":5,"animationId":0,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"姫様用侍女用の水着","effects":[],"hitType":0,"iconIndex":154,"itypeId":1,"name":"水着","note":"","occasion":3,"price":0,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0}, +{"id":6,"animationId":0,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"海で遊ぶビーチボール","effects":[],"hitType":0,"iconIndex":165,"itypeId":1,"name":"ビーチボール","note":"","occasion":3,"price":0,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0}, +{"id":7,"animationId":0,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"救助用の浮き輪","effects":[],"hitType":0,"iconIndex":71,"itypeId":1,"name":"浮き輪","note":"","occasion":3,"price":0,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0}, +{"id":8,"animationId":0,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"新鮮な秋刀魚","effects":[],"hitType":0,"iconIndex":260,"itypeId":1,"name":"魚","note":"","occasion":3,"price":0,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0} +] \ No newline at end of file diff --git a/data/Map001.json b/data/Map001.json new file mode 100644 index 0000000..d1f9048 --- /dev/null +++ b/data/Map001.json @@ -0,0 +1,37 @@ +{ +"autoplayBgm":true,"autoplayBgs":true,"battleback1Name":"","battleback2Name":"","bgm":{"name":"03_March_of_the_Tiny_Soldier","pan":0,"pitch":100,"volume":35},"bgs":{"name":"Sea","pan":0,"pitch":100,"volume":50},"disableDashing":true,"displayName":"","encounterList":[],"encounterStep":30,"height":13,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":1,"width":22, +"data":[2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,2076,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3604,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,3612,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2124,2134,2160,2168,2112,2096,2096,2100,2124,2124,2124,2104,2096,2096,2100,2124,2104,2096,2096,2096,2096,2096,2177,2166,2149,2182,2112,2100,2124,2121,0,0,0,2112,2100,2124,2134,0,2112,2096,2096,2096,2100,2124,2141,2162,2182,2130,2101,2134,0,2137,2129,2118,2116,2101,2134,2187,2181,2139,2125,2124,2104,2100,2134,2178,2164,2170,2139,2125,2134,0,0,0,0,2136,2124,2134,0,0,2185,2181,0,0,2136,2134,0,2184,2148,2182,0,0,0,0,0,0,0,0,0,0,0,0,0,2188,0,2190,0,2190,0,0,2182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3652,3652,3652,3652,3652,3652,3652,3652,3652,3652,3652,3652,3652,3652,3652,3652,3653,3665,3665,3654,3652,3652,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3636,3670,3954,3956,3672,3640,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3632,3636,3670,3954,3925,3950,3957,3648,3632,3660,3660,3660,3660,3660,3660,3660,3660,3660,3660,3660,3660,3660,3660,3670,3963,3949,3958,3678,3964,3672,3660,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"events":[ +null, +{"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":108,"indent":0,"parameters":["真ん中まで移動して海の方へ走る"]},{"code":230,"indent":0,"parameters":[60]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[0,-1],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[0,-1],"indent":null}]},{"code":213,"indent":0,"parameters":[-1,1,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["\\{姫「海だーーー!!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[0,-1],"indent":null},{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[0,-1],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":213,"indent":0,"parameters":[-1,3,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「これが海だろ?海なんだろ!\\{絶対海だ!\\}」"]},{"code":213,"indent":0,"parameters":[2,3,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「…そうですよ。これで涼めますね」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[1,0],"indent":null},{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[1,0],"indent":null},{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[0,-1],"indent":null},{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[1,0],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[1,0],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[0,-1],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":213,"indent":0,"parameters":[-1,3,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「さあ水浴びだー!!!」"]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":3,"indent":null},{"code":3,"indent":null},{"code":4,"indent":null},{"code":4,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「姫様、水着に着替えないと…!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「そうだった!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「さあ、こちらへ。着替えを手伝います」"]},{"code":213,"indent":0,"parameters":[-1,3,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「よろしく頼む!!」"]},{"code":221,"indent":0,"parameters":[]},{"code":201,"indent":0,"parameters":[0,1,10,9,2,0]},{"code":108,"indent":0,"parameters":["暗転"]},{"code":408,"indent":0,"parameters":["一枚絵"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"",1,""]},{"code":121,"indent":0,"parameters":[49,49,0]},{"code":222,"indent":0,"parameters":[]},{"code":230,"indent":0,"parameters":[30]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":221,"indent":0,"parameters":[]},{"code":231,"indent":0,"parameters":[1,"mesukemo 1e",0,0,0,0,100,100,255,0]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「やっほーい!!涼しい!涼しいぞー!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「その水着、よくお似合っておりますよ姫様」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「えへへ~。侍女も似合ってるぞ。エロエロだぞ」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「それは褒めていただいているのでしょうか」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「もちろん褒めてるぞ!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「ありがとうございます」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「さあ泳ぐぞー!!」"]},{"code":221,"indent":0,"parameters":[]},{"code":121,"indent":0,"parameters":[47,47,0]},{"code":235,"indent":0,"parameters":[1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":222,"indent":0,"parameters":[]},{"code":108,"indent":0,"parameters":["暗転"]},{"code":408,"indent":0,"parameters":["夕暮れ"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":0,"y":0}, +{"id":2,"name":"侍女","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"hime","direction":8,"pattern":1,"characterIndex":1},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":10,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":49,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":0,"y":12}, +{"id":3,"name":"侍女2","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":49,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"himemizugi","direction":8,"pattern":1,"characterIndex":1},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":47,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"himemizugi","direction":8,"pattern":1,"characterIndex":1},"list":[{"code":111,"indent":0,"parameters":[1,2,0,4,0]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["侍女「まだ遊びますか?」"]},{"code":102,"indent":1,"parameters":[["いいえ","はい"],1,0,2,0]},{"code":402,"indent":1,"parameters":[0,"いいえ"]},{"code":101,"indent":2,"parameters":["",0,0,2]},{"code":401,"indent":2,"parameters":["侍女「いろいろ集めましたね。"]},{"code":401,"indent":2,"parameters":["  随分時間が経ったようです」"]},{"code":221,"indent":2,"parameters":[]},{"code":201,"indent":2,"parameters":[0,1,9,10,2,0]},{"code":242,"indent":2,"parameters":[3]},{"code":223,"indent":2,"parameters":[[68,-34,-34,0],1,true]},{"code":204,"indent":2,"parameters":[2,3,6]},{"code":123,"indent":2,"parameters":["A",0]},{"code":230,"indent":2,"parameters":[60]},{"code":121,"indent":2,"parameters":[48,48,0]},{"code":222,"indent":2,"parameters":[]},{"code":230,"indent":2,"parameters":[120]},{"code":0,"indent":2,"parameters":[]},{"code":402,"indent":1,"parameters":[1,"はい"]},{"code":101,"indent":2,"parameters":["",0,0,2]},{"code":401,"indent":2,"parameters":["侍女「分かりました。また何かありましたら、"]},{"code":401,"indent":2,"parameters":["  お声をかけてください」"]},{"code":0,"indent":2,"parameters":[]},{"code":404,"indent":1,"parameters":[]},{"code":0,"indent":1,"parameters":[]},{"code":411,"indent":0,"parameters":[]},{"code":213,"indent":1,"parameters":[3,4,false]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["侍女「お楽しみでいらっしゃいますか?」"]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":1,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":47,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":2,"variableValid":false,"variableValue":4},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":8,"pattern":1,"characterIndex":1},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":11}, +{"id":4,"name":"EV004","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":6},"list":[{"code":250,"indent":0,"parameters":[{"name":"Item1","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["アヤメを手に入れた"]},{"code":126,"indent":0,"parameters":[2,0,0,1]},{"code":122,"indent":0,"parameters":[2,2,1,0,1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":17,"y":9}, +{"id":5,"name":"EV005","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":6},"list":[{"code":250,"indent":0,"parameters":[{"name":"Item1","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["ザリガニを手に入れた"]},{"code":126,"indent":0,"parameters":[3,0,0,1]},{"code":122,"indent":0,"parameters":[2,2,1,0,1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":12,"y":5}, +{"id":6,"name":"EV006","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":6},"list":[{"code":250,"indent":0,"parameters":[{"name":"Item1","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["タニシを手に入れた"]},{"code":126,"indent":0,"parameters":[1,0,0,1]},{"code":122,"indent":0,"parameters":[2,2,1,0,1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":6,"y":4}, +{"id":7,"name":"EV007","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":6},"list":[{"code":250,"indent":0,"parameters":[{"name":"Item1","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["ゴミを手に入れた"]},{"code":126,"indent":0,"parameters":[4,0,0,1]},{"code":122,"indent":0,"parameters":[2,2,1,0,1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":19,"y":6}, +{"id":8,"name":"EV008","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":3,"y":6}, +{"id":9,"name":"EV009","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":7,"y":6}, +{"id":10,"name":"EV010","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":8,"y":5}, +{"id":11,"name":"EV011","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":10,"y":5}, +{"id":12,"name":"EV012","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":17,"y":6}, +{"id":13,"name":"EV013","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":16,"y":9}, +{"id":14,"name":"EV014","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":21,"y":11}, +{"id":15,"name":"EV015","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":3,"y":11}, +{"id":16,"name":"EV016","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":21,"y":12}, +{"id":17,"name":"EV017","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":10,"y":12}, +{"id":18,"name":"EV018","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":7,"y":8}, +{"id":19,"name":"EV019","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":12,"y":10}, +{"id":20,"name":"EV020","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":1,"y":10}, +{"id":21,"name":"EV021","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":14,"y":7}, +{"id":22,"name":"EV022","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":20,"y":8}, +{"id":23,"name":"EV023","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"himemizugi taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"himemizugi",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":4,"y":4}, +null, +null, +null, +null, +{"id":28,"name":"EV028","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":48,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":108,"indent":0,"parameters":["暗転"]},{"code":408,"indent":0,"parameters":["夕暮れ"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「もう夕暮れですね…」"]},{"code":230,"indent":0,"parameters":[30]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「…姫様?」"]},{"code":213,"indent":0,"parameters":[-1,10,true]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「じじょ…」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「遊び疲れたようですね」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「うん。ねみゅい…」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「ふふ。じゃあ帰りましょうか」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「うん。かえりゅ…」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「はい」"]},{"code":205,"indent":0,"parameters":[30,{"list":[{"code":37,"indent":null},{"code":1,"indent":null},{"code":2,"indent":null},{"code":2,"indent":null},{"code":2,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":37,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":1,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":2,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":2,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":2,"indent":null}]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":29,"parameters":[2],"indent":null},{"code":1,"indent":null},{"code":1,"indent":null},{"code":2,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":29,"parameters":[2],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":1,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":1,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":2,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「…じじょお」"]},{"code":205,"indent":0,"parameters":[30,{"list":[{"code":3,"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「どうされました?」"]},{"code":213,"indent":0,"parameters":[-1,3,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「今日はありがとう。たのしゅかった…」"]},{"code":213,"indent":0,"parameters":[30,4,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「はい。なによりです」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「……」"]},{"code":223,"indent":0,"parameters":[[-68,-68,-68,0],60,true]},{"code":246,"indent":0,"parameters":[2]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「\\}姫様。実はここ…。海ではないのです…\\{」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「姫様を城壁の外へ軽々しくお連れすることは"]},{"code":401,"indent":0,"parameters":["  できません」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「ですから、ここは…-」"]},{"code":221,"indent":0,"parameters":[]},{"code":231,"indent":0,"parameters":[1,"sekaitizu a",0,0,0,0,100,100,255,0]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["   \\{城とその周辺の地図"]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["侍女「今いるのは…」"]},{"code":231,"indent":0,"parameters":[2,"sekaitizu",0,0,0,0,100,100,255,0]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["侍女「城壁内の湖だったんです」"]},{"code":221,"indent":0,"parameters":[]},{"code":235,"indent":0,"parameters":[1]},{"code":235,"indent":0,"parameters":[2]},{"code":223,"indent":0,"parameters":[[34,-34,-68,170],1,false]},{"code":322,"indent":0,"parameters":[1,"hime",1,"Actor1",0,""]},{"code":201,"indent":0,"parameters":[0,8,9,11,2,0]},{"code":108,"indent":0,"parameters":["暗転 回想"]},{"code":408,"indent":0,"parameters":["謁見の間へ"]},{"code":121,"indent":0,"parameters":[29,29,0]},{"code":230,"indent":0,"parameters":[60]},{"code":222,"indent":0,"parameters":[]},{"code":230,"indent":0,"parameters":[60]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":1,"y":0}, +null, +{"id":30,"name":"侍女3","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":48,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"himemizugi","direction":8,"pattern":1,"characterIndex":1},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":9,"y":11} +] +} \ No newline at end of file diff --git a/data/Map002.json b/data/Map002.json new file mode 100644 index 0000000..2260ab2 --- /dev/null +++ b/data/Map002.json @@ -0,0 +1,114 @@ +{ +"autoplayBgm":true,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"03_Ruin_Rummage","pan":0,"pitch":150,"volume":50},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"","encounterList":[],"encounterStep":30,"height":40,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":3,"width":40, +"data":[1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,6163,6161,6151,6161,6161,6161,6161,6161,6161,6161,6161,6161,6173,1616,1617,1617,1617,1618,6171,6161,6151,6161,6161,6161,6161,6161,6161,6161,6161,6161,6165,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,6522,6160,6522,6522,6522,6522,6522,6522,6522,6522,6522,6526,1616,1617,1617,1617,1618,6523,6522,6160,6522,6522,6522,6522,6522,6522,6522,6522,6522,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,4154,6160,3283,3281,3281,3281,3281,3281,3281,3281,3270,3284,1616,1617,1617,1617,1618,3282,3284,6160,1569,1569,1569,1569,1569,1569,1569,1569,1569,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,4156,6160,3280,6171,6161,6161,6161,6161,6161,6165,3264,3272,4107,4097,4087,4097,4109,3264,3272,6160,1569,1569,1569,1569,1569,1569,1569,1569,1569,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3290,6160,3280,6523,6522,6522,6522,6522,6522,6160,3264,3272,4155,4157,4108,4155,4157,3264,3272,6160,1569,1569,1569,1569,1569,1569,1569,1569,1569,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3280,6160,3265,3268,3268,3268,3268,3268,3284,6160,3264,3272,4098,4100,4158,4098,4100,3264,3272,6160,1569,1569,1569,1569,1569,1569,1569,1569,1569,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3280,6160,3266,3276,3276,3256,3248,3248,3272,6160,3264,3272,4080,4066,4084,4065,4088,3264,3272,6160,1569,1569,1569,1569,1569,1569,1569,1569,1569,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3280,6160,3280,6171,6165,3264,3248,3248,3272,6160,3264,3272,4080,4064,4064,4064,4088,3264,3272,6160,1569,1569,1569,1569,1569,1569,1569,1569,1569,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3280,6160,3280,6523,6160,3264,3248,3248,3272,6160,3264,3272,4104,4092,4092,4092,4102,3264,3272,6160,1569,1569,1569,1569,1569,1569,1569,1569,1569,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3280,6160,3265,3284,6160,3288,3276,3276,3286,6160,3264,3272,4155,4145,4145,4145,4157,3264,3272,6160,1569,1569,1569,1569,1569,1569,1569,1569,1569,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3280,6172,3264,3272,6169,6161,6161,6161,6161,6167,3264,3272,4098,4084,4084,4084,4100,3264,3272,6169,6161,6161,6173,1569,6171,6161,6161,6161,6161,6155,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3280,6527,3264,3272,6523,6522,6522,6522,6522,6526,3264,3272,4104,4092,4092,4092,4102,3264,3272,6523,6522,6522,6526,3290,6523,6522,6522,6522,6522,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3265,3268,3249,3250,3268,3268,3268,3268,3268,3268,3249,3250,3268,3268,3268,3268,3268,3249,3250,3268,3268,3268,3268,3251,3268,3268,3268,3268,3284,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3266,3276,3276,3276,3276,3276,3276,3276,3276,3276,3256,3248,3248,3248,3248,3248,3248,3248,3248,3248,3248,3248,3248,3248,3248,3248,3248,3248,3272,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3280,6171,6161,6161,6161,6161,6161,6161,6161,6165,3264,3248,3248,3248,3248,3248,3248,3248,3252,3276,3276,3260,3276,3276,3276,3276,3256,3248,3272,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3292,6523,6522,6522,6522,6522,6522,6522,6522,6160,3264,3252,3276,3276,3276,3276,3276,3256,3272,7603,7613,3280,6171,6161,6161,6165,3264,3248,3272,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3378,3364,3364,3364,3364,3364,3364,3364,3380,6160,3264,3272,2370,2356,2356,2356,2372,3264,3272,7600,6526,3292,6523,6522,6522,6160,3288,3276,3286,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3360,3344,3344,3344,3344,3344,3344,3344,3368,6160,3264,3272,2352,2336,2336,2336,2360,3264,3272,7600,2898,2884,2884,2884,2900,6147,6161,6161,6161,6155,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3360,3344,3344,3344,3344,3344,3344,3344,3368,6160,3264,3272,2352,2336,2336,2336,2360,3264,3272,7600,2904,2892,2892,2892,2889,6160,6522,6522,6522,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3360,3344,3344,3344,3344,3344,3344,3344,3368,6160,3264,3272,2352,2336,2336,2336,2360,3264,3272,7609,7601,7601,7601,7613,2908,6172,3282,3268,3284,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3360,3344,3344,3344,3344,3344,3344,3344,3368,6160,3264,3272,2352,2336,2336,2336,2360,3264,3272,6523,6522,6522,6522,6526,3290,6527,3264,3248,3272,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3360,3344,3344,3344,3344,3344,3344,3344,3368,6160,3264,3272,2352,2336,2336,2336,2360,3264,3250,3268,3269,3281,3281,3281,3279,3281,3277,3276,3273,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3360,3344,3344,3344,3344,3344,3344,3344,3368,6160,3264,3272,2352,2336,2336,2336,2360,3264,3248,3248,3272,6163,6161,6161,6161,6161,6161,6165,3280,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3384,3372,3372,3372,3372,3372,3372,3372,3382,6160,3264,3272,2376,2364,2364,2364,2374,3264,3248,3248,3272,6160,6522,6522,6522,6522,6522,6160,3280,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3290,6171,6161,6161,6161,6161,6161,6161,6161,6167,3264,3250,3268,3268,3268,3268,3268,3249,3248,3248,3272,6160,3234,3220,3220,3220,3236,6160,3280,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3280,6523,6522,6522,6522,6522,6522,6522,6522,6526,3264,3248,3248,3248,3248,3248,3248,3248,3248,3248,3272,6160,3216,3200,3200,3200,3224,6160,3280,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3265,3269,3281,3281,3281,3281,3281,3281,3271,3281,3261,3276,3276,3276,3276,3276,3276,3276,3260,3276,3273,6160,3216,3200,3200,3200,3224,6160,3280,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3264,3272,6171,6161,6161,6161,6161,6173,3280,6170,3280,4098,4085,4109,4154,4107,4086,4100,3280,6170,3280,6160,3216,3200,3200,3200,3224,6160,3280,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3264,3272,6523,6522,6522,6522,6522,6526,3292,6160,3280,4080,4088,4146,4115,4148,4080,4088,3280,6160,3280,6160,3216,3200,3200,3200,3224,6160,3280,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3264,3254,3293,1555,1554,1555,1554,1555,1554,6160,3280,4080,4088,4152,4140,4150,4080,4088,3280,6160,3280,6160,3216,3200,3200,3200,3224,6172,3280,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3264,3272,6170,1554,1555,1554,1555,1554,1555,6160,3280,4080,4066,4084,4084,4084,4065,4088,3280,6160,3280,6160,3216,3200,3200,3200,3224,6527,3280,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6160,3288,3286,6160,3294,1554,1555,1554,1555,1554,6160,3292,4104,4092,4092,4092,4092,4092,4102,3292,6160,3292,6160,3240,3228,3228,3228,3238,3291,3287,6160,1536,1536,1536,1536,1536,1536,1536,1536,1536,6169,6161,6161,6159,6161,6161,6161,6161,6161,6161,6159,6161,6161,6173,3291,3281,3293,6171,6161,6161,6159,6161,6159,6161,6161,6161,6161,6161,6161,6161,6167,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4243,4241,4231,4241,4241,4241,4241,4241,4241,4241,4241,4241,4253,0,0,0,0,0,4251,4241,4231,4241,4241,4241,4241,4241,4241,4241,4241,4241,4245,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,4251,4241,4241,4241,4241,4241,4245,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,4251,4245,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,4240,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,4240,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4252,0,0,4249,4241,4241,4241,4241,4247,0,0,0,0,0,0,0,0,0,4249,4241,4241,4253,0,4251,4241,4241,4241,4241,4235,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4251,4241,4241,4241,4241,4241,4241,4241,4245,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4243,4253,0,4251,4241,4241,4245,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,4240,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,4227,4241,4241,4241,4235,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,4240,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4249,4241,4241,4241,4253,0,4252,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,0,0,4243,4241,4241,4241,4241,4241,4245,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4251,4241,4241,4241,4241,4241,4241,4241,4247,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,4251,4241,4241,4241,4241,4253,0,4250,0,0,0,0,0,0,0,0,0,4250,0,4240,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,0,0,0,4252,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,4250,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,0,4240,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4240,0,4240,0,0,0,0,0,0,0,4240,0,0,0,0,0,0,0,0,0,4249,4241,4241,4239,4241,4241,4241,4241,4241,4241,4239,4241,4241,4253,0,0,0,4251,4241,4241,4239,4241,4239,4241,4241,4241,4241,4241,4241,4241,4247,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,404,0,0,0,0,0,0,0,0,0,0,212,0,0,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,343,0,343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,343,0,343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,441,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,449,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,340,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,340,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0,0,0,0,204,0,0,385,388,389,390,391,387,394,395,15,0,0,0,0,0,0,0,0,0,0,0,337,0,0,0,0,0,0,0,0,0,0,204,0,0,0,0,0,204,0,0,0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212,0,0,0,0,0,212,0,0,430,430,430,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,392,392,0,0,0,0,0,0,0,0,0,0,0,0,0,438,438,438,0,0,409,410,411,412,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,121,112,113,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,431,431,431,0,0,414,418,419,416,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,248,0,0,204,0,0,0,0,0,204,0,0,439,439,439,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,233,225,232,240,0,0,212,0,0,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,241,224,224,0,0,0,0,0,0,0,0,0,0,0,400,401,400,0,106,404,404,404,404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0,0,0,0,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212,0,0,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,175,70,71,70,71,70,71,0,0,0,343,342,343,342,343,0,0,0,0,0,0,0,0,0,343,0,343,0,0,0,0,0,0,0,0,0,0,0,0,104,104,78,79,78,79,78,79,0,0,495,0,0,0,0,0,494,0,0,0,0,0,0,0,0,342,106,342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,503,0,0,0,0,0,502,0,0,11,0,209,209,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,71,70,71,70,71,0,0,503,0,0,427,0,0,502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,78,79,78,79,78,79,0,0,503,0,425,435,426,0,502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,503,0,433,0,434,0,502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,71,70,71,70,71,0,0,503,0,0,0,0,0,502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,78,79,78,79,78,79,0,0,503,0,0,0,0,0,502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,511,0,0,0,0,0,510,0,0,0,0,0,0,424,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,343,342,343,342,343,0,0,0,0,0,0,0,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,440,443,442,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0,0,204,0,0,0,0,0,0,448,451,450,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,341,0,0,352,0,352,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,104,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,341,0,0,0,0,0,0,0,0,0,0,204,0,0,0,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,340,0,10,0,217,201,200,200,0,0,0,212,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,5,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,5,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,5,0,0,5,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,5,0,5,5,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15,15,16,16,0,0,0,0,8,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,12,12,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"events":[ +null, +{"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[1,1,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":21,"y":6}, +{"id":2,"name":"EV002","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":22,"y":6}, +{"id":3,"name":"EV003","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":50,"pitch":100,"pan":0}]},{"code":201,"indent":0,"parameters":[0,4,4,9,6,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":25,"y":20}, +{"id":4,"name":"EV004","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":201,"indent":0,"parameters":[0,7,10,5,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":33,"y":5}, +{"id":5,"name":"EV005","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":3},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":111,"indent":0,"parameters":[1,1,0,3,0]},{"code":250,"indent":1,"parameters":[{"name":"Move1","volume":50,"pitch":100,"pan":0}]},{"code":201,"indent":1,"parameters":[0,3,7,14,6,0]},{"code":223,"indent":1,"parameters":[[-34,-34,-34,0],1,true]},{"code":235,"indent":1,"parameters":[1]},{"code":0,"indent":1,"parameters":[]},{"code":411,"indent":0,"parameters":[]},{"code":205,"indent":1,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":1,"parameters":[{"code":13,"indent":null}]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["侍女「まだ水着道具一式を集め終えていませんね」"]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["水着、浮き輪、ビーチボールを揃えよう!"]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":8,"y":34}, +{"id":6,"name":"EV006","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[3,3,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":3,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":17,"y":7}, +{"id":7,"name":"EV007","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[3,3,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":3,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":18,"y":7}, +{"id":8,"name":"EV008","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":34,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":19,"y":13}, +{"id":9,"name":"EV009","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[3,3,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":3,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":19,"y":8}, +{"id":10,"name":"EV010","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[1,1,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":20,"y":7}, +{"id":11,"name":"EV011","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["醤油ラーメンに生卵を入れよう(´(ェ)`)"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":5,"y":5}, +{"id":12,"name":"EV012","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":24,"y":16}, +{"id":13,"name":"EV013","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":16,"y":6}, +null, +{"id":15,"name":"EV015","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[1,1,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":21,"y":7}, +{"id":16,"name":"EV016","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":3,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[3,3,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":17,"y":6}, +null, +{"id":18,"name":"EV018","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":5,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[5,5,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":18,"y":11}, +{"id":19,"name":"EV019","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":6,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[6,6,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":20,"y":11}, +{"id":20,"name":"EV020","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":8,"pattern":1,"characterIndex":7},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":7,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":8,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[7,7,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":32,"y":19}, +null, +null, +{"id":23,"name":"EV023","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":16,"y":11}, +null, +{"id":25,"name":"EV025","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":8,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":8,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":8,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[8,8,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":26,"y":19}, +{"id":26,"name":"EV026","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[4,4,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":8,"y":12}, +{"id":27,"name":"EV027","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":3,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":8,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":30,"y":31}, +{"id":28,"name":"EV028","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":22,"y":11}, +{"id":29,"name":"EV029","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":121,"indent":0,"parameters":[36,36,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":28,"y":14}, +{"id":30,"name":"EV030","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":356,"indent":0,"parameters":["SmartPath 0 -1"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":5,"moveRoute":{"list":[{"code":10,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":35,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":356,"indent":0,"parameters":["SmartPath 0 -1"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[35,35,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":4,"moveRoute":{"list":[{"code":10,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":5,"moveType":3,"priorityType":1,"stepAnime":true,"through":false,"trigger":2,"walkAnime":true}],"x":13,"y":29}, +{"id":31,"name":"EV031","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":8,"pattern":1,"characterIndex":7},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":5,"moveRoute":{"list":[{"code":10,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":36,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":356,"indent":0,"parameters":["SmartPath 0 -1"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[36,36,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":4,"moveRoute":{"list":[{"code":10,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":3,"priorityType":1,"stepAnime":true,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":34,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":356,"indent":0,"parameters":["SmartPath 0 -1"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[34,34,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":4,"moveRoute":{"list":[{"code":10,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":5,"moveType":3,"priorityType":1,"stepAnime":true,"through":false,"trigger":2,"walkAnime":true}],"x":23,"y":24}, +{"id":32,"name":"EV032","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":35,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":121,"indent":0,"parameters":[35,35,0]},{"code":121,"indent":0,"parameters":[46,46,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":46,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":7,"y":29}, +{"id":33,"name":"EV033","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":3,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,9,15,6,2,0]},{"code":121,"indent":0,"parameters":[3,3,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":18,"y":34}, +{"id":34,"name":"EV034","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":3,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,9,15,6,2,0]},{"code":121,"indent":0,"parameters":[3,3,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":20,"y":34}, +{"id":35,"name":"EV035","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":3,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,9,15,6,2,0]},{"code":121,"indent":0,"parameters":[3,3,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":19,"y":34}, +{"id":36,"name":"EV036","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":14,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[14,14,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":21,"y":32}, +{"id":37,"name":"EV037","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":12,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[12,12,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":17,"y":32}, +{"id":38,"name":"EV038","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":11,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[11,11,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":17,"y":31}, +{"id":39,"name":"EV039","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":13,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[13,13,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":21,"y":31}, +{"id":40,"name":"EV040","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":8,"pattern":1,"characterIndex":7},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":10,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":8,"pattern":1,"characterIndex":7},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":121,"indent":0,"parameters":[10,10,1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":5,"y":34}, +{"id":41,"name":"EV041","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":213,"indent":0,"parameters":[41,10,true]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":6,"y":19}, +{"id":42,"name":"EV042","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":22,"y":14}, +{"id":43,"name":"EV043","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":16,"y":14}, +{"id":44,"name":"EV044","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":27,"y":14}, +{"id":45,"name":"EV045","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[5,5,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":5,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":2,"walkAnime":true}],"x":17,"y":12}, +{"id":46,"name":"EV046","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[4,4,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":8,"y":14}, +{"id":47,"name":"EV047","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[5,5,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":5,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":2,"walkAnime":true}],"x":18,"y":12}, +{"id":48,"name":"EV048","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[5,5,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":5,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":2,"walkAnime":true}],"x":19,"y":12}, +null, +null, +null, +null, +{"id":53,"name":"EV053","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[6,6,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":6,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":21,"y":12}, +{"id":54,"name":"EV054","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[6,6,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":6,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":20,"y":12}, +null, +{"id":56,"name":"EV056","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":28,"y":23}, +{"id":57,"name":"EV057","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":32,"y":33}, +{"id":58,"name":"EV058","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":12,"y":31}, +{"id":59,"name":"EV059","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":6,"y":28}, +{"id":60,"name":"EV060","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫様「きゃっ!」"]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":121,"indent":0,"parameters":[31,31,0]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":21,"y":5}, +{"id":61,"name":"EV061","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":7}, +{"id":62,"name":"EV062","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[4,4,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":8,"y":13}, +{"id":63,"name":"EV063","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":6,"y":14}, +{"id":64,"name":"EV064","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":0,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["フロ魔1~3巻があった!!"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["とても楽しかった!!!"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":9,"y":19}, +{"id":65,"name":"EV065","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":6},"list":[{"code":250,"indent":0,"parameters":[{"name":"Item1","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["浮き輪を手に入れた"]},{"code":126,"indent":0,"parameters":[7,0,0,1]},{"code":122,"indent":0,"parameters":[1,1,1,0,1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":29,"y":20}, +{"id":66,"name":"EV066","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[10,10,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":10,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":5,"y":33}, +{"id":67,"name":"EV067","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[11,11,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":11,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":18,"y":31}, +null, +{"id":69,"name":"EV069","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[13,13,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":13,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":20,"y":31}, +{"id":70,"name":"EV070","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[14,14,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":14,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":20,"y":32}, +null, +{"id":72,"name":"EV072","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[12,12,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":12,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":18,"y":32}, +{"id":73,"name":"EV073","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[8,8,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":8,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":26,"y":18}, +null, +{"id":75,"name":"EV075","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[10,10,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":10,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":5,"y":32}, +{"id":76,"name":"EV076","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[11,11,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":11,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":19,"y":31}, +{"id":77,"name":"EV077","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[7,7,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":7,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":32,"y":18}, +{"id":78,"name":"EV078","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":121,"indent":0,"parameters":[12,12,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":12,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":19,"y":32}, +{"id":79,"name":"EV079","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":14,"y":14}, +{"id":80,"name":"EV080","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":6},"list":[{"code":250,"indent":0,"parameters":[{"name":"Item1","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["ビーチボールを手に入れた"]},{"code":126,"indent":0,"parameters":[6,0,0,1]},{"code":122,"indent":0,"parameters":[1,1,1,0,1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":10,"y":34}, +{"id":81,"name":"EV081","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":6},"list":[{"code":250,"indent":0,"parameters":[{"name":"Item1","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["水着を手に入れた"]},{"code":126,"indent":0,"parameters":[5,0,0,1]},{"code":122,"indent":0,"parameters":[1,1,1,0,1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":30,"y":9}, +{"id":82,"name":"EV082","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":14,"y":28}, +{"id":83,"name":"EV083","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People2","direction":2,"pattern":1,"characterIndex":2},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["司祭「アライブをよろしくね(´(ェ)`)」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":29,"y":28}, +{"id":84,"name":"スクラッチ","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"Nature","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["?「にゃ~ん(私はスクラッチ、厨房の魚をくれたら"]},{"code":401,"indent":0,"parameters":["  変身してもいいにゃ~)」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":30,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"Nature","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["?「にゃにゃん!(ありがとうにゃん! "]},{"code":401,"indent":0,"parameters":["  じゃあ変身してあげるにゃん♪)」"]},{"code":108,"indent":0,"parameters":["くるくる回って、スクラッチになる"]},{"code":126,"indent":0,"parameters":[8,1,0,1]},{"code":205,"indent":0,"parameters":[84,{"list":[{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":224,"indent":0,"parameters":[[255,255,255,170],10,false]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":30,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"saten","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[84,{"list":[{"code":17,"indent":null},{"code":15,"parameters":[30],"indent":null},{"code":19,"indent":null},{"code":15,"parameters":[30],"indent":0},{"code":18,"indent":null},{"code":15,"parameters":[40],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[60],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[30],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[30],"indent":0}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[40],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[60],"indent":null}]},{"code":108,"indent":0,"parameters":["くるくる回って、スクラッチになる"]},{"code":213,"indent":0,"parameters":[84,4,false]},{"code":231,"indent":0,"parameters":[1,"sukuratti0000000",0,0,0,0,100,100,255,0]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":["?「じゃーん!すごいでしょう!!"]},{"code":401,"indent":0,"parameters":["  お魚は美味しくいただくにゃ♪"]},{"code":401,"indent":0,"parameters":["  じゃーにゃー♡」"]},{"code":235,"indent":0,"parameters":[1]},{"code":123,"indent":0,"parameters":["B",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"B","selfSwitchValid":true,"switch1Id":30,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"saten","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":231,"indent":0,"parameters":[1,"sukuratti0000000",0,0,0,0,100,100,255,0]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":["?「にゃー♡」"]},{"code":235,"indent":0,"parameters":[1]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":33,"y":22}, +{"id":85,"name":"EV085","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":6},"list":[{"code":250,"indent":0,"parameters":[{"name":"Item1","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["魚を手に入れた"]},{"code":126,"indent":0,"parameters":[8,0,0,1]},{"code":121,"indent":0,"parameters":[30,30,0]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":12,"y":10}, +{"id":86,"name":"EV086","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People1","direction":8,"pattern":1,"characterIndex":5},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["メイド「おや、姫様。"]},{"code":401,"indent":0,"parameters":["   厨房になにか用事でも?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":13,"y":9}, +{"id":87,"name":"EV087","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫様「きゃっ!」"]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":121,"indent":0,"parameters":[31,31,0]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":20,"y":5}, +{"id":88,"name":"EV088","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫様「きゃっ!」"]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":121,"indent":0,"parameters":[31,31,0]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":19,"y":5}, +{"id":89,"name":"EV089","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫様「きゃっ!」"]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":121,"indent":0,"parameters":[31,31,0]},{"code":121,"indent":0,"parameters":[3,3,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":18,"y":5}, +{"id":90,"name":"EV090","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫様「きゃっ!」"]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":121,"indent":0,"parameters":[31,31,0]},{"code":121,"indent":0,"parameters":[3,3,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":3,"indent":null},{"code":2,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":2,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":17,"y":5}, +{"id":91,"name":"EV091","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":34,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":19,"y":16}, +{"id":92,"name":"EV092","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":34,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":19,"y":15}, +{"id":93,"name":"EV093","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":34,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":19,"y":17}, +{"id":94,"name":"EV094","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":34,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":19,"y":14}, +{"id":95,"name":"EV095","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":15,"y":16}, +{"id":96,"name":"EV096","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":23,"y":29}, +{"id":97,"name":"EV097","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":6,"y":22}, +{"id":98,"name":"EV098","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":5,"y":31}, +{"id":99,"name":"EV099","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":19,"y":30}, +{"id":100,"name":"EV100","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":30,"y":33}, +{"id":101,"name":"EV101","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":11,"y":10}, +null, +{"id":103,"name":"EV103","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":29,"y":9}, +{"id":104,"name":"EV104","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":31,"y":16}, +null, +null, +null +] +} \ No newline at end of file diff --git a/data/Map003.json b/data/Map003.json new file mode 100644 index 0000000..52d9a8e --- /dev/null +++ b/data/Map003.json @@ -0,0 +1,38 @@ +{ +"autoplayBgm":true,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"Dungeon4","pan":0,"pitch":100,"volume":50},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"","encounterList":[],"encounterStep":30,"height":19,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":3,"width":25, +"data":[1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,6786,6772,6772,6772,6772,6772,6772,6772,1536,1536,1536,1536,1536,6787,6785,6785,6785,6785,6785,6785,6785,6785,6785,6785,6785,6781,6780,6780,6764,6780,6780,6780,6780,1536,1536,1536,1536,1536,6784,7138,7138,7138,7138,7138,7138,7138,7138,7138,7138,7138,7138,7138,7138,6784,7138,7138,7138,7142,1536,1536,1536,1536,1536,6784,7144,7144,7144,7144,7144,7144,7144,7144,7144,7144,7144,7144,7144,7144,6784,7144,7144,7144,7148,1536,1536,1536,1536,1536,6784,1554,1555,1554,1555,1555,1555,1554,1555,1555,1554,1555,1554,1555,1554,6784,1536,1536,1536,1536,1536,1536,1536,1536,1536,6784,1555,1554,1555,1554,1554,1555,1555,1554,1554,1555,1554,1555,1554,1555,6784,1536,1536,1536,1536,1536,1536,1536,1536,1536,6784,1554,1555,1554,1555,1555,1555,1554,1555,1555,1554,1555,1554,1555,1554,6784,1536,1536,1536,1536,1536,1536,1536,1536,1536,6784,1554,1555,1555,1554,1555,1554,1555,1555,1554,1555,1554,1555,1554,1555,6784,1536,1536,1536,1536,1536,1536,1536,1536,1536,6784,1555,1554,1554,1555,1555,1555,1554,1555,1555,1554,1555,1554,1555,1554,6784,1536,1536,1536,1536,1536,1536,1536,1536,1536,6784,1554,1555,1555,1554,1554,1554,1555,1554,1554,1554,1555,1554,1555,1554,6784,1536,1536,1536,1536,1536,1536,1536,1536,1536,6784,1555,1554,1554,1555,1555,1555,1554,1555,1555,1555,1554,1555,1554,1555,6784,1536,1536,1536,1536,1536,1536,1536,1536,1536,6784,1554,1555,1555,1554,1555,1554,1555,1555,1555,1554,1555,1554,1555,1554,6784,1536,1536,1536,1536,1536,1536,1536,1536,1536,6784,1555,1554,1554,1555,1554,1555,1554,1555,1554,1555,1554,1555,1554,1555,6784,1536,1536,1536,1536,1536,1536,1536,1536,1536,6793,6785,6785,6785,6785,6785,6785,6785,6785,6785,6785,6785,6785,6785,6785,6791,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,0,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,226,227,226,227,0,0,0,0,0,0,0,0,198,0,0,0,0,0,0,0,0,0,0,0,0,226,227,234,235,0,0,0,0,0,0,243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,243,224,242,206,0,0,0,206,0,251,0,0,243,0,0,0,0,0,0,0,0,0,0,0,0,251,225,250,214,0,0,0,214,0,0,0,0,251,0,0,0,0,0,0,0,0,0,0,0,225,0,0,0,0,201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,206,0,0,201,206,0,226,227,0,201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,214,0,0,0,214,248,234,226,227,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,234,226,227,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,201,224,224,224,234,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"events":[ +null, +{"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Door1","direction":2,"pattern":1,"characterIndex":3},"list":[{"code":123,"indent":0,"parameters":["A",0]},{"code":250,"indent":0,"parameters":[{"name":"Door1","volume":50,"pitch":100,"pan":0}]},{"code":221,"indent":0,"parameters":[]},{"code":216,"indent":0,"parameters":[1]},{"code":223,"indent":0,"parameters":[[-68,-68,-68,0],30,true]},{"code":230,"indent":0,"parameters":[30]},{"code":201,"indent":0,"parameters":[0,5,1,6,6,0]},{"code":222,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"B","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Door1","direction":6,"pattern":1,"characterIndex":3},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":18,"y":5}, +{"id":2,"name":"EV002","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":7,"y":11}, +{"id":3,"name":"EV003","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":7,"y":9}, +{"id":4,"name":"EV004","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":8,"y":10}, +{"id":5,"name":"EV005","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":9,"y":9}, +{"id":6,"name":"EV006","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":11,"y":10}, +{"id":7,"name":"EV007","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":15,"y":10}, +{"id":8,"name":"EV008","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":14,"y":9}, +{"id":9,"name":"EV009","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":13,"y":14}, +{"id":10,"name":"EV010","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":15,"y":8}, +{"id":11,"name":"EV011","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":11,"y":6}, +{"id":12,"name":"EV012","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":9,"y":11}, +{"id":13,"name":"EV013","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":12,"y":8}, +{"id":14,"name":"EV014","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":13,"y":7}, +{"id":15,"name":"EV015","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":11,"y":14}, +{"id":16,"name":"EV016","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":8,"y":13}, +{"id":17,"name":"EV017","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":14,"y":13}, +{"id":18,"name":"EV018","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":12,"y":12}, +{"id":19,"name":"EV019","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":11,"y":12}, +{"id":20,"name":"EV020","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":13,"y":12}, +{"id":21,"name":"EV021","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":12,"y":11}, +{"id":22,"name":"EV022","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":18,"y":10}, +{"id":23,"name":"EV023","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":18,"y":6}, +{"id":24,"name":"EV024","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":18,"y":7}, +{"id":25,"name":"EV025","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":16,"y":8}, +{"id":26,"name":"EV026","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":17,"y":9}, +{"id":27,"name":"EV027","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":16,"y":10}, +{"id":28,"name":"EV028","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Actor4","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":11,"indent":null},{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null},{"code":15,"parameters":[10],"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":11,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Transceiver","volume":20,"pitch":80,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[10],"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":17,"y":11}, +{"id":29,"name":"EV029","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":50,"pitch":100,"pan":0}]},{"code":201,"indent":0,"parameters":[0,2,9,34,6,0]},{"code":223,"indent":0,"parameters":[[0,0,0,0],1,true]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":6,"y":14}, +{"id":30,"name":"EV030","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":204,"indent":0,"parameters":[6,4,4]},{"code":204,"indent":0,"parameters":[8,3,4]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「奥の扉が、城壁の外の抜け道となっています」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「しかし、この荷物が邪魔ですね…」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「大丈夫!押せば動くでしょ!"]},{"code":401,"indent":0,"parameters":["  私の覇道を止めるものなんてないのよ!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「覇道って。海水浴ですよね…」"]},{"code":204,"indent":0,"parameters":[2,3,4]},{"code":204,"indent":0,"parameters":[4,4,4]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":6,"y":15}, +{"id":31,"name":"EV031","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":8,"y":14} +] +} \ No newline at end of file diff --git a/data/Map004.json b/data/Map004.json new file mode 100644 index 0000000..f5935a9 --- /dev/null +++ b/data/Map004.json @@ -0,0 +1,10 @@ +{ +"autoplayBgm":true,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"03_Ruin_Rummage","pan":0,"pitch":130,"volume":50},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"","encounterList":[],"encounterStep":30,"height":13,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":3,"width":17, +"data":[1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,6115,6113,6113,6103,6113,6113,6113,6103,6113,6113,6113,6117,1536,1536,1536,1536,1536,6112,6466,6470,6112,6467,6466,6470,6112,6467,6466,6466,6112,1536,1536,1536,1536,1536,6112,6472,6472,6112,6472,6472,6472,6112,6472,6472,6472,6112,1536,1536,1536,1536,1536,6112,3282,3284,6112,3282,3268,3284,6112,3282,3268,3284,6112,1536,1536,1536,1536,1536,6112,3264,3272,6124,3264,3248,3272,6124,3264,3248,3272,6112,1536,1536,1536,1536,1536,6112,3264,3272,6471,3264,3248,3272,6471,3264,3248,3272,6112,1536,1536,1536,1536,1536,6112,3264,3272,6477,3264,3248,3272,6477,3264,3248,3272,6112,1536,1536,1536,1536,1536,6112,3288,3278,3281,3277,3276,3278,3281,3277,3276,3286,6112,1536,1536,1536,1536,1536,6121,6113,6113,6113,6113,6113,6113,6113,6113,6113,6113,6119,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245,0,0,0,245,0,0,0,0,0,0,0,0,0,0,0,0,253,0,0,0,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,124,0,208,0,85,0,208,0,85,0,0,0,0,0,0,0,96,0,0,0,0,93,0,0,0,93,0,0,0,0,0,0,0,104,0,0,244,246,247,0,244,246,247,0,0,0,0,0,0,0,0,0,0,252,254,255,0,252,254,255,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,5,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,5,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,5,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"events":[ +null, +{"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":50,"pitch":100,"pan":0}]},{"code":201,"indent":0,"parameters":[0,2,26,20,6,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":3,"y":9}, +{"id":2,"name":"EV002","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":8,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["*「姫様!!」"]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":24,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":true,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":3,"y":7}, +null +] +} \ No newline at end of file diff --git a/data/Map005.json b/data/Map005.json new file mode 100644 index 0000000..037ea09 --- /dev/null +++ b/data/Map005.json @@ -0,0 +1,11 @@ +{ +"autoplayBgm":false,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"Dungeon5","pan":0,"pitch":70,"volume":50},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":true,"displayName":"","encounterList":[],"encounterStep":30,"height":13,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":3,"width":17, +"data":[1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1583,1583,1583,1583,1583,1583,1583,1583,1583,1583,1583,1583,1583,1583,1583,1583,1583,1555,1554,1555,1554,1555,1554,1555,1554,1555,1554,1555,1554,1555,1554,1555,1554,1555,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3150,0,0,0,3147,3149,0,0,0,3150,0,0,0,3147,3149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"events":[ +null, +{"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":221,"indent":0,"parameters":[]},{"code":201,"indent":0,"parameters":[0,1,1,12,8,0]},{"code":245,"indent":0,"parameters":[{"name":"Sea","volume":35,"pitch":100,"pan":0}]},{"code":223,"indent":0,"parameters":[[0,0,0,0],1,true]},{"code":230,"indent":0,"parameters":[120]},{"code":108,"indent":0,"parameters":["波の音が流れる"]},{"code":222,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":16,"y":6}, +{"id":2,"name":"侍女","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"hime","direction":6,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「急ぐとこけますよ」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":10,"indent":null},{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":3,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":0,"y":6}, +{"id":3,"name":"EV003","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「もしかして、この先に・・・!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「そうです姫様。ここを抜ければ海です!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「やったやった! さー行くぞ!!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「こけますよ、姫様!」"]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":10,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":10,"indent":null}]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":0,"y":12}, +{"id":4,"name":"EV004","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":11,"y":6} +] +} \ No newline at end of file diff --git a/data/Map006.json b/data/Map006.json new file mode 100644 index 0000000..9b49e51 --- /dev/null +++ b/data/Map006.json @@ -0,0 +1,6 @@ +{ +"autoplayBgm":false,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"","pan":0,"pitch":100,"volume":90},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"","encounterList":[],"encounterStep":30,"height":30,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":1,"width":30, +"data":[2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,2064,2048,2048,2048,2048,2048,2052,2076,2076,2076,2076,2056,2048,2048,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2820,2854,2064,2048,2048,2048,2048,2052,2086,2850,2836,2836,2852,2088,2056,2048,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,2091,2077,2076,2056,2048,2052,2086,2850,2817,2816,2816,2818,2852,2088,2056,2816,2816,2816,2816,2816,2820,2844,2844,2844,2844,2844,2824,2816,2816,2818,2836,2836,2852,2088,2076,2086,2850,2821,2844,2844,2844,2824,2818,2852,2064,2816,2816,2816,2816,2820,2854,2946,2932,2933,2945,2957,2832,2816,2816,2816,2816,2816,2818,2836,2836,2836,2817,2840,2955,2945,2949,2856,2844,2841,2064,2844,2824,2816,2816,2840,2946,2913,2912,2936,2850,2836,2817,2816,2816,2820,2844,2844,2844,2824,2816,2816,2816,2818,2836,2852,2929,2932,2948,2848,2064,2084,2856,2824,2816,2840,2952,2920,2912,2936,2832,2816,2816,2816,2816,2840,2082,2068,2084,2832,2816,2816,2816,2816,2816,2840,2952,2920,2936,2848,2088,2050,2084,2832,2816,2818,2852,2952,2940,2950,2832,2820,2844,2844,2844,2854,2064,2048,2072,2856,2844,2844,2824,2816,2816,2818,2852,2952,2950,2857,2849,2048,2072,2856,2824,2816,2818,2837,2849,2849,2829,2854,2083,2081,2081,2081,2077,2076,2078,2081,2081,2085,2856,2844,2828,2844,2846,2849,2861,2082,2068,2048,2050,2084,2856,2844,2844,2854,2083,2093,2848,2091,2087,2850,2836,2836,2836,2836,2836,2836,2852,2089,2081,2093,2848,2091,2081,2070,2069,2077,2076,2076,2056,2050,2068,2069,2081,2081,2087,2850,2819,2836,2836,2817,2816,2816,2816,2816,2816,2816,2818,2836,2836,2836,2819,2836,2852,2088,2086,2850,2836,2852,2088,2056,2048,2072,2850,2836,2836,2817,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2818,2836,2836,2817,2816,2818,2852,2088,2056,2072,2856,2824,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2818,2852,2064,2050,2084,2856,2844,2844,2824,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,2064,2048,2072,2946,2932,2948,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,2064,2048,2072,2928,2912,2936,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2820,2844,2816,2816,2840,2064,2048,2072,2952,2920,2936,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,2082,2816,2816,2840,2088,2056,2072,2862,2952,2937,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2820,2844,2844,2844,2844,2854,2064,2844,2824,2818,2852,2088,2058,2068,2084,2956,2856,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2854,2082,2068,2068,2069,2081,2077,2948,2832,2816,2818,2852,2064,2048,2054,2081,2081,2081,2081,2081,2081,2081,2081,2081,2081,2081,2081,2081,2081,2081,2081,2077,2076,2076,2086,2850,2836,2936,2856,2824,2816,2840,2064,2052,2086,2947,2957,2850,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2817,2816,2942,2957,2832,2816,2840,2064,2072,2946,2938,2850,2821,2844,2824,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2820,2844,2844,2824,2816,2836,2836,2817,2816,2840,2064,2072,2928,2936,2856,2854,2958,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,2955,2949,2856,2844,2816,2816,2816,2816,2840,2088,2073,2952,2942,2945,2957,2850,2817,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2820,2844,2846,2861,2929,2932,2932,2844,2844,2844,2824,2822,2861,2065,2084,2859,2838,2836,2817,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,2946,2932,2932,2913,2912,2912,2932,2933,2957,2832,2840,2082,2053,2078,2085,2856,2824,2816,2816,2816,2816,2816,2816,2820,2844,2844,2844,2824,2816,2840,2952,2920,2912,2912,2912,2912,2912,2936,2859,2845,2841,2088,2086,2858,2089,2085,2856,2844,2824,2816,2816,2816,2816,2840,2955,2934,2948,2856,2824,2818,2852,2952,2940,2920,2912,2912,2912,2914,2932,2948,2857,2838,2836,2819,2852,2089,2070,2084,2856,2844,2844,2844,2844,2826,2852,2952,2926,2957,2832,2816,2818,2836,2852,2952,2920,2912,2912,2912,2912,2918,2957,2834,2844,2844,2826,2852,2088,2078,2081,2081,2081,2081,2085,2856,2846,2861,2956,2850,2817,2816,2816,2816,2818,2852,2952,2920,2912,2912,2912,2936,2850,2842,2946,2948,2832,2818,2836,2836,2836,2836,2836,2852,2065,2068,2068,2084,2850,2817,2816,2816,2816,2816,2816,2818,2852,2928,3152,3152,3152,3152,3152,3152,3152,3152,3152,3152,3152,3152,3152,3152,3152,3176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3152,3152,3152,3152,3152,3152,3152,3152,3152,3152,3152,3152,3156,3180,3180,3190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3180,3180,3164,3180,3164,3180,3180,3180,3180,3180,3180,3180,3190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3196,0,3184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3187,3183,3197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3195,3191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3810,3797,3821,0,3098,0,0,0,3090,3092,3819,3809,3813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3794,3814,3099,3089,3095,0,0,0,3096,3086,3101,0,3808,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3820,0,0,0,0,0,0,0,0,0,0,3486,3820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3099,3093,0,0,0,0,3102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3090,3092,0,3100,0,0,0,3102,0,3098,3482,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3096,3086,3101,0,0,0,0,0,3099,3095,3472,3098,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3098,0,0,0,0,0,3482,0,0,3482,0,3472,3088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3088,0,0,3475,3473,3473,3455,3473,3473,3455,3473,3479,3088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3088,0,0,3472,0,0,3472,0,0,3472,0,0,3100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3100,0,0,3472,0,0,3472,0,0,3472,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3484,0,0,3472,0,0,3484,0,0,3098,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3099,3089,3089,3089,3089,3101,3484,3099,3089,3089,3089,3089,3095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3098,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3088,0,0,0,0,0,0,0,0,0,0,0,3482,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3088,0,0,0,0,0,0,0,0,0,0,3102,3481,3473,3477,0,0,0,0,0,0,0,0,0,0,0,0,0,3090,3076,3082,0,0,0,0,0,0,3091,3089,3089,3101,0,0,3102,3481,3477,0,0,0,0,0,0,0,0,0,0,0,3091,3085,3084,3094,0,0,0,0,3090,3076,3082,0,0,0,0,0,0,0,3481,3477,0,0,0,0,0,0,0,0,0,0,3100,0,0,0,0,0,0,0,3096,3084,3086,3089,3078,3092,0,0,0,0,0,3484,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3072,3058,3077,3089,3101,0,0,0,3486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3096,3084,3094,0,0,0,0,0,0,0,3486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3482,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3481,3477,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3457,3476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,217,225,217,225,217,0,0,0,217,225,217,225,217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,35,35,35,0,0,0,35,35,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,35,35,35,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,206,225,225,225,225,225,225,225,225,225,225,225,225,225,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,0,0,0,0,0,0,0,0,0,0,0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,0,0,0,0,0,0,0,0,0,0,127,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,0,0,0,0,0,0,0,0,0,0,0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,0,0,0,0,176,177,178,0,0,0,3,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,0,0,0,0,184,185,186,0,0,0,0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,0,0,0,0,192,193,194,0,0,0,0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,56,57,59,58,59,0,56,57,0,56,0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,57,56,0,0,0,0,0,0,0,0,0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,195,56,0,58,59,0,56,57,0,56,195,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,56,57,0,56,57,0,56,57,0,56,58,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,56,57,0,56,57,0,56,57,0,56,195,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,0,0,0,0,0,0,0,0,0,0,0,0,0,218,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,214,225,217,225,217,225,217,209,217,225,217,225,217,225,215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"events":[ +] +} \ No newline at end of file diff --git a/data/Map007.json b/data/Map007.json new file mode 100644 index 0000000..abfccb4 --- /dev/null +++ b/data/Map007.json @@ -0,0 +1,21 @@ +{ +"autoplayBgm":true,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"2000_Town2","pan":0,"pitch":100,"volume":50},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":true,"displayName":"","encounterList":[],"encounterStep":30,"height":13,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":3,"width":17, +"data":[1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,7467,7457,7457,7457,7457,7457,7461,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,7811,7810,7810,7810,7810,7810,7456,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,7817,7816,7816,7816,7816,7816,7456,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3714,3700,3700,3716,1571,1570,7465,7457,7469,1536,1536,1536,1536,1536,1536,1536,1536,3696,3680,3680,3704,1570,1571,7811,7810,7814,1536,1536,1536,1536,1536,1536,1536,1536,3696,3680,3680,3704,1571,1570,7817,7816,7820,1536,1536,1536,1536,1536,1536,1536,1536,3720,3708,3708,3718,1570,1571,3330,3316,3332,1536,1536,1536,1536,1536,1536,1536,1536,1571,1570,1571,1570,1571,1570,3312,3296,3320,1536,1536,1536,1536,1536,1536,1536,1536,1570,1571,1570,1571,1570,1571,3336,3324,3334,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3339,3341,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,33,33,134,132,174,0,0,0,0,0,0,0,0,0,0,0,142,41,41,142,140,0,0,0,0,0,0,0,0,0,0,0,0,108,81,82,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,90,0,0,0,50,20,0,0,0,0,0,0,0,0,0,0,0,0,0,105,97,58,28,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"events":[ +null, +{"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":2,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":31,"characterName":"","characterIndex":0,"direction":2,"pattern":0},"list":[{"code":121,"indent":0,"parameters":[35,35,1]},{"code":121,"indent":0,"parameters":[36,36,1]},{"code":121,"indent":0,"parameters":[34,34,1]},{"code":121,"indent":0,"parameters":[46,46,1]},{"code":250,"indent":0,"parameters":[{"name":"Laser1","volume":50,"pitch":100,"pan":0}]},{"code":201,"indent":0,"parameters":[0,2,33,6,2,0]},{"code":230,"indent":0,"parameters":[30]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":false}],"x":10,"y":4}, +{"id":2,"name":"侍女","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":27,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"hime","direction":8,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「今のお召し物以上に涼しい服は無いかと…」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":26,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"hime","direction":8,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「お許しを頂けるでしょうか?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":44,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"hime","direction":8,"pattern":1,"characterIndex":1},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":45,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":9}, +{"id":3,"name":"EV003","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「早く服を探そう」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":26,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move10","volume":50,"pitch":100,"pan":0}]},{"code":201,"indent":0,"parameters":[0,9,1,6,6,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":31,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫様「こっちじゃない」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":10}, +{"id":4,"name":"鏡","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["とても綺麗な鏡があった"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":26,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「早く王様に許しをもらいに行きな」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":12,"y":6}, +{"id":5,"name":"EV005","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":213,"indent":0,"parameters":[-1,5,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":15,"parameters":[60],"indent":null},{"code":37,"indent":null},{"code":2,"indent":null},{"code":3,"indent":null},{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[1,0],"indent":null},{"code":38,"indent":null},{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[60],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":37,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":2,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[1,0],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":38,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":225,"indent":0,"parameters":[2,8,10,true]},{"code":230,"indent":0,"parameters":[30]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["\\{\\{姫「暑いっ!!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「こんなに暑いんだから、服なんて脱いでやる!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":250,"indent":0,"parameters":[{"name":"Door1","volume":50,"pitch":100,"pan":0}]},{"code":121,"indent":0,"parameters":[27,27,0]},{"code":230,"indent":0,"parameters":[20]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「なりません、姫様!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[0,0],"indent":null},{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[0,0],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":213,"indent":0,"parameters":[-1,1,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「侍女!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「こんなに暑いんだよ侍女!"]},{"code":401,"indent":0,"parameters":["  なんで脱いじゃダメなの!?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「王族がそのような事をしてはなりません!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「う~…。じゃあ、もっと涼しい服にする」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「分かっていただいて、なによりですが、"]},{"code":401,"indent":0,"parameters":["   姫様はそれ以上涼しい服をお持ちでしたか?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「探す~…」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「…分かりました」"]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":13,"indent":null},{"code":18,"indent":null},{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":44,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":250,"indent":0,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}]},{"code":231,"indent":0,"parameters":[1,"クエスト 1",0,0,0,0,100,100,255,0]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":224,"indent":0,"parameters":[[255,255,255,170],60,false]},{"code":231,"indent":0,"parameters":[1,"クエスト 1a",0,0,0,0,100,100,255,0]},{"code":108,"indent":0,"parameters":["ここで、涼しい服を探すクエストが始まる"]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":0,"y":12}, +{"id":6,"name":"EV006","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":33,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Door1","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「……」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫様「ないな~…」"]},{"code":230,"indent":0,"parameters":[30]},{"code":250,"indent":0,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}]},{"code":235,"indent":0,"parameters":[1]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["???「姫はメスケモなんだから、裸でいいよ」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":18,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「うるさい!魔法の鏡!!」"]},{"code":213,"indent":0,"parameters":[4,3,true]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":0},{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":0},{"code":18,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":0}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":0}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「お前がこんな姿にした所為で、いろいろ"]},{"code":401,"indent":0,"parameters":["  大変なことになったんだから!」"]},{"code":213,"indent":0,"parameters":[4,4,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「へへ、ばっちり可愛いぜ。メスケモの姫様」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「そ、そうかな…ー"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「\\{じゃなーい!\\}」"]},{"code":231,"indent":0,"parameters":[1,"kuro",0,0,0,0,100,100,150,0]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫様はこの鏡の所為でメスケモ姫になったのです。"]},{"code":401,"indent":0,"parameters":["その理由を「漫画」でご説明します。"]},{"code":221,"indent":0,"parameters":[]},{"code":235,"indent":0,"parameters":[1]},{"code":231,"indent":0,"parameters":[1,"genkou1-1",0,0,0,0,100,100,255,0]},{"code":230,"indent":0,"parameters":[60]},{"code":250,"indent":0,"parameters":[{"name":"Book1","volume":50,"pitch":100,"pan":0}]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":221,"indent":0,"parameters":[]},{"code":231,"indent":0,"parameters":[2,"genkou1-2",0,0,0,0,100,100,255,0]},{"code":250,"indent":0,"parameters":[{"name":"Book1","volume":50,"pitch":100,"pan":0}]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":221,"indent":0,"parameters":[]},{"code":231,"indent":0,"parameters":[3,"genkou1-3",0,0,0,0,100,100,255,0]},{"code":250,"indent":0,"parameters":[{"name":"Book1","volume":50,"pitch":100,"pan":0}]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":221,"indent":0,"parameters":[]},{"code":235,"indent":0,"parameters":[1]},{"code":235,"indent":0,"parameters":[2]},{"code":235,"indent":0,"parameters":[3]},{"code":231,"indent":0,"parameters":[1,"genkou2-0",0,0,0,0,100,100,255,0]},{"code":250,"indent":0,"parameters":[{"name":"Book1","volume":50,"pitch":100,"pan":0}]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":221,"indent":0,"parameters":[]},{"code":231,"indent":0,"parameters":[2,"genkou2-1",0,0,0,0,100,100,255,0]},{"code":250,"indent":0,"parameters":[{"name":"Book1","volume":50,"pitch":100,"pan":0}]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":221,"indent":0,"parameters":[]},{"code":231,"indent":0,"parameters":[3,"genkou2-2",0,0,0,0,100,100,255,0]},{"code":250,"indent":0,"parameters":[{"name":"Book1","volume":50,"pitch":100,"pan":0}]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":221,"indent":0,"parameters":[]},{"code":235,"indent":0,"parameters":[1]},{"code":235,"indent":0,"parameters":[2]},{"code":235,"indent":0,"parameters":[3]},{"code":231,"indent":0,"parameters":[1,"genkou3-0",0,0,0,0,100,100,255,0]},{"code":250,"indent":0,"parameters":[{"name":"Book1","volume":50,"pitch":100,"pan":0}]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":221,"indent":0,"parameters":[]},{"code":231,"indent":0,"parameters":[2,"genkou3-1",0,0,0,0,100,100,255,0]},{"code":250,"indent":0,"parameters":[{"name":"Book1","volume":50,"pitch":100,"pan":0}]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":221,"indent":0,"parameters":[]},{"code":231,"indent":0,"parameters":[3,"genkou3-2",0,0,0,0,100,100,255,0]},{"code":250,"indent":0,"parameters":[{"name":"Book1","volume":50,"pitch":100,"pan":0}]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":221,"indent":0,"parameters":[]},{"code":235,"indent":0,"parameters":[1]},{"code":235,"indent":0,"parameters":[2]},{"code":235,"indent":0,"parameters":[3]},{"code":250,"indent":0,"parameters":[{"name":"Book1","volume":50,"pitch":100,"pan":0}]},{"code":223,"indent":0,"parameters":[[-68,-68,-68,0],1,true]},{"code":222,"indent":0,"parameters":[]},{"code":230,"indent":0,"parameters":[30]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":["ということです。"]},{"code":223,"indent":0,"parameters":[[0,0,0,0],60,true]},{"code":108,"indent":0,"parameters":["ここで漫画を表示する"]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":12,"indent":null},{"code":1,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":1,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「あの後、いろいろと確認させていただいたところ、"]},{"code":401,"indent":0,"parameters":["人間とケモノの半々と思われます」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「そして、治す術はないみたいです」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「しかし姫様は、落ち込むことはありませんでした。"]},{"code":401,"indent":0,"parameters":["  さすが姫様です!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":250,"indent":0,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「王族として当然!クヨクヨなんてしないんだから!」"]},{"code":213,"indent":0,"parameters":[-1,6,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":1,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":1,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「でも、この暑さは無理・・・。"]},{"code":401,"indent":0,"parameters":["  それにやっぱり、これ以上涼しい服はないのか・・・」"]},{"code":213,"indent":0,"parameters":[4,3,false]},{"code":230,"indent":0,"parameters":[60]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「だったら、\\{海水浴\\} なんてどうだい?」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":213,"indent":0,"parameters":[-1,2,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「カイスイヨク?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「知りませんか?メスケモの姫様」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「この暑い季節を乗りきるために、"]},{"code":401,"indent":0,"parameters":["  海で水を浴びることですよ」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「おお!それは涼しそうだな!!"]},{"code":401,"indent":0,"parameters":["  伊達に魔法の鏡をしていないな!」"]},{"code":213,"indent":0,"parameters":[4,3,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「その通りです。"]},{"code":401,"indent":0,"parameters":["  それと海水浴には専用の服を着るのです。」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「これです…」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":["魔法の鏡には三角の布が3つ映し出されていた"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「なんと!これは涼しそうだ!!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「ぐへへへ。そうでしょ、そうでしょ」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":4,"indent":null},{"code":17,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「侍女!私は泳ぐぞ!!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「姫様、王族が海へ行くともなれば、"]},{"code":401,"indent":0,"parameters":["  いろいろと大変です。"]},{"code":401,"indent":0,"parameters":["  王の許しが出るか、分かりませんよ?」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「お父様なら、きっと許してくれるはずだ!」"]},{"code":250,"indent":0,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}]},{"code":231,"indent":0,"parameters":[1,"クエスト 2",0,0,0,0,100,100,255,0]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":224,"indent":0,"parameters":[[255,255,255,170],60,false]},{"code":231,"indent":0,"parameters":[1,"クエスト 2a",0,0,0,0,100,100,255,0]},{"code":108,"indent":0,"parameters":["姫が部屋から出る"]},{"code":121,"indent":0,"parameters":[26,26,0]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":2,"y":12}, +{"id":7,"name":"EV007","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":6},"list":[{"code":121,"indent":0,"parameters":[33,33,0]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":11,"y":6}, +{"id":8,"name":"EV008","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":31,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":235,"indent":0,"parameters":[1]},{"code":213,"indent":0,"parameters":[-1,6,false]},{"code":230,"indent":0,"parameters":[60]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫様「捕まっちゃった~…う~う~……」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「くー……"]},{"code":401,"indent":0,"parameters":["  暑いよ~暑いよ~…」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「今は侍女の姉さんもいないんだし、"]},{"code":401,"indent":0,"parameters":["  脱いじゃないなよ。……ぐへへ」"]},{"code":213,"indent":0,"parameters":[-1,7,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「お前に言われると、むかつくから嫌だ。"]},{"code":401,"indent":0,"parameters":["  ホントは脱ぎたいけど、嫌だ」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「ちぇ…」"]},{"code":250,"indent":0,"parameters":[{"name":"Knock","volume":70,"pitch":100,"pan":0}]},{"code":230,"indent":0,"parameters":[15]},{"code":250,"indent":0,"parameters":[{"name":"Knock","volume":70,"pitch":100,"pan":0}]},{"code":108,"indent":0,"parameters":["こんこんのSE"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「姫様」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「うむ」"]},{"code":250,"indent":0,"parameters":[{"name":"Door1","volume":50,"pitch":100,"pan":0}]},{"code":121,"indent":0,"parameters":[44,44,0]},{"code":230,"indent":0,"parameters":[30]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":12,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「聞きましたよ。ここから抜け出そうとなされたとか」"]},{"code":213,"indent":0,"parameters":[-1,6,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「うぐ…」"]},{"code":213,"indent":0,"parameters":[2,8,true]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「そんなに行きたいのなら、行きませんか?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「海水浴」"]},{"code":213,"indent":0,"parameters":[-1,1,false]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[1,0],"indent":null},{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[1,0],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「え!行けるの!?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「でもお父様が…」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「大丈夫です。バレないように"]},{"code":401,"indent":0,"parameters":["   夜までに戻ってくれば」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[0,1],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[0,1],"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「侍女!!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「今日だけになりますが、我慢してください」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[0,1],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[0,1],"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「うん!うん!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null},{"code":14,"parameters":[0,1],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":44,"parameters":[{"name":"Jump1","volume":50,"pitch":100,"pan":0}],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":14,"parameters":[0,1],"indent":null}]},{"code":213,"indent":0,"parameters":[-1,4,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「侍女ー!!」"]},{"code":108,"indent":0,"parameters":["侍女に抱き着く"]},{"code":213,"indent":0,"parameters":[2,3,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「ふふ」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「それで、どうするのだ?"]},{"code":401,"indent":0,"parameters":["  兵たちに見つかれば、またここへ連れ戻されるぞ」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「任せてください」"]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":3,"indent":null},{"code":4,"indent":null},{"code":4,"indent":null},{"code":4,"indent":null},{"code":4,"indent":null},{"code":18,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":230,"indent":0,"parameters":[30]},{"code":250,"indent":0,"parameters":[{"name":"Door5","volume":50,"pitch":100,"pan":0}]},{"code":121,"indent":0,"parameters":[2,2,0]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":108,"indent":0,"parameters":["侍女が下の部屋に通じるロープを開放する"]},{"code":213,"indent":0,"parameters":[-1,1,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":4,"indent":null},{"code":4,"indent":null},{"code":3,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「な、なんだこれは!?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「これは緊急時の脱出口です」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「ほへ~…」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「海水浴に必要な3点のアイテムを探して、"]},{"code":401,"indent":0,"parameters":["  地下の貯蔵庫から抜け出します」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「分かった!では私についてこい!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「ふふ。分かりました」"]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":37,"indent":null},{"code":1,"indent":null},{"code":39,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":37,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":1,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":39,"indent":null}]},{"code":249,"indent":0,"parameters":[{"name":"Item","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女が仲間になった"]},{"code":129,"indent":0,"parameters":[2,0,false]},{"code":121,"indent":0,"parameters":[45,45,0]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":250,"indent":0,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}]},{"code":231,"indent":0,"parameters":[1,"クエスト 5",0,0,0,0,100,100,255,0]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":224,"indent":0,"parameters":[[255,255,255,170],60,false]},{"code":231,"indent":0,"parameters":[1,"クエスト 5a",0,0,0,0,100,100,255,0]},{"code":108,"indent":0,"parameters":["城内へ場所移動"]},{"code":108,"indent":0,"parameters":["クエスト"]},{"code":408,"indent":0,"parameters":["海水浴3点セットを入手し、"]},{"code":408,"indent":0,"parameters":["地下の貯蔵庫へ向かう"]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":4,"y":12}, +{"id":9,"name":"EV009","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":28,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":108,"indent":0,"parameters":["姫がベッドで寝ている。よこでそれを見つめる侍女"]},{"code":230,"indent":0,"parameters":[60]},{"code":213,"indent":0,"parameters":[-1,4,true]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「…姫様。今日は楽しかったですね」"]},{"code":213,"indent":0,"parameters":[12,10,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「すー…すー…」"]},{"code":213,"indent":0,"parameters":[4,3,true]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「お前が楽しみたかったんじゃないのか?」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":18,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":213,"indent":0,"parameters":[-1,6,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「そ、そんなことありません!"]},{"code":401,"indent":0,"parameters":["  姫様の水着姿を見たかったとかそんなとは決して…!」"]},{"code":213,"indent":0,"parameters":[4,8,true]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["鏡「あー、はいはい。"]},{"code":401,"indent":0,"parameters":["  俺はもう寝るから……」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「鏡が寝るって、どうなんですか…?」"]},{"code":213,"indent":0,"parameters":[4,10,true]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":17,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":230,"indent":0,"parameters":[30]},{"code":213,"indent":0,"parameters":[12,10,true]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「…おやすみなさい。 また明日お会いしましょう。"]},{"code":401,"indent":0,"parameters":["  姫様……」"]},{"code":230,"indent":0,"parameters":[60]},{"code":213,"indent":0,"parameters":[12,10,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「じじょ~……」"]},{"code":213,"indent":0,"parameters":[-1,4,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「ふふ…」"]},{"code":221,"indent":0,"parameters":[]},{"code":230,"indent":0,"parameters":[60]},{"code":231,"indent":0,"parameters":[1,"sekaitizu sepia",0,0,0,0,100,100,255,0]},{"code":108,"indent":0,"parameters":["ここで冒頭の世界地図のぼかした絵"]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["ここはどこかの王国"]},{"code":401,"indent":0,"parameters":["この国のお姫様は、ケモノの様な姿をしているらしい"]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["ある日、そんなお姫様は海水浴に行きました。"]},{"code":401,"indent":0,"parameters":["それはそれは楽しんだそうです。"]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["しかしお姫様はそこが海ではなく"]},{"code":401,"indent":0,"parameters":["湖であることを知りました。"]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["お姫様は大激怒。"]},{"code":401,"indent":0,"parameters":[""]},{"code":401,"indent":0,"parameters":[""]},{"code":401,"indent":0,"parameters":[""]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["翌日には"]},{"code":401,"indent":0,"parameters":["王様と侍女たちと共に"]},{"code":401,"indent":0,"parameters":["本物の海水浴に行ったそうです。"]},{"code":230,"indent":0,"parameters":[30]},{"code":242,"indent":0,"parameters":[3]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":[""]},{"code":401,"indent":0,"parameters":[" \\{\\{\\{おしまい"]},{"code":221,"indent":0,"parameters":[]},{"code":230,"indent":0,"parameters":[60]},{"code":231,"indent":0,"parameters":[1,"kuro",0,0,0,0,100,100,255,0]},{"code":223,"indent":0,"parameters":[[-255,-255,-255,0],1,true]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,2,1]},{"code":401,"indent":0,"parameters":["使用ツール:RPGツクールMV"]},{"code":401,"indent":0,"parameters":["使用素材製作者:とりあか様"]},{"code":401,"indent":0,"parameters":[""]},{"code":401,"indent":0,"parameters":["                ありがとうございました"]},{"code":101,"indent":0,"parameters":["",0,2,1]},{"code":401,"indent":0,"parameters":["ここまで遊んでいただきまして、"]},{"code":401,"indent":0,"parameters":["誠にありがとうございました。"]},{"code":401,"indent":0,"parameters":[""]},{"code":401,"indent":0,"parameters":["                     川上真樹"]},{"code":230,"indent":0,"parameters":[80]},{"code":354,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true}],"x":6,"y":12}, +{"id":10,"name":"EV010","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「早く服を探そう」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":26,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move10","volume":50,"pitch":100,"pan":0}]},{"code":201,"indent":0,"parameters":[0,9,1,6,6,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":31,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫様「こっちじゃない」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":7,"y":10}, +{"id":11,"name":"EV011","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["真っ白いテーブルがある"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":10,"y":6}, +{"id":12,"name":"姫","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":28,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":28,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"hime","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":7,"y":4}, +{"id":13,"name":"EV013","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":12,"y":9}, +{"id":14,"name":"EV014","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":5,"y":5} +] +} \ No newline at end of file diff --git a/data/Map008.json b/data/Map008.json new file mode 100644 index 0000000..ea929c2 --- /dev/null +++ b/data/Map008.json @@ -0,0 +1,33 @@ +{ +"autoplayBgm":true,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"Castle2","pan":0,"pitch":100,"volume":50},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":true,"displayName":"","encounterList":[],"encounterStep":30,"height":20,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":3,"width":17, +"data":[1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,8051,8050,8050,8050,8050,8050,8050,8050,8050,8050,8054,1536,1536,1536,1536,1536,1536,8057,8056,8056,8056,8056,8056,8056,8056,8056,8056,8060,1536,1536,1536,1536,1536,1536,1559,4098,4084,4100,4146,4132,4148,4098,4084,4100,1559,1536,1536,1536,1536,1536,1536,1559,4080,4064,4088,4128,4112,4136,4080,4064,4088,1559,1536,1536,1536,1536,1536,1536,1559,4080,4068,4102,4152,4140,4150,4104,4072,4088,1559,1536,1536,1536,1536,1536,1536,1559,4104,4102,4158,4107,4097,4109,4158,4104,4102,1559,1536,1536,1536,1536,1536,1536,1609,1616,1617,1617,1617,1617,1617,1617,1617,1618,1609,1536,1536,1536,1536,1536,1536,1559,4098,4084,4084,4084,4084,4084,4084,4084,4100,1559,1536,1536,1536,1536,1536,1536,1559,4104,4092,4076,4092,4076,4092,4076,4092,4102,1559,1536,1536,1536,1536,1536,1536,1559,1559,1559,4096,4158,4096,4158,4096,1559,1559,1559,1536,1536,1536,1536,1536,1536,1559,1559,1559,4081,4084,4067,4084,4090,1559,1559,1559,1536,1536,1536,1536,1536,1536,1559,1559,1559,4082,4092,4076,4092,4089,1559,1559,1559,1536,1536,1536,1536,1536,1536,1559,1559,1559,4096,4158,4096,4158,4096,1559,1559,1559,1536,1536,1536,1536,1536,1536,1559,1559,1559,4081,4084,4067,4084,4090,1559,1559,1559,1536,1536,1536,1536,1536,1536,1559,1559,1559,4080,4064,4064,4064,4088,1559,1559,1559,1536,1536,1536,1536,1536,1536,1559,1559,1559,4104,4072,4064,4068,4102,1559,1559,1559,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,4104,4092,4102,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,145,145,145,145,145,146,0,134,0,0,0,0,0,0,0,0,142,153,153,153,153,153,154,0,142,0,0,0,0,0,0,0,0,0,0,0,178,179,180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,187,188,0,0,0,0,0,0,0,0,0,0,204,0,0,0,0,0,0,0,0,0,204,0,0,0,0,0,0,212,0,0,0,0,0,0,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0,0,0,0,0,0,204,0,0,0,0,0,0,0,0,212,0,0,0,0,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0,0,0,0,0,0,204,0,0,0,0,0,0,0,0,212,0,0,0,0,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0,0,0,0,0,0,204,0,0,0,0,0,0,0,0,212,0,0,0,0,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"events":[ +null, +{"id":1,"name":"王","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":24,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「諦めてくれ。代わりに今度涼しい服を調達させよう」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":29,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":11,"y":4}, +{"id":2,"name":"侍女","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":23,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"hime","direction":8,"pattern":1,"characterIndex":1},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「仕方ありませんよ」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":29,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":9,"y":17}, +{"id":3,"name":"EV003","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Door5","volume":50,"pitch":100,"pan":0}]},{"code":211,"indent":0,"parameters":[0]},{"code":230,"indent":0,"parameters":[60]},{"code":121,"indent":0,"parameters":[22,22,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":8,"y":18}, +{"id":4,"name":"EV004","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Door5","volume":50,"pitch":100,"pan":0}]},{"code":211,"indent":0,"parameters":[0]},{"code":230,"indent":0,"parameters":[60]},{"code":121,"indent":0,"parameters":[22,22,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":7,"y":18}, +{"id":5,"name":"暑がり","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「自分も暑いので、兜外してもいいですか?」"]},{"code":102,"indent":0,"parameters":[["許す","ダメ"],1,0,2,0]},{"code":402,"indent":0,"parameters":[0,"許す"]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["兵「よっしゃー!」"]},{"code":250,"indent":1,"parameters":[{"name":"Equip3","volume":50,"pitch":100,"pan":0}]},{"code":121,"indent":1,"parameters":[25,25,0]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"ダメ"]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["兵「そうですか…」"]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":25,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"hesi","direction":4,"pattern":1,"characterIndex":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「涼し~」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":11,"y":11}, +{"id":6,"name":"EV006","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「あつい~」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":11,"y":14}, +{"id":7,"name":"EV007","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「私も海に入りたい…」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":11,"y":17}, +{"id":8,"name":"その向かい","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「私も暑いです」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":5,"y":11}, +{"id":9,"name":"EV009","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「暑いですわ~」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":5,"y":14}, +{"id":10,"name":"EV010","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「夏ですからね~」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":5,"y":17}, +{"id":11,"name":"EV011","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「暑いですね」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":4,"y":7}, +{"id":12,"name":"EV012","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「暑いですね」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":12,"y":7}, +{"id":13,"name":"EV013","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":6},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「我慢してください」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":6,"y":5}, +{"id":14,"name":"大臣","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":4},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["大臣「我慢してください」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":29,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":12,"y":4}, +{"id":15,"name":"EV015","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":12,"y":11}, +{"id":16,"name":"EV016","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":12,"y":14}, +{"id":17,"name":"EV017","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":4,"y":14}, +{"id":18,"name":"EV018","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":4,"y":11}, +{"id":19,"name":"EV019","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":3,"y":7}, +{"id":20,"name":"EV020","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":13,"y":7}, +{"id":21,"name":"EV021","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":205,"indent":0,"parameters":[5,{"list":[{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":17,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「今日も暑いな~」"]},{"code":230,"indent":0,"parameters":[20]},{"code":250,"indent":0,"parameters":[{"name":"Equip3","volume":50,"pitch":100,"pan":0}]},{"code":121,"indent":0,"parameters":[25,25,0]},{"code":213,"indent":0,"parameters":[8,1,true]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「兜を取るな」"]},{"code":213,"indent":0,"parameters":[5,6,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「だって、こんなに暑いんですよ。"]},{"code":401,"indent":0,"parameters":["  水浴びしたいな~」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「分かるが、そろそろ被れ。王が来られるぞ」"]},{"code":205,"indent":0,"parameters":[14,{"list":[{"code":1,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":1,"indent":null}]},{"code":230,"indent":0,"parameters":[30]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["大臣「王がお見えになる!」"]},{"code":213,"indent":0,"parameters":[5,6,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「やべっ!」"]},{"code":250,"indent":0,"parameters":[{"name":"Equip3","volume":50,"pitch":100,"pan":0}]},{"code":121,"indent":0,"parameters":[25,25,1]},{"code":230,"indent":0,"parameters":[30]},{"code":204,"indent":0,"parameters":[8,2,3]},{"code":108,"indent":0,"parameters":["兵が兜を被る"]},{"code":108,"indent":0,"parameters":["王が後ろのカーテンから現れ、椅子に座る"]},{"code":250,"indent":0,"parameters":[{"name":"Door1","volume":50,"pitch":100,"pan":0}]},{"code":121,"indent":0,"parameters":[24,24,0]},{"code":230,"indent":0,"parameters":[60]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵たち「国王陛下!!」"]},{"code":205,"indent":0,"parameters":[1,{"list":[{"code":37,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":2,"indent":null},{"code":2,"indent":null},{"code":2,"indent":null},{"code":4,"indent":null},{"code":16,"indent":null},{"code":38,"indent":null},{"code":15,"parameters":[30],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":37,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":2,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":2,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":2,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":38,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[30],"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「うむ」"]},{"code":213,"indent":0,"parameters":[1,8,true]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「しかし今日は暑いな、大臣」"]},{"code":205,"indent":0,"parameters":[14,{"list":[{"code":2,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":2,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["大臣「そうですね。姫様もこの暑さには泣いてましたよ」"]},{"code":213,"indent":0,"parameters":[1,6,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「うむ。あやつは特に暑さに対して弱いからな…」"]},{"code":230,"indent":0,"parameters":[60]},{"code":225,"indent":0,"parameters":[2,4,30,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["\\{姫「お父様!」"]},{"code":205,"indent":0,"parameters":[14,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":250,"indent":0,"parameters":[{"name":"Door5","volume":50,"pitch":100,"pan":0}]},{"code":121,"indent":0,"parameters":[23,23,0]},{"code":211,"indent":0,"parameters":[1]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":15,"parameters":[30],"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":12,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[30],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":12,"indent":null}]},{"code":108,"indent":0,"parameters":["姫と侍女が謁見の間に入ってくる"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["大臣「噂をすれば」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「うむ。謁見の間にどうした。我が娘よ」"]},{"code":213,"indent":0,"parameters":[-1,3,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「お父様!海水浴へ行きたいです!!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「この暑さだからな」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「では、行ってまいります!"]},{"code":401,"indent":0,"parameters":["  きっと遠いはずです!馬がいりますか?"]},{"code":401,"indent":0,"parameters":["  さーて、忙しくなりました!!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「だが、ならぬ!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「…え!?どうして!?」"]},{"code":213,"indent":0,"parameters":[1,6,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「そんな顔しないでくれ。"]},{"code":401,"indent":0,"parameters":["  儂もお前が暑さに苦しむのを見たくない」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「しかし、海はこの国の城壁の向こうにある。"]},{"code":401,"indent":0,"parameters":["  そう簡単にはいかないのだ」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「分かっておくれ」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「………」"]},{"code":213,"indent":0,"parameters":[-1,6,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「はい…」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":250,"indent":0,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}]},{"code":231,"indent":0,"parameters":[1,"クエスト 3",0,0,0,0,100,100,255,0]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":224,"indent":0,"parameters":[[255,255,255,170],60,false]},{"code":231,"indent":0,"parameters":[1,"クエスト 3a",0,0,0,0,100,100,255,0]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":22,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":230,"indent":0,"parameters":[60]},{"code":204,"indent":0,"parameters":[8,3,3]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「それでは私も失礼いたします」"]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":108,"indent":0,"parameters":["姫が謁見の間から出ていく"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「侍女、ちょっと…」"]},{"code":205,"indent":0,"parameters":[2,{"list":[{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":213,"indent":0,"parameters":[2,2,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「はい、なんでしょうか?」"]},{"code":230,"indent":0,"parameters":[60]},{"code":221,"indent":0,"parameters":[]},{"code":201,"indent":0,"parameters":[0,9,8,6,2,0]},{"code":235,"indent":0,"parameters":[1]},{"code":211,"indent":0,"parameters":[1]},{"code":230,"indent":0,"parameters":[120]},{"code":222,"indent":0,"parameters":[]},{"code":108,"indent":0,"parameters":["暗転"]},{"code":121,"indent":0,"parameters":[32,32,0]},{"code":123,"indent":0,"parameters":["B",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"B","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":16,"y":19}, +{"id":22,"name":"EV022","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Door1","direction":2,"pattern":1,"characterIndex":4},"list":[{"code":205,"indent":0,"parameters":[14,{"list":[{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["大臣「そちらに入っては、なりませんよ」"]},{"code":205,"indent":0,"parameters":[14,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":11,"y":3}, +{"id":23,"name":"EV023","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":29,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":108,"indent":0,"parameters":["暗い感じにするために、白黒にして。"]},{"code":408,"indent":0,"parameters":["画面を真っ暗にして、中心だけぼんやりと明るくする画像を"]},{"code":230,"indent":0,"parameters":[30]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「侍女。ちょっと待て」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":204,"indent":0,"parameters":[8,1,3]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「はい。なんでしょうか?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「…お前は娘が生まれた時から一緒だ。"]},{"code":401,"indent":0,"parameters":["  だから分かるだろう?"]},{"code":401,"indent":0,"parameters":["  娘は暑さに飛び切り弱い。そして…」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「ー無理を押し通すところがある。ですね」"]},{"code":213,"indent":0,"parameters":[25,6,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「そうだ。"]},{"code":401,"indent":0,"parameters":["  なにがなんでも、海水浴へ行こうとするだろう」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「だから海水浴へ行かせずに済む、"]},{"code":401,"indent":0,"parameters":["  良い案はないだろうか…?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「そうですね……。………」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":213,"indent":0,"parameters":[-1,8,true]},{"code":213,"indent":0,"parameters":[-1,9,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「………!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「姫様は暑さを凌ぎたい、"]},{"code":401,"indent":0,"parameters":["  だから海水浴をされたいんです」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「そうだな」"]},{"code":250,"indent":0,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「そこで、この国の城壁内にある湖を海ということに"]},{"code":401,"indent":0,"parameters":["  するのはどうでしょうか?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["ざわざわ"]},{"code":205,"indent":0,"parameters":[25,{"list":[{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「それは思いもよらなかったな…。"]},{"code":401,"indent":0,"parameters":["  しかし、そんなウソをついて大丈夫なのか?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「大丈夫だと思います。"]},{"code":401,"indent":0,"parameters":["  姫様は海へ行きたいというのではなく、"]},{"code":401,"indent":0,"parameters":["  涼みたいのです。その方法として海水浴。"]},{"code":401,"indent":0,"parameters":["  ですから、海である必要性はないのです」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「うむ……。"]},{"code":401,"indent":0,"parameters":["  まあ、お前が言うのだからそうなのだろう。"]},{"code":401,"indent":0,"parameters":["  では兵たちを連れて…」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「いえ、王様。兵はご遠慮ください」"]},{"code":213,"indent":0,"parameters":[25,2,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「それはどうしてだ?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「王様が協力されたのでは、海水浴を認めたことになり、"]},{"code":401,"indent":0,"parameters":["  それは城壁外から出ることを許したことになるのでは"]},{"code":401,"indent":0,"parameters":["  ないでしょうか?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「うむ。続けなさい」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「姫様には海水浴に言ったつもりになって、"]},{"code":401,"indent":0,"parameters":["  気持ちよく涼んでいただきたいのです。"]},{"code":401,"indent":0,"parameters":["  そのためには、隠れて海へ行ったことにした方が、"]},{"code":401,"indent":0,"parameters":["  いいのではないでしょうか?」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「………うむ」"]},{"code":205,"indent":0,"parameters":[26,{"list":[{"code":17,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["大臣「そういえば、王も幼い頃。"]},{"code":401,"indent":0,"parameters":["  私を連れて、この城を探検したものです」"]},{"code":205,"indent":0,"parameters":[25,{"list":[{"code":18,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「そうであったな…。"]},{"code":401,"indent":0,"parameters":["  血は争えんとでも言おうか」"]},{"code":205,"indent":0,"parameters":[25,{"list":[{"code":16,"indent":null},{"code":15,"parameters":[30],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[30],"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「いいだろう。この城の貯蔵庫の抜け道を使いなさい。"]},{"code":401,"indent":0,"parameters":["  兵には、察してやるように伝えておこう」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「ありがとうございます!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「後で娘が真実を知ったときは、"]},{"code":401,"indent":0,"parameters":["  私が命令をした。とでも伝えなさい」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":19,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":19,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「いえ。わざわざ憎まれ役を買って頂かなくても"]},{"code":401,"indent":0,"parameters":["  大丈夫です」"]},{"code":401,"indent":0,"parameters":[""]},{"code":401,"indent":0,"parameters":[""]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「姫様は王の娘です。"]},{"code":401,"indent":0,"parameters":["  きっと、懐の深さも受け継いでいらっしゃるかと…」"]},{"code":213,"indent":0,"parameters":[25,3,false]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「持ち上げずともよい。…後は任せるぞ」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["侍女「ありがとうございます。"]},{"code":401,"indent":0,"parameters":["  では、行ってまいります」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["王「うむ」"]},{"code":221,"indent":0,"parameters":[]},{"code":108,"indent":0,"parameters":["暗転"]},{"code":408,"indent":0,"parameters":["姫の自室へ"]},{"code":121,"indent":0,"parameters":[28,28,0]},{"code":123,"indent":0,"parameters":["A",0]},{"code":223,"indent":0,"parameters":[[0,0,0,0],1,false]},{"code":201,"indent":0,"parameters":[0,7,8,4,4,0]},{"code":241,"indent":0,"parameters":[{"name":"03_Childhood_Memories","volume":50,"pitch":80,"pan":0}]},{"code":223,"indent":0,"parameters":[[-68,-68,0,68],1,false]},{"code":230,"indent":0,"parameters":[60]},{"code":222,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":29,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":16,"y":17}, +{"id":24,"name":"EV024","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Door5","volume":50,"pitch":100,"pan":0}]},{"code":211,"indent":0,"parameters":[0]},{"code":230,"indent":0,"parameters":[60]},{"code":121,"indent":0,"parameters":[22,22,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":9,"y":18}, +{"id":25,"name":"王2","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":29,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":5}, +{"id":26,"name":"大臣2","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":29,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":4},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":11,"y":5} +] +} \ No newline at end of file diff --git a/data/Map009.json b/data/Map009.json new file mode 100644 index 0000000..08bf20d --- /dev/null +++ b/data/Map009.json @@ -0,0 +1,27 @@ +{ +"autoplayBgm":true,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"Castle2","pan":0,"pitch":110,"volume":50},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":true,"displayName":"","encounterList":[],"encounterStep":30,"height":13,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":3,"width":17, +"data":[1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,8051,8050,8050,8050,8050,8050,8050,8050,8050,8050,8050,8050,8050,8050,8054,1536,1536,8057,8056,8056,8056,8056,8056,8056,8056,8056,8056,8056,8056,8056,8056,8060,1536,1536,4098,4085,4097,4086,4085,4097,4086,4084,4085,4097,4086,4085,4097,4086,4100,1536,4084,4065,4088,4158,4080,4088,4158,4080,4064,4088,4158,4080,4088,4158,4080,4066,4084,4064,4064,4070,4097,4073,4070,4097,4073,4064,4070,4097,4073,4070,4097,4073,4064,4064,4092,4072,4088,4158,4080,4088,4158,4080,4064,4088,4158,4080,4088,4158,4080,4068,4092,1536,4104,4094,4097,4093,4094,4097,4093,4092,4094,4097,4093,4094,4097,4093,4102,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,0,0,0,134,0,0,0,0,0,0,0,0,0,0,0,0,142,0,0,0,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"events":[ +null, +{"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!$Gate2","direction":2,"pattern":0,"characterIndex":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Door5","volume":50,"pitch":100,"pan":0}]},{"code":221,"indent":0,"parameters":[]},{"code":201,"indent":0,"parameters":[0,8,8,17,8,0]},{"code":235,"indent":0,"parameters":[1]},{"code":211,"indent":0,"parameters":[0]},{"code":222,"indent":0,"parameters":[]},{"code":230,"indent":0,"parameters":[60]},{"code":204,"indent":0,"parameters":[8,2,3]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":21,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!$Gate2","direction":2,"pattern":0,"characterIndex":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「お父様は許してくれないから、自力で脱出しなくちゃ!」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":8,"y":3}, +{"id":2,"name":"EV002","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「早くお父様に、お許しをもらわないと!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":32,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「こっちは私の部屋」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":0,"y":6}, +{"id":3,"name":"6","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「この鎧は暑いんですよ」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「姫様大丈夫ですか!?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":15,"y":8}, +{"id":4,"name":"EV004","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":205,"indent":0,"parameters":[5,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「姫様。どちらに?」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":205,"indent":0,"parameters":[5,{"list":[{"code":17,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":15,"y":5}, +{"id":5,"name":"5","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「今日も暑いですね」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":21,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「そこのたいまつ、消えそうですね」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":4,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「姫様大丈夫ですか!?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":15,"y":4}, +{"id":6,"name":"EV006","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「早くお父様に、お許しをもらわないと!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":32,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「こっちは私の部屋」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":0,"y":5}, +{"id":7,"name":"EV007","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「早くお父様に、お許しをもらわないと!」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":32,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「こっちは私の部屋」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":0,"y":7}, +{"id":8,"name":"4","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「ここは謁見の間ですよ」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":21,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「隣のたいまつ、消えそうなんですよね。"]},{"code":401,"indent":0,"parameters":["  誰か見てくれないかな…」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「姫様大丈夫ですか!?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":10,"y":4}, +{"id":9,"name":"3","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「謁見の間になにか?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":21,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「向こう側のたいまつ、消えそうじゃないですか?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「姫様大丈夫ですか!?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":6,"y":4}, +{"id":10,"name":"1","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「ご機嫌いかがでしょうか?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":21,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「姫様は火に近づかないでくださいよ。"]},{"code":401,"indent":0,"parameters":["  こけたりしたら大変ですから。"]},{"code":401,"indent":0,"parameters":["  以前もそれで……くどくど」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「姫様大丈夫ですか!?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":1,"y":4}, +{"id":11,"name":"2","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「やはり暑いですね」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"People3","direction":6,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「姫様大丈夫ですか!?」"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":1,"y":8}, +{"id":12,"name":"EV012","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":205,"indent":0,"parameters":[5,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「姫様。どちらに?」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":205,"indent":0,"parameters":[5,{"list":[{"code":17,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":15,"y":6}, +{"id":13,"name":"EV013","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":205,"indent":0,"parameters":[3,{"list":[{"code":25,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":25,"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["兵「姫様。どちらに?」"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":13,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":0,"parameters":[{"code":13,"indent":null}]},{"code":205,"indent":0,"parameters":[3,{"list":[{"code":17,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":15,"y":7}, +{"id":14,"name":"EV014","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":4,"y":3}, +{"id":15,"name":"EV015","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":21,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["火は小さく揺らめき、今にも消えそうだ。"]},{"code":401,"indent":0,"parameters":["スカートでパタパタあおぎますか?"]},{"code":102,"indent":0,"parameters":[["はい","いいえ"],1,0,2,0]},{"code":402,"indent":0,"parameters":[0,"はい"]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["姫様はスカートで松明をあおいだ。"]},{"code":213,"indent":1,"parameters":[-1,6,false]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["パタパタ…パタパタ……"]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["姫様はスカートの後ろの裾に、足を引っかけた…!"]},{"code":250,"indent":1,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":225,"indent":1,"parameters":[2,3,60,false]},{"code":205,"indent":1,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":1,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":1,"parameters":[1,"hime taore",0,"",1,""]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["姫「きゃっ!!」"]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["兵たち「姫様っ!!」"]},{"code":205,"indent":1,"parameters":[8,{"list":[{"code":29,"parameters":[5],"indent":null},{"code":3,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":1,"parameters":[{"code":29,"parameters":[5],"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":205,"indent":1,"parameters":[9,{"list":[{"code":29,"parameters":[5],"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":1,"parameters":[{"code":29,"parameters":[5],"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":205,"indent":1,"parameters":[10,{"list":[{"code":29,"parameters":[5],"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":1,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":1,"parameters":[{"code":29,"parameters":[5],"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":1,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":205,"indent":1,"parameters":[5,{"list":[{"code":29,"parameters":[5],"indent":null},{"code":2,"indent":null},{"code":2,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":1,"parameters":[{"code":29,"parameters":[5],"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":2,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":2,"indent":null}]},{"code":205,"indent":1,"parameters":[3,{"list":[{"code":29,"parameters":[5],"indent":null},{"code":2,"indent":null},{"code":4,"indent":null},{"code":4,"indent":null},{"code":4,"indent":null},{"code":2,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":false}]},{"code":505,"indent":1,"parameters":[{"code":29,"parameters":[5],"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":2,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":2,"indent":null}]},{"code":205,"indent":1,"parameters":[11,{"list":[{"code":29,"parameters":[5],"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":4,"indent":null},{"code":4,"indent":null},{"code":3,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":1,"parameters":[{"code":29,"parameters":[5],"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":121,"indent":1,"parameters":[43,43,0]},{"code":211,"indent":1,"parameters":[1]},{"code":250,"indent":1,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":1,"parameters":["",0,0,2]},{"code":401,"indent":1,"parameters":["姫様「んっ!今なら抜け出せれる!?」"]},{"code":322,"indent":1,"parameters":[1,"hime",0,"",1,""]},{"code":123,"indent":1,"parameters":["A",0]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"いいえ"]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":21,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!Flame","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":12,"y":3}, +{"id":16,"name":"EV016","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":32,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":17,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":18,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":16,"indent":null},{"code":15,"parameters":[20],"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":17,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":18,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[20],"indent":null}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「ふふ。お父様、私は春の眠気も、秋の食欲も"]},{"code":401,"indent":0,"parameters":["  冬の寒さも我慢できます」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「しかし、夏の暑さだけは我慢できない!!」"]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「自力で海へ行ってやります!」"]},{"code":250,"indent":0,"parameters":[{"name":"Ice4","volume":50,"pitch":100,"pan":0}]},{"code":231,"indent":0,"parameters":[1,"クエスト 4",0,0,0,0,100,100,255,0]},{"code":101,"indent":0,"parameters":["",0,2,2]},{"code":401,"indent":0,"parameters":[""]},{"code":224,"indent":0,"parameters":[[255,255,255,170],60,false]},{"code":231,"indent":0,"parameters":[1,"クエスト 4a",0,0,0,0,100,100,255,0]},{"code":108,"indent":0,"parameters":["姫が城を抜け出すクエストが始まる"]},{"code":108,"indent":0,"parameters":["姫が自由行動できるようになる。"]},{"code":408,"indent":0,"parameters":["通路では火を大きく燃やすとかして兵の注意を逸らす。"]},{"code":408,"indent":0,"parameters":["城内へ。しかし、見つかって姫は自室へ連れて行かされる。"]},{"code":108,"indent":0,"parameters":["最後にスイッチ31をONにする"]},{"code":121,"indent":0,"parameters":[21,21,0]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":32,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":0,"y":12}, +{"id":17,"name":"EV017","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":225,"indent":0,"parameters":[2,4,20,false]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":322,"indent":0,"parameters":[1,"hime taore",0,"",1,""]},{"code":250,"indent":0,"parameters":[{"name":"Damage3","volume":50,"pitch":100,"pan":0}]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["姫「きゃ!」"]},{"code":322,"indent":0,"parameters":[1,"hime",0,"Actor1",0,""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":5,"y":6}, +{"id":18,"name":"EV018","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move10","volume":50,"pitch":120,"pan":0}]},{"code":201,"indent":0,"parameters":[0,2,19,3,2,0]},{"code":230,"indent":0,"parameters":[30]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":16,"y":5}, +{"id":19,"name":"EV019","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move10","volume":50,"pitch":120,"pan":0}]},{"code":201,"indent":0,"parameters":[0,2,19,3,2,0]},{"code":230,"indent":0,"parameters":[30]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":16,"y":6}, +{"id":20,"name":"EV020","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":43,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move10","volume":50,"pitch":120,"pan":0}]},{"code":201,"indent":0,"parameters":[0,2,19,3,2,0]},{"code":230,"indent":0,"parameters":[30]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":16,"y":7} +] +} \ No newline at end of file diff --git a/data/Map010.json b/data/Map010.json new file mode 100644 index 0000000..4f0d51d --- /dev/null +++ b/data/Map010.json @@ -0,0 +1,8 @@ +{ +"autoplayBgm":true,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"03_Childhood_Memories","pan":0,"pitch":80,"volume":50},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"","encounterList":[],"encounterStep":30,"height":13,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"kuro","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":1,"width":17, +"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"events":[ +null, +{"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":221,"indent":0,"parameters":[]},{"code":230,"indent":0,"parameters":[60]},{"code":231,"indent":0,"parameters":[1,"sekaitizu sepia",0,0,0,0,100,100,255,0]},{"code":222,"indent":0,"parameters":[]},{"code":230,"indent":0,"parameters":[30]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["ここはどこかの王国"]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["この国のお姫様は、ケモノの様な姿をしているそうです"]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["そんなメスケモ姫も、"]},{"code":401,"indent":0,"parameters":["今年の猛暑には舌が出るかもしれません"]},{"code":101,"indent":0,"parameters":["",0,1,2]},{"code":401,"indent":0,"parameters":["……………"]},{"code":221,"indent":0,"parameters":[]},{"code":211,"indent":0,"parameters":[1]},{"code":201,"indent":0,"parameters":[0,7,7,4,2,0]},{"code":235,"indent":0,"parameters":[1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":230,"indent":0,"parameters":[122]},{"code":222,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":12} +] +} \ No newline at end of file diff --git a/data/MapInfos.json b/data/MapInfos.json new file mode 100644 index 0000000..b69a993 --- /dev/null +++ b/data/MapInfos.json @@ -0,0 +1,13 @@ +[ +null, +{"id":1,"expanded":true,"name":"海","order":9,"parentId":6,"scrollX":819,"scrollY":461}, +{"id":2,"expanded":true,"name":"城内","order":1,"parentId":0,"scrollX":811,"scrollY":1249}, +{"id":3,"expanded":true,"name":"抜け道の部屋","order":2,"parentId":2,"scrollX":819,"scrollY":461}, +{"id":4,"expanded":false,"name":"牢屋","order":7,"parentId":2,"scrollX":524.6666666666666,"scrollY":505.3333333333333}, +{"id":5,"expanded":true,"name":"海までの道のり","order":3,"parentId":3,"scrollX":819,"scrollY":461}, +{"id":6,"expanded":true,"name":"城内のフィールド","order":8,"parentId":0,"scrollX":811,"scrollY":979}, +{"id":7,"expanded":true,"name":"姫の部屋","order":6,"parentId":2,"scrollX":524.6666666666666,"scrollY":505.3333333333333}, +{"id":8,"expanded":false,"name":"王室","order":5,"parentId":2,"scrollX":811,"scrollY":499}, +{"id":9,"expanded":false,"name":"通路","order":4,"parentId":2,"scrollX":524.6666666666666,"scrollY":505.3333333333333}, +{"id":10,"expanded":false,"name":"冒頭","order":10,"parentId":0,"scrollX":819,"scrollY":461} +] \ No newline at end of file diff --git a/data/Skills.json b/data/Skills.json new file mode 100644 index 0000000..fddad1f --- /dev/null +++ b/data/Skills.json @@ -0,0 +1,13 @@ +[ +null, +{"id":1,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"a.atk * 4 - b.def * 2","type":1,"variance":20},"description":"","effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":1,"iconIndex":76,"message1":"の攻撃!","message2":"","mpCost":0,"name":"攻撃","note":"スキル1番は[攻撃]コマンドを\n選択したときに使用されます。","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":1,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":10}, +{"id":2,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[{"code":21,"dataId":2,"value1":1,"value2":0}],"hitType":0,"iconIndex":81,"message1":"は身を守っている。","message2":"","mpCost":0,"name":"防御","note":"スキル2番は[防御]コマンドを\n選択したときに使用されます。","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":11,"speed":2000,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":10}, +{"id":3,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"a.atk * 4 - b.def * 2","type":1,"variance":20},"description":"","effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":1,"iconIndex":76,"message1":"の攻撃!","message2":"","mpCost":0,"name":"連続攻撃","note":"","occasion":1,"repeats":2,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":1,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":5}, +{"id":4,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"a.atk * 4 - b.def * 2","type":1,"variance":20},"description":"","effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":1,"iconIndex":76,"message1":"の攻撃!","message2":"","mpCost":0,"name":"2回攻撃","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":4,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":5}, +{"id":5,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"a.atk * 4 - b.def * 2","type":1,"variance":20},"description":"","effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":1,"iconIndex":76,"message1":"の攻撃!","message2":"","mpCost":0,"name":"3回攻撃","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":5,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":4}, +{"id":6,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[{"code":41,"dataId":0,"value1":0,"value2":0}],"hitType":0,"iconIndex":82,"message1":"は逃げてしまった。","message2":"","mpCost":0,"name":"逃げる","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":11,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":0}, +{"id":7,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[],"hitType":0,"iconIndex":81,"message1":"は様子を見ている。","message2":"","mpCost":0,"name":"様子を見る","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":0,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":10}, +{"id":8,"animationId":41,"damage":{"critical":false,"elementId":0,"formula":"200 + a.mat","type":3,"variance":20},"description":"","effects":[],"hitType":0,"iconIndex":72,"message1":"は%1を唱えた!","message2":"","mpCost":5,"name":"ヒール","note":"","occasion":0,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":7,"speed":0,"stypeId":1,"successRate":100,"tpCost":0,"tpGain":10}, +{"id":9,"animationId":66,"damage":{"critical":false,"elementId":2,"formula":"100 + a.mat * 2 - b.mdf * 2","type":1,"variance":20},"description":"","effects":[],"hitType":2,"iconIndex":64,"message1":"は%1を唱えた!","message2":"","mpCost":5,"name":"ファイア","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":1,"speed":0,"stypeId":1,"successRate":100,"tpCost":0,"tpGain":10}, +{"id":10,"animationId":78,"damage":{"critical":false,"elementId":4,"formula":"100 + a.mat * 2 - b.mdf * 2","type":1,"variance":20},"description":"","effects":[],"hitType":2,"iconIndex":66,"message1":"は%1を唱えた!","message2":"","mpCost":5,"name":"スパーク","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":2,"speed":0,"stypeId":1,"successRate":100,"tpCost":0,"tpGain":10} +] \ No newline at end of file diff --git a/data/States.json b/data/States.json new file mode 100644 index 0000000..cc09a88 --- /dev/null +++ b/data/States.json @@ -0,0 +1,13 @@ +[ +null, +{"id":1,"autoRemovalTiming":0,"chanceByDamage":100,"iconIndex":1,"maxTurns":1,"message1":"は倒れた!","message2":"を倒した!","message3":"","message4":"は立ち上がった!","minTurns":1,"motion":3,"name":"戦闘不能","note":"ステート1番はHPが0になったときに\n自動的に付加されます。","overlay":0,"priority":100,"releaseByDamage":false,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"restriction":4,"stepsToRemove":100,"traits":[{"code":23,"dataId":9,"value":0}]}, +{"id":2,"autoRemovalTiming":2,"chanceByDamage":100,"description":"","iconIndex":0,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","minTurns":1,"motion":0,"name":"防御","note":"","overlay":0,"priority":0,"removeAtBattleEnd":true,"removeByDamage":false,"removeByRestriction":true,"removeByWalking":false,"restriction":0,"stepsToRemove":100,"traits":[{"code":62,"dataId":1,"value":0}]}, +{"id":3,"autoRemovalTiming":0,"chanceByDamage":100,"description":"","iconIndex":0,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","minTurns":1,"motion":0,"name":"不死身","note":"","overlay":0,"priority":0,"removeAtBattleEnd":true,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"restriction":0,"stepsToRemove":100,"traits":[{"code":14,"dataId":1,"value":0}]}, +{"id":4,"autoRemovalTiming":0,"chanceByDamage":100,"iconIndex":2,"maxTurns":1,"message1":"は毒にかかった!","message2":"に毒をかけた!","message3":"","message4":"の毒が消えた!","minTurns":1,"motion":1,"overlay":1,"name":"毒","note":"","priority":50,"releaseByDamage":false,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"restriction":0,"stepsToRemove":100,"traits":[{"code":22,"dataId":7,"value":-0.1}]}, +{"id":5,"autoRemovalTiming":1,"chanceByDamage":100,"iconIndex":3,"maxTurns":5,"message1":"は暗闇に閉ざされた!","message2":"を暗闇に閉ざした!","message3":"","message4":"の暗闇が消えた!","minTurns":3,"motion":1,"name":"暗闇","note":"","overlay":2,"priority":60,"releaseByDamage":false,"removeAtBattleEnd":true,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"restriction":0,"stepsToRemove":100,"traits":[{"code":22,"dataId":0,"value":-0.5}]}, +{"id":6,"autoRemovalTiming":1,"chanceByDamage":100,"iconIndex":4,"maxTurns":5,"message1":"は沈黙した!","message2":"を沈黙させた!","message3":"","message4":"の沈黙が解けた!","minTurns":3,"motion":1,"name":"沈黙","note":"","overlay":3,"priority":65,"releaseByDamage":false,"removeAtBattleEnd":true,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"restriction":0,"stepsToRemove":100,"traits":[{"code":42,"dataId":1,"value":0}]}, +{"id":7,"autoRemovalTiming":1,"chanceByDamage":50,"iconIndex":5,"maxTurns":4,"message1":"は激昂した!","message2":"を激昂させた!","message3":"","message4":"は我に返った!","minTurns":2,"motion":1,"name":"激昂","note":"","overlay":4,"priority":70,"releaseByDamage":false,"removeAtBattleEnd":true,"removeByDamage":true,"removeByRestriction":false,"removeByWalking":false,"restriction":1,"stepsToRemove":100,"traits":[]}, +{"id":8,"autoRemovalTiming":1,"chanceByDamage":50,"iconIndex":6,"maxTurns":4,"message1":"は混乱した!","message2":"を混乱させた!","message3":"","message4":"は我に返った!","minTurns":2,"motion":1,"name":"混乱","note":"","overlay":5,"priority":75,"releaseByDamage":false,"removeAtBattleEnd":true,"removeByDamage":true,"removeByRestriction":false,"removeByWalking":false,"restriction":2,"stepsToRemove":100,"traits":[]}, +{"id":9,"autoRemovalTiming":1,"chanceByDamage":50,"iconIndex":7,"maxTurns":4,"message1":"は魅了された!","message2":"を魅了した!","message3":"","message4":"は我に返った!","minTurns":2,"motion":1,"name":"魅了","note":"","overlay":6,"priority":80,"releaseByDamage":false,"removeAtBattleEnd":true,"removeByDamage":true,"removeByRestriction":false,"removeByWalking":false,"restriction":3,"stepsToRemove":100,"traits":[]}, +{"id":10,"autoRemovalTiming":1,"chanceByDamage":100,"iconIndex":8,"maxTurns":5,"message1":"は眠った!","message2":"を眠らせた!","message3":"は眠っている。","message4":"は目を覚ました!","minTurns":3,"motion":2,"name":"睡眠","note":"","overlay":7,"priority":90,"releaseByDamage":true,"removeAtBattleEnd":true,"removeByDamage":true,"removeByRestriction":false,"removeByWalking":false,"restriction":4,"stepsToRemove":100,"traits":[{"code":22,"dataId":1,"value":-1}]} +] \ No newline at end of file diff --git a/data/System.json b/data/System.json new file mode 100644 index 0000000..5704f7e --- /dev/null +++ b/data/System.json @@ -0,0 +1 @@ +{"airship":{"bgm":{"name":"Ship3","pan":0,"pitch":100,"volume":90},"characterIndex":3,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"armorTypes":["","一般防具","魔法防具","軽装防具","重装防具","小型盾","大型盾"],"attackMotions":[{"type":0,"weaponImageId":0},{"type":1,"weaponImageId":1},{"type":1,"weaponImageId":2},{"type":1,"weaponImageId":3},{"type":1,"weaponImageId":4},{"type":1,"weaponImageId":5},{"type":1,"weaponImageId":6},{"type":2,"weaponImageId":7},{"type":2,"weaponImageId":8},{"type":2,"weaponImageId":9},{"type":0,"weaponImageId":10},{"type":0,"weaponImageId":11},{"type":0,"weaponImageId":12}],"battleBgm":{"name":"Battle1","pan":0,"pitch":100,"volume":90},"battleback1Name":"Grassland","battleback2Name":"Grassland","battlerHue":0,"battlerName":"Dragon","boat":{"bgm":{"name":"Ship1","pan":0,"pitch":100,"volume":90},"characterIndex":0,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"currencyUnit":"","defeatMe":{"name":"Defeat1","pan":0,"pitch":100,"volume":90},"editMapId":5,"elements":["","物理","炎","氷","雷","水","土","風","光","闇"],"equipTypes":["","武器","盾","頭","身体","装飾品"],"gameTitle":"メスケモ姫の海水浴","gameoverMe":{"name":"Gameover1","pan":0,"pitch":100,"volume":90},"locale":"ja_JP","magicSkills":[1],"menuCommands":[true,false,false,false,false,true],"optDisplayTp":false,"optDrawTitle":false,"optExtraExp":false,"optFloorDeath":false,"optFollowers":true,"optSideView":false,"optSlipDeath":false,"optTransparent":true,"partyMembers":[1],"ship":{"bgm":{"name":"Ship2","pan":0,"pitch":100,"volume":90},"characterIndex":1,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"skillTypes":["","魔法","必殺技"],"sounds":[{"name":"Cursor2","pan":0,"pitch":100,"volume":50},{"name":"Cat","pan":0,"pitch":150,"volume":50},{"name":"Dog","pan":0,"pitch":150,"volume":50},{"name":"Cow","pan":0,"pitch":150,"volume":60},{"name":"Equip1","pan":0,"pitch":100,"volume":50},{"name":"Save","pan":0,"pitch":100,"volume":50},{"name":"Load","pan":0,"pitch":100,"volume":50},{"name":"Battle1","pan":0,"pitch":100,"volume":90},{"name":"Run","pan":0,"pitch":100,"volume":90},{"name":"Attack3","pan":0,"pitch":100,"volume":90},{"name":"Damage4","pan":0,"pitch":100,"volume":90},{"name":"Collapse1","pan":0,"pitch":100,"volume":90},{"name":"Collapse2","pan":0,"pitch":100,"volume":90},{"name":"Collapse3","pan":0,"pitch":100,"volume":90},{"name":"Damage5","pan":0,"pitch":100,"volume":90},{"name":"Collapse4","pan":0,"pitch":100,"volume":90},{"name":"Recovery","pan":0,"pitch":100,"volume":90},{"name":"Miss","pan":0,"pitch":100,"volume":90},{"name":"Evasion1","pan":0,"pitch":100,"volume":90},{"name":"Evasion2","pan":0,"pitch":100,"volume":90},{"name":"Reflection","pan":0,"pitch":100,"volume":90},{"name":"Shop1","pan":0,"pitch":100,"volume":90},{"name":"Item3","pan":0,"pitch":100,"volume":90},{"name":"Item3","pan":0,"pitch":100,"volume":90}],"startMapId":10,"startX":8,"startY":6,"switches":["","","姫の部屋から脱出","","","","","","","","","","","","","","","","","","","自力で抜け出すクエスト","姫謁見の間から出る","姫謁見の間に入室","王入室","兜を取る","謁見の間へのクエスト","侍女登場","姫の自室EDNへ","海水浴の真実","魚持参","自室へ連れていかれる","謁見の間の会話終了","鏡との会話","更に追いかけてくる","追いかけてくる2","追いかけてくる","左","下","右","上","スカートのすそを踏む","姫こける","脱出開始","侍女入室","侍女仲間になる","貯蔵庫の門番ON","泳ぐ","遊びつくす","着替え","","","","","","","","","","",""],"terms":{"basic":["レベル","Lv","HP","HP","MP","MP","TP","TP","経験値","EXP"],"commands":["戦う","逃げる","攻撃","防御","アイテム","スキル","装備","ステータス","並び替え","セーブ","ゲーム終了","各種設定","武器","防具","大事なもの","装備","最強装備","全て外す","海水浴へ行く","その続き",null,"タイトルへ","やめる",null,"購入する","売却する"],"params":["最大HP","最大MP","攻撃力","防御力","魔法力","魔法防御","敏捷性","運","命中率","回避率"],"messages":{"actionFailure":"%1には効かなかった!","actorDamage":"%1は %2 のダメージを受けた!","actorDrain":"%1は%2を %3 奪われた!","actorGain":"%1の%2が %3 増えた!","actorLoss":"%1の%2が %3 減った!","actorNoDamage":"%1はダメージを受けていない!","actorNoHit":"ミス! %1はダメージを受けていない!","actorRecovery":"%1の%2が %3 回復した!","alwaysDash":"常時ダッシュ","bgmVolume":"BGM 音量","bgsVolume":"BGS 音量","buffAdd":"%1の%2が上がった!","buffRemove":"%1の%2が元に戻った!","commandRemember":"コマンド記憶","counterAttack":"%1の反撃!","criticalToActor":"痛恨の一撃!!","criticalToEnemy":"会心の一撃!!","debuffAdd":"%1の%2が下がった!","defeat":"%1は戦いに敗れた。","emerge":"%1が出現!","enemyDamage":"%1に %2 のダメージを与えた!","enemyDrain":"%1の%2を %3 奪った!","enemyGain":"%1の%2が %3 増えた!","enemyLoss":"%1の%2が %3 減った!","enemyNoDamage":"%1にダメージを与えられない!","enemyNoHit":"ミス! %1にダメージを与えられない!","enemyRecovery":"%1の%2が %3 回復した!","escapeFailure":"しかし逃げることはできなかった!","escapeStart":"%1は逃げ出した!","evasion":"%1は攻撃をかわした!","expNext":"次の%1まで","expTotal":"現在の%1","file":"ファイル","levelUp":"%1は%2 %3 に上がった!","loadMessage":"どのファイルをロードしますか?","magicEvasion":"%1は魔法を打ち消した!","magicReflection":"%1は魔法を跳ね返した!","meVolume":"ME 音量","obtainExp":"%1 の%2を獲得!","obtainGold":"お金を %1\\G 手に入れた!","obtainItem":"%1を手に入れた!","obtainSkill":"%1を覚えた!","partyName":"%1たち","possession":"持っている数","preemptive":"%1は先手を取った!","saveMessage":"どのファイルにセーブしますか?","seVolume":"SE 音量","substitute":"%1が%2をかばった!","surprise":"%1は不意をつかれた!","useItem":"%1は%2を使った!","victory":"%1の勝利!"}},"testBattlers":[{"actorId":1,"equips":[1,1,2,3,0],"level":1},{"actorId":2,"equips":[2,1,2,3,0],"level":1},{"actorId":3,"equips":[3,0,2,3,4],"level":1},{"actorId":4,"equips":[4,0,2,3,4],"level":1}],"testTroopId":4,"title1Name":"Plain","title2Name":"Floral","titleBgm":{"name":"03_A_Hero's_Return","pan":0,"pitch":100,"volume":50},"variables":["","海の道具一式","海の落とし物","","","","","","","","","","","","","","","","","",""],"versionId":46372875,"victoryMe":{"name":"Victory1","pan":0,"pitch":100,"volume":90},"weaponTypes":["","短剣","剣","フレイル","斧","ムチ","杖","弓","クロスボウ","銃","爪","グローブ","槍"],"windowTone":[0,0,0,0]} \ No newline at end of file diff --git a/data/Tilesets.json b/data/Tilesets.json new file mode 100644 index 0000000..892a6fc --- /dev/null +++ b/data/Tilesets.json @@ -0,0 +1,9 @@ +[ +null, +{"id":1,"flags":[16,1551,1536,1536,1536,1536,1536,1551,1536,1536,1536,1536,1536,1551,1551,1536,1536,1536,1551,1536,1536,1551,1536,1536,1551,1536,1552,1552,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1536,1536,1551,1551,1551,1551,1551,1551,1551,1552,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1536,1536,1536,1536,1536,1551,1536,1551,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1536,1536,1552,1552,1552,1552,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1536,1536,1551,1536,1551,1536,1551,1551,1551,1536,1536,1551,1552,1552,1552,1552,1536,1536,1536,1536,1551,1551,1551,1551,1536,1536,1536,1536,1551,1551,1551,1551,1536,1536,1536,1536,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3584,3584,3584,3584,3648,3584,3584,3584,3584,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3584,3584,3584,3584,3648,3584,3584,3584,3584,3648,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3584,3584,3584,3584,3648,3584,3584,3584,3584,3648,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3584,3584,3584,3584,3648,3584,3584,3584,3584,3648,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3584,3584,3584,3584,3648,3584,3584,3584,3584,3648,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599],"mode":0,"name":"フィールド","note":"","tilesetNames":["World_A1","World_A2","","","","World_B","World_C","Outside_C",""]}, +{"id":2,"flags":[16,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1551,1536,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1551,1552,1551,1551,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1536,1536,1536,1536,1551,1552,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1552,1551,1536,1536,1552,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1600,1615,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1536,1536,1536,1536,1551,1551,1551,1552,1536,1536,1536,1536,1551,1536,1551,1551,1574,1574,1574,1574,1552,1552,1552,1552,1574,1574,1574,1574,1551,1551,1551,1552,1536,1536,1536,1551,1551,1536,1551,1551,1536,1536,1536,1536,1552,1552,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1551,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1552,1551,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1551,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1551,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1553,1553,1553,1553,1553,1553,1553,1553,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1553,1553,1551,1551,1551,1553,1553,1553,1551,1551,1553,1553,1553,1551,1551,1551,1553,1553,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1553,1553,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1552,1552,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1664,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1536,1538,1536,1540,1544,1536,1544,1551,1551,1538,1536,1540,1537,1536,1537,1536,1536,1536,1536,1536,1536,1536,1536,1538,1536,1540,1542,1538,1536,1540,1542,1536,1536,1536,1536,1536,1536,1536,1536,1538,1536,1540,1542,1538,1536,1540,1542,1536,1536,1536,1536,1536,1536,1536,1536,1538,1536,1540,1542,1538,1536,1540,1542,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1546,1544,1548,1536,1536,1546,1544,1548,1538,1536,1540,1536,1536,1538,1536,1540,1538,1536,1540,1536,1536,1538,1536,1540,1551,1551,1551,1536,1536,1551,1551,1551,1551,1551,1551,1536,1536,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3840,3840,3840,3840,3904,3840,3840,3840,3840,3904,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599],"mode":1,"name":"外観","note":"","tilesetNames":["Outside_A1","Outside_A2","Outside_A3","Outside_A4","Outside_A5","Outside_B","Outside_C","",""]}, +{"id":3,"flags":[16,1536,1536,1536,1536,1574,1574,1574,1536,1536,1536,1536,1536,1574,1574,1574,1551,1551,1551,1551,1551,1536,1536,1536,1551,1551,1551,1551,1551,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1679,1679,1679,1679,1679,1551,1551,1551,1536,1536,1536,1679,1679,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1551,1536,1551,1551,1536,1551,1551,1551,1551,1536,1536,1551,1536,1551,1551,1551,1551,1679,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1551,1551,1551,1551,1679,1679,1679,1679,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1552,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1551,1551,1551,1551,1551,1679,1551,1679,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1552,1551,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1536,1538,1536,1540,1544,1536,1544,1551,1551,1551,1551,1551,1537,1536,1537,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1538,1536,1540,1542,1538,1536,1540,1542,1538,1536,1540,1542,1538,1536,1540,1542,1538,1536,1540,1542,1538,1536,1540,1542,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3840,3840,3840,3840,3904,3840,3840,3840,3840,3904,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599],"mode":1,"name":"内装","note":"","tilesetNames":["Inside_A1","Inside_A2","","Inside_A4","Inside_A5","Inside_B","Inside_C","World_A2",""]}, +{"id":4,"flags":[16,1551,1536,1536,1574,1574,1574,1574,1551,1551,1536,1536,1574,1574,1574,1536,1551,1551,1536,1536,1536,1536,1536,1536,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1551,1551,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1536,1536,1551,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1551,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1551,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1679,1552,1552,1552,1552,1551,1551,1551,1551,1679,1679,1679,1679,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1552,1551,1551,1551,1551,1551,1551,1551,1552,1536,1536,1536,1536,1536,1536,1536,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1552,1551,1551,1552,1552,1552,1552,1552,1552,1551,1551,1551,1552,1552,1551,1552,1552,1551,1551,1536,1536,1536,1536,1536,1536,1551,1551,1536,1536,1536,1536,1536,1536,1551,1551,1536,1536,1536,1536,1536,1536,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1679,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1551,1536,1551,1551,1536,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1552,1551,1536,1536,1536,1536,1536,1536,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1536,1536,1551,1536,1536,1536,1536,1536,1536,1536,1536,1538,1536,1540,1542,1538,1536,1540,1542,1536,1536,1536,1536,1536,1536,1536,1536,1538,1536,1540,1542,1538,1536,1540,1542,1536,1536,1536,1536,1536,1536,1536,1536,1538,1536,1540,1542,1538,1536,1540,1542,1538,1536,1540,1542,1538,1536,1540,1542,1538,1536,1540,1542,1538,1536,1540,1542,1538,1536,1540,1542,1538,1536,1540,1542,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1792,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3840,3840,3840,3840,3904,3840,3840,3840,3840,3904,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599],"mode":1,"name":"ダンジョン","note":"","tilesetNames":["Dungeon_A1","Dungeon_A2","","Dungeon_A4","Dungeon_A5","Dungeon_B","Dungeon_C","",""]}, +{"id":5,"flags":[16,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1552,1552,1536,1536,1536,1551,1536,1536,1551,1551,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1552,1552,1551,1552,1552,1552,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1551,1551,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1551,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1552,1552,1552,1552,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1536,1536,1536,1536,1552,1552,1552,1552,1536,1536,1536,1536,1679,1679,1679,1552,1574,1574,1574,1574,1552,1552,1552,1552,1574,1574,1574,1574,1552,1552,1552,1552,1536,1536,1536,1536,1679,1679,1679,1552,1536,1536,1536,1536,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1552,1551,1536,1536,1551,1536,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1536,1536,1536,1551,1551,1551,1551,1551,1536,1551,1536,1552,1551,1551,1551,1551,1536,1536,1536,1551,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1552,1551,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1551,1551,1536,1551,1536,1551,1536,1551,1551,1551,1552,1551,1551,1551,1551,1551,1551,1551,1552,1551,1551,1551,1552,1551,1551,1551,1552,1551,1551,1551,1552,1551,1551,1551,1551,1552,1552,1552,1551,1551,1551,1551,1551,1552,1552,1552,1552,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1552,1552,1552,1552,1552,1551,1551,1551,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1679,1679,1551,1551,1551,1552,1551,1552,1552,1552,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1536,1536,1536,1536,1536,1536,1536,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1536,1536,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1546,1544,1548,1536,1536,1536,1536,1536,1538,1536,1540,1536,1536,1536,1536,1536,1538,1536,1540,1536,1536,1536,1536,1536,1551,1551,1551,1536,1536,1551,1536,1536,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,3919,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3904,3840,3840,3840,3840,3904,3840,3840,3840,3840,3904,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599],"mode":1,"name":"近未来外観","note":"","tilesetNames":["Outside_A1","Outside_A2","SF_Outside_A3","SF_Outside_A4","SF_Outside_A5","SF_Outside_B","SF_Outside_C","",""]}, +{"id":6,"flags":[16,1536,1536,1536,1536,1574,1574,1574,1536,1536,1536,1536,1536,1574,1574,1574,1551,1551,1551,1551,1551,1536,1536,1536,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1551,1551,1551,1551,1536,1536,1536,1536,1551,1551,1551,1551,1536,1536,1536,1680,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1679,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1552,1552,1551,1551,1552,1552,1552,1551,1551,1551,1551,1551,1552,1552,1536,1536,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1679,1679,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1551,1551,1551,1551,1536,1536,1536,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1679,1551,1536,1536,1551,1551,1679,1679,1679,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1551,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1679,1679,1551,1551,1551,1551,1551,1679,1679,1679,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1536,1552,1552,1551,1551,1551,1551,1552,1551,1551,1551,1551,1536,1551,1551,1536,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1536,1536,1551,1551,1551,1551,1551,1551,1551,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1536,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1551,1552,1536,1551,1551,1551,1551,1551,1551,1552,1551,1679,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1552,1551,1552,1552,1552,1552,1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1536,1536,1536,1536,1536,1536,1536,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1551,1536,1536,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1546,1544,1548,1536,1536,1536,1536,1536,1538,1536,1540,1536,1536,1536,1536,1536,1538,1536,1540,1536,1536,1536,1536,1536,1551,1551,1551,1536,1536,1551,1536,1536,1551,1551,1551,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,2575,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3648,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,2063,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,3727,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3584,3586,3586,3586,3586,3592,3592,3592,3592,3588,3588,3588,3588,3584,3584,3584,3584,3590,3592,3594,3594,3596,3596,3588,3588,3586,3586,3598,3594,3590,3596,3598,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599,3599],"mode":1,"name":"近未来内装","note":"","tilesetNames":["Inside_A1","Inside_A2","","SF_Inside_A4","SF_Outside_A5","SF_Inside_B","SF_Inside_C","",""]} +] \ No newline at end of file diff --git a/data/Troops.json b/data/Troops.json new file mode 100644 index 0000000..dac0897 --- /dev/null +++ b/data/Troops.json @@ -0,0 +1,7 @@ +[ +null, +{"id":1,"members":[{"enemyId":1,"x":336,"y":436,"hidden":false},{"enemyId":1,"x":480,"y":436,"hidden":false}],"name":"こうもり*2","pages":[{"conditions":{"actorHp":50,"actorId":1,"actorValid":false,"enemyHp":50,"enemyIndex":0,"enemyValid":false,"switchId":1,"switchValid":false,"turnA":0,"turnB":0,"turnEnding":false,"turnValid":false},"list":[{"code":0,"indent":0,"parameters":[]}],"span":0}]}, +{"id":2,"members":[{"enemyId":2,"x":337,"y":436,"hidden":false},{"enemyId":2,"x":480,"y":436,"hidden":false}],"name":"スライム*2","pages":[{"conditions":{"actorHp":50,"actorId":1,"actorValid":false,"enemyHp":50,"enemyIndex":0,"enemyValid":false,"switchId":1,"switchValid":false,"turnA":0,"turnB":0,"turnEnding":false,"turnValid":false},"list":[{"code":0,"indent":0,"parameters":[]}],"span":0}]}, +{"id":3,"members":[{"enemyId":3,"x":408,"y":436,"hidden":false}],"name":"オーク","pages":[{"conditions":{"actorHp":50,"actorId":1,"actorValid":false,"enemyHp":50,"enemyIndex":0,"enemyValid":false,"switchId":1,"switchValid":false,"turnA":0,"turnB":0,"turnEnding":false,"turnValid":false},"list":[{"code":0,"indent":0,"parameters":[]}],"span":0}]}, +{"id":4,"members":[{"enemyId":4,"x":408,"y":436,"hidden":false}],"name":"ミノタウロス","pages":[{"conditions":{"actorHp":50,"actorId":1,"actorValid":false,"enemyHp":50,"enemyIndex":0,"enemyValid":false,"switchId":1,"switchValid":false,"turnA":0,"turnB":0,"turnEnding":false,"turnValid":false},"list":[{"code":0,"indent":0,"parameters":[]}],"span":0}]} +] \ No newline at end of file diff --git a/data/Weapons.json b/data/Weapons.json new file mode 100644 index 0000000..94c4dfc --- /dev/null +++ b/data/Weapons.json @@ -0,0 +1,7 @@ +[ +null, +{"id":1,"animationId":6,"description":"","etypeId":1,"traits":[{"code":31,"dataId":1,"value":0},{"code":22,"dataId":0,"value":0}],"iconIndex":97,"name":"剣","note":"","params":[0,0,10,0,0,0,0,0],"price":500,"wtypeId":2}, +{"id":2,"animationId":6,"description":"","etypeId":1,"traits":[{"code":31,"dataId":1,"value":0},{"code":22,"dataId":0,"value":0}],"iconIndex":99,"name":"斧","note":"","params":[0,0,10,0,0,0,0,0],"price":500,"wtypeId":4}, +{"id":3,"animationId":1,"description":"","etypeId":1,"traits":[{"code":31,"dataId":1,"value":0},{"code":22,"dataId":0,"value":0}],"iconIndex":101,"name":"杖","note":"","params":[0,0,10,0,0,0,0,0],"price":500,"wtypeId":6}, +{"id":4,"animationId":11,"description":"","etypeId":1,"traits":[{"code":31,"dataId":1,"value":0},{"code":22,"dataId":0,"value":0}],"iconIndex":102,"name":"弓","note":"","params":[0,0,10,0,0,0,0,0],"price":500,"wtypeId":7} +] \ No newline at end of file diff --git a/fonts/gamefont.css b/fonts/gamefont.css new file mode 100644 index 0000000..b0990b9 --- /dev/null +++ b/fonts/gamefont.css @@ -0,0 +1,4 @@ +@font-face { + font-family: GameFont; + src: url("mplus-1m-regular.ttf"); +} diff --git a/fonts/mplus-1m-regular.ttf b/fonts/mplus-1m-regular.ttf new file mode 100644 index 0000000..17b7bf8 Binary files /dev/null and b/fonts/mplus-1m-regular.ttf differ diff --git a/icon/icon.png b/icon/icon.png new file mode 100644 index 0000000..e778a6b Binary files /dev/null and b/icon/icon.png differ diff --git a/img/characters/!$Gate2.png b/img/characters/!$Gate2.png new file mode 100644 index 0000000..0100588 Binary files /dev/null and b/img/characters/!$Gate2.png differ diff --git a/img/characters/!Door1.png b/img/characters/!Door1.png new file mode 100644 index 0000000..2f5c018 Binary files /dev/null and b/img/characters/!Door1.png differ diff --git a/img/characters/!Flame.png b/img/characters/!Flame.png new file mode 100644 index 0000000..982882e Binary files /dev/null and b/img/characters/!Flame.png differ diff --git a/img/characters/Actor4.png b/img/characters/Actor4.png new file mode 100644 index 0000000..7621e5e Binary files /dev/null and b/img/characters/Actor4.png differ diff --git a/img/characters/Nature.png b/img/characters/Nature.png new file mode 100644 index 0000000..043a824 Binary files /dev/null and b/img/characters/Nature.png differ diff --git a/img/characters/People1.png b/img/characters/People1.png new file mode 100644 index 0000000..764c32a Binary files /dev/null and b/img/characters/People1.png differ diff --git a/img/characters/People2.png b/img/characters/People2.png new file mode 100644 index 0000000..d573b29 Binary files /dev/null and b/img/characters/People2.png differ diff --git a/img/characters/People3.png b/img/characters/People3.png new file mode 100644 index 0000000..22e188f Binary files /dev/null and b/img/characters/People3.png differ diff --git a/img/characters/Vehicle.png b/img/characters/Vehicle.png new file mode 100644 index 0000000..1b4f622 Binary files /dev/null and b/img/characters/Vehicle.png differ diff --git a/img/characters/hesi.png b/img/characters/hesi.png new file mode 100644 index 0000000..bb08309 Binary files /dev/null and b/img/characters/hesi.png differ diff --git a/img/characters/hime taore.png b/img/characters/hime taore.png new file mode 100644 index 0000000..8b425ed Binary files /dev/null and b/img/characters/hime taore.png differ diff --git a/img/characters/hime.png b/img/characters/hime.png new file mode 100644 index 0000000..b91e453 Binary files /dev/null and b/img/characters/hime.png differ diff --git a/img/characters/himemizugi taore.png b/img/characters/himemizugi taore.png new file mode 100644 index 0000000..efe2ff9 Binary files /dev/null and b/img/characters/himemizugi taore.png differ diff --git a/img/characters/himemizugi.png b/img/characters/himemizugi.png new file mode 100644 index 0000000..ad245aa Binary files /dev/null and b/img/characters/himemizugi.png differ diff --git a/img/characters/saten.png b/img/characters/saten.png new file mode 100644 index 0000000..e87b5de Binary files /dev/null and b/img/characters/saten.png differ diff --git a/img/faces/Actor1.png b/img/faces/Actor1.png new file mode 100644 index 0000000..94a6d55 Binary files /dev/null and b/img/faces/Actor1.png differ diff --git a/img/parallaxes/kuro.png b/img/parallaxes/kuro.png new file mode 100644 index 0000000..6eb55b9 Binary files /dev/null and b/img/parallaxes/kuro.png differ diff --git a/img/pictures/genkou1-1.png b/img/pictures/genkou1-1.png new file mode 100644 index 0000000..87de050 Binary files /dev/null and b/img/pictures/genkou1-1.png differ diff --git a/img/pictures/genkou1-2.png b/img/pictures/genkou1-2.png new file mode 100644 index 0000000..f95652c Binary files /dev/null and b/img/pictures/genkou1-2.png differ diff --git a/img/pictures/genkou1-3.png b/img/pictures/genkou1-3.png new file mode 100644 index 0000000..13a60ee Binary files /dev/null and b/img/pictures/genkou1-3.png differ diff --git a/img/pictures/genkou2-0.png b/img/pictures/genkou2-0.png new file mode 100644 index 0000000..33d4f94 Binary files /dev/null and b/img/pictures/genkou2-0.png differ diff --git a/img/pictures/genkou2-1.png b/img/pictures/genkou2-1.png new file mode 100644 index 0000000..fb19aa7 Binary files /dev/null and b/img/pictures/genkou2-1.png differ diff --git a/img/pictures/genkou2-2.png b/img/pictures/genkou2-2.png new file mode 100644 index 0000000..e26dc5f Binary files /dev/null and b/img/pictures/genkou2-2.png differ diff --git a/img/pictures/genkou3-0.png b/img/pictures/genkou3-0.png new file mode 100644 index 0000000..e5082cb Binary files /dev/null and b/img/pictures/genkou3-0.png differ diff --git a/img/pictures/genkou3-1.png b/img/pictures/genkou3-1.png new file mode 100644 index 0000000..3f804c3 Binary files /dev/null and b/img/pictures/genkou3-1.png differ diff --git a/img/pictures/genkou3-2.png b/img/pictures/genkou3-2.png new file mode 100644 index 0000000..d58fb4c Binary files /dev/null and b/img/pictures/genkou3-2.png differ diff --git a/img/pictures/kuro.png b/img/pictures/kuro.png new file mode 100644 index 0000000..6eb55b9 Binary files /dev/null and b/img/pictures/kuro.png differ diff --git a/img/pictures/mesukemo 1e.png b/img/pictures/mesukemo 1e.png new file mode 100644 index 0000000..1ced809 Binary files /dev/null and b/img/pictures/mesukemo 1e.png differ diff --git a/img/pictures/sekaitizu a.png b/img/pictures/sekaitizu a.png new file mode 100644 index 0000000..a563a84 Binary files /dev/null and b/img/pictures/sekaitizu a.png differ diff --git a/img/pictures/sekaitizu sepia.png b/img/pictures/sekaitizu sepia.png new file mode 100644 index 0000000..bc34c75 Binary files /dev/null and b/img/pictures/sekaitizu sepia.png differ diff --git a/img/pictures/sekaitizu.png b/img/pictures/sekaitizu.png new file mode 100644 index 0000000..5efd3c2 Binary files /dev/null and b/img/pictures/sekaitizu.png differ diff --git a/img/pictures/sukuratti0000000.png b/img/pictures/sukuratti0000000.png new file mode 100644 index 0000000..bb3202c Binary files /dev/null and b/img/pictures/sukuratti0000000.png differ diff --git a/img/pictures/クエスト 2.png b/img/pictures/クエスト 2.png new file mode 100644 index 0000000..a843a59 Binary files /dev/null and b/img/pictures/クエスト 2.png differ diff --git a/img/pictures/クエスト 2a.png b/img/pictures/クエスト 2a.png new file mode 100644 index 0000000..61e4b9d Binary files /dev/null and b/img/pictures/クエスト 2a.png differ diff --git a/img/pictures/クエスト 3.png b/img/pictures/クエスト 3.png new file mode 100644 index 0000000..50b32eb Binary files /dev/null and b/img/pictures/クエスト 3.png differ diff --git a/img/pictures/クエスト 3a.png b/img/pictures/クエスト 3a.png new file mode 100644 index 0000000..c79405a Binary files /dev/null and b/img/pictures/クエスト 3a.png differ diff --git a/img/pictures/クエスト 4.png b/img/pictures/クエスト 4.png new file mode 100644 index 0000000..4fc29f9 Binary files /dev/null and b/img/pictures/クエスト 4.png differ diff --git a/img/pictures/クエスト 4a.png b/img/pictures/クエスト 4a.png new file mode 100644 index 0000000..4f34e1b Binary files /dev/null and b/img/pictures/クエスト 4a.png differ diff --git a/img/pictures/クエスト 5.png b/img/pictures/クエスト 5.png new file mode 100644 index 0000000..4375441 Binary files /dev/null and b/img/pictures/クエスト 5.png differ diff --git a/img/pictures/クエスト 5a.png b/img/pictures/クエスト 5a.png new file mode 100644 index 0000000..e3f9d66 Binary files /dev/null and b/img/pictures/クエスト 5a.png differ diff --git a/img/pictures/クエスト 1.png b/img/pictures/クエスト 1.png new file mode 100644 index 0000000..58100fe Binary files /dev/null and b/img/pictures/クエスト 1.png differ diff --git a/img/pictures/クエスト 1a.png b/img/pictures/クエスト 1a.png new file mode 100644 index 0000000..16f270a Binary files /dev/null and b/img/pictures/クエスト 1a.png differ diff --git a/img/system/Balloon.png b/img/system/Balloon.png new file mode 100644 index 0000000..0499db2 Binary files /dev/null and b/img/system/Balloon.png differ diff --git a/img/system/ButtonSet.png b/img/system/ButtonSet.png new file mode 100644 index 0000000..593251e Binary files /dev/null and b/img/system/ButtonSet.png differ diff --git a/img/system/Damage.png b/img/system/Damage.png new file mode 100644 index 0000000..4f1cfb6 Binary files /dev/null and b/img/system/Damage.png differ diff --git a/img/system/IconSet.png b/img/system/IconSet.png new file mode 100644 index 0000000..f598da8 Binary files /dev/null and b/img/system/IconSet.png differ diff --git a/img/system/Loading.png b/img/system/Loading.png new file mode 100644 index 0000000..d359683 Binary files /dev/null and b/img/system/Loading.png differ diff --git a/img/system/Shadow1.png b/img/system/Shadow1.png new file mode 100644 index 0000000..6cb5d50 Binary files /dev/null and b/img/system/Shadow1.png differ diff --git a/img/system/Shadow2.png b/img/system/Shadow2.png new file mode 100644 index 0000000..8814a09 Binary files /dev/null and b/img/system/Shadow2.png differ diff --git a/img/system/States.png b/img/system/States.png new file mode 100644 index 0000000..002adb4 Binary files /dev/null and b/img/system/States.png differ diff --git a/img/system/Weapons1.png b/img/system/Weapons1.png new file mode 100644 index 0000000..58c6d75 Binary files /dev/null and b/img/system/Weapons1.png differ diff --git a/img/system/Weapons2.png b/img/system/Weapons2.png new file mode 100644 index 0000000..a752ba5 Binary files /dev/null and b/img/system/Weapons2.png differ diff --git a/img/system/Weapons3.png b/img/system/Weapons3.png new file mode 100644 index 0000000..0015415 Binary files /dev/null and b/img/system/Weapons3.png differ diff --git a/img/system/Window.png b/img/system/Window.png new file mode 100644 index 0000000..497978c Binary files /dev/null and b/img/system/Window.png differ diff --git a/img/tilesets/Inside_A1.png b/img/tilesets/Inside_A1.png new file mode 100644 index 0000000..6ec6677 Binary files /dev/null and b/img/tilesets/Inside_A1.png differ diff --git a/img/tilesets/Inside_A2.png b/img/tilesets/Inside_A2.png new file mode 100644 index 0000000..77b8c0a Binary files /dev/null and b/img/tilesets/Inside_A2.png differ diff --git a/img/tilesets/Inside_A4.png b/img/tilesets/Inside_A4.png new file mode 100644 index 0000000..5e37e44 Binary files /dev/null and b/img/tilesets/Inside_A4.png differ diff --git a/img/tilesets/Inside_A5.png b/img/tilesets/Inside_A5.png new file mode 100644 index 0000000..fd7890d Binary files /dev/null and b/img/tilesets/Inside_A5.png differ diff --git a/img/tilesets/Inside_B.png b/img/tilesets/Inside_B.png new file mode 100644 index 0000000..cb10251 Binary files /dev/null and b/img/tilesets/Inside_B.png differ diff --git a/img/tilesets/Inside_C.png b/img/tilesets/Inside_C.png new file mode 100644 index 0000000..5ffb3ec Binary files /dev/null and b/img/tilesets/Inside_C.png differ diff --git a/img/tilesets/Outside_C.png b/img/tilesets/Outside_C.png new file mode 100644 index 0000000..fe203ed Binary files /dev/null and b/img/tilesets/Outside_C.png differ diff --git a/img/tilesets/World_A1.png b/img/tilesets/World_A1.png new file mode 100644 index 0000000..3d3332c Binary files /dev/null and b/img/tilesets/World_A1.png differ diff --git a/img/tilesets/World_A2.png b/img/tilesets/World_A2.png new file mode 100644 index 0000000..8bf35c2 Binary files /dev/null and b/img/tilesets/World_A2.png differ diff --git a/img/tilesets/World_B.png b/img/tilesets/World_B.png new file mode 100644 index 0000000..efe1b8f Binary files /dev/null and b/img/tilesets/World_B.png differ diff --git a/img/tilesets/World_C.png b/img/tilesets/World_C.png new file mode 100644 index 0000000..46ef185 Binary files /dev/null and b/img/tilesets/World_C.png differ diff --git a/img/titles1/Plain.png b/img/titles1/Plain.png new file mode 100644 index 0000000..ca60b66 Binary files /dev/null and b/img/titles1/Plain.png differ diff --git a/img/titles2/Floral.png b/img/titles2/Floral.png new file mode 100644 index 0000000..83653a8 Binary files /dev/null and b/img/titles2/Floral.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..b438a86 --- /dev/null +++ b/index.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + メスケモ姫の海水浴 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/js/libs/fpsmeter.js b/js/libs/fpsmeter.js new file mode 100644 index 0000000..481da37 --- /dev/null +++ b/js/libs/fpsmeter.js @@ -0,0 +1,15 @@ +/*! FPSMeter 0.3.1 - 9th May 2013 | https://github.com/Darsain/fpsmeter */ +(function(m,j){function s(a,e){for(var g in e)try{a.style[g]=e[g]}catch(j){}return a}function H(a){return null==a?String(a):"object"===typeof a||"function"===typeof a?Object.prototype.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase()||"object":typeof a}function R(a,e){if("array"!==H(e))return-1;if(e.indexOf)return e.indexOf(a);for(var g=0,j=e.length;gd.interval?(x=M(k),m()):(x=setTimeout(k,d.interval),P=M(m))}function G(a){a=a||window.event;a.preventDefault?(a.preventDefault(),a.stopPropagation()):(a.returnValue= +!1,a.cancelBubble=!0);b.toggle()}function U(){d.toggleOn&&S(f.container,d.toggleOn,G,1);a.removeChild(f.container)}function V(){f.container&&U();h=D.theme[d.theme];y=h.compiledHeatmaps||[];if(!y.length&&h.heatmaps.length){for(p=0;p=m?m*(1+j):m+j-m*j;0===l?g="#000":(t=2*m-l,k=(l-t)/l,g*=6,n=Math.floor(g), +v=g-n,v*=l*k,0===n||6===n?(n=l,k=t+v,l=t):1===n?(n=l-v,k=l,l=t):2===n?(n=t,k=l,l=t+v):3===n?(n=t,k=l-v):4===n?(n=t+v,k=t):(n=l,k=t,l-=v),g="#"+N(n)+N(k)+N(l));b[e]=g}}h.compiledHeatmaps=y}f.container=s(document.createElement("div"),h.container);f.count=f.container.appendChild(s(document.createElement("div"),h.count));f.legend=f.container.appendChild(s(document.createElement("div"),h.legend));f.graph=d.graph?f.container.appendChild(s(document.createElement("div"),h.graph)):0;w.length=0;for(var q in f)f[q]&& +h[q].heatOn&&w.push({name:q,el:f[q]});u.length=0;if(f.graph){f.graph.style.width=d.history*h.column.width+(d.history-1)*h.column.spacing+"px";for(c=0;c>8;r=e.charCodeAt(f/2)&255;if(f/2+1>8;else i=NaN}else{n=e.charCodeAt((f-1)/2)&255;if((f+1)/2>8;i=e.charCodeAt((f+1)/2)&255}else r=i=NaN}f+=3;s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+LZString._keyStr.charAt(s)+LZString._keyStr.charAt(o)+LZString._keyStr.charAt(u)+LZString._keyStr.charAt(a)}return t},decompressFromBase64:function(e){if(e==null)return"";var t="",n=0,r,i,s,o,u,a,f,l,c=0,h=LZString._f;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(c>4;s=(a&15)<<4|f>>2;o=(f&3)<<6|l;if(n%2==0){r=i<<8;if(f!=64){t+=h(r|s)}if(l!=64){r=o<<8}}else{t=t+h(r|i);if(f!=64){r=s<<8}if(l!=64){t+=h(r|o)}}n+=3}return LZString.decompress(t)},compressToUTF16:function(e){if(e==null)return"";var t="",n,r,i,s=0,o=LZString._f;e=LZString.compress(e);for(n=0;n>1)+32);i=(r&1)<<14;break;case 1:t+=o(i+(r>>2)+32);i=(r&3)<<13;break;case 2:t+=o(i+(r>>3)+32);i=(r&7)<<12;break;case 3:t+=o(i+(r>>4)+32);i=(r&15)<<11;break;case 4:t+=o(i+(r>>5)+32);i=(r&31)<<10;break;case 5:t+=o(i+(r>>6)+32);i=(r&63)<<9;break;case 6:t+=o(i+(r>>7)+32);i=(r&127)<<8;break;case 7:t+=o(i+(r>>8)+32);i=(r&255)<<7;break;case 8:t+=o(i+(r>>9)+32);i=(r&511)<<6;break;case 9:t+=o(i+(r>>10)+32);i=(r&1023)<<5;break;case 10:t+=o(i+(r>>11)+32);i=(r&2047)<<4;break;case 11:t+=o(i+(r>>12)+32);i=(r&4095)<<3;break;case 12:t+=o(i+(r>>13)+32);i=(r&8191)<<2;break;case 13:t+=o(i+(r>>14)+32);i=(r&16383)<<1;break;case 14:t+=o(i+(r>>15)+32,(r&32767)+32);s=0;break}}return t+o(i+32)},decompressFromUTF16:function(e){if(e==null)return"";var t="",n,r,i=0,s=0,o=LZString._f;while(s>14);n=(r&16383)<<2;break;case 2:t+=o(n|r>>13);n=(r&8191)<<3;break;case 3:t+=o(n|r>>12);n=(r&4095)<<4;break;case 4:t+=o(n|r>>11);n=(r&2047)<<5;break;case 5:t+=o(n|r>>10);n=(r&1023)<<6;break;case 6:t+=o(n|r>>9);n=(r&511)<<7;break;case 7:t+=o(n|r>>8);n=(r&255)<<8;break;case 8:t+=o(n|r>>7);n=(r&127)<<9;break;case 9:t+=o(n|r>>6);n=(r&63)<<10;break;case 10:t+=o(n|r>>5);n=(r&31)<<11;break;case 11:t+=o(n|r>>4);n=(r&15)<<12;break;case 12:t+=o(n|r>>3);n=(r&7)<<13;break;case 13:t+=o(n|r>>2);n=(r&3)<<14;break;case 14:t+=o(n|r>>1);n=(r&1)<<15;break;case 15:t+=o(n|r);i=0;break}s++}return LZString.decompress(t)},compressToUint8Array:function(e){var t=LZString.compress(e);var n=new Uint8Array(t.length*2);for(var r=0,i=t.length;r>>8;n[r*2+1]=s%256}return n},decompressFromUint8Array:function(e){if(e===null||e===undefined){return LZString.decompress(e)}else{var t=new Array(e.length/2);for(var n=0,r=t.length;n>1}}else{n=1;for(t=0;t>1}}a--;if(a==0){a=Math.pow(2,l);l++}delete i[u]}else{n=r[u];for(t=0;t>1}}a--;if(a==0){a=Math.pow(2,l);l++}r[o]=f++;u=String(s)}}if(u!==""){if(Object.prototype.hasOwnProperty.call(i,u)){if(u.charCodeAt(0)<256){for(t=0;t>1}}else{n=1;for(t=0;t>1}}a--;if(a==0){a=Math.pow(2,l);l++}delete i[u]}else{n=r[u];for(t=0;t>1}}a--;if(a==0){a=Math.pow(2,l);l++}}n=2;for(t=0;t>1}while(true){h=h<<1;if(p==15){c+=v(h);break}else p++}return c},decompress:function(e){if(e==null)return"";if(e=="")return null;var t=[],n,r=4,i=4,s=3,o="",u="",a,f,l,c,h,p,d,v=LZString._f,m={string:e,val:e.charCodeAt(0),position:32768,index:1};for(a=0;a<3;a+=1){t[a]=a}l=0;h=Math.pow(2,2);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}switch(n=l){case 0:l=0;h=Math.pow(2,8);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}d=v(l);break;case 1:l=0;h=Math.pow(2,16);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}d=v(l);break;case 2:return""}t[3]=d;f=u=d;while(true){if(m.index>m.string.length){return""}l=0;h=Math.pow(2,s);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}switch(d=l){case 0:l=0;h=Math.pow(2,8);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}t[i++]=v(l);d=i-1;r--;break;case 1:l=0;h=Math.pow(2,16);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}t[i++]=v(l);d=i-1;r--;break;case 2:return u}if(r==0){r=Math.pow(2,s);s++}if(t[d]){o=t[d]}else{if(d===i){o=f+f.charAt(0)}else{return null}}u+=o;t[i++]=f+o.charAt(0);r--;f=o;if(r==0){r=Math.pow(2,s);s++}}}};if(typeof module!=="undefined"&&module!=null){module.exports=LZString} diff --git a/js/libs/pixi.js b/js/libs/pixi.js new file mode 100644 index 0000000..c18a305 --- /dev/null +++ b/js/libs/pixi.js @@ -0,0 +1,20452 @@ +/** + * @license + * pixi.js - v2.2.10 + * Copyright (c) 2012-2014, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2016-01-31 + * + * pixi.js is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The [pixi.js](http://www.pixijs.com/) module/namespace. + * + * @module PIXI + */ + +/** + * Namespace-class for [pixi.js](http://www.pixijs.com/). + * + * Contains assorted static properties and enumerations. + * + * @class PIXI + * @static + */ +var PIXI = PIXI || {}; + +/** + * @property {Number} WEBGL_RENDERER + * @protected + * @static + */ +PIXI.WEBGL_RENDERER = 0; +/** + * @property {Number} CANVAS_RENDERER + * @protected + * @static + */ +PIXI.CANVAS_RENDERER = 1; + +/** + * Version of pixi that is loaded. + * @property {String} VERSION + * @static + */ +PIXI.VERSION = "v2.2.9"; + +/** + * Various blend modes supported by pixi. IMPORTANT - The WebGL renderer only supports the NORMAL, ADD, MULTIPLY and SCREEN blend modes. + * @property {Object} blendModes + * @property {Number} blendModes.NORMAL + * @property {Number} blendModes.ADD + * @property {Number} blendModes.MULTIPLY + * @property {Number} blendModes.SCREEN + * @property {Number} blendModes.OVERLAY + * @property {Number} blendModes.DARKEN + * @property {Number} blendModes.LIGHTEN + * @property {Number} blendModes.COLOR_DODGE + * @property {Number} blendModes.COLOR_BURN + * @property {Number} blendModes.HARD_LIGHT + * @property {Number} blendModes.SOFT_LIGHT + * @property {Number} blendModes.DIFFERENCE + * @property {Number} blendModes.EXCLUSION + * @property {Number} blendModes.HUE + * @property {Number} blendModes.SATURATION + * @property {Number} blendModes.COLOR + * @property {Number} blendModes.LUMINOSITY + * @static + */ +PIXI.blendModes = { + NORMAL:0, + ADD:1, + MULTIPLY:2, + SCREEN:3, + OVERLAY:4, + DARKEN:5, + LIGHTEN:6, + COLOR_DODGE:7, + COLOR_BURN:8, + HARD_LIGHT:9, + SOFT_LIGHT:10, + DIFFERENCE:11, + EXCLUSION:12, + HUE:13, + SATURATION:14, + COLOR:15, + LUMINOSITY:16 +}; + +/** + * The scale modes that are supported by pixi. + * + * The DEFAULT scale mode affects the default scaling mode of future operations. + * It can be re-assigned to either LINEAR or NEAREST, depending upon suitability. + * + * @property {Object} scaleModes + * @property {Number} scaleModes.DEFAULT=LINEAR + * @property {Number} scaleModes.LINEAR Smooth scaling + * @property {Number} scaleModes.NEAREST Pixelating scaling + * @static + */ +PIXI.scaleModes = { + DEFAULT:0, + LINEAR:0, + NEAREST:1 +}; + +// used to create uids for various pixi objects.. +PIXI._UID = 0; + +if(typeof(Float32Array) != 'undefined') +{ + PIXI.Float32Array = Float32Array; + PIXI.Uint16Array = Uint16Array; + + // Uint32Array and ArrayBuffer only used by WebGL renderer + // We can suppose that if WebGL is supported then typed arrays are supported too + // as they predate WebGL support for all browsers: + // see typed arrays support: http://caniuse.com/#search=TypedArrays + // see WebGL support: http://caniuse.com/#search=WebGL + PIXI.Uint32Array = Uint32Array; + PIXI.ArrayBuffer = ArrayBuffer; +} +else +{ + PIXI.Float32Array = Array; + PIXI.Uint16Array = Array; +} + +// interaction frequency +PIXI.INTERACTION_FREQUENCY = 30; +PIXI.AUTO_PREVENT_DEFAULT = true; + +/** + * @property {Number} PI_2 + * @static + */ +PIXI.PI_2 = Math.PI * 2; + +/** + * @property {Number} RAD_TO_DEG + * @static + */ +PIXI.RAD_TO_DEG = 180 / Math.PI; + +/** + * @property {Number} DEG_TO_RAD + * @static + */ +PIXI.DEG_TO_RAD = Math.PI / 180; + +/** + * @property {String} RETINA_PREFIX + * @protected + * @static + */ +PIXI.RETINA_PREFIX = "@2x"; +//PIXI.SCALE_PREFIX "@x%%"; + +/** + * If true the default pixi startup (console) banner message will be suppressed. + * + * @property {Boolean} dontSayHello + * @default false + * @static + */ +PIXI.dontSayHello = false; + +/** + * The default render options if none are supplied to + * {{#crossLink "WebGLRenderer"}}{{/crossLink}} or {{#crossLink "CanvasRenderer"}}{{/crossLink}}. + * + * @property {Object} defaultRenderOptions + * @property {Object} defaultRenderOptions.view=null + * @property {Boolean} defaultRenderOptions.transparent=false + * @property {Boolean} defaultRenderOptions.antialias=false + * @property {Boolean} defaultRenderOptions.preserveDrawingBuffer=false + * @property {Number} defaultRenderOptions.resolution=1 + * @property {Boolean} defaultRenderOptions.clearBeforeRender=true + * @property {Boolean} defaultRenderOptions.autoResize=false + * @static + */ +PIXI.defaultRenderOptions = { + view:null, + transparent:false, + antialias:false, + preserveDrawingBuffer:false, + resolution:1, + clearBeforeRender:true, + autoResize:false +} + +PIXI.sayHello = function (type) +{ + if(PIXI.dontSayHello)return; + + if ( navigator.userAgent.toLowerCase().indexOf('chrome') > -1 ) + { + var args = [ + '%c %c %c Pixi.js ' + PIXI.VERSION + ' - ' + type + ' %c ' + ' %c ' + ' http://www.pixijs.com/ %c %c ♥%c♥%c♥ ', + 'background: #ff66a5', + 'background: #ff66a5', + 'color: #ff66a5; background: #030307;', + 'background: #ff66a5', + 'background: #ffc3dc', + 'background: #ff66a5', + 'color: #ff2424; background: #fff', + 'color: #ff2424; background: #fff', + 'color: #ff2424; background: #fff' + ]; + + console.log.apply(console, args); + } + else if (window['console']) + { + console.log('Pixi.js ' + PIXI.VERSION + ' - http://www.pixijs.com/'); + } + + PIXI.dontSayHello = true; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * + * @class Point + * @constructor + * @param x {Number} position of the point on the x axis + * @param y {Number} position of the point on the y axis + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +}; + +/** + * Creates a clone of this point + * + * @method clone + * @return {Point} a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +}; + +/** + * Sets the point to a new x and y position. + * If y is omitted, both x and y will be set to x. + * + * @method set + * @param [x=0] {Number} position of the point on the x axis + * @param [y=0] {Number} position of the point on the y axis + */ +PIXI.Point.prototype.set = function(x, y) +{ + this.x = x || 0; + this.y = y || ( (y !== 0) ? this.x : 0 ) ; +}; + +// constructor +PIXI.Point.prototype.constructor = PIXI.Point; +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * + * @class Rectangle + * @constructor + * @param x {Number} The X coordinate of the upper-left corner of the rectangle + * @param y {Number} The Y coordinate of the upper-left corner of the rectangle + * @param width {Number} The overall width of this rectangle + * @param height {Number} The overall height of this rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; + + /** + * The type of the object, should be one of the Graphics type consts, PIXI.Graphics.RECT in this case + * @property type + * @type Number + * @default 0 + */ +}; + +/** + * Creates a clone of this Rectangle + * + * @method clone + * @return {Rectangle} a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +}; + +/** + * Checks whether the x and y coordinates given are contained within this Rectangle + * + * @method contains + * @param x {Number} The X coordinate of the point to test + * @param y {Number} The Y coordinate of the point to test + * @return {Boolean} Whether the x/y coordinates are within this Rectangle + */ +PIXI.Rectangle.prototype.contains = function(x, y) +{ + if(this.width <= 0 || this.height <= 0) + return false; + + var x1 = this.x; + if(x >= x1 && x <= x1 + this.width) + { + var y1 = this.y; + + if(y >= y1 && y <= y1 + this.height) + { + return true; + } + } + + return false; +}; + +// constructor +PIXI.Rectangle.prototype.constructor = PIXI.Rectangle; + +PIXI.EmptyRectangle = new PIXI.Rectangle(0,0,0,0); +/** + * @author Adrien Brault + */ + +/** + * @class Polygon + * @constructor + * @param points* {Array(Point)|Array(Number)|Point...|Number...} This can be an array of Points that form the polygon, + * a flat array of numbers that will be interpreted as [x,y, x,y, ...], or the arguments passed can be + * all the points of the polygon e.g. `new PIXI.Polygon(new PIXI.Point(), new PIXI.Point(), ...)`, or the + * arguments passed can be flat x,y values e.g. `new PIXI.Polygon(x,y, x,y, x,y, ...)` where `x` and `y` are + * Numbers. + */ +PIXI.Polygon = function(points) +{ + //if points isn't an array, use arguments as the array + if(!(points instanceof Array))points = Array.prototype.slice.call(arguments); + + //if this is a flat array of numbers, convert it to points + if(points[0] instanceof PIXI.Point) + { + var p = []; + for(var i = 0, il = points.length; i < il; i++) + { + p.push(points[i].x, points[i].y); + } + + points = p; + } + + this.closed = true; + + /** + * An array of the points of this polygon + * @property points + * @type Array(Point)|Array(Number) + * + */ + this.points = points; + + /** + * The type of the object, should be one of the Graphics type consts, PIXI.Graphics.POLY in this case + * @property type + * @type Number + * @default 0 + */ +}; + +/** + * Creates a clone of this polygon + * + * @method clone + * @return {Polygon} a copy of the polygon + */ +PIXI.Polygon.prototype.clone = function() +{ + var points = this.points.slice(); + return new PIXI.Polygon(points); +}; + +/** + * Checks whether the x and y coordinates passed to this function are contained within this polygon + * + * @method contains + * @param x {Number} The X coordinate of the point to test + * @param y {Number} The Y coordinate of the point to test + * @return {Boolean} Whether the x/y coordinates are within this polygon + */ +PIXI.Polygon.prototype.contains = function(x, y) +{ + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + var length = this.points.length / 2; + + for(var i = 0, j = length - 1; i < length; j = i++) + { + var xi = this.points[i * 2], yi = this.points[i * 2 + 1], + xj = this.points[j * 2], yj = this.points[j * 2 + 1], + intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + return inside; +}; + +// constructor +PIXI.Polygon.prototype.constructor = PIXI.Polygon; + +/** + * @author Chad Engler + */ + +/** + * The Circle object can be used to specify a hit area for displayObjects + * + * @class Circle + * @constructor + * @param x {Number} The X coordinate of the center of this circle + * @param y {Number} The Y coordinate of the center of this circle + * @param radius {Number} The radius of the circle + */ +PIXI.Circle = function(x, y, radius) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property radius + * @type Number + * @default 0 + */ + this.radius = radius || 0; + + /** + * The type of the object, should be one of the Graphics type consts, PIXI.Graphics.CIRC in this case + * @property type + * @type Number + * @default 0 + */ +}; + +/** + * Creates a clone of this Circle instance + * + * @method clone + * @return {Circle} a copy of the Circle + */ +PIXI.Circle.prototype.clone = function() +{ + return new PIXI.Circle(this.x, this.y, this.radius); +}; + +/** + * Checks whether the x and y coordinates given are contained within this circle + * + * @method contains + * @param x {Number} The X coordinate of the point to test + * @param y {Number} The Y coordinate of the point to test + * @return {Boolean} Whether the x/y coordinates are within this Circle + */ +PIXI.Circle.prototype.contains = function(x, y) +{ + if(this.radius <= 0) + return false; + + var dx = (this.x - x), + dy = (this.y - y), + r2 = this.radius * this.radius; + + dx *= dx; + dy *= dy; + + return (dx + dy <= r2); +}; + +/** +* Returns the framing rectangle of the circle as a PIXI.Rectangle object +* +* @method getBounds +* @return {Rectangle} the framing rectangle +*/ +PIXI.Circle.prototype.getBounds = function() +{ + return new PIXI.Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2); +}; + +// constructor +PIXI.Circle.prototype.constructor = PIXI.Circle; + +/** + * @author Chad Engler + */ + +/** + * The Ellipse object can be used to specify a hit area for displayObjects + * + * @class Ellipse + * @constructor + * @param x {Number} The X coordinate of the center of the ellipse + * @param y {Number} The Y coordinate of the center of the ellipse + * @param width {Number} The half width of this ellipse + * @param height {Number} The half height of this ellipse + */ +PIXI.Ellipse = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; + + + /** + * The type of the object, should be one of the Graphics type consts, PIXI.Graphics.ELIP in this case + * @property type + * @type Number + * @default 0 + */ +}; + +/** + * Creates a clone of this Ellipse instance + * + * @method clone + * @return {Ellipse} a copy of the ellipse + */ +PIXI.Ellipse.prototype.clone = function() +{ + return new PIXI.Ellipse(this.x, this.y, this.width, this.height); +}; + +/** + * Checks whether the x and y coordinates given are contained within this ellipse + * + * @method contains + * @param x {Number} The X coordinate of the point to test + * @param y {Number} The Y coordinate of the point to test + * @return {Boolean} Whether the x/y coords are within this ellipse + */ +PIXI.Ellipse.prototype.contains = function(x, y) +{ + if(this.width <= 0 || this.height <= 0) + return false; + + //normalize the coords to an ellipse with center 0,0 + var normx = ((x - this.x) / this.width), + normy = ((y - this.y) / this.height); + + normx *= normx; + normy *= normy; + + return (normx + normy <= 1); +}; + +/** +* Returns the framing rectangle of the ellipse as a PIXI.Rectangle object +* +* @method getBounds +* @return {Rectangle} the framing rectangle +*/ +PIXI.Ellipse.prototype.getBounds = function() +{ + return new PIXI.Rectangle(this.x - this.width, this.y - this.height, this.width, this.height); +}; + +// constructor +PIXI.Ellipse.prototype.constructor = PIXI.Ellipse; + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * The Rounded Rectangle object is an area defined by its position and has nice rounded corners, as indicated by its top-left corner point (x, y) and by its width and its height. + * + * @class RoundedRectangle + * @constructor + * @param x {Number} The X coordinate of the upper-left corner of the rounded rectangle + * @param y {Number} The Y coordinate of the upper-left corner of the rounded rectangle + * @param width {Number} The overall width of this rounded rectangle + * @param height {Number} The overall height of this rounded rectangle + * @param radius {Number} Controls the radius of the rounded corners + */ +PIXI.RoundedRectangle = function(x, y, width, height, radius) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; + + /** + * @property radius + * @type Number + * @default 20 + */ + this.radius = radius || 20; + + /** + * The type of the object, should be one of the Graphics type consts, PIXI.Graphics.RRECT in this case + * @property type + * @type Number + * @default 0 + */ +}; + +/** + * Creates a clone of this Rounded Rectangle + * + * @method clone + * @return {RoundedRectangle} a copy of the rounded rectangle + */ +PIXI.RoundedRectangle.prototype.clone = function() +{ + return new PIXI.RoundedRectangle(this.x, this.y, this.width, this.height, this.radius); +}; + +/** + * Checks whether the x and y coordinates given are contained within this Rounded Rectangle + * + * @method contains + * @param x {Number} The X coordinate of the point to test + * @param y {Number} The Y coordinate of the point to test + * @return {Boolean} Whether the x/y coordinates are within this Rounded Rectangle + */ +PIXI.RoundedRectangle.prototype.contains = function(x, y) +{ + if(this.width <= 0 || this.height <= 0) + return false; + + var x1 = this.x; + if(x >= x1 && x <= x1 + this.width) + { + var y1 = this.y; + + if(y >= y1 && y <= y1 + this.height) + { + return true; + } + } + + return false; +}; + +// constructor +PIXI.RoundedRectangle.prototype.constructor = PIXI.RoundedRectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Matrix class is now an object, which makes it a lot faster, + * here is a representation of it : + * | a | b | tx| + * | c | d | ty| + * | 0 | 0 | 1 | + * + * @class Matrix + * @constructor + */ +PIXI.Matrix = function() +{ + /** + * @property a + * @type Number + * @default 1 + */ + this.a = 1; + + /** + * @property b + * @type Number + * @default 0 + */ + this.b = 0; + + /** + * @property c + * @type Number + * @default 0 + */ + this.c = 0; + + /** + * @property d + * @type Number + * @default 1 + */ + this.d = 1; + + /** + * @property tx + * @type Number + * @default 0 + */ + this.tx = 0; + + /** + * @property ty + * @type Number + * @default 0 + */ + this.ty = 0; +}; + +/** + * Creates a Matrix object based on the given array. The Element to Matrix mapping order is as follows: + * + * a = array[0] + * b = array[1] + * c = array[3] + * d = array[4] + * tx = array[2] + * ty = array[5] + * + * @method fromArray + * @param array {Array} The array that the matrix will be populated from. + */ +PIXI.Matrix.prototype.fromArray = function(array) +{ + this.a = array[0]; + this.b = array[1]; + this.c = array[3]; + this.d = array[4]; + this.tx = array[2]; + this.ty = array[5]; +}; + +/** + * Creates an array from the current Matrix object. + * + * @method toArray + * @param transpose {Boolean} Whether we need to transpose the matrix or not + * @return {Array} the newly created array which contains the matrix + */ +PIXI.Matrix.prototype.toArray = function(transpose) +{ + if(!this.array) this.array = new PIXI.Float32Array(9); + var array = this.array; + + if(transpose) + { + array[0] = this.a; + array[1] = this.b; + array[2] = 0; + array[3] = this.c; + array[4] = this.d; + array[5] = 0; + array[6] = this.tx; + array[7] = this.ty; + array[8] = 1; + } + else + { + array[0] = this.a; + array[1] = this.c; + array[2] = this.tx; + array[3] = this.b; + array[4] = this.d; + array[5] = this.ty; + array[6] = 0; + array[7] = 0; + array[8] = 1; + } + + return array; +}; + +/** + * Get a new position with the current transformation applied. + * Can be used to go from a child's coordinate space to the world coordinate space. (e.g. rendering) + * + * @method apply + * @param pos {Point} The origin + * @param [newPos] {Point} The point that the new position is assigned to (allowed to be same as input) + * @return {Point} The new point, transformed through this matrix + */ +PIXI.Matrix.prototype.apply = function(pos, newPos) +{ + newPos = newPos || new PIXI.Point(); + + newPos.x = this.a * pos.x + this.c * pos.y + this.tx; + newPos.y = this.b * pos.x + this.d * pos.y + this.ty; + + return newPos; +}; + +/** + * Get a new position with the inverse of the current transformation applied. + * Can be used to go from the world coordinate space to a child's coordinate space. (e.g. input) + * + * @method applyInverse + * @param pos {Point} The origin + * @param [newPos] {Point} The point that the new position is assigned to (allowed to be same as input) + * @return {Point} The new point, inverse-transformed through this matrix + */ +PIXI.Matrix.prototype.applyInverse = function(pos, newPos) +{ + newPos = newPos || new PIXI.Point(); + + var id = 1 / (this.a * this.d + this.c * -this.b); + + newPos.x = this.d * id * pos.x + -this.c * id * pos.y + (this.ty * this.c - this.tx * this.d) * id; + newPos.y = this.a * id * pos.y + -this.b * id * pos.x + (-this.ty * this.a + this.tx * this.b) * id; + + return newPos; +}; + +/** + * Translates the matrix on the x and y. + * + * @method translate + * @param {Number} x + * @param {Number} y + * @return {Matrix} This matrix. Good for chaining method calls. + **/ +PIXI.Matrix.prototype.translate = function(x, y) +{ + this.tx += x; + this.ty += y; + + return this; +}; + +/** + * Applies a scale transformation to the matrix. + * + * @method scale + * @param {Number} x The amount to scale horizontally + * @param {Number} y The amount to scale vertically + * @return {Matrix} This matrix. Good for chaining method calls. + **/ +PIXI.Matrix.prototype.scale = function(x, y) +{ + this.a *= x; + this.d *= y; + this.c *= x; + this.b *= y; + this.tx *= x; + this.ty *= y; + + return this; +}; + + +/** + * Applies a rotation transformation to the matrix. + * @method rotate + * @param {Number} angle The angle in radians. + * @return {Matrix} This matrix. Good for chaining method calls. + **/ +PIXI.Matrix.prototype.rotate = function(angle) +{ + var cos = Math.cos( angle ); + var sin = Math.sin( angle ); + + var a1 = this.a; + var c1 = this.c; + var tx1 = this.tx; + + this.a = a1 * cos-this.b * sin; + this.b = a1 * sin+this.b * cos; + this.c = c1 * cos-this.d * sin; + this.d = c1 * sin+this.d * cos; + this.tx = tx1 * cos - this.ty * sin; + this.ty = tx1 * sin + this.ty * cos; + + return this; +}; + +/** + * Appends the given Matrix to this Matrix. + * + * @method append + * @param {Matrix} matrix + * @return {Matrix} This matrix. Good for chaining method calls. + */ +PIXI.Matrix.prototype.append = function(matrix) +{ + var a1 = this.a; + var b1 = this.b; + var c1 = this.c; + var d1 = this.d; + + this.a = matrix.a * a1 + matrix.b * c1; + this.b = matrix.a * b1 + matrix.b * d1; + this.c = matrix.c * a1 + matrix.d * c1; + this.d = matrix.c * b1 + matrix.d * d1; + + this.tx = matrix.tx * a1 + matrix.ty * c1 + this.tx; + this.ty = matrix.tx * b1 + matrix.ty * d1 + this.ty; + + return this; +}; + +/** + * Resets this Matix to an identity (default) matrix. + * + * @method identity + * @return {Matrix} This matrix. Good for chaining method calls. + */ +PIXI.Matrix.prototype.identity = function() +{ + this.a = 1; + this.b = 0; + this.c = 0; + this.d = 1; + this.tx = 0; + this.ty = 0; + + return this; +}; + +PIXI.identityMatrix = new PIXI.Matrix(); + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The base class for all objects that are rendered on the screen. + * This is an abstract class and should not be used on its own rather it should be extended. + * + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * + * @property visible + * @type Boolean + */ + this.visible = true; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * + * @property hitArea + * @type Rectangle|Circle|Ellipse|Polygon + */ + this.hitArea = null; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /** + * Can this object be rendered + * + * @property renderable + * @type Boolean + */ + this.renderable = false; + + /** + * [read-only] The display object container that contains this display object. + * + * @property parent + * @type DisplayObjectContainer + * @readOnly + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * + * @property stage + * @type Stage + * @readOnly + */ + this.stage = null; + + /** + * [read-only] The multiplied alpha of the displayObject + * + * @property worldAlpha + * @type Number + * @readOnly + */ + this.worldAlpha = 1; + + /** + * [read-only] Whether or not the object is interactive, do not toggle directly! use the `interactive` property + * + * @property _interactive + * @type Boolean + * @readOnly + * @private + */ + this._interactive = false; + + /** + * This is the cursor that will be used when the mouse is over this object. To enable this the element must have interaction = true and buttonMode = true + * + * @property defaultCursor + * @type String + * + */ + this.defaultCursor = 'pointer'; + + /** + * [read-only] Current transform of the object based on world (parent) factors + * + * @property worldTransform + * @type Matrix + * @readOnly + * @private + */ + this.worldTransform = new PIXI.Matrix(); + + /** + * cached sin rotation and cos rotation + * + * @property _sr + * @type Number + * @private + */ + this._sr = 0; + + /** + * cached sin rotation and cos rotation + * + * @property _cr + * @type Number + * @private + */ + this._cr = 1; + + /** + * The area the filter is applied to like the hitArea this is used as more of an optimisation + * rather than figuring out the dimensions of the displayObject each frame you can set this rectangle + * + * @property filterArea + * @type Rectangle + */ + this.filterArea = null;//new PIXI.Rectangle(0,0,1,1); + + /** + * The original, cached bounds of the object + * + * @property _bounds + * @type Rectangle + * @private + */ + this._bounds = new PIXI.Rectangle(0, 0, 1, 1); + + /** + * The most up-to-date bounds of the object + * + * @property _currentBounds + * @type Rectangle + * @private + */ + this._currentBounds = null; + + /** + * The original, cached mask of the object + * + * @property _currentBounds + * @type Rectangle + * @private + */ + this._mask = null; + + /** + * Cached internal flag. + * + * @property _cacheAsBitmap + * @type Boolean + * @private + */ + this._cacheAsBitmap = false; + + /** + * Cached internal flag. + * + * @property _cacheIsDirty + * @type Boolean + * @private + */ + this._cacheIsDirty = false; + + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + //Left button + /** + * A callback that is used when the users clicks on the displayObject with their mouse's left button + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse's left button down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse's left button that was over the displayObject + * for this callback to be fired, the mouse's left button must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse's left button that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, the mouse's left button must have been pressed down over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + //Right button + /** + * A callback that is used when the users clicks on the displayObject with their mouse's right button + * @method rightclick + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse's right button down over the sprite + * @method rightdown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse's right button that was over the displayObject + * for this callback to be fired the mouse's right button must have been pressed down over the displayObject + * @method rightup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse's right button that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, the mouse's right button must have been pressed down over the displayObject + * @method rightupoutside + * @param interactionData {InteractionData} + */ + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touches over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +}; + +// constructor +PIXI.DisplayObject.prototype.constructor = PIXI.DisplayObject; + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * + * @property interactive + * @type Boolean + * @default false + */ +Object.defineProperty(PIXI.DisplayObject.prototype, 'interactive', { + get: function() { + return this._interactive; + }, + set: function(value) { + this._interactive = value; + + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; + } +}); + +/** + * [read-only] Indicates if the sprite is globally visible. + * + * @property worldVisible + * @type Boolean + */ +Object.defineProperty(PIXI.DisplayObject.prototype, 'worldVisible', { + get: function() { + var item = this; + + do + { + if(!item.visible)return false; + item = item.parent; + } + while(item); + + return true; + } +}); + +/** + * Sets a mask for the displayObject. A mask is an object that limits the visibility of an object to the shape of the mask applied to it. + * In PIXI a regular mask must be a PIXI.Graphics object. This allows for much faster masking in canvas as it utilises shape clipping. + * To remove a mask, set this property to null. + * + * @property mask + * @type Graphics + */ +Object.defineProperty(PIXI.DisplayObject.prototype, 'mask', { + get: function() { + return this._mask; + }, + set: function(value) { + + if(this._mask)this._mask.isMask = false; + this._mask = value; + if(this._mask)this._mask.isMask = true; + } +}); + +/** + * Sets the filters for the displayObject. + * * IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. + * To remove filters simply set this property to 'null' + * @property filters + * @type Array(Filter) + */ +Object.defineProperty(PIXI.DisplayObject.prototype, 'filters', { + + get: function() { + return this._filters; + }, + + set: function(value) { + + if(value) + { + // now put all the passes in one place.. + var passes = []; + for (var i = 0; i < value.length; i++) + { + var filterPasses = value[i].passes; + for (var j = 0; j < filterPasses.length; j++) + { + passes.push(filterPasses[j]); + } + } + + // TODO change this as it is legacy + this._filterBlock = {target:this, filterPasses:passes}; + } + + this._filters = value; + } +}); + +/** + * Set if this display object is cached as a bitmap. + * This basically takes a snap shot of the display object as it is at that moment. It can provide a performance benefit for complex static displayObjects. + * To remove simply set this property to 'null' + * @property cacheAsBitmap + * @type Boolean + */ +Object.defineProperty(PIXI.DisplayObject.prototype, 'cacheAsBitmap', { + + get: function() { + return this._cacheAsBitmap; + }, + + set: function(value) { + + if(this._cacheAsBitmap === value)return; + + if(value) + { + this._generateCachedSprite(); + } + else + { + this._destroyCachedSprite(); + } + + this._cacheAsBitmap = value; + } +}); + +/* + * Updates the object transform for rendering + * + * @method updateTransform + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // create some matrix refs for easy access + var pt = this.parent.worldTransform; + var wt = this.worldTransform; + + // temporary matrix variables + var a, b, c, d, tx, ty; + + // so if rotation is between 0 then we can simplify the multiplication process.. + if(this.rotation % PIXI.PI_2) + { + // check to see if the rotation is the same as the previous render. This means we only need to use sin and cos when rotation actually changes + if(this.rotation !== this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + // get the matrix values of the displayobject based on its transform properties.. + a = this._cr * this.scale.x; + b = this._sr * this.scale.x; + c = -this._sr * this.scale.y; + d = this._cr * this.scale.y; + tx = this.position.x; + ty = this.position.y; + + // check for pivot.. not often used so geared towards that fact! + if(this.pivot.x || this.pivot.y) + { + tx -= this.pivot.x * a + this.pivot.y * c; + ty -= this.pivot.x * b + this.pivot.y * d; + } + + // concat the parent matrix with the objects transform. + wt.a = a * pt.a + b * pt.c; + wt.b = a * pt.b + b * pt.d; + wt.c = c * pt.a + d * pt.c; + wt.d = c * pt.b + d * pt.d; + wt.tx = tx * pt.a + ty * pt.c + pt.tx; + wt.ty = tx * pt.b + ty * pt.d + pt.ty; + + + } + else + { + // lets do the fast version as we know there is no rotation.. + a = this.scale.x; + d = this.scale.y; + + tx = this.position.x - this.pivot.x * a; + ty = this.position.y - this.pivot.y * d; + + wt.a = a * pt.a; + wt.b = a * pt.b; + wt.c = d * pt.c; + wt.d = d * pt.d; + wt.tx = tx * pt.a + ty * pt.c + pt.tx; + wt.ty = tx * pt.b + ty * pt.d + pt.ty; + } + + // multiply the alphas.. + this.worldAlpha = this.alpha * this.parent.worldAlpha; +}; + +// performance increase to avoid using call.. (10x faster) +PIXI.DisplayObject.prototype.displayObjectUpdateTransform = PIXI.DisplayObject.prototype.updateTransform; + +/** + * Retrieves the bounds of the displayObject as a rectangle object + * + * @method getBounds + * @param matrix {Matrix} + * @return {Rectangle} the rectangular bounding area + */ +PIXI.DisplayObject.prototype.getBounds = function(matrix) +{ + matrix = matrix;//just to get passed js hinting (and preserve inheritance) + return PIXI.EmptyRectangle; +}; + +/** + * Retrieves the local bounds of the displayObject as a rectangle object + * + * @method getLocalBounds + * @return {Rectangle} the rectangular bounding area + */ +PIXI.DisplayObject.prototype.getLocalBounds = function() +{ + return this.getBounds(PIXI.identityMatrix);///PIXI.EmptyRectangle(); +}; + +/** + * Sets the object's stage reference, the stage this object is connected to + * + * @method setStageReference + * @param stage {Stage} the stage that the object will have as its current stage reference + */ +PIXI.DisplayObject.prototype.setStageReference = function(stage) +{ + this.stage = stage; + if(this._interactive)this.stage.dirty = true; +}; + +/** + * Useful function that returns a texture of the displayObject object that can then be used to create sprites + * This can be quite useful if your displayObject is static / complicated and needs to be reused multiple times. + * + * @method generateTexture + * @param resolution {Number} The resolution of the texture being generated + * @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values + * @param renderer {CanvasRenderer|WebGLRenderer} The renderer used to generate the texture. + * @return {Texture} a texture of the graphics object + */ +PIXI.DisplayObject.prototype.generateTexture = function(resolution, scaleMode, renderer) +{ + var bounds = this.getLocalBounds(); + + var renderTexture = new PIXI.RenderTexture(bounds.width | 0, bounds.height | 0, renderer, scaleMode, resolution); + + PIXI.DisplayObject._tempMatrix.tx = -bounds.x; + PIXI.DisplayObject._tempMatrix.ty = -bounds.y; + + renderTexture.render(this, PIXI.DisplayObject._tempMatrix); + + return renderTexture; +}; + +/** + * Generates and updates the cached sprite for this object. + * + * @method updateCache + */ +PIXI.DisplayObject.prototype.updateCache = function() +{ + this._generateCachedSprite(); +}; + +/** + * Calculates the global position of the display object + * + * @method toGlobal + * @param position {Point} The world origin to calculate from + * @return {Point} A point object representing the position of this object + */ +PIXI.DisplayObject.prototype.toGlobal = function(position) +{ + // don't need to u[date the lot + this.displayObjectUpdateTransform(); + return this.worldTransform.apply(position); +}; + +/** + * Calculates the local position of the display object relative to another point + * + * @method toLocal + * @param position {Point} The world origin to calculate from + * @param [from] {DisplayObject} The DisplayObject to calculate the global position from + * @return {Point} A point object representing the position of this object + */ +PIXI.DisplayObject.prototype.toLocal = function(position, from) +{ + // + if (from) + { + position = from.toGlobal(position); + } + + // don't need to u[date the lot + this.displayObjectUpdateTransform(); + return this.worldTransform.applyInverse(position); +}; + +/** + * Internal method. + * + * @method _renderCachedSprite + * @param renderSession {Object} The render session + * @private + */ +PIXI.DisplayObject.prototype._renderCachedSprite = function(renderSession) +{ + this._cachedSprite.worldAlpha = this.worldAlpha; + + if(renderSession.gl) + { + PIXI.Sprite.prototype._renderWebGL.call(this._cachedSprite, renderSession); + } + else + { + PIXI.Sprite.prototype._renderCanvas.call(this._cachedSprite, renderSession); + } +}; + +/** + * Internal method. + * + * @method _generateCachedSprite + * @private + */ +PIXI.DisplayObject.prototype._generateCachedSprite = function() +{ + this._cacheAsBitmap = false; + var bounds = this.getLocalBounds(); + + if(!this._cachedSprite) + { + var renderTexture = new PIXI.RenderTexture(bounds.width | 0, bounds.height | 0);//, renderSession.renderer); + + this._cachedSprite = new PIXI.Sprite(renderTexture); + this._cachedSprite.worldTransform = this.worldTransform; + } + else + { + this._cachedSprite.texture.resize(bounds.width | 0, bounds.height | 0); + } + + //REMOVE filter! + var tempFilters = this._filters; + this._filters = null; + + this._cachedSprite.filters = tempFilters; + + PIXI.DisplayObject._tempMatrix.tx = -bounds.x; + PIXI.DisplayObject._tempMatrix.ty = -bounds.y; + + this._cachedSprite.texture.render(this, PIXI.DisplayObject._tempMatrix, true); + + this._cachedSprite.anchor.x = -( bounds.x / bounds.width ); + this._cachedSprite.anchor.y = -( bounds.y / bounds.height ); + + this._filters = tempFilters; + + this._cacheAsBitmap = true; +}; + +/** +* Destroys the cached sprite. +* +* @method _destroyCachedSprite +* @private +*/ +PIXI.DisplayObject.prototype._destroyCachedSprite = function() +{ + if(!this._cachedSprite)return; + + this._cachedSprite.texture.destroy(true); + + // TODO could be object pooled! + this._cachedSprite = null; +}; + +/** +* Renders the object using the WebGL renderer +* +* @method _renderWebGL +* @param renderSession {RenderSession} +* @private +*/ +PIXI.DisplayObject.prototype._renderWebGL = function(renderSession) +{ + // OVERWRITE; + // this line is just here to pass jshinting :) + renderSession = renderSession; +}; + +/** +* Renders the object using the Canvas renderer +* +* @method _renderCanvas +* @param renderSession {RenderSession} +* @private +*/ +PIXI.DisplayObject.prototype._renderCanvas = function(renderSession) +{ + // OVERWRITE; + // this line is just here to pass jshinting :) + renderSession = renderSession; +}; + + +PIXI.DisplayObject._tempMatrix = new PIXI.Matrix(); + +/** + * The position of the displayObject on the x axis relative to the local coordinates of the parent. + * + * @property x + * @type Number + */ +Object.defineProperty(PIXI.DisplayObject.prototype, 'x', { + get: function() { + return this.position.x; + }, + set: function(value) { + this.position.x = value; + } +}); + +/** + * The position of the displayObject on the y axis relative to the local coordinates of the parent. + * + * @property y + * @type Number + */ +Object.defineProperty(PIXI.DisplayObject.prototype, 'y', { + get: function() { + return this.position.y; + }, + set: function(value) { + this.position.y = value; + } +}); + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A DisplayObjectContainer represents a collection of display objects. + * It is the base class of all display objects that act as a container for other objects. + * + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The array of children of this container. + * + * @property children + * @type Array(DisplayObject) + * @readOnly + */ + this.children = []; + + // fast access to update transform.. + +}; + +// constructor +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); +PIXI.DisplayObjectContainer.prototype.constructor = PIXI.DisplayObjectContainer; + + +/** + * The width of the displayObjectContainer, setting this will actually modify the scale to achieve the value set + * + * @property width + * @type Number + */ +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'width', { + get: function() { + return this.scale.x * this.getLocalBounds().width; + }, + set: function(value) { + + var width = this.getLocalBounds().width; + + if(width !== 0) + { + this.scale.x = value / width; + } + else + { + this.scale.x = 1; + } + + + this._width = value; + } +}); + +/** + * The height of the displayObjectContainer, setting this will actually modify the scale to achieve the value set + * + * @property height + * @type Number + */ +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'height', { + get: function() { + return this.scale.y * this.getLocalBounds().height; + }, + set: function(value) { + + var height = this.getLocalBounds().height; + + if(height !== 0) + { + this.scale.y = value / height ; + } + else + { + this.scale.y = 1; + } + + this._height = value; + } +}); + +/** + * Adds a child to the container. + * + * @method addChild + * @param child {DisplayObject} The DisplayObject to add to the container + * @return {DisplayObject} The child that was added. + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + return this.addChildAt(child, this.children.length); +}; + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * + * @method addChildAt + * @param child {DisplayObject} The child to add + * @param index {Number} The index to place the child in + * @return {DisplayObject} The child that was added. + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent) + { + child.parent.removeChild(child); + } + + child.parent = this; + + this.children.splice(index, 0, child); + + if(this.stage)child.setStageReference(this.stage); + + return child; + } + else + { + throw new Error(child + 'addChildAt: The index '+ index +' supplied is out of bounds ' + this.children.length); + } +}; + +/** + * Swaps the position of 2 Display Objects within this container. + * + * @method swapChildren + * @param child {DisplayObject} + * @param child2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + if(child === child2) { + return; + } + + var index1 = this.getChildIndex(child); + var index2 = this.getChildIndex(child2); + + if(index1 < 0 || index2 < 0) { + throw new Error('swapChildren: Both the supplied DisplayObjects must be a child of the caller.'); + } + + this.children[index1] = child2; + this.children[index2] = child; + +}; + +/** + * Returns the index position of a child DisplayObject instance + * + * @method getChildIndex + * @param child {DisplayObject} The DisplayObject instance to identify + * @return {Number} The index position of the child display object to identify + */ +PIXI.DisplayObjectContainer.prototype.getChildIndex = function(child) +{ + var index = this.children.indexOf(child); + if (index === -1) + { + throw new Error('The supplied DisplayObject must be a child of the caller'); + } + return index; +}; + +/** + * Changes the position of an existing child in the display object container + * + * @method setChildIndex + * @param child {DisplayObject} The child DisplayObject instance for which you want to change the index number + * @param index {Number} The resulting index number for the child display object + */ +PIXI.DisplayObjectContainer.prototype.setChildIndex = function(child, index) +{ + if (index < 0 || index >= this.children.length) + { + throw new Error('The supplied index is out of bounds'); + } + var currentIndex = this.getChildIndex(child); + this.children.splice(currentIndex, 1); //remove from old position + this.children.splice(index, 0, child); //add at new position +}; + +/** + * Returns the child at the specified index + * + * @method getChildAt + * @param index {Number} The index to get the child from + * @return {DisplayObject} The child at the given index, if any. + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if (index < 0 || index >= this.children.length) + { + throw new Error('getChildAt: Supplied index '+ index +' does not exist in the child list, or the supplied DisplayObject must be a child of the caller'); + } + return this.children[index]; + +}; + +/** + * Removes a child from the container. + * + * @method removeChild + * @param child {DisplayObject} The DisplayObject to remove + * @return {DisplayObject} The child that was removed. + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + if(index === -1)return; + + return this.removeChildAt( index ); +}; + +/** + * Removes a child from the specified index position. + * + * @method removeChildAt + * @param index {Number} The index to get the child from + * @return {DisplayObject} The child that was removed. + */ +PIXI.DisplayObjectContainer.prototype.removeChildAt = function(index) +{ + var child = this.getChildAt( index ); + if(this.stage) + child.removeStageReference(); + + child.parent = undefined; + this.children.splice( index, 1 ); + return child; +}; + +/** +* Removes all children from this container that are within the begin and end indexes. +* +* @method removeChildren +* @param beginIndex {Number} The beginning position. Default value is 0. +* @param endIndex {Number} The ending position. Default value is size of the container. +*/ +PIXI.DisplayObjectContainer.prototype.removeChildren = function(beginIndex, endIndex) +{ + var begin = beginIndex || 0; + var end = typeof endIndex === 'number' ? endIndex : this.children.length; + var range = end - begin; + + if (range > 0 && range <= end) + { + var removed = this.children.splice(begin, range); + for (var i = 0; i < removed.length; i++) { + var child = removed[i]; + if(this.stage) + child.removeStageReference(); + child.parent = undefined; + } + return removed; + } + else if (range === 0 && this.children.length === 0) + { + return []; + } + else + { + throw new Error( 'removeChildren: Range Error, numeric values are outside the acceptable range' ); + } +}; + +/* + * Updates the transform on all children of this container for rendering + * + * @method updateTransform + * @private + */ +PIXI.DisplayObjectContainer.prototype.updateTransform = function() +{ + if(!this.visible)return; + + this.displayObjectUpdateTransform(); + + //PIXI.DisplayObject.prototype.updateTransform.call( this ); + + if(this._cacheAsBitmap)return; + + for(var i=0,j=this.children.length; i childMaxX ? maxX : childMaxX; + maxY = maxY > childMaxY ? maxY : childMaxY; + } + + if(!childVisible) + return PIXI.EmptyRectangle; + + var bounds = this._bounds; + + bounds.x = minX; + bounds.y = minY; + bounds.width = maxX - minX; + bounds.height = maxY - minY; + + // TODO: store a reference so that if this function gets called again in the render cycle we do not have to recalculate + //this._currentBounds = bounds; + + return bounds; +}; + +/** + * Retrieves the non-global local bounds of the displayObjectContainer as a rectangle. The calculation takes all visible children into consideration. + * + * @method getLocalBounds + * @return {Rectangle} The rectangular bounding area + */ +PIXI.DisplayObjectContainer.prototype.getLocalBounds = function() +{ + var matrixCache = this.worldTransform; + + this.worldTransform = PIXI.identityMatrix; + + for(var i=0,j=this.children.length; i maxX ? x1 : maxX; + maxX = x2 > maxX ? x2 : maxX; + maxX = x3 > maxX ? x3 : maxX; + maxX = x4 > maxX ? x4 : maxX; + + maxY = y1 > maxY ? y1 : maxY; + maxY = y2 > maxY ? y2 : maxY; + maxY = y3 > maxY ? y3 : maxY; + maxY = y4 > maxY ? y4 : maxY; + } + + var bounds = this._bounds; + + bounds.x = minX; + bounds.width = maxX - minX; + + bounds.y = minY; + bounds.height = maxY - minY; + + // store a reference so that if this function gets called again in the render cycle we do not have to recalculate + this._currentBounds = bounds; + + return bounds; +}; + +/** +* Renders the object using the WebGL renderer +* +* @method _renderWebGL +* @param renderSession {RenderSession} +* @private +*/ +PIXI.Sprite.prototype._renderWebGL = function(renderSession) +{ + // if the sprite is not visible or the alpha is 0 then no need to render this element + if(!this.visible || this.alpha <= 0)return; + + var i,j; + + // do a quick check to see if this element has a mask or a filter. + if(this._mask || this._filters) + { + var spriteBatch = renderSession.spriteBatch; + + // push filter first as we need to ensure the stencil buffer is correct for any masking + if(this._filters) + { + spriteBatch.flush(); + renderSession.filterManager.pushFilter(this._filterBlock); + } + + if(this._mask) + { + spriteBatch.stop(); + renderSession.maskManager.pushMask(this.mask, renderSession); + spriteBatch.start(); + } + + // add this sprite to the batch + spriteBatch.render(this); + + // now loop through the children and make sure they get rendered + for(i=0,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +}; + +/** + * A short hand way of creating a movieclip from an array of frame ids + * + * @static + * @method fromFrames + * @param frames {Array} the array of frames ids the movieclip will use as its texture frames + * @return {MovieClip} + */ +PIXI.MovieClip.fromFrames = function(frames) +{ + var textures = []; + + for (var i = 0; i < frames.length; i++) + { + textures.push(new PIXI.Texture.fromFrame(frames[i])); + } + + return new PIXI.MovieClip(textures); +}; + +/** + * A short hand way of creating a movieclip from an array of image ids + * + * @static + * @method fromImages + * @param frames {Array} the array of image ids the movieclip will use as its texture frames + * @return {MovieClip} + */ +PIXI.MovieClip.fromImages = function(images) +{ + var textures = []; + + for (var i = 0; i < images.length; i++) + { + textures.push(new PIXI.Texture.fromImage(images[i])); + } + + return new PIXI.MovieClip(textures); +}; + +/** + * A short hand way of creating a movieclip from frames number, frame base name, frame number padding and image extension + * + * @static + * @method fromSettings + * @param framesNum {Number} Number of movieclip frames + * @param baseName {String} Base name of each frame. + * @param padding {String} Frames number padding (when each frame is something like 0000, 0001, 0002, 0003, etc. - padding 0000) + * @param firstFrame {Number} Which is first frame. Default is 0. + * @param frameExtension {String} Extension added to each frame's name. + * @return {MovieClip} + */ +PIXI.MovieClip.fromSettings = function( framesNum, baseName, padding, firstFrame, frameExtension ) +{ + var textures = []; + + var generateFrameName = function( frame ) { + var name = baseName; + if (padding) { + name += padding.substring(0, padding.length - frame.length) + frame; + } + if (frameExtension) { + name += frameExtension; + } + return name; + }; + + for (var i = firstFrame || 0; i < framesNum; i++) { + textures.push(PIXI.Texture.fromFrame( generateFrameName( i.toString() ) )); + } + + return new PIXI.MovieClip(textures); +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A target and pass info object for filters. + * + * @class FilterBlock + * @constructor + */ +PIXI.FilterBlock = function() +{ + /** + * The visible state of this FilterBlock. + * + * @property visible + * @type Boolean + */ + this.visible = true; + + /** + * The renderable state of this FilterBlock. + * + * @property renderable + * @type Boolean + */ + this.renderable = true; +}; + +PIXI.FilterBlock.prototype.constructor = PIXI.FilterBlock; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * Modified by Tom Slezakowski http://www.tomslezakowski.com @TomSlezakowski (24/03/2014) - Added dropShadowColor. + */ + +/** + * A Text Object will create a line or multiple lines of text. To split a line you can use '\n' in your text string, + * or add a wordWrap property set to true and and wordWrapWidth property with a value in the style object. + * + * @class Text + * @extends Sprite + * @constructor + * @param text {String} The copy that you would like the text to display + * @param [style] {Object} The style parameters + * @param [style.font] {String} default 'bold 20px Arial' The style and size of the font + * @param [style.fill='black'] {String|Number} A canvas fillstyle that will be used on the text e.g 'red', '#00FF00' + * @param [style.align='left'] {String} Alignment for multiline text ('left', 'center' or 'right'), does not affect single line text + * @param [style.stroke] {String|Number} A canvas fillstyle that will be used on the text stroke e.g 'blue', '#FCFF00' + * @param [style.strokeThickness=0] {Number} A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param [style.wordWrap=false] {Boolean} Indicates if word wrap should be used + * @param [style.wordWrapWidth=100] {Number} The width at which text will wrap, it needs wordWrap to be set to true + * @param [style.dropShadow=false] {Boolean} Set a drop shadow for the text + * @param [style.dropShadowColor='#000000'] {String} A fill style to be used on the dropshadow e.g 'red', '#00FF00' + * @param [style.dropShadowAngle=Math.PI/4] {Number} Set a angle of the drop shadow + * @param [style.dropShadowDistance=5] {Number} Set a distance of the drop shadow + * @param [style.lineJoin='miter'] {String} The lineJoin property sets the type of corner created, it can resolve spiked text issue. Default is 'miter' (creates a sharp corner). + */ +PIXI.Text = function(text, style) +{ + /** + * The canvas element that everything is drawn to + * + * @property canvas + * @type HTMLCanvasElement + */ + this.canvas = document.createElement('canvas'); + + /** + * The canvas 2d context that everything is drawn with + * @property context + * @type CanvasRenderingContext2D + */ + this.context = this.canvas.getContext('2d'); + + /** + * The resolution of the canvas. + * @property resolution + * @type Number + */ + this.resolution = 1; + + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + +}; + +// constructor +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); +PIXI.Text.prototype.constructor = PIXI.Text; + +/** + * The width of the Text, setting this will actually modify the scale to achieve the value set + * + * @property width + * @type Number + */ +Object.defineProperty(PIXI.Text.prototype, 'width', { + get: function() { + + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + + return this.scale.x * this.texture.frame.width; + }, + set: function(value) { + this.scale.x = value / this.texture.frame.width; + this._width = value; + } +}); + +/** + * The height of the Text, setting this will actually modify the scale to achieve the value set + * + * @property height + * @type Number + */ +Object.defineProperty(PIXI.Text.prototype, 'height', { + get: function() { + + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + + return this.scale.y * this.texture.frame.height; + }, + set: function(value) { + this.scale.y = value / this.texture.frame.height; + this._height = value; + } +}); + +/** + * Set the style of the text + * + * @method setStyle + * @param [style] {Object} The style parameters + * @param [style.font='bold 20pt Arial'] {String} The style and size of the font + * @param [style.fill='black'] {Object} A canvas fillstyle that will be used on the text eg 'red', '#00FF00' + * @param [style.align='left'] {String} Alignment for multiline text ('left', 'center' or 'right'), does not affect single line text + * @param [style.stroke='black'] {String} A canvas fillstyle that will be used on the text stroke eg 'blue', '#FCFF00' + * @param [style.strokeThickness=0] {Number} A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param [style.wordWrap=false] {Boolean} Indicates if word wrap should be used + * @param [style.wordWrapWidth=100] {Number} The width at which text will wrap + * @param [style.dropShadow=false] {Boolean} Set a drop shadow for the text + * @param [style.dropShadowColor='#000000'] {String} A fill style to be used on the dropshadow e.g 'red', '#00FF00' + * @param [style.dropShadowAngle=Math.PI/4] {Number} Set a angle of the drop shadow + * @param [style.dropShadowDistance=5] {Number} Set a distance of the drop shadow + * @param [style.lineJoin='miter'] {String} The lineJoin property sets the type of corner created, it can resolve spiked text issue. Default is 'miter' (creates a sharp corner). + * @param [style.lineHeight] {number} Line height of the text + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || 'bold 20pt Arial'; + style.fill = style.fill || 'black'; + style.align = style.align || 'left'; + style.stroke = style.stroke || 'black'; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + + style.dropShadow = style.dropShadow || false; + style.dropShadowAngle = style.dropShadowAngle || Math.PI / 6; + style.dropShadowDistance = style.dropShadowDistance || 4; + style.dropShadowColor = style.dropShadowColor || 'black'; + style.lineJoin = style.lineJoin || 'miter'; + style.lineHeight = style.lineHeight || false; + + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use '\n'. + * + * @method setText + * @param text {String} The copy that you would like the text to display + */ +PIXI.Text.prototype.setText = function(text) +{ + this.text = text.toString() || ' '; + this.dirty = true; +}; + +/** + * Renders text and updates it when needed + * + * @method updateText + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.texture.baseTexture.resolution = this.resolution; + + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + var fontProperties = this.determineFontProperties(this.style.font); + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + + var width = maxLineWidth + this.style.strokeThickness; + if(this.style.dropShadow)width += this.style.dropShadowDistance; + + this.canvas.width = ( width + this.context.lineWidth ) * this.resolution; + + //calculate text height + var lineHeight = this.style.lineHeight || fontProperties.fontSize + this.style.strokeThickness; + + var height = lineHeight * lines.length; + if(this.style.dropShadow)height += this.style.dropShadowDistance; + + this.canvas.height = height * this.resolution; + + this.context.scale( this.resolution, this.resolution); + + if(navigator.isCocoonJS) this.context.clearRect(0,0,this.canvas.width,this.canvas.height); + + // used for debugging.. + //this.context.fillStyle ="#FF0000" + //this.context.fillRect(0, 0, this.canvas.width,this.canvas.height); + + this.context.font = this.style.font; + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + this.context.textBaseline = 'alphabetic'; + this.context.lineJoin = this.style.lineJoin; + + var linePositionX; + var linePositionY; + + if(this.style.dropShadow) + { + this.context.fillStyle = this.style.dropShadowColor; + + var xShadowOffset = Math.sin(this.style.dropShadowAngle) * this.style.dropShadowDistance; + var yShadowOffset = Math.cos(this.style.dropShadowAngle) * this.style.dropShadowDistance; + + for (i = 0; i < lines.length; i++) + { + linePositionX = this.style.strokeThickness / 2; + linePositionY = (this.style.strokeThickness / 2 + i * lineHeight) + fontProperties.ascent; + + if(this.style.align === 'right') + { + linePositionX += maxLineWidth - lineWidths[i]; + } + else if(this.style.align === 'center') + { + linePositionX += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePositionX + xShadowOffset, linePositionY + yShadowOffset); + } + + // if(dropShadow) + } + } + + //set canvas text styles + this.context.fillStyle = this.style.fill; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + linePositionX = this.style.strokeThickness / 2; + linePositionY = (this.style.strokeThickness / 2 + i * lineHeight) + fontProperties.ascent; + + if(this.style.align === 'right') + { + linePositionX += maxLineWidth - lineWidths[i]; + } + else if(this.style.align === 'center') + { + linePositionX += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePositionX, linePositionY); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePositionX, linePositionY); + } + + // if(dropShadow) + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * + * @method updateTexture + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.crop.width = this.texture.frame.width = this.canvas.width; + this.texture.crop.height = this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + // update the dirty base textures + this.texture.baseTexture.dirty(); +}; + +/** +* Renders the object using the WebGL renderer +* +* @method _renderWebGL +* @param renderSession {RenderSession} +* @private +*/ +PIXI.Text.prototype._renderWebGL = function(renderSession) +{ + if(this.dirty) + { + this.resolution = renderSession.resolution; + + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype._renderWebGL.call(this, renderSession); +}; + +/** +* Renders the object using the Canvas renderer +* +* @method _renderCanvas +* @param renderSession {RenderSession} +* @private +*/ +PIXI.Text.prototype._renderCanvas = function(renderSession) +{ + if(this.dirty) + { + this.resolution = renderSession.resolution; + + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype._renderCanvas.call(this, renderSession); +}; + +/** +* Calculates the ascent, descent and fontSize of a given fontStyle +* +* @method determineFontProperties +* @param fontStyle {Object} +* @private +*/ +PIXI.Text.prototype.determineFontProperties = function(fontStyle) +{ + var properties = PIXI.Text.fontPropertiesCache[fontStyle]; + + if(!properties) + { + properties = {}; + + var canvas = PIXI.Text.fontPropertiesCanvas; + var context = PIXI.Text.fontPropertiesContext; + + context.font = fontStyle; + + var width = Math.ceil(context.measureText('|Mq').width); + var baseline = Math.ceil(context.measureText('M').width); + var height = 2 * baseline; + + baseline = baseline * 1.4 | 0; + + canvas.width = width; + canvas.height = height; + + context.fillStyle = '#f00'; + context.fillRect(0, 0, width, height); + + context.font = fontStyle; + + context.textBaseline = 'alphabetic'; + context.fillStyle = '#000'; + context.fillText('|MÉq', 0, baseline); + + var imagedata = context.getImageData(0, 0, width, height).data; + var pixels = imagedata.length; + var line = width * 4; + + var i, j; + + var idx = 0; + var stop = false; + + // ascent. scan from top to bottom until we find a non red pixel + for(i = 0; i < baseline; i++) + { + for(j = 0; j < line; j += 4) + { + if(imagedata[idx + j] !== 255) + { + stop = true; + break; + } + } + if(!stop) + { + idx += line; + } + else + { + break; + } + } + + properties.ascent = baseline - i; + + idx = pixels - line; + stop = false; + + // descent. scan from bottom to top until we find a non red pixel + for(i = height; i > baseline; i--) + { + for(j = 0; j < line; j += 4) + { + if(imagedata[idx + j] !== 255) + { + stop = true; + break; + } + } + if(!stop) + { + idx -= line; + } + else + { + break; + } + } + + properties.descent = i - baseline; + //TODO might need a tweak. kind of a temp fix! + properties.descent += 6; + properties.fontSize = properties.ascent + properties.descent; + + PIXI.Text.fontPropertiesCache[fontStyle] = properties; + } + + return properties; +}; + +/** + * Applies newlines to a string to have it optimally fit into the horizontal + * bounds set by the Text object's wordWrapWidth property. + * + * @method wordWrap + * @param text {String} + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // Greedy wrapping algorithm that will wrap words as the line grows longer + // than its horizontal bounds. + var result = ''; + var lines = text.split('\n'); + for (var i = 0; i < lines.length; i++) + { + var spaceLeft = this.style.wordWrapWidth; + var words = lines[i].split(' '); + for (var j = 0; j < words.length; j++) + { + var wordWidth = this.context.measureText(words[j]).width; + var wordWidthWithSpace = wordWidth + this.context.measureText(' ').width; + if(j === 0 || wordWidthWithSpace > spaceLeft) + { + // Skip printing the newline if it's the first word of the line that is + // greater than the word wrap width. + if(j > 0) + { + result += '\n'; + } + result += words[j]; + spaceLeft = this.style.wordWrapWidth - wordWidth; + } + else + { + spaceLeft -= wordWidthWithSpace; + result += ' ' + words[j]; + } + } + + if (i < lines.length-1) + { + result += '\n'; + } + } + return result; +}; + +/** +* Returns the bounds of the Text as a rectangle. The bounds calculation takes the worldTransform into account. +* +* @method getBounds +* @param matrix {Matrix} the transformation matrix of the Text +* @return {Rectangle} the framing rectangle +*/ +PIXI.Text.prototype.getBounds = function(matrix) +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + return PIXI.Sprite.prototype.getBounds.call(this, matrix); +}; + +/** + * Destroys this text object. + * + * @method destroy + * @param destroyBaseTexture {Boolean} whether to destroy the base texture as well + */ +PIXI.Text.prototype.destroy = function(destroyBaseTexture) +{ + // make sure to reset the the context and canvas.. dont want this hanging around in memory! + this.context = null; + this.canvas = null; + + this.texture.destroy(destroyBaseTexture === undefined ? true : destroyBaseTexture); +}; + +PIXI.Text.fontPropertiesCache = {}; +PIXI.Text.fontPropertiesCanvas = document.createElement('canvas'); +PIXI.Text.fontPropertiesContext = PIXI.Text.fontPropertiesCanvas.getContext('2d'); + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A BitmapText object will create a line or multiple lines of text using bitmap font. To split a line you can use '\n', '\r' or '\r\n' in your string. + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param text {String} The copy that you would like the text to display + * @param style {Object} The style parameters + * @param style.font {String} The size (optional) and bitmap font id (required) eq 'Arial' or '20px Arial' (must have loaded previously) + * @param [style.align='left'] {String} Alignment for multiline text ('left', 'center' or 'right'), does not affect single line text + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + /** + * [read-only] The width of the overall text, different from fontSize, + * which is defined in the style object + * + * @property textWidth + * @type Number + * @readOnly + */ + this.textWidth = 0; + + /** + * [read-only] The height of the overall text, different from fontSize, + * which is defined in the style object + * + * @property textHeight + * @type Number + * @readOnly + */ + this.textHeight = 0; + + /** + * @property _pool + * @type Array + * @private + */ + this._pool = []; + + this.setText(text); + this.setStyle(style); + this.updateText(); + + /** + * The dirty state of this object. + * @property dirty + * @type Boolean + */ + this.dirty = false; +}; + +// constructor +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); +PIXI.BitmapText.prototype.constructor = PIXI.BitmapText; + +/** + * Set the text string to be rendered. + * + * @method setText + * @param text {String} The text that you would like displayed + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || ' '; + this.dirty = true; +}; + +/** + * Set the style of the text + * style.font {String} The size (optional) and bitmap font id (required) eq 'Arial' or '20px Arial' (must have loaded previously) + * [style.align='left'] {String} Alignment for multiline text ('left', 'center' or 'right'), does not affect single lines of text + * + * @method setStyle + * @param style {Object} The style parameters, contained as properties of an object + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || 'left'; + this.style = style; + + var font = style.font.split(' '); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; + this.tint = style.tint; +}; + +/** + * Renders text and updates it when needed + * + * @method updateText + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + + if(!charData) continue; + + if(prevCharCode && charData.kerning[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align === 'right') + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align === 'center') + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + var lenChildren = this.children.length; + var lenChars = chars.length; + var tint = this.tint || 0xFFFFFF; + + for(i = 0; i < lenChars; i++) + { + var c = i < lenChildren ? this.children[i] : this._pool.pop(); // get old child if have. if not - take from pool. + + if (c) c.setTexture(chars[i].texture); // check if got one before. + else c = new PIXI.Sprite(chars[i].texture); // if no create new one. + + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + c.tint = tint; + if (!c.parent) this.addChild(c); + } + + // remove unnecessary children. + // and put their into the pool. + while(this.children.length > lenChars) + { + var child = this.getChildAt(this.children.length - 1); + this._pool.push(child); + this.removeChild(child); + } + + this.textWidth = maxLineWidth * scale; + this.textHeight = (pos.y + data.lineHeight) * scale; +}; + +/** + * Updates the transform of this object + * + * @method updateTransform + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * Holds all information related to an Interaction event + * + * @class InteractionData + * @constructor + */ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * + * @property target + * @type Sprite + */ + this.target = null; + + /** + * When passed to an event handler, this will be the original DOM Event that was captured + * + * @property originalEvent + * @type Event + */ + this.originalEvent = null; +}; + +/** + * This will return the local coordinates of the specified displayObject for this InteractionData + * + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @param [point] {Point} A Point object in which to store the value, optional (otherwise will create a new point) + * param [globalPos] {Point} A Point object containing your custom global coords, optional (otherwise will use the current global coords) + * @return {Point} A point containing the coordinates of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject, point, globalPos) +{ + var worldTransform = displayObject.worldTransform; + var global = globalPos ? globalPos : this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform.a, a01 = worldTransform.c, a02 = worldTransform.tx, + a10 = worldTransform.b, a11 = worldTransform.d, a12 = worldTransform.ty, + id = 1 / (a00 * a11 + a01 * -a10); + + point = point || new PIXI.Point(); + + point.x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + point.y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + // set the mouse coords... + return point; +}; + +// constructor +PIXI.InteractionData.prototype.constructor = PIXI.InteractionData; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + /** + * The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive + * if its interactive parameter is set to true + * This manager also supports multitouch. + * + * @class InteractionManager + * @constructor + * @param stage {Stage} The stage to handle interactions + */ +PIXI.InteractionManager = function(stage) +{ + /** + * A reference to the stage + * + * @property stage + * @type Stage + */ + this.stage = stage; + + /** + * The mouse data + * + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * An object that stores current touches (InteractionData) by id reference + * + * @property touches + * @type Object + */ + this.touches = {}; + + /** + * @property tempPoint + * @type Point + * @private + */ + this.tempPoint = new PIXI.Point(); + + /** + * @property mouseoverEnabled + * @type Boolean + * @default + */ + this.mouseoverEnabled = true; + + /** + * Tiny little interactiveData pool ! + * + * @property pool + * @type Array + */ + this.pool = []; + + /** + * An array containing all the iterative items from the our interactive tree + * @property interactiveItems + * @type Array + * @private + */ + this.interactiveItems = []; + + /** + * Our canvas + * @property interactionDOMElement + * @type HTMLCanvasElement + * @private + */ + this.interactionDOMElement = null; + + //this will make it so that you don't have to call bind all the time + + /** + * @property onMouseMove + * @type Function + */ + this.onMouseMove = this.onMouseMove.bind( this ); + + /** + * @property onMouseDown + * @type Function + */ + this.onMouseDown = this.onMouseDown.bind(this); + + /** + * @property onMouseOut + * @type Function + */ + this.onMouseOut = this.onMouseOut.bind(this); + + /** + * @property onMouseUp + * @type Function + */ + this.onMouseUp = this.onMouseUp.bind(this); + + /** + * @property onTouchStart + * @type Function + */ + this.onTouchStart = this.onTouchStart.bind(this); + + /** + * @property onTouchEnd + * @type Function + */ + this.onTouchEnd = this.onTouchEnd.bind(this); + + /** + * @property onTouchCancel + * @type Function + */ + this.onTouchCancel = this.onTouchCancel.bind(this); + + /** + * @property onTouchMove + * @type Function + */ + this.onTouchMove = this.onTouchMove.bind(this); + + /** + * @property last + * @type Number + */ + this.last = 0; + + /** + * The css style of the cursor that is being used + * @property currentCursorStyle + * @type String + */ + this.currentCursorStyle = 'inherit'; + + /** + * Is set to true when the mouse is moved out of the canvas + * @property mouseOut + * @type Boolean + */ + this.mouseOut = false; + + /** + * @property resolution + * @type Number + */ + this.resolution = 1; + + // used for hit testing + this._tempPoint = new PIXI.Point(); +}; + +// constructor +PIXI.InteractionManager.prototype.constructor = PIXI.InteractionManager; + +/** + * Collects an interactive sprite recursively to have their interactions managed + * + * @method collectInteractiveSprite + * @param displayObject {DisplayObject} the displayObject to collect + * @param iParent {DisplayObject} the display object's parent + * @private + */ +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + // make an interaction tree... {item.__interactiveParent} + for (var i = length - 1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if (child._interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if (child.children.length > 0) { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + if (child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + + } +}; + +/** + * Sets the target for event delegation + * + * @method setTarget + * @param target {WebGLRenderer|CanvasRenderer} the renderer to bind events to + * @private + */ +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + this.target = target; + this.resolution = target.resolution; + + // Check if the dom element has been set. If it has don't do anything. + if (this.interactionDOMElement !== null) return; + + this.setTargetDomElement (target.view); +}; + +/** + * Sets the DOM element which will receive mouse/touch events. This is useful for when you have other DOM + * elements on top of the renderers Canvas element. With this you'll be able to delegate another DOM element + * to receive those events + * + * @method setTargetDomElement + * @param domElement {DOMElement} the DOM element which will receive mouse and touch events + * @private + */ +PIXI.InteractionManager.prototype.setTargetDomElement = function(domElement) +{ + this.removeEvents(); + + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + domElement.style['-ms-content-zooming'] = 'none'; + domElement.style['-ms-touch-action'] = 'none'; + } + + this.interactionDOMElement = domElement; + + domElement.addEventListener('mousemove', this.onMouseMove, true); + domElement.addEventListener('mousedown', this.onMouseDown, true); + domElement.addEventListener('mouseout', this.onMouseOut, true); + + // aint no multi touch just yet! + domElement.addEventListener('touchstart', this.onTouchStart, true); + domElement.addEventListener('touchend', this.onTouchEnd, true); + domElement.addEventListener('touchleave', this.onTouchCancel, true); + domElement.addEventListener('touchcancel', this.onTouchCancel, true); + domElement.addEventListener('touchmove', this.onTouchMove, true); + + window.addEventListener('mouseup', this.onMouseUp, true); +}; + +/** + * @method removeEvents + * @private + */ +PIXI.InteractionManager.prototype.removeEvents = function() +{ + if (!this.interactionDOMElement) return; + + this.interactionDOMElement.style['-ms-content-zooming'] = ''; + this.interactionDOMElement.style['-ms-touch-action'] = ''; + + this.interactionDOMElement.removeEventListener('mousemove', this.onMouseMove, true); + this.interactionDOMElement.removeEventListener('mousedown', this.onMouseDown, true); + this.interactionDOMElement.removeEventListener('mouseout', this.onMouseOut, true); + + // aint no multi touch just yet! + this.interactionDOMElement.removeEventListener('touchstart', this.onTouchStart, true); + this.interactionDOMElement.removeEventListener('touchend', this.onTouchEnd, true); + this.interactionDOMElement.removeEventListener('touchleave', this.onTouchCancel, true); + this.interactionDOMElement.removeEventListener('touchcancel', this.onTouchCancel, true); + this.interactionDOMElement.removeEventListener('touchmove', this.onTouchMove, true); + + this.interactionDOMElement = null; + + window.removeEventListener('mouseup', this.onMouseUp, true); +}; + +/** + * updates the state of interactive objects + * + * @method update + * @private + */ +PIXI.InteractionManager.prototype.update = function() +{ + if (!this.target) return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * PIXI.INTERACTION_FREQUENCY ) / 1000; + if (diff < 1) return; + this.last = now; + + var i = 0; + + // ok.. so mouse events?? + // yes for now :) + // OPTIMISE - how often to check?? + if (this.dirty) + { + this.rebuildInteractiveGraph(); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + var cursor = 'inherit'; + var over = false; + + for (i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + // if (item.mouseover || item.mouseout || item.buttonMode) + // { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + this.mouse.target = item; + // ok so deal with interactions.. + // looks like there was a hit! + if (item.__hit && !over) + { + if (item.buttonMode) cursor = item.defaultCursor; + + if (!item.interactiveChildren) + { + over = true; + } + + if (!item.__isOver) + { + if (item.mouseover) + { + item.mouseover (this.mouse); + } + item.__isOver = true; + } + } + else + { + if (item.__isOver) + { + // roll out! + if (item.mouseout) + { + item.mouseout (this.mouse); + } + item.__isOver = false; + } + } + } + + if (this.currentCursorStyle !== cursor) + { + this.currentCursorStyle = cursor; + this.interactionDOMElement.style.cursor = cursor; + } +}; + +/** + * @method rebuildInteractiveGraph + * @private + */ +PIXI.InteractionManager.prototype.rebuildInteractiveGraph = function() +{ + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i = 0; i < len; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if (this.stage.interactive) + { + this.interactiveItems.push(this.stage); + } + + // Go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); +}; + +/** + * Is called when the mouse moves across the renderer element + * + * @method onMouseMove + * @param event {Event} The DOM event of the mouse moving + * @private + */ +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + if (this.dirty) + { + this.rebuildInteractiveGraph(); + } + + this.mouse.originalEvent = event; + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.interactionDOMElement.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width) / this.resolution; + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height) / this.resolution; + + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + // Call the function! + if (item.mousemove) + { + item.mousemove(this.mouse); + } + } +}; + +/** + * Is called when the mouse button is pressed down on the renderer element + * + * @method onMouseDown + * @param event {Event} The DOM event of a mouse button being pressed down + * @private + */ +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + if (this.dirty) + { + this.rebuildInteractiveGraph(); + } + + this.mouse.originalEvent = event; + + if (PIXI.AUTO_PREVENT_DEFAULT) + { + this.mouse.originalEvent.preventDefault(); + } + + // loop through interaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + + var e = this.mouse.originalEvent; + var isRightButton = e.button === 2 || e.which === 3; + var downFunction = isRightButton ? 'rightdown' : 'mousedown'; + var clickFunction = isRightButton ? 'rightclick' : 'click'; + var buttonIsDown = isRightButton ? '__rightIsDown' : '__mouseIsDown'; + var isDown = isRightButton ? '__isRightDown' : '__isDown'; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if (item[downFunction] || item[clickFunction]) + { + item[buttonIsDown] = true; + item.__hit = this.hitTest(item, this.mouse); + + if (item.__hit) + { + //call the function! + if (item[downFunction]) + { + item[downFunction](this.mouse); + } + item[isDown] = true; + + // just the one! + if (!item.interactiveChildren) break; + } + } + } +}; + +/** + * Is called when the mouse is moved out of the renderer element + * + * @method onMouseOut + * @param event {Event} The DOM event of a mouse being moved out + * @private + */ +PIXI.InteractionManager.prototype.onMouseOut = function(event) +{ + if (this.dirty) + { + this.rebuildInteractiveGraph(); + } + + this.mouse.originalEvent = event; + + var length = this.interactiveItems.length; + + this.interactionDOMElement.style.cursor = 'inherit'; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if (item.__isOver) + { + this.mouse.target = item; + if (item.mouseout) + { + item.mouseout(this.mouse); + } + item.__isOver = false; + } + } + + this.mouseOut = true; + + // move the mouse to an impossible position + this.mouse.global.x = -10000; + this.mouse.global.y = -10000; +}; + +/** + * Is called when the mouse button is released on the renderer element + * + * @method onMouseUp + * @param event {Event} The DOM event of a mouse button being released + * @private + */ +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + if (this.dirty) + { + this.rebuildInteractiveGraph(); + } + + this.mouse.originalEvent = event; + + var length = this.interactiveItems.length; + var up = false; + + var e = this.mouse.originalEvent; + var isRightButton = e.button === 2 || e.which === 3; + + var upFunction = isRightButton ? 'rightup' : 'mouseup'; + var clickFunction = isRightButton ? 'rightclick' : 'click'; + var upOutsideFunction = isRightButton ? 'rightupoutside' : 'mouseupoutside'; + var isDown = isRightButton ? '__isRightDown' : '__isDown'; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if (item[clickFunction] || item[upFunction] || item[upOutsideFunction]) + { + item.__hit = this.hitTest(item, this.mouse); + + if (item.__hit && !up) + { + //call the function! + if (item[upFunction]) + { + item[upFunction](this.mouse); + } + if (item[isDown]) + { + if (item[clickFunction]) + { + item[clickFunction](this.mouse); + } + } + + if (!item.interactiveChildren) + { + up = true; + } + } + else + { + if (item[isDown]) + { + if (item[upOutsideFunction]) item[upOutsideFunction](this.mouse); + } + } + + item[isDown] = false; + } + } +}; + +/** + * Tests if the current mouse coordinates hit a sprite + * + * @method hitTest + * @param item {DisplayObject} The displayObject to test for a hit + * @param interactionData {InteractionData} The interactionData object to update in the case there is a hit + * @private + */ +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if (!item.worldVisible) + { + return false; + } + + // map the global point to local space. + item.worldTransform.applyInverse(global, this._tempPoint); + + var x = this._tempPoint.x, + y = this._tempPoint.y, + i; + + interactionData.target = item; + + //a sprite or display object with a hit area defined + if (item.hitArea && item.hitArea.contains) + { + return item.hitArea.contains(x, y); + } + // a sprite with no hitarea defined + else if(item instanceof PIXI.Sprite) + { + var width = item.texture.frame.width; + var height = item.texture.frame.height; + var x1 = -width * item.anchor.x; + var y1; + + if (x > x1 && x < x1 + width) + { + y1 = -height * item.anchor.y; + + if (y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + return true; + } + } + } + else if(item instanceof PIXI.Graphics) + { + var graphicsData = item.graphicsData; + for (i = 0; i < graphicsData.length; i++) + { + var data = graphicsData[i]; + if(!data.fill)continue; + + // only deal with fills.. + if(data.shape) + { + if(data.shape.contains(x, y)) + { + //interactionData.target = item; + return true; + } + } + } + } + + var length = item.children.length; + + for (i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if (hit) + { + // hmm.. TODO SET CORRECT TARGET? + interactionData.target = item; + return true; + } + } + return false; +}; + +/** + * Is called when a touch is moved across the renderer element + * + * @method onTouchMove + * @param event {Event} The DOM event of a touch moving across the renderer view + * @private + */ +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + if (this.dirty) + { + this.rebuildInteractiveGraph(); + } + + var rect = this.interactionDOMElement.getBoundingClientRect(); + var changedTouches = event.changedTouches; + var touchData; + + var cLength = changedTouches.length; + var wCalc = (this.target.width / rect.width); + var hCalc = (this.target.height / rect.height); + var isSupportCocoonJS = navigator.isCocoonJS && !rect.left && !rect.top && !event.target.style.width && !event.target.style.height; + var touchEvent; + + for (var c = 0; c < cLength; c++) + { + touchEvent = changedTouches[c]; + if(!isSupportCocoonJS) + { + touchEvent.globalX = ( (touchEvent.clientX - rect.left) * wCalc ) / this.resolution; + touchEvent.globalY = ( (touchEvent.clientY - rect.top) * hCalc ) / this.resolution; + } + else + { + touchEvent.globalX = touchEvent.clientX; + touchEvent.globalY = touchEvent.clientY; + } + } + + for (var i = 0; i < cLength; i++) + { + touchEvent = changedTouches[i]; + touchData = this.touches[touchEvent.identifier]; + touchData.originalEvent = event; + + // update the touch position + if (!isSupportCocoonJS) + { + touchEvent.globalX = touchData.global.x = ( (touchEvent.clientX - rect.left) * wCalc ) / this.resolution; + touchEvent.globalY = touchData.global.y = ( (touchEvent.clientY - rect.top) * hCalc ) / this.resolution; + } + else + { + //Support for CocoonJS fullscreen scale modes + touchData.global.x = touchEvent.clientX; + touchData.global.y = touchEvent.clientY; + } + + for (var j = 0; j < this.interactiveItems.length; j++) + { + var item = this.interactiveItems[j]; + if (item.touchmove && item.__touchData && item.__touchData[touchEvent.identifier]) + { + item.touchmove(touchData); + } + } + } +}; + +/** + * Is called when a touch is started on the renderer element + * + * @method onTouchStart + * @param event {Event} The DOM event of a touch starting on the renderer view + * @private + */ +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + if (this.dirty) + { + this.rebuildInteractiveGraph(); + } + + var rect = this.interactionDOMElement.getBoundingClientRect(); + + if (PIXI.AUTO_PREVENT_DEFAULT) + { + event.preventDefault(); + } + + var changedTouches = event.changedTouches; + + var cLength = changedTouches.length; + var wCalc = (this.target.width / rect.width); + var hCalc = (this.target.height / rect.height); + var isSupportCocoonJS = navigator.isCocoonJS && !rect.left && !rect.top && !event.target.style.width && !event.target.style.height; + var touchEvent; + + for (var c = 0; c < cLength; c++) + { + touchEvent = changedTouches[c]; + if(!isSupportCocoonJS) + { + touchEvent.globalX = ( (touchEvent.clientX - rect.left) * wCalc ) / this.resolution; + touchEvent.globalY = ( (touchEvent.clientY - rect.top) * hCalc ) / this.resolution; + } + else + { + touchEvent.globalX = touchEvent.clientX; + touchEvent.globalY = touchEvent.clientY; + } + } + + for (var i=0; i < cLength; i++) + { + touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if (!touchData) + { + touchData = new PIXI.InteractionData(); + } + + touchData.originalEvent = event; + + this.touches[touchEvent.identifier] = touchData; + if (!isSupportCocoonJS) + { + touchData.global.x = ( (touchEvent.clientX - rect.left) * wCalc ) / this.resolution; + touchData.global.y = ( (touchEvent.clientY - rect.top) * hCalc ) / this.resolution; + } + else + { + //Support for CocoonJS fullscreen scale modes + touchData.global.x = touchEvent.clientX; + touchData.global.y = touchEvent.clientY; + } + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if (item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if (item.__hit) + { + //call the function! + if (item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = item.__touchData || {}; + item.__touchData[touchEvent.identifier] = touchData; + + if (!item.interactiveChildren) break; + } + } + } + } +}; + +/** + * Is called when a touch is ended on the renderer element + * + * @method onTouchEnd + * @param event {Event} The DOM event of a touch ending on the renderer view + * @private + */ +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + if (this.dirty) + { + this.rebuildInteractiveGraph(); + } + + var rect = this.interactionDOMElement.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + var cLength = changedTouches.length; + var wCalc = (this.target.width / rect.width); + var hCalc = (this.target.height / rect.height); + var isSupportCocoonJS = navigator.isCocoonJS && !rect.left && !rect.top && !event.target.style.width && !event.target.style.height; + var touchEvent; + + for (var c = 0; c < cLength; c++) + { + touchEvent = changedTouches[c]; + if(!isSupportCocoonJS) + { + touchEvent.globalX = ( (touchEvent.clientX - rect.left) * wCalc ) / this.resolution; + touchEvent.globalY = ( (touchEvent.clientY - rect.top) * hCalc ) / this.resolution; + } + else + { + touchEvent.globalX = touchEvent.clientX; + touchEvent.globalY = touchEvent.clientY; + } + } + + for (var i=0; i < cLength; i++) + { + touchEvent = changedTouches[i]; + var touchData = this.touches[touchEvent.identifier]; + var up = false; + if (!isSupportCocoonJS) + { + touchData.global.x = ( (touchEvent.clientX - rect.left) * wCalc ) / this.resolution; + touchData.global.y = ( (touchEvent.clientY - rect.top) * hCalc ) / this.resolution; + } + else + { + //Support for CocoonJS fullscreen scale modes + touchData.global.x = touchEvent.clientX; + touchData.global.y = touchEvent.clientY; + } + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if (item.__touchData && item.__touchData[touchEvent.identifier]) + { + + item.__hit = this.hitTest(item, item.__touchData[touchEvent.identifier]); + + // so this one WAS down... + touchData.originalEvent = event; + // hitTest?? + + if (item.touchend || item.tap) + { + if (item.__hit && !up) + { + if (item.touchend) + { + item.touchend(touchData); + } + if (item.__isDown && item.tap) + { + item.tap(touchData); + } + if (!item.interactiveChildren) + { + up = true; + } + } + else + { + if (item.__isDown && item.touchendoutside) + { + item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData[touchEvent.identifier] = null; + } + } + // remove the touch.. + this.pool.push(touchData); + this.touches[touchEvent.identifier] = null; + } +}; + +/** + * Is called when a touch is canceled + * + * @method onTouchCancel + * @param event {Event} The DOM event of a touch canceled + * @private + */ +PIXI.InteractionManager.prototype.onTouchCancel = function(event) +{ + if (this.dirty) + { + this.rebuildInteractiveGraph(); + } + + var rect = this.interactionDOMElement.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + var cLength = changedTouches.length; + var wCalc = (this.target.width / rect.width); + var hCalc = (this.target.height / rect.height); + var isSupportCocoonJS = navigator.isCocoonJS && !rect.left && !rect.top && !event.target.style.width && !event.target.style.height; + var touchEvent; + + for (var c = 0; c < cLength; c++) + { + touchEvent = changedTouches[c]; + if(!isSupportCocoonJS) + { + touchEvent.globalX = ( (touchEvent.clientX - rect.left) * wCalc ) / this.resolution; + touchEvent.globalY = ( (touchEvent.clientY - rect.top) * hCalc ) / this.resolution; + } + else + { + touchEvent.globalX = touchEvent.clientX; + touchEvent.globalY = touchEvent.clientY; + } + } + + for (var i=0; i < cLength; i++) + { + touchEvent = changedTouches[i]; + var touchData = this.touches[touchEvent.identifier]; + var up = false; + if (!isSupportCocoonJS) + { + touchData.global.x = ( (touchEvent.clientX - rect.left) * wCalc ) / this.resolution; + touchData.global.y = ( (touchEvent.clientY - rect.top) * hCalc ) / this.resolution; + } + else + { + //Support for CocoonJS fullscreen scale modes + touchData.global.x = touchEvent.clientX; + touchData.global.y = touchEvent.clientY; + } + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if (item.__touchData && item.__touchData[touchEvent.identifier]) + { + + item.__hit = this.hitTest(item, item.__touchData[touchEvent.identifier]); + + // so this one WAS down... + touchData.originalEvent = event; + // hitTest?? + + if (item.touchcancel && !up) + { + item.touchcancel(touchData); + if (!item.interactiveChildren) + { + up = true; + } + } + + item.__isDown = false; + item.__touchData[touchEvent.identifier] = null; + } + } + // remove the touch.. + this.pool.push(touchData); + this.touches[touchEvent.identifier] = null; + } +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Stage represents the root of the display tree. Everything connected to the stage is rendered + * + * @class Stage + * @extends DisplayObjectContainer + * @constructor + * @param backgroundColor {Number} the background color of the stage, you have to pass this in is in hex format + * like: 0xFFFFFF for white + * + * Creating a stage is a mandatory process when you use Pixi, which is as simple as this : + * var stage = new PIXI.Stage(0xFFFFFF); + * where the parameter given is the background colour of the stage, in hex + * you will use this stage instance to add your sprites to it and therefore to the renderer + * Here is how to add a sprite to the stage : + * stage.addChild(sprite); + */ +PIXI.Stage = function(backgroundColor) +{ + PIXI.DisplayObjectContainer.call( this ); + + /** + * [read-only] Current transform of the object based on world (parent) factors + * + * @property worldTransform + * @type Matrix + * @readOnly + * @private + */ + this.worldTransform = new PIXI.Matrix(); + + /** + * Whether or not the stage is interactive + * + * @property interactive + * @type Boolean + */ + this.interactive = true; + + /** + * The interaction manage for this stage, manages all interactive activity on the stage + * + * @property interactionManager + * @type InteractionManager + */ + this.interactionManager = new PIXI.InteractionManager(this); + + /** + * Whether the stage is dirty and needs to have interactions updated + * + * @property dirty + * @type Boolean + * @private + */ + this.dirty = true; + + //the stage is its own stage + this.stage = this; + + //optimize hit detection a bit + this.stage.hitArea = new PIXI.Rectangle(0, 0, 100000, 100000); + + this.setBackgroundColor(backgroundColor); +}; + +// constructor +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Stage.prototype.constructor = PIXI.Stage; + +/** + * Sets another DOM element which can receive mouse/touch interactions instead of the default Canvas element. + * This is useful for when you have other DOM elements on top of the Canvas element. + * + * @method setInteractionDelegate + * @param domElement {DOMElement} This new domElement which will receive mouse/touch events + */ +PIXI.Stage.prototype.setInteractionDelegate = function(domElement) +{ + this.interactionManager.setTargetDomElement( domElement ); +}; + +/* + * Updates the object transform for rendering + * + * @method updateTransform + * @private + */ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +}; + +/** + * Converts a color as an [R, G, B] array to a hex number + * + * @method rgb2hex + * @param rgb {Array} + */ +PIXI.rgb2hex = function(rgb) { + return ((rgb[0]*255 << 16) + (rgb[1]*255 << 8) + rgb[2]*255); +}; + +/** + * A polyfill for Function.prototype.bind + * + * @method bind + */ +if (typeof Function.prototype.bind !== 'function') { + Function.prototype.bind = (function () { + return function (thisArg) { + var target = this, i = arguments.length - 1, boundArgs = []; + if (i > 0) + { + boundArgs.length = i; + while (i--) boundArgs[i] = arguments[i + 1]; + } + + if (typeof target !== 'function') throw new TypeError(); + + function bound() { + var i = arguments.length, args = new Array(i); + while (i--) args[i] = arguments[i]; + args = boundArgs.concat(args); + return target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + if (proto) F.prototype = proto; + if (!(this instanceof F)) return new F(); + })(target.prototype); + + return bound; + }; + })(); +} + +/** + * A wrapper for ajax requests to be handled cross browser + * + * @class AjaxRequest + * @constructor + */ +PIXI.AjaxRequest = function() +{ + var activexmodes = ['Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.3.0', 'Microsoft.XMLHTTP']; //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0 && (number & (number - 1)) === 0) // see: http://goo.gl/D9kPj + return number; + else + { + var result = 1; + while (result < number) result <<= 1; + return result; + } +}; + +/** + * checks if the given width and height make a power of two texture + * @method isPowerOfTwo + * @param width {Number} + * @param height {Number} + * @return {Boolean} + */ +PIXI.isPowerOfTwo = function(width, height) +{ + return (width > 0 && (width & (width - 1)) === 0 && height > 0 && (height & (height - 1)) === 0); + +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * @author Chad Engler https://github.com/englercj @Rolnaaba + */ + +/** + * Originally based on https://github.com/mrdoob/eventtarget.js/ from mr Doob. + * Currently takes inspiration from the nodejs EventEmitter, EventEmitter3, and smokesignals + */ + +/** + * Mixins event emitter functionality to a class + * + * @class EventTarget + * @example + * function MyEmitter() {} + * + * PIXI.EventTarget.mixin(MyEmitter.prototype); + * + * var em = new MyEmitter(); + * em.emit('eventName', 'some data', 'some more data', {}, null, ...); + */ +PIXI.EventTarget = { + /** + * Backward compat from when this used to be a function + */ + call: function callCompat(obj) { + if(obj) { + obj = obj.prototype || obj; + PIXI.EventTarget.mixin(obj); + } + }, + + /** + * Mixes in the properties of the EventTarget prototype onto another object + * + * @method mixin + * @param object {Object} The obj to mix into + */ + mixin: function mixin(obj) { + /** + * Return a list of assigned event listeners. + * + * @method listeners + * @param eventName {String} The events that should be listed. + * @return {Array} An array of listener functions + */ + obj.listeners = function listeners(eventName) { + this._listeners = this._listeners || {}; + + return this._listeners[eventName] ? this._listeners[eventName].slice() : []; + }; + + /** + * Emit an event to all registered event listeners. + * + * @method emit + * @alias dispatchEvent + * @param eventName {String} The name of the event. + * @return {Boolean} Indication if we've emitted an event. + */ + obj.emit = obj.dispatchEvent = function emit(eventName, data) { + this._listeners = this._listeners || {}; + + //backwards compat with old method ".emit({ type: 'something' })" + if(typeof eventName === 'object') { + data = eventName; + eventName = eventName.type; + } + + //ensure we are using a real pixi event + if(!data || data.__isEventObject !== true) { + data = new PIXI.Event(this, eventName, data); + } + + //iterate the listeners + if(this._listeners && this._listeners[eventName]) { + var listeners = this._listeners[eventName].slice(0), + length = listeners.length, + fn = listeners[0], + i; + + for(i = 0; i < length; fn = listeners[++i]) { + //call the event listener + fn.call(this, data); + + //if "stopImmediatePropagation" is called, stop calling sibling events + if(data.stoppedImmediate) { + return this; + } + } + + //if "stopPropagation" is called then don't bubble the event + if(data.stopped) { + return this; + } + } + + //bubble this event up the scene graph + if(this.parent && this.parent.emit) { + this.parent.emit.call(this.parent, eventName, data); + } + + return this; + }; + + /** + * Register a new EventListener for the given event. + * + * @method on + * @alias addEventListener + * @param eventName {String} Name of the event. + * @param callback {Functon} fn Callback function. + */ + obj.on = obj.addEventListener = function on(eventName, fn) { + this._listeners = this._listeners || {}; + + (this._listeners[eventName] = this._listeners[eventName] || []) + .push(fn); + + return this; + }; + + /** + * Add an EventListener that's only called once. + * + * @method once + * @param eventName {String} Name of the event. + * @param callback {Function} Callback function. + */ + obj.once = function once(eventName, fn) { + this._listeners = this._listeners || {}; + + var self = this; + function onceHandlerWrapper() { + fn.apply(self.off(eventName, onceHandlerWrapper), arguments); + } + onceHandlerWrapper._originalHandler = fn; + + return this.on(eventName, onceHandlerWrapper); + }; + + /** + * Remove event listeners. + * + * @method off + * @alias removeEventListener + * @param eventName {String} The event we want to remove. + * @param callback {Function} The listener that we need to find. + */ + obj.off = obj.removeEventListener = function off(eventName, fn) { + this._listeners = this._listeners || {}; + + if(!this._listeners[eventName]) + return this; + + var list = this._listeners[eventName], + i = fn ? list.length : 0; + + while(i-- > 0) { + if(list[i] === fn || list[i]._originalHandler === fn) { + list.splice(i, 1); + } + } + + if(list.length === 0) { + delete this._listeners[eventName]; + } + + return this; + }; + + /** + * Remove all listeners or only the listeners for the specified event. + * + * @method removeAllListeners + * @param eventName {String} The event you want to remove all listeners for. + */ + obj.removeAllListeners = function removeAllListeners(eventName) { + this._listeners = this._listeners || {}; + + if(!this._listeners[eventName]) + return this; + + delete this._listeners[eventName]; + + return this; + }; + } +}; + +/** + * Creates an homogenous object for tracking events so users can know what to expect. + * + * @class Event + * @extends Object + * @constructor + * @param target {Object} The target object that the event is called on + * @param name {String} The string name of the event that was triggered + * @param data {Object} Arbitrary event data to pass along + */ +PIXI.Event = function(target, name, data) { + //for duck typing in the ".on()" function + this.__isEventObject = true; + + /** + * Tracks the state of bubbling propagation. Do not + * set this directly, instead use `event.stopPropagation()` + * + * @property stopped + * @type Boolean + * @private + * @readOnly + */ + this.stopped = false; + + /** + * Tracks the state of sibling listener propagation. Do not + * set this directly, instead use `event.stopImmediatePropagation()` + * + * @property stoppedImmediate + * @type Boolean + * @private + * @readOnly + */ + this.stoppedImmediate = false; + + /** + * The original target the event triggered on. + * + * @property target + * @type Object + * @readOnly + */ + this.target = target; + + /** + * The string name of the event that this represents. + * + * @property type + * @type String + * @readOnly + */ + this.type = name; + + /** + * The data that was passed in with this event. + * + * @property data + * @type Object + * @readOnly + */ + this.data = data; + + //backwards compat with older version of events + this.content = data; + + /** + * The timestamp when the event occurred. + * + * @property timeStamp + * @type Number + * @readOnly + */ + this.timeStamp = Date.now(); +}; + +/** + * Stops the propagation of events up the scene graph (prevents bubbling). + * + * @method stopPropagation + */ +PIXI.Event.prototype.stopPropagation = function stopPropagation() { + this.stopped = true; +}; + +/** + * Stops the propagation of events to sibling listeners (no longer calls any listeners). + * + * @method stopImmediatePropagation + */ +PIXI.Event.prototype.stopImmediatePropagation = function stopImmediatePropagation() { + this.stoppedImmediate = true; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * This helper function will automatically detect which renderer you should be using. + * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by + * the browser then this function will return a canvas renderer + * + * @method autoDetectRenderer + * @for PIXI + * @static + * @param width=800 {Number} the width of the renderers view + * @param height=600 {Number} the height of the renderers view + * + * @param [options] {Object} The optional renderer parameters + * @param [options.view] {HTMLCanvasElement} the canvas to use as a view, optional + * @param [options.transparent=false] {Boolean} If the render view is transparent, default false + * @param [options.antialias=false] {Boolean} sets antialias (only applicable in chrome at the moment) + * @param [options.preserveDrawingBuffer=false] {Boolean} enables drawing buffer preservation, enable this if you need to call toDataUrl on the webgl context + * @param [options.resolution=1] {Number} the resolution of the renderer retina would be 2 + * + */ +PIXI.autoDetectRenderer = function(width, height, options) +{ + if(!width)width = 800; + if(!height)height = 600; + + // BORROWED from Mr Doob (mrdoob.com) + var webgl = ( function () { try { + var canvas = document.createElement( 'canvas' ); + return !! window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ); + } catch( e ) { + return false; + } + } )(); + + if( webgl ) + { + return new PIXI.WebGLRenderer(width, height, options); + } + + return new PIXI.CanvasRenderer(width, height, options); +}; + +/** + * This helper function will automatically detect which renderer you should be using. + * This function is very similar to the autoDetectRenderer function except that is will return a canvas renderer for android. + * Even thought both android chrome supports webGL the canvas implementation perform better at the time of writing. + * This function will likely change and update as webGL performance improves on these devices. + * + * @method autoDetectRecommendedRenderer + * @for PIXI + * @static + * @param width=800 {Number} the width of the renderers view + * @param height=600 {Number} the height of the renderers view + * + * @param [options] {Object} The optional renderer parameters + * @param [options.view] {HTMLCanvasElement} the canvas to use as a view, optional + * @param [options.transparent=false] {Boolean} If the render view is transparent, default false + * @param [options.antialias=false] {Boolean} sets antialias (only applicable in chrome at the moment) + * @param [options.preserveDrawingBuffer=false] {Boolean} enables drawing buffer preservation, enable this if you need to call toDataUrl on the webgl context + * @param [options.resolution=1] {Number} the resolution of the renderer retina would be 2 + * + */ +PIXI.autoDetectRecommendedRenderer = function(width, height, options) +{ + if(!width)width = 800; + if(!height)height = 600; + + // BORROWED from Mr Doob (mrdoob.com) + var webgl = ( function () { try { + var canvas = document.createElement( 'canvas' ); + return !! window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ); + } catch( e ) { + return false; + } + } )(); + + var isAndroid = /Android/i.test(navigator.userAgent); + + if( webgl && !isAndroid) + { + return new PIXI.WebGLRenderer(width, height, options); + } + + return new PIXI.CanvasRenderer(width, height, options); +}; + +/* + PolyK library + url: http://polyk.ivank.net + Released under MIT licence. + + Copyright (c) 2012 Ivan Kuckir + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + This is an amazing lib! + + Slightly modified by Mat Groves (matgroves.com); +*/ + +/** + * Based on the Polyk library http://polyk.ivank.net released under MIT licence. + * This is an amazing lib! + * Slightly modified by Mat Groves (matgroves.com); + * @class PolyK + */ +PIXI.PolyK = {}; + +/** + * Triangulates shapes for webGL graphic fills. + * + * @method Triangulate + */ +PIXI.PolyK.Triangulate = function(p) +{ + var sign = true; + + var n = p.length >> 1; + if(n < 3) return []; + + var tgs = []; + var avl = []; + for(var i = 0; i < n; i++) avl.push(i); + + i = 0; + var al = n; + while(al > 3) + { + var i0 = avl[(i+0)%al]; + var i1 = avl[(i+1)%al]; + var i2 = avl[(i+2)%al]; + + var ax = p[2*i0], ay = p[2*i0+1]; + var bx = p[2*i1], by = p[2*i1+1]; + var cx = p[2*i2], cy = p[2*i2+1]; + + var earFound = false; + if(PIXI.PolyK._convex(ax, ay, bx, by, cx, cy, sign)) + { + earFound = true; + for(var j = 0; j < al; j++) + { + var vi = avl[j]; + if(vi === i0 || vi === i1 || vi === i2) continue; + + if(PIXI.PolyK._PointInTriangle(p[2*vi], p[2*vi+1], ax, ay, bx, by, cx, cy)) { + earFound = false; + break; + } + } + } + + if(earFound) + { + tgs.push(i0, i1, i2); + avl.splice((i+1)%al, 1); + al--; + i = 0; + } + else if(i++ > 3*al) + { + // need to flip flip reverse it! + // reset! + if(sign) + { + tgs = []; + avl = []; + for(i = 0; i < n; i++) avl.push(i); + + i = 0; + al = n; + + sign = false; + } + else + { + // window.console.log("PIXI Warning: shape too complex to fill"); + return null; + } + } + } + + tgs.push(avl[0], avl[1], avl[2]); + return tgs; +}; + +/** + * Checks whether a point is within a triangle + * + * @method _PointInTriangle + * @param px {Number} x coordinate of the point to test + * @param py {Number} y coordinate of the point to test + * @param ax {Number} x coordinate of the a point of the triangle + * @param ay {Number} y coordinate of the a point of the triangle + * @param bx {Number} x coordinate of the b point of the triangle + * @param by {Number} y coordinate of the b point of the triangle + * @param cx {Number} x coordinate of the c point of the triangle + * @param cy {Number} y coordinate of the c point of the triangle + * @private + * @return {Boolean} + */ +PIXI.PolyK._PointInTriangle = function(px, py, ax, ay, bx, by, cx, cy) +{ + var v0x = cx-ax; + var v0y = cy-ay; + var v1x = bx-ax; + var v1y = by-ay; + var v2x = px-ax; + var v2y = py-ay; + + var dot00 = v0x*v0x+v0y*v0y; + var dot01 = v0x*v1x+v0y*v1y; + var dot02 = v0x*v2x+v0y*v2y; + var dot11 = v1x*v1x+v1y*v1y; + var dot12 = v1x*v2x+v1y*v2y; + + var invDenom = 1 / (dot00 * dot11 - dot01 * dot01); + var u = (dot11 * dot02 - dot01 * dot12) * invDenom; + var v = (dot00 * dot12 - dot01 * dot02) * invDenom; + + // Check if point is in triangle + return (u >= 0) && (v >= 0) && (u + v < 1); +}; + +/** + * Checks whether a shape is convex + * + * @method _convex + * @private + * @return {Boolean} + */ +PIXI.PolyK._convex = function(ax, ay, bx, by, cx, cy, sign) +{ + return ((ay-by)*(cx-bx) + (bx-ax)*(cy-by) >= 0) === sign; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @method initDefaultShaders +* @static +* @private +*/ +PIXI.initDefaultShaders = function() +{ +}; + +/** +* @method CompileVertexShader +* @static +* @param gl {WebGLContext} the current WebGL drawing context +* @param shaderSrc {Array} +* @return {Any} +*/ +PIXI.CompileVertexShader = function(gl, shaderSrc) +{ + return PIXI._CompileShader(gl, shaderSrc, gl.VERTEX_SHADER); +}; + +/** +* @method CompileFragmentShader +* @static +* @param gl {WebGLContext} the current WebGL drawing context +* @param shaderSrc {Array} +* @return {Any} +*/ +PIXI.CompileFragmentShader = function(gl, shaderSrc) +{ + return PIXI._CompileShader(gl, shaderSrc, gl.FRAGMENT_SHADER); +}; + +/** +* @method _CompileShader +* @static +* @private +* @param gl {WebGLContext} the current WebGL drawing context +* @param shaderSrc {Array} +* @param shaderType {Number} +* @return {Any} +*/ +PIXI._CompileShader = function(gl, shaderSrc, shaderType) +{ + var src = shaderSrc.join("\n"); + var shader = gl.createShader(shaderType); + gl.shaderSource(shader, src); + gl.compileShader(shader); + + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) + { + window.console.log(gl.getShaderInfoLog(shader)); + return null; + } + + return shader; +}; + +/** +* @method compileProgram +* @static +* @param gl {WebGLContext} the current WebGL drawing context +* @param vertexSrc {Array} +* @param fragmentSrc {Array} +* @return {Any} +*/ +PIXI.compileProgram = function(gl, vertexSrc, fragmentSrc) +{ + var fragmentShader = PIXI.CompileFragmentShader(gl, fragmentSrc); + var vertexShader = PIXI.CompileVertexShader(gl, vertexSrc); + + var shaderProgram = gl.createProgram(); + + gl.attachShader(shaderProgram, vertexShader); + gl.attachShader(shaderProgram, fragmentShader); + gl.linkProgram(shaderProgram); + + if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) + { + window.console.log("Could not initialise shaders"); + } + + return shaderProgram; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * @author Richard Davey http://www.photonstorm.com @photonstorm + */ + +/** +* @class PixiShader +* @constructor +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.PixiShader = function(gl) +{ + /** + * @property _UID + * @type Number + * @private + */ + this._UID = PIXI._UID++; + + /** + * @property gl + * @type WebGLContext + */ + this.gl = gl; + + /** + * The WebGL program. + * @property program + * @type Any + */ + this.program = null; + + /** + * The fragment shader. + * @property fragmentSrc + * @type Array + */ + this.fragmentSrc = [ + 'precision lowp float;', + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + 'uniform sampler2D uSampler;', + 'void main(void) {', + ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;', + '}' + ]; + + /** + * A local texture counter for multi-texture shaders. + * @property textureCount + * @type Number + */ + this.textureCount = 0; + + /** + * A local flag + * @property firstRun + * @type Boolean + * @private + */ + this.firstRun = true; + + /** + * A dirty flag + * @property dirty + * @type Boolean + */ + this.dirty = true; + + /** + * Uniform attributes cache. + * @property attributes + * @type Array + * @private + */ + this.attributes = []; + + this.init(); +}; + +PIXI.PixiShader.prototype.constructor = PIXI.PixiShader; + +/** +* Initialises the shader. +* +* @method init +*/ +PIXI.PixiShader.prototype.init = function() +{ + var gl = this.gl; + + var program = PIXI.compileProgram(gl, this.vertexSrc || PIXI.PixiShader.defaultVertexSrc, this.fragmentSrc); + + gl.useProgram(program); + + // get and store the uniforms for the shader + this.uSampler = gl.getUniformLocation(program, 'uSampler'); + this.projectionVector = gl.getUniformLocation(program, 'projectionVector'); + this.offsetVector = gl.getUniformLocation(program, 'offsetVector'); + this.dimensions = gl.getUniformLocation(program, 'dimensions'); + + // get and store the attributes + this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition'); + this.aTextureCoord = gl.getAttribLocation(program, 'aTextureCoord'); + this.colorAttribute = gl.getAttribLocation(program, 'aColor'); + + // Begin worst hack eva // + + // WHY??? ONLY on my chrome pixel the line above returns -1 when using filters? + // maybe its something to do with the current state of the gl context. + // I'm convinced this is a bug in the chrome browser as there is NO reason why this should be returning -1 especially as it only manifests on my chrome pixel + // If theres any webGL people that know why could happen please help :) + if(this.colorAttribute === -1) + { + this.colorAttribute = 2; + } + + this.attributes = [this.aVertexPosition, this.aTextureCoord, this.colorAttribute]; + + // End worst hack eva // + + // add those custom shaders! + for (var key in this.uniforms) + { + // get the uniform locations.. + this.uniforms[key].uniformLocation = gl.getUniformLocation(program, key); + } + + this.initUniforms(); + + this.program = program; +}; + +/** +* Initialises the shader uniform values. +* +* Uniforms are specified in the GLSL_ES Specification: http://www.khronos.org/registry/webgl/specs/latest/1.0/ +* http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf +* +* @method initUniforms +*/ +PIXI.PixiShader.prototype.initUniforms = function() +{ + this.textureCount = 1; + var gl = this.gl; + var uniform; + + for (var key in this.uniforms) + { + uniform = this.uniforms[key]; + + var type = uniform.type; + + if (type === 'sampler2D') + { + uniform._init = false; + + if (uniform.value !== null) + { + this.initSampler2D(uniform); + } + } + else if (type === 'mat2' || type === 'mat3' || type === 'mat4') + { + // These require special handling + uniform.glMatrix = true; + uniform.glValueLength = 1; + + if (type === 'mat2') + { + uniform.glFunc = gl.uniformMatrix2fv; + } + else if (type === 'mat3') + { + uniform.glFunc = gl.uniformMatrix3fv; + } + else if (type === 'mat4') + { + uniform.glFunc = gl.uniformMatrix4fv; + } + } + else + { + // GL function reference + uniform.glFunc = gl['uniform' + type]; + + if (type === '2f' || type === '2i') + { + uniform.glValueLength = 2; + } + else if (type === '3f' || type === '3i') + { + uniform.glValueLength = 3; + } + else if (type === '4f' || type === '4i') + { + uniform.glValueLength = 4; + } + else + { + uniform.glValueLength = 1; + } + } + } + +}; + +/** +* Initialises a Sampler2D uniform (which may only be available later on after initUniforms once the texture has loaded) +* +* @method initSampler2D +*/ +PIXI.PixiShader.prototype.initSampler2D = function(uniform) +{ + if (!uniform.value || !uniform.value.baseTexture || !uniform.value.baseTexture.hasLoaded) + { + return; + } + + var gl = this.gl; + + gl.activeTexture(gl['TEXTURE' + this.textureCount]); + gl.bindTexture(gl.TEXTURE_2D, uniform.value.baseTexture._glTextures[gl.id]); + + // Extended texture data + if (uniform.textureData) + { + var data = uniform.textureData; + + // GLTexture = mag linear, min linear_mipmap_linear, wrap repeat + gl.generateMipmap(gl.TEXTURE_2D); + // GLTextureLinear = mag/min linear, wrap clamp + // GLTextureNearestRepeat = mag/min NEAREST, wrap repeat + // GLTextureNearest = mag/min nearest, wrap clamp + // AudioTexture = whatever + luminance + width 512, height 2, border 0 + // KeyTexture = whatever + luminance + width 256, height 2, border 0 + + // magFilter can be: gl.LINEAR, gl.LINEAR_MIPMAP_LINEAR or gl.NEAREST + // wrapS/T can be: gl.CLAMP_TO_EDGE or gl.REPEAT + + var magFilter = (data.magFilter) ? data.magFilter : gl.LINEAR; + var minFilter = (data.minFilter) ? data.minFilter : gl.LINEAR; + var wrapS = (data.wrapS) ? data.wrapS : gl.CLAMP_TO_EDGE; + var wrapT = (data.wrapT) ? data.wrapT : gl.CLAMP_TO_EDGE; + var format = (data.luminance) ? gl.LUMINANCE : gl.RGBA; + + if (data.repeat) + { + wrapS = gl.REPEAT; + wrapT = gl.REPEAT; + } + + gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, !!data.flipY); + + if (data.width) + { + var width = (data.width) ? data.width : 512; + var height = (data.height) ? data.height : 2; + var border = (data.border) ? data.border : 0; + + // void texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ArrayBufferView? pixels); + gl.texImage2D(gl.TEXTURE_2D, 0, format, width, height, border, format, gl.UNSIGNED_BYTE, null); + } + else + { + // void texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, ImageData? pixels); + gl.texImage2D(gl.TEXTURE_2D, 0, format, gl.RGBA, gl.UNSIGNED_BYTE, uniform.value.baseTexture.source); + } + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrapS); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrapT); + } + + gl.uniform1i(uniform.uniformLocation, this.textureCount); + + uniform._init = true; + + this.textureCount++; + +}; + +/** +* Updates the shader uniform values. +* +* @method syncUniforms +*/ +PIXI.PixiShader.prototype.syncUniforms = function() +{ + this.textureCount = 1; + var uniform; + var gl = this.gl; + + // This would probably be faster in an array and it would guarantee key order + for (var key in this.uniforms) + { + uniform = this.uniforms[key]; + + if (uniform.glValueLength === 1) + { + if (uniform.glMatrix === true) + { + uniform.glFunc.call(gl, uniform.uniformLocation, uniform.transpose, uniform.value); + } + else + { + uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value); + } + } + else if (uniform.glValueLength === 2) + { + uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value.x, uniform.value.y); + } + else if (uniform.glValueLength === 3) + { + uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value.x, uniform.value.y, uniform.value.z); + } + else if (uniform.glValueLength === 4) + { + uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value.x, uniform.value.y, uniform.value.z, uniform.value.w); + } + else if (uniform.type === 'sampler2D') + { + if (uniform._init) + { + gl.activeTexture(gl['TEXTURE' + this.textureCount]); + + if(uniform.value.baseTexture._dirty[gl.id]) + { + PIXI.instances[gl.id].updateTexture(uniform.value.baseTexture); + } + else + { + // bind the current texture + gl.bindTexture(gl.TEXTURE_2D, uniform.value.baseTexture._glTextures[gl.id]); + } + + // gl.bindTexture(gl.TEXTURE_2D, uniform.value.baseTexture._glTextures[gl.id] || PIXI.createWebGLTexture( uniform.value.baseTexture, gl)); + gl.uniform1i(uniform.uniformLocation, this.textureCount); + this.textureCount++; + } + else + { + this.initSampler2D(uniform); + } + } + } + +}; + +/** +* Destroys the shader. +* +* @method destroy +*/ +PIXI.PixiShader.prototype.destroy = function() +{ + this.gl.deleteProgram( this.program ); + this.uniforms = null; + this.gl = null; + + this.attributes = null; +}; + +/** +* The Default Vertex shader source. +* +* @property defaultVertexSrc +* @type String +*/ +PIXI.PixiShader.defaultVertexSrc = [ + 'attribute vec2 aVertexPosition;', + 'attribute vec2 aTextureCoord;', + 'attribute vec4 aColor;', + + 'uniform vec2 projectionVector;', + 'uniform vec2 offsetVector;', + + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + + 'const vec2 center = vec2(-1.0, 1.0);', + + 'void main(void) {', + ' gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);', + ' vTextureCoord = aTextureCoord;', + ' vColor = vec4(aColor.rgb * aColor.a, aColor.a);', + '}' +]; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @class PixiFastShader +* @constructor +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.PixiFastShader = function(gl) +{ + /** + * @property _UID + * @type Number + * @private + */ + this._UID = PIXI._UID++; + + /** + * @property gl + * @type WebGLContext + */ + this.gl = gl; + + /** + * The WebGL program. + * @property program + * @type Any + */ + this.program = null; + + /** + * The fragment shader. + * @property fragmentSrc + * @type Array + */ + this.fragmentSrc = [ + 'precision lowp float;', + 'varying vec2 vTextureCoord;', + 'varying float vColor;', + 'uniform sampler2D uSampler;', + 'void main(void) {', + ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;', + '}' + ]; + + /** + * The vertex shader. + * @property vertexSrc + * @type Array + */ + this.vertexSrc = [ + 'attribute vec2 aVertexPosition;', + 'attribute vec2 aPositionCoord;', + 'attribute vec2 aScale;', + 'attribute float aRotation;', + 'attribute vec2 aTextureCoord;', + 'attribute float aColor;', + + 'uniform vec2 projectionVector;', + 'uniform vec2 offsetVector;', + 'uniform mat3 uMatrix;', + + 'varying vec2 vTextureCoord;', + 'varying float vColor;', + + 'const vec2 center = vec2(-1.0, 1.0);', + + 'void main(void) {', + ' vec2 v;', + ' vec2 sv = aVertexPosition * aScale;', + ' v.x = (sv.x) * cos(aRotation) - (sv.y) * sin(aRotation);', + ' v.y = (sv.x) * sin(aRotation) + (sv.y) * cos(aRotation);', + ' v = ( uMatrix * vec3(v + aPositionCoord , 1.0) ).xy ;', + ' gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);', + ' vTextureCoord = aTextureCoord;', + // ' vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;', + ' vColor = aColor;', + '}' + ]; + + /** + * A local texture counter for multi-texture shaders. + * @property textureCount + * @type Number + */ + this.textureCount = 0; + + this.init(); +}; + +PIXI.PixiFastShader.prototype.constructor = PIXI.PixiFastShader; + +/** +* Initialises the shader. +* +* @method init +*/ +PIXI.PixiFastShader.prototype.init = function() +{ + var gl = this.gl; + + var program = PIXI.compileProgram(gl, this.vertexSrc, this.fragmentSrc); + + gl.useProgram(program); + + // get and store the uniforms for the shader + this.uSampler = gl.getUniformLocation(program, 'uSampler'); + + this.projectionVector = gl.getUniformLocation(program, 'projectionVector'); + this.offsetVector = gl.getUniformLocation(program, 'offsetVector'); + this.dimensions = gl.getUniformLocation(program, 'dimensions'); + this.uMatrix = gl.getUniformLocation(program, 'uMatrix'); + + // get and store the attributes + this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition'); + this.aPositionCoord = gl.getAttribLocation(program, 'aPositionCoord'); + + this.aScale = gl.getAttribLocation(program, 'aScale'); + this.aRotation = gl.getAttribLocation(program, 'aRotation'); + + this.aTextureCoord = gl.getAttribLocation(program, 'aTextureCoord'); + this.colorAttribute = gl.getAttribLocation(program, 'aColor'); + + // Begin worst hack eva // + + // WHY??? ONLY on my chrome pixel the line above returns -1 when using filters? + // maybe its somthing to do with the current state of the gl context. + // Im convinced this is a bug in the chrome browser as there is NO reason why this should be returning -1 especially as it only manifests on my chrome pixel + // If theres any webGL people that know why could happen please help :) + if(this.colorAttribute === -1) + { + this.colorAttribute = 2; + } + + this.attributes = [this.aVertexPosition, this.aPositionCoord, this.aScale, this.aRotation, this.aTextureCoord, this.colorAttribute]; + + // End worst hack eva // + + this.program = program; +}; + +/** +* Destroys the shader. +* +* @method destroy +*/ +PIXI.PixiFastShader.prototype.destroy = function() +{ + this.gl.deleteProgram( this.program ); + this.uniforms = null; + this.gl = null; + + this.attributes = null; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @class StripShader +* @constructor +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.StripShader = function(gl) +{ + /** + * @property _UID + * @type Number + * @private + */ + this._UID = PIXI._UID++; + + /** + * @property gl + * @type WebGLContext + */ + this.gl = gl; + + /** + * The WebGL program. + * @property program + * @type Any + */ + this.program = null; + + /** + * The fragment shader. + * @property fragmentSrc + * @type Array + */ + this.fragmentSrc = [ + 'precision mediump float;', + 'varying vec2 vTextureCoord;', + // 'varying float vColor;', + 'uniform float alpha;', + 'uniform sampler2D uSampler;', + + 'void main(void) {', + ' gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * alpha;', + // ' gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);',//gl_FragColor * alpha;', + '}' + ]; + + /** + * The vertex shader. + * @property vertexSrc + * @type Array + */ + this.vertexSrc = [ + 'attribute vec2 aVertexPosition;', + 'attribute vec2 aTextureCoord;', + 'uniform mat3 translationMatrix;', + 'uniform vec2 projectionVector;', + 'uniform vec2 offsetVector;', + // 'uniform float alpha;', + // 'uniform vec3 tint;', + 'varying vec2 vTextureCoord;', + // 'varying vec4 vColor;', + + 'void main(void) {', + ' vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);', + ' v -= offsetVector.xyx;', + ' gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);', + ' vTextureCoord = aTextureCoord;', + // ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ]; + + this.init(); +}; + +PIXI.StripShader.prototype.constructor = PIXI.StripShader; + +/** +* Initialises the shader. +* +* @method init +*/ +PIXI.StripShader.prototype.init = function() +{ + var gl = this.gl; + + var program = PIXI.compileProgram(gl, this.vertexSrc, this.fragmentSrc); + gl.useProgram(program); + + // get and store the uniforms for the shader + this.uSampler = gl.getUniformLocation(program, 'uSampler'); + this.projectionVector = gl.getUniformLocation(program, 'projectionVector'); + this.offsetVector = gl.getUniformLocation(program, 'offsetVector'); + this.colorAttribute = gl.getAttribLocation(program, 'aColor'); + //this.dimensions = gl.getUniformLocation(this.program, 'dimensions'); + + // get and store the attributes + this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition'); + this.aTextureCoord = gl.getAttribLocation(program, 'aTextureCoord'); + + this.attributes = [this.aVertexPosition, this.aTextureCoord]; + + this.translationMatrix = gl.getUniformLocation(program, 'translationMatrix'); + this.alpha = gl.getUniformLocation(program, 'alpha'); + + this.program = program; +}; + +/** +* Destroys the shader. +* +* @method destroy +*/ +PIXI.StripShader.prototype.destroy = function() +{ + this.gl.deleteProgram( this.program ); + this.uniforms = null; + this.gl = null; + + this.attribute = null; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @class PrimitiveShader +* @constructor +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.PrimitiveShader = function(gl) +{ + /** + * @property _UID + * @type Number + * @private + */ + this._UID = PIXI._UID++; + + /** + * @property gl + * @type WebGLContext + */ + this.gl = gl; + + /** + * The WebGL program. + * @property program + * @type Any + */ + this.program = null; + + /** + * The fragment shader. + * @property fragmentSrc + * @type Array + */ + this.fragmentSrc = [ + 'precision mediump float;', + 'varying vec4 vColor;', + + 'void main(void) {', + ' gl_FragColor = vColor;', + '}' + ]; + + /** + * The vertex shader. + * @property vertexSrc + * @type Array + */ + this.vertexSrc = [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + 'uniform mat3 translationMatrix;', + 'uniform vec2 projectionVector;', + 'uniform vec2 offsetVector;', + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + 'varying vec4 vColor;', + + 'void main(void) {', + ' vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);', + ' v -= offsetVector.xyx;', + ' gl_Position = vec4( v.x / projectionVector.x -1.0, (v.y / projectionVector.y * -flipY) + flipY , 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ]; + + this.init(); +}; + +PIXI.PrimitiveShader.prototype.constructor = PIXI.PrimitiveShader; + +/** +* Initialises the shader. +* +* @method init +*/ +PIXI.PrimitiveShader.prototype.init = function() +{ + var gl = this.gl; + + var program = PIXI.compileProgram(gl, this.vertexSrc, this.fragmentSrc); + gl.useProgram(program); + + // get and store the uniforms for the shader + this.projectionVector = gl.getUniformLocation(program, 'projectionVector'); + this.offsetVector = gl.getUniformLocation(program, 'offsetVector'); + this.tintColor = gl.getUniformLocation(program, 'tint'); + this.flipY = gl.getUniformLocation(program, 'flipY'); + + // get and store the attributes + this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition'); + this.colorAttribute = gl.getAttribLocation(program, 'aColor'); + + this.attributes = [this.aVertexPosition, this.colorAttribute]; + + this.translationMatrix = gl.getUniformLocation(program, 'translationMatrix'); + this.alpha = gl.getUniformLocation(program, 'alpha'); + + this.program = program; +}; + +/** +* Destroys the shader. +* +* @method destroy +*/ +PIXI.PrimitiveShader.prototype.destroy = function() +{ + this.gl.deleteProgram( this.program ); + this.uniforms = null; + this.gl = null; + + this.attributes = null; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @class ComplexPrimitiveShader +* @constructor +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.ComplexPrimitiveShader = function(gl) +{ + /** + * @property _UID + * @type Number + * @private + */ + this._UID = PIXI._UID++; + + /** + * @property gl + * @type WebGLContext + */ + this.gl = gl; + + /** + * The WebGL program. + * @property program + * @type Any + */ + this.program = null; + + /** + * The fragment shader. + * @property fragmentSrc + * @type Array + */ + this.fragmentSrc = [ + + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void) {', + ' gl_FragColor = vColor;', + '}' + ]; + + /** + * The vertex shader. + * @property vertexSrc + * @type Array + */ + this.vertexSrc = [ + 'attribute vec2 aVertexPosition;', + //'attribute vec4 aColor;', + 'uniform mat3 translationMatrix;', + 'uniform vec2 projectionVector;', + 'uniform vec2 offsetVector;', + + 'uniform vec3 tint;', + 'uniform float alpha;', + 'uniform vec3 color;', + 'uniform float flipY;', + 'varying vec4 vColor;', + + 'void main(void) {', + ' vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);', + ' v -= offsetVector.xyx;', + ' gl_Position = vec4( v.x / projectionVector.x -1.0, (v.y / projectionVector.y * -flipY) + flipY , 0.0, 1.0);', + ' vColor = vec4(color * alpha * tint, alpha);',//" * vec4(tint * alpha, alpha);', + '}' + ]; + + this.init(); +}; + +PIXI.ComplexPrimitiveShader.prototype.constructor = PIXI.ComplexPrimitiveShader; + +/** +* Initialises the shader. +* +* @method init +*/ +PIXI.ComplexPrimitiveShader.prototype.init = function() +{ + var gl = this.gl; + + var program = PIXI.compileProgram(gl, this.vertexSrc, this.fragmentSrc); + gl.useProgram(program); + + // get and store the uniforms for the shader + this.projectionVector = gl.getUniformLocation(program, 'projectionVector'); + this.offsetVector = gl.getUniformLocation(program, 'offsetVector'); + this.tintColor = gl.getUniformLocation(program, 'tint'); + this.color = gl.getUniformLocation(program, 'color'); + this.flipY = gl.getUniformLocation(program, 'flipY'); + + // get and store the attributes + this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition'); + // this.colorAttribute = gl.getAttribLocation(program, 'aColor'); + + this.attributes = [this.aVertexPosition, this.colorAttribute]; + + this.translationMatrix = gl.getUniformLocation(program, 'translationMatrix'); + this.alpha = gl.getUniformLocation(program, 'alpha'); + + this.program = program; +}; + +/** +* Destroys the shader. +* +* @method destroy +*/ +PIXI.ComplexPrimitiveShader.prototype.destroy = function() +{ + this.gl.deleteProgram( this.program ); + this.uniforms = null; + this.gl = null; + + this.attribute = null; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A set of functions used by the webGL renderer to draw the primitive graphics data + * + * @class WebGLGraphics + * @private + * @static + */ +PIXI.WebGLGraphics = function() +{ +}; + +/** + * Renders the graphics object + * + * @static + * @private + * @method renderGraphics + * @param graphics {Graphics} + * @param renderSession {Object} + */ +PIXI.WebGLGraphics.renderGraphics = function(graphics, renderSession)//projection, offset) +{ + var gl = renderSession.gl; + var projection = renderSession.projection, + offset = renderSession.offset, + shader = renderSession.shaderManager.primitiveShader, + webGLData; + + if(graphics.dirty) + { + PIXI.WebGLGraphics.updateGraphics(graphics, gl); + } + + var webGL = graphics._webGL[gl.id]; + + // This could be speeded up for sure! + + for (var i = 0; i < webGL.data.length; i++) + { + if(webGL.data[i].mode === 1) + { + webGLData = webGL.data[i]; + + renderSession.stencilManager.pushStencil(graphics, webGLData, renderSession); + + // render quad.. + gl.drawElements(gl.TRIANGLE_FAN, 4, gl.UNSIGNED_SHORT, ( webGLData.indices.length - 4 ) * 2 ); + + renderSession.stencilManager.popStencil(graphics, webGLData, renderSession); + } + else + { + webGLData = webGL.data[i]; + + + renderSession.shaderManager.setShader( shader );//activatePrimitiveShader(); + shader = renderSession.shaderManager.primitiveShader; + gl.uniformMatrix3fv(shader.translationMatrix, false, graphics.worldTransform.toArray(true)); + + gl.uniform1f(shader.flipY, 1); + + gl.uniform2f(shader.projectionVector, projection.x, -projection.y); + gl.uniform2f(shader.offsetVector, -offset.x, -offset.y); + + gl.uniform3fv(shader.tintColor, PIXI.hex2rgb(graphics.tint)); + + gl.uniform1f(shader.alpha, graphics.worldAlpha); + + + gl.bindBuffer(gl.ARRAY_BUFFER, webGLData.buffer); + + gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 4 * 6, 0); + gl.vertexAttribPointer(shader.colorAttribute, 4, gl.FLOAT, false,4 * 6, 2 * 4); + + // set the index buffer! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, webGLData.indexBuffer); + gl.drawElements(gl.TRIANGLE_STRIP, webGLData.indices.length, gl.UNSIGNED_SHORT, 0 ); + } + } +}; + +/** + * Updates the graphics object + * + * @static + * @private + * @method updateGraphics + * @param graphicsData {Graphics} The graphics object to update + * @param gl {WebGLContext} the current WebGL drawing context + */ +PIXI.WebGLGraphics.updateGraphics = function(graphics, gl) +{ + // get the contexts graphics object + var webGL = graphics._webGL[gl.id]; + // if the graphics object does not exist in the webGL context time to create it! + if(!webGL)webGL = graphics._webGL[gl.id] = {lastIndex:0, data:[], gl:gl}; + + // flag the graphics as not dirty as we are about to update it... + graphics.dirty = false; + + var i; + + // if the user cleared the graphics object we will need to clear every object + if(graphics.clearDirty) + { + graphics.clearDirty = false; + + // lop through and return all the webGLDatas to the object pool so than can be reused later on + for (i = 0; i < webGL.data.length; i++) + { + var graphicsData = webGL.data[i]; + graphicsData.reset(); + PIXI.WebGLGraphics.graphicsDataPool.push( graphicsData ); + } + + // clear the array and reset the index.. + webGL.data = []; + webGL.lastIndex = 0; + } + + var webGLData; + + // loop through the graphics datas and construct each one.. + // if the object is a complex fill then the new stencil buffer technique will be used + // other wise graphics objects will be pushed into a batch.. + for (i = webGL.lastIndex; i < graphics.graphicsData.length; i++) + { + var data = graphics.graphicsData[i]; + + if(data.type === PIXI.Graphics.POLY) + { + // need to add the points the the graphics object.. + data.points = data.shape.points.slice(); + if(data.shape.closed) + { + // close the poly if the value is true! + if(data.points[0] !== data.points[data.points.length-2] || data.points[1] !== data.points[data.points.length-1]) + { + data.points.push(data.points[0], data.points[1]); + } + } + + // MAKE SURE WE HAVE THE CORRECT TYPE.. + if(data.fill) + { + if(data.points.length >= 6) + { + if(data.points.length < 6 * 2) + { + webGLData = PIXI.WebGLGraphics.switchMode(webGL, 0); + + var canDrawUsingSimple = PIXI.WebGLGraphics.buildPoly(data, webGLData); + // console.log(canDrawUsingSimple); + + if(!canDrawUsingSimple) + { + // console.log("<>>>") + webGLData = PIXI.WebGLGraphics.switchMode(webGL, 1); + PIXI.WebGLGraphics.buildComplexPoly(data, webGLData); + } + + } + else + { + webGLData = PIXI.WebGLGraphics.switchMode(webGL, 1); + PIXI.WebGLGraphics.buildComplexPoly(data, webGLData); + } + } + } + + if(data.lineWidth > 0) + { + webGLData = PIXI.WebGLGraphics.switchMode(webGL, 0); + PIXI.WebGLGraphics.buildLine(data, webGLData); + + } + } + else + { + webGLData = PIXI.WebGLGraphics.switchMode(webGL, 0); + + if(data.type === PIXI.Graphics.RECT) + { + PIXI.WebGLGraphics.buildRectangle(data, webGLData); + } + else if(data.type === PIXI.Graphics.CIRC || data.type === PIXI.Graphics.ELIP) + { + PIXI.WebGLGraphics.buildCircle(data, webGLData); + } + else if(data.type === PIXI.Graphics.RREC) + { + PIXI.WebGLGraphics.buildRoundedRectangle(data, webGLData); + } + } + + webGL.lastIndex++; + } + + // upload all the dirty data... + for (i = 0; i < webGL.data.length; i++) + { + webGLData = webGL.data[i]; + if(webGLData.dirty)webGLData.upload(); + } +}; + +/** + * @static + * @private + * @method switchMode + * @param webGL {WebGLContext} + * @param type {Number} + */ +PIXI.WebGLGraphics.switchMode = function(webGL, type) +{ + var webGLData; + + if(!webGL.data.length) + { + webGLData = PIXI.WebGLGraphics.graphicsDataPool.pop() || new PIXI.WebGLGraphicsData(webGL.gl); + webGLData.mode = type; + webGL.data.push(webGLData); + } + else + { + webGLData = webGL.data[webGL.data.length-1]; + + if(webGLData.mode !== type || type === 1) + { + webGLData = PIXI.WebGLGraphics.graphicsDataPool.pop() || new PIXI.WebGLGraphicsData(webGL.gl); + webGLData.mode = type; + webGL.data.push(webGLData); + } + } + + webGLData.dirty = true; + + return webGLData; +}; + +/** + * Builds a rectangle to draw + * + * @static + * @private + * @method buildRectangle + * @param graphicsData {Graphics} The graphics object containing all the necessary properties + * @param webGLData {Object} + */ +PIXI.WebGLGraphics.buildRectangle = function(graphicsData, webGLData) +{ + // --- // + // need to convert points to a nice regular data + // + var rectData = graphicsData.shape; + var x = rectData.x; + var y = rectData.y; + var width = rectData.width; + var height = rectData.height; + + if(graphicsData.fill) + { + var color = PIXI.hex2rgb(graphicsData.fillColor); + var alpha = graphicsData.fillAlpha; + + var r = color[0] * alpha; + var g = color[1] * alpha; + var b = color[2] * alpha; + + var verts = webGLData.points; + var indices = webGLData.indices; + + var vertPos = verts.length/6; + + // start + verts.push(x, y); + verts.push(r, g, b, alpha); + + verts.push(x + width, y); + verts.push(r, g, b, alpha); + + verts.push(x , y + height); + verts.push(r, g, b, alpha); + + verts.push(x + width, y + height); + verts.push(r, g, b, alpha); + + // insert 2 dead triangles.. + indices.push(vertPos, vertPos, vertPos+1, vertPos+2, vertPos+3, vertPos+3); + } + + if(graphicsData.lineWidth) + { + var tempPoints = graphicsData.points; + + graphicsData.points = [x, y, + x + width, y, + x + width, y + height, + x, y + height, + x, y]; + + + PIXI.WebGLGraphics.buildLine(graphicsData, webGLData); + + graphicsData.points = tempPoints; + } +}; + +/** + * Builds a rounded rectangle to draw + * + * @static + * @private + * @method buildRoundedRectangle + * @param graphicsData {Graphics} The graphics object containing all the necessary properties + * @param webGLData {Object} + */ +PIXI.WebGLGraphics.buildRoundedRectangle = function(graphicsData, webGLData) +{ + var rrectData = graphicsData.shape; + var x = rrectData.x; + var y = rrectData.y; + var width = rrectData.width; + var height = rrectData.height; + + var radius = rrectData.radius; + + var recPoints = []; + recPoints.push(x, y + radius); + recPoints = recPoints.concat(PIXI.WebGLGraphics.quadraticBezierCurve(x, y + height - radius, x, y + height, x + radius, y + height)); + recPoints = recPoints.concat(PIXI.WebGLGraphics.quadraticBezierCurve(x + width - radius, y + height, x + width, y + height, x + width, y + height - radius)); + recPoints = recPoints.concat(PIXI.WebGLGraphics.quadraticBezierCurve(x + width, y + radius, x + width, y, x + width - radius, y)); + recPoints = recPoints.concat(PIXI.WebGLGraphics.quadraticBezierCurve(x + radius, y, x, y, x, y + radius)); + + if (graphicsData.fill) { + var color = PIXI.hex2rgb(graphicsData.fillColor); + var alpha = graphicsData.fillAlpha; + + var r = color[0] * alpha; + var g = color[1] * alpha; + var b = color[2] * alpha; + + var verts = webGLData.points; + var indices = webGLData.indices; + + var vecPos = verts.length/6; + + var triangles = PIXI.PolyK.Triangulate(recPoints); + + // + + var i = 0; + for (i = 0; i < triangles.length; i+=3) + { + indices.push(triangles[i] + vecPos); + indices.push(triangles[i] + vecPos); + indices.push(triangles[i+1] + vecPos); + indices.push(triangles[i+2] + vecPos); + indices.push(triangles[i+2] + vecPos); + } + + + for (i = 0; i < recPoints.length; i++) + { + verts.push(recPoints[i], recPoints[++i], r, g, b, alpha); + } + } + + if (graphicsData.lineWidth) { + var tempPoints = graphicsData.points; + + graphicsData.points = recPoints; + + PIXI.WebGLGraphics.buildLine(graphicsData, webGLData); + + graphicsData.points = tempPoints; + } +}; + +/** + * Calculate the points for a quadratic bezier curve. (helper function..) + * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c + * + * @static + * @private + * @method quadraticBezierCurve + * @param fromX {Number} Origin point x + * @param fromY {Number} Origin point x + * @param cpX {Number} Control point x + * @param cpY {Number} Control point y + * @param toX {Number} Destination point x + * @param toY {Number} Destination point y + * @return {Array(Number)} + */ +PIXI.WebGLGraphics.quadraticBezierCurve = function(fromX, fromY, cpX, cpY, toX, toY) { + + var xa, + ya, + xb, + yb, + x, + y, + n = 20, + points = []; + + function getPt(n1 , n2, perc) { + var diff = n2 - n1; + + return n1 + ( diff * perc ); + } + + var j = 0; + for (var i = 0; i <= n; i++ ) + { + j = i / n; + + // The Green Line + xa = getPt( fromX , cpX , j ); + ya = getPt( fromY , cpY , j ); + xb = getPt( cpX , toX , j ); + yb = getPt( cpY , toY , j ); + + // The Black Dot + x = getPt( xa , xb , j ); + y = getPt( ya , yb , j ); + + points.push(x, y); + } + return points; +}; + +/** + * Builds a circle to draw + * + * @static + * @private + * @method buildCircle + * @param graphicsData {Graphics} The graphics object to draw + * @param webGLData {Object} + */ +PIXI.WebGLGraphics.buildCircle = function(graphicsData, webGLData) +{ + // need to convert points to a nice regular data + var circleData = graphicsData.shape; + var x = circleData.x; + var y = circleData.y; + var width; + var height; + + // TODO - bit hacky?? + if(graphicsData.type === PIXI.Graphics.CIRC) + { + width = circleData.radius; + height = circleData.radius; + } + else + { + width = circleData.width; + height = circleData.height; + } + + var totalSegs = 40; + var seg = (Math.PI * 2) / totalSegs ; + + var i = 0; + + if(graphicsData.fill) + { + var color = PIXI.hex2rgb(graphicsData.fillColor); + var alpha = graphicsData.fillAlpha; + + var r = color[0] * alpha; + var g = color[1] * alpha; + var b = color[2] * alpha; + + var verts = webGLData.points; + var indices = webGLData.indices; + + var vecPos = verts.length/6; + + indices.push(vecPos); + + for (i = 0; i < totalSegs + 1 ; i++) + { + verts.push(x,y, r, g, b, alpha); + + verts.push(x + Math.sin(seg * i) * width, + y + Math.cos(seg * i) * height, + r, g, b, alpha); + + indices.push(vecPos++, vecPos++); + } + + indices.push(vecPos-1); + } + + if(graphicsData.lineWidth) + { + var tempPoints = graphicsData.points; + + graphicsData.points = []; + + for (i = 0; i < totalSegs + 1; i++) + { + graphicsData.points.push(x + Math.sin(seg * i) * width, + y + Math.cos(seg * i) * height); + } + + PIXI.WebGLGraphics.buildLine(graphicsData, webGLData); + + graphicsData.points = tempPoints; + } +}; + +/** + * Builds a line to draw + * + * @static + * @private + * @method buildLine + * @param graphicsData {Graphics} The graphics object containing all the necessary properties + * @param webGLData {Object} + */ +PIXI.WebGLGraphics.buildLine = function(graphicsData, webGLData) +{ + // TODO OPTIMISE! + var i = 0; + var points = graphicsData.points; + if(points.length === 0)return; + + // if the line width is an odd number add 0.5 to align to a whole pixel + if(graphicsData.lineWidth%2) + { + for (i = 0; i < points.length; i++) { + points[i] += 0.5; + } + } + + // get first and last point.. figure out the middle! + var firstPoint = new PIXI.Point( points[0], points[1] ); + var lastPoint = new PIXI.Point( points[points.length - 2], points[points.length - 1] ); + + // if the first point is the last point - gonna have issues :) + if(firstPoint.x === lastPoint.x && firstPoint.y === lastPoint.y) + { + // need to clone as we are going to slightly modify the shape.. + points = points.slice(); + + points.pop(); + points.pop(); + + lastPoint = new PIXI.Point( points[points.length - 2], points[points.length - 1] ); + + var midPointX = lastPoint.x + (firstPoint.x - lastPoint.x) *0.5; + var midPointY = lastPoint.y + (firstPoint.y - lastPoint.y) *0.5; + + points.unshift(midPointX, midPointY); + points.push(midPointX, midPointY); + } + + var verts = webGLData.points; + var indices = webGLData.indices; + var length = points.length / 2; + var indexCount = points.length; + var indexStart = verts.length/6; + + // DRAW the Line + var width = graphicsData.lineWidth / 2; + + // sort color + var color = PIXI.hex2rgb(graphicsData.lineColor); + var alpha = graphicsData.lineAlpha; + var r = color[0] * alpha; + var g = color[1] * alpha; + var b = color[2] * alpha; + + var px, py, p1x, p1y, p2x, p2y, p3x, p3y; + var perpx, perpy, perp2x, perp2y, perp3x, perp3y; + var a1, b1, c1, a2, b2, c2; + var denom, pdist, dist; + + p1x = points[0]; + p1y = points[1]; + + p2x = points[2]; + p2y = points[3]; + + perpx = -(p1y - p2y); + perpy = p1x - p2x; + + dist = Math.sqrt(perpx*perpx + perpy*perpy); + + perpx /= dist; + perpy /= dist; + perpx *= width; + perpy *= width; + + // start + verts.push(p1x - perpx , p1y - perpy, + r, g, b, alpha); + + verts.push(p1x + perpx , p1y + perpy, + r, g, b, alpha); + + for (i = 1; i < length-1; i++) + { + p1x = points[(i-1)*2]; + p1y = points[(i-1)*2 + 1]; + + p2x = points[(i)*2]; + p2y = points[(i)*2 + 1]; + + p3x = points[(i+1)*2]; + p3y = points[(i+1)*2 + 1]; + + perpx = -(p1y - p2y); + perpy = p1x - p2x; + + dist = Math.sqrt(perpx*perpx + perpy*perpy); + perpx /= dist; + perpy /= dist; + perpx *= width; + perpy *= width; + + perp2x = -(p2y - p3y); + perp2y = p2x - p3x; + + dist = Math.sqrt(perp2x*perp2x + perp2y*perp2y); + perp2x /= dist; + perp2y /= dist; + perp2x *= width; + perp2y *= width; + + a1 = (-perpy + p1y) - (-perpy + p2y); + b1 = (-perpx + p2x) - (-perpx + p1x); + c1 = (-perpx + p1x) * (-perpy + p2y) - (-perpx + p2x) * (-perpy + p1y); + a2 = (-perp2y + p3y) - (-perp2y + p2y); + b2 = (-perp2x + p2x) - (-perp2x + p3x); + c2 = (-perp2x + p3x) * (-perp2y + p2y) - (-perp2x + p2x) * (-perp2y + p3y); + + denom = a1*b2 - a2*b1; + + if(Math.abs(denom) < 0.00001 ) + { + + denom+=10.00001; + verts.push(p2x - perpx , p2y - perpy, + r, g, b, alpha); + + verts.push(p2x + perpx , p2y + perpy, + r, g, b, alpha); + + continue; + } + + px = (b1*c2 - b2*c1)/denom; + py = (a2*c1 - a1*c2)/denom; + + + pdist = (px -p2x) * (px -p2x) + (py -p2y) + (py -p2y); + + + if(pdist > 140 * 140) + { + perp3x = perpx - perp2x; + perp3y = perpy - perp2y; + + dist = Math.sqrt(perp3x*perp3x + perp3y*perp3y); + perp3x /= dist; + perp3y /= dist; + perp3x *= width; + perp3y *= width; + + verts.push(p2x - perp3x, p2y -perp3y); + verts.push(r, g, b, alpha); + + verts.push(p2x + perp3x, p2y +perp3y); + verts.push(r, g, b, alpha); + + verts.push(p2x - perp3x, p2y -perp3y); + verts.push(r, g, b, alpha); + + indexCount++; + } + else + { + + verts.push(px , py); + verts.push(r, g, b, alpha); + + verts.push(p2x - (px-p2x), p2y - (py - p2y)); + verts.push(r, g, b, alpha); + } + } + + p1x = points[(length-2)*2]; + p1y = points[(length-2)*2 + 1]; + + p2x = points[(length-1)*2]; + p2y = points[(length-1)*2 + 1]; + + perpx = -(p1y - p2y); + perpy = p1x - p2x; + + dist = Math.sqrt(perpx*perpx + perpy*perpy); + perpx /= dist; + perpy /= dist; + perpx *= width; + perpy *= width; + + verts.push(p2x - perpx , p2y - perpy); + verts.push(r, g, b, alpha); + + verts.push(p2x + perpx , p2y + perpy); + verts.push(r, g, b, alpha); + + indices.push(indexStart); + + for (i = 0; i < indexCount; i++) + { + indices.push(indexStart++); + } + + indices.push(indexStart-1); +}; + +/** + * Builds a complex polygon to draw + * + * @static + * @private + * @method buildComplexPoly + * @param graphicsData {Graphics} The graphics object containing all the necessary properties + * @param webGLData {Object} + */ +PIXI.WebGLGraphics.buildComplexPoly = function(graphicsData, webGLData) +{ + //TODO - no need to copy this as it gets turned into a FLoat32Array anyways.. + var points = graphicsData.points.slice(); + if(points.length < 6)return; + + // get first and last point.. figure out the middle! + var indices = webGLData.indices; + webGLData.points = points; + webGLData.alpha = graphicsData.fillAlpha; + webGLData.color = PIXI.hex2rgb(graphicsData.fillColor); + + /* + calclate the bounds.. + */ + var minX = Infinity; + var maxX = -Infinity; + + var minY = Infinity; + var maxY = -Infinity; + + var x,y; + + // get size.. + for (var i = 0; i < points.length; i+=2) + { + x = points[i]; + y = points[i+1]; + + minX = x < minX ? x : minX; + maxX = x > maxX ? x : maxX; + + minY = y < minY ? y : minY; + maxY = y > maxY ? y : maxY; + } + + // add a quad to the end cos there is no point making another buffer! + points.push(minX, minY, + maxX, minY, + maxX, maxY, + minX, maxY); + + // push a quad onto the end.. + + //TODO - this aint needed! + var length = points.length / 2; + for (i = 0; i < length; i++) + { + indices.push( i ); + } + +}; + +/** + * Builds a polygon to draw + * + * @static + * @private + * @method buildPoly + * @param graphicsData {Graphics} The graphics object containing all the necessary properties + * @param webGLData {Object} + */ +PIXI.WebGLGraphics.buildPoly = function(graphicsData, webGLData) +{ + var points = graphicsData.points; + + if(points.length < 6)return; + // get first and last point.. figure out the middle! + var verts = webGLData.points; + var indices = webGLData.indices; + + var length = points.length / 2; + + // sort color + var color = PIXI.hex2rgb(graphicsData.fillColor); + var alpha = graphicsData.fillAlpha; + var r = color[0] * alpha; + var g = color[1] * alpha; + var b = color[2] * alpha; + + var triangles = PIXI.PolyK.Triangulate(points); + + if(!triangles)return false; + + var vertPos = verts.length / 6; + + var i = 0; + + for (i = 0; i < triangles.length; i+=3) + { + indices.push(triangles[i] + vertPos); + indices.push(triangles[i] + vertPos); + indices.push(triangles[i+1] + vertPos); + indices.push(triangles[i+2] +vertPos); + indices.push(triangles[i+2] + vertPos); + } + + for (i = 0; i < length; i++) + { + verts.push(points[i * 2], points[i * 2 + 1], + r, g, b, alpha); + } + + return true; +}; + +PIXI.WebGLGraphics.graphicsDataPool = []; + +/** + * @class WebGLGraphicsData + * @private + * @static + */ +PIXI.WebGLGraphicsData = function(gl) +{ + this.gl = gl; + + //TODO does this need to be split before uploding?? + this.color = [0,0,0]; // color split! + this.points = []; + this.indices = []; + this.buffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.mode = 1; + this.alpha = 1; + this.dirty = true; +}; + +/** + * @method reset + */ +PIXI.WebGLGraphicsData.prototype.reset = function() +{ + this.points = []; + this.indices = []; +}; + +/** + * @method upload + */ +PIXI.WebGLGraphicsData.prototype.upload = function() +{ + var gl = this.gl; + +// this.lastIndex = graphics.graphicsData.length; + this.glPoints = new PIXI.Float32Array(this.points); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); + gl.bufferData(gl.ARRAY_BUFFER, this.glPoints, gl.STATIC_DRAW); + + this.glIndicies = new PIXI.Uint16Array(this.indices); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.glIndicies, gl.STATIC_DRAW); + + this.dirty = false; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.glContexts = []; // this is where we store the webGL contexts for easy access. +PIXI.instances = []; + +/** + * The WebGLRenderer draws the stage and all its content onto a webGL enabled canvas. This renderer + * should be used for browsers that support webGL. This Render works by automatically managing webGLBatchs. + * So no need for Sprite Batches or Sprite Clouds. + * Don't forget to add the view to your DOM or you will not see anything :) + * + * @class WebGLRenderer + * @constructor + * @param [width=0] {Number} the width of the canvas view + * @param [height=0] {Number} the height of the canvas view + * @param [options] {Object} The optional renderer parameters + * @param [options.view] {HTMLCanvasElement} the canvas to use as a view, optional + * @param [options.transparent=false] {Boolean} If the render view is transparent, default false + * @param [options.autoResize=false] {Boolean} If the render view is automatically resized, default false + * @param [options.antialias=false] {Boolean} sets antialias (only applicable in chrome at the moment) + * @param [options.preserveDrawingBuffer=false] {Boolean} enables drawing buffer preservation, enable this if you need to call toDataUrl on the webgl context + * @param [options.resolution=1] {Number} the resolution of the renderer retina would be 2 + */ +PIXI.WebGLRenderer = function(width, height, options) +{ + if(options) + { + for (var i in PIXI.defaultRenderOptions) + { + if (typeof options[i] === 'undefined') options[i] = PIXI.defaultRenderOptions[i]; + } + } + else + { + options = PIXI.defaultRenderOptions; + } + + if(!PIXI.defaultRenderer) + { + PIXI.sayHello('webGL'); + PIXI.defaultRenderer = this; + } + + /** + * @property type + * @type Number + */ + this.type = PIXI.WEBGL_RENDERER; + + /** + * The resolution of the renderer + * + * @property resolution + * @type Number + * @default 1 + */ + this.resolution = options.resolution; + + // do a catch.. only 1 webGL renderer.. + + /** + * Whether the render view is transparent + * + * @property transparent + * @type Boolean + */ + this.transparent = options.transparent; + + /** + * Whether the render view should be resized automatically + * + * @property autoResize + * @type Boolean + */ + this.autoResize = options.autoResize || false; + + /** + * The value of the preserveDrawingBuffer flag affects whether or not the contents of the stencil buffer is retained after rendering. + * + * @property preserveDrawingBuffer + * @type Boolean + */ + this.preserveDrawingBuffer = options.preserveDrawingBuffer; + + /** + * This sets if the WebGLRenderer will clear the context texture or not before the new render pass. If true: + * If the Stage is NOT transparent, Pixi will clear to alpha (0, 0, 0, 0). + * If the Stage is transparent, Pixi will clear to the target Stage's background color. + * Disable this by setting this to false. For example: if your game has a canvas filling background image, you often don't need this set. + * + * @property clearBeforeRender + * @type Boolean + * @default + */ + this.clearBeforeRender = options.clearBeforeRender; + + /** + * The width of the canvas view + * + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + + /** + * The height of the canvas view + * + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + /** + * The canvas element that everything is drawn to + * + * @property view + * @type HTMLCanvasElement + */ + this.view = options.view || document.createElement( 'canvas' ); + + // deal with losing context.. + + /** + * @property contextLostBound + * @type Function + */ + this.contextLostBound = this.handleContextLost.bind(this); + + /** + * @property contextRestoredBound + * @type Function + */ + this.contextRestoredBound = this.handleContextRestored.bind(this); + + this.view.addEventListener('webglcontextlost', this.contextLostBound, false); + this.view.addEventListener('webglcontextrestored', this.contextRestoredBound, false); + + /** + * @property _contextOptions + * @type Object + * @private + */ + this._contextOptions = { + alpha: this.transparent, + antialias: options.antialias, // SPEED UP?? + premultipliedAlpha:this.transparent && this.transparent !== 'notMultiplied', + stencil:true, + preserveDrawingBuffer: options.preserveDrawingBuffer + }; + + /** + * @property projection + * @type Point + */ + this.projection = new PIXI.Point(); + + /** + * @property offset + * @type Point + */ + this.offset = new PIXI.Point(0, 0); + + // time to create the render managers! each one focuses on managing a state in webGL + + /** + * Deals with managing the shader programs and their attribs + * @property shaderManager + * @type WebGLShaderManager + */ + this.shaderManager = new PIXI.WebGLShaderManager(); + + /** + * Manages the rendering of sprites + * @property spriteBatch + * @type WebGLSpriteBatch + */ + this.spriteBatch = new PIXI.WebGLSpriteBatch(); + + /** + * Manages the masks using the stencil buffer + * @property maskManager + * @type WebGLMaskManager + */ + this.maskManager = new PIXI.WebGLMaskManager(); + + /** + * Manages the filters + * @property filterManager + * @type WebGLFilterManager + */ + this.filterManager = new PIXI.WebGLFilterManager(); + + /** + * Manages the stencil buffer + * @property stencilManager + * @type WebGLStencilManager + */ + this.stencilManager = new PIXI.WebGLStencilManager(); + + /** + * Manages the blendModes + * @property blendModeManager + * @type WebGLBlendModeManager + */ + this.blendModeManager = new PIXI.WebGLBlendModeManager(); + + /** + * TODO remove + * @property renderSession + * @type Object + */ + this.renderSession = {}; + this.renderSession.gl = this.gl; + this.renderSession.drawCount = 0; + this.renderSession.shaderManager = this.shaderManager; + this.renderSession.maskManager = this.maskManager; + this.renderSession.filterManager = this.filterManager; + this.renderSession.blendModeManager = this.blendModeManager; + this.renderSession.spriteBatch = this.spriteBatch; + this.renderSession.stencilManager = this.stencilManager; + this.renderSession.renderer = this; + this.renderSession.resolution = this.resolution; + + // time init the context.. + this.initContext(); + + // map some webGL blend modes.. + this.mapBlendModes(); +}; + +// constructor +PIXI.WebGLRenderer.prototype.constructor = PIXI.WebGLRenderer; + +/** +* @method initContext +*/ +PIXI.WebGLRenderer.prototype.initContext = function() +{ + var gl = this.view.getContext('webgl', this._contextOptions) || this.view.getContext('experimental-webgl', this._contextOptions); + this.gl = gl; + + if (!gl) { + // fail, not able to get a context + throw new Error('This browser does not support webGL. Try using the canvas renderer'); + } + + this.glContextId = gl.id = PIXI.WebGLRenderer.glContextId ++; + + PIXI.glContexts[this.glContextId] = gl; + + PIXI.instances[this.glContextId] = this; + + // set up the default pixi settings.. + gl.disable(gl.DEPTH_TEST); + gl.disable(gl.CULL_FACE); + gl.enable(gl.BLEND); + + // need to set the context for all the managers... + this.shaderManager.setContext(gl); + this.spriteBatch.setContext(gl); + this.maskManager.setContext(gl); + this.filterManager.setContext(gl); + this.blendModeManager.setContext(gl); + this.stencilManager.setContext(gl); + + this.renderSession.gl = this.gl; + + // now resize and we are good to go! + this.resize(this.width, this.height); +}; + +/** + * Renders the stage to its webGL view + * + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.WebGLRenderer.prototype.render = function(stage) +{ + // no point rendering if our context has been blown up! + if(this.contextLost)return; + + // if rendering a new stage clear the batches.. + if(this.__stage !== stage) + { + if(stage.interactive)stage.interactionManager.removeEvents(); + + // TODO make this work + // dont think this is needed any more? + this.__stage = stage; + } + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + // interaction + if(stage._interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + else + { + if(stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = false; + stage.interactionManager.setTarget(this); + } + } + + // -- Does this need to be set every frame? -- // + gl.viewport(0, 0, this.width, this.height); + + // make sure we are bound to the main frame buffer + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + + if (this.clearBeforeRender) + { + if(this.transparent) + { + gl.clearColor(0, 0, 0, 0); + } + else + { + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], 1); + } + + gl.clear (gl.COLOR_BUFFER_BIT); + } + + this.renderDisplayObject( stage, this.projection ); +}; + +/** + * Renders a Display Object. + * + * @method renderDisplayObject + * @param displayObject {DisplayObject} The DisplayObject to render + * @param projection {Point} The projection + * @param buffer {Array} a standard WebGL buffer + */ +PIXI.WebGLRenderer.prototype.renderDisplayObject = function(displayObject, projection, buffer) +{ + this.renderSession.blendModeManager.setBlendMode(PIXI.blendModes.NORMAL); + + // reset the render session data.. + this.renderSession.drawCount = 0; + + // make sure to flip the Y if using a render texture.. + this.renderSession.flipY = buffer ? -1 : 1; + + // set the default projection + this.renderSession.projection = projection; + + //set the default offset + this.renderSession.offset = this.offset; + + // start the sprite batch + this.spriteBatch.begin(this.renderSession); + + // start the filter manager + this.filterManager.begin(this.renderSession, buffer); + + // render the scene! + displayObject._renderWebGL(this.renderSession); + + // finish the sprite batch + this.spriteBatch.end(); +}; + +/** + * Resizes the webGL view to the specified width and height. + * + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width * this.resolution; + this.height = height * this.resolution; + + this.view.width = this.width; + this.view.height = this.height; + + if (this.autoResize) { + this.view.style.width = this.width / this.resolution + 'px'; + this.view.style.height = this.height / this.resolution + 'px'; + } + + this.gl.viewport(0, 0, this.width, this.height); + + this.projection.x = this.width / 2 / this.resolution; + this.projection.y = -this.height / 2 / this.resolution; +}; + +/** + * Updates and Creates a WebGL texture for the renderers context. + * + * @method updateTexture + * @param texture {Texture} the texture to update + */ +PIXI.WebGLRenderer.prototype.updateTexture = function(texture) +{ + if(!texture.hasLoaded )return; + + var gl = this.gl; + + if(!texture._glTextures[gl.id])texture._glTextures[gl.id] = gl.createTexture(); + + gl.bindTexture(gl.TEXTURE_2D, texture._glTextures[gl.id]); + + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultipliedAlpha); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, texture.scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); + + + if(texture.mipmap && PIXI.isPowerOfTwo(texture.width, texture.height)) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, texture.scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR_MIPMAP_LINEAR : gl.NEAREST_MIPMAP_NEAREST); + gl.generateMipmap(gl.TEXTURE_2D); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, texture.scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); + } + + // reguler... + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + texture._dirty[gl.id] = false; + + return texture._glTextures[gl.id]; +}; + +/** + * Handles a lost webgl context + * + * @method handleContextLost + * @param event {Event} + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +}; + +/** + * Handles a restored webgl context + * + * @method handleContextRestored + * @param event {Event} + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function() +{ + this.initContext(); + + // empty all the ol gl textures as they are useless now + for(var key in PIXI.TextureCache) + { + var texture = PIXI.TextureCache[key].baseTexture; + texture._glTextures = []; + } + + this.contextLost = false; +}; + +/** + * Removes everything from the renderer (event listeners, spritebatch, etc...) + * + * @method destroy + */ +PIXI.WebGLRenderer.prototype.destroy = function() +{ + // remove listeners + this.view.removeEventListener('webglcontextlost', this.contextLostBound); + this.view.removeEventListener('webglcontextrestored', this.contextRestoredBound); + + PIXI.glContexts[this.glContextId] = null; + + this.projection = null; + this.offset = null; + + // time to create the render managers! each one focuses on managine a state in webGL + this.shaderManager.destroy(); + this.spriteBatch.destroy(); + this.maskManager.destroy(); + this.filterManager.destroy(); + + this.shaderManager = null; + this.spriteBatch = null; + this.maskManager = null; + this.filterManager = null; + + this.gl = null; + this.renderSession = null; +}; + +/** + * Maps Pixi blend modes to WebGL blend modes. It works only for pre-multiplied textures. + * + * @method mapBlendModes + */ +PIXI.WebGLRenderer.prototype.mapBlendModes = function() +{ + var gl = this.gl; + + if(!PIXI.blendModesWebGL) + { + PIXI.blendModesWebGL = []; + + PIXI.blendModesWebGL[PIXI.blendModes.NORMAL] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.ADD] = [gl.ONE, gl.DST_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.MULTIPLY] = [gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.SCREEN] = [gl.ONE, gl.ONE_MINUS_SRC_COLOR]; + PIXI.blendModesWebGL[PIXI.blendModes.OVERLAY] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.DARKEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.LIGHTEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.COLOR_DODGE] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.COLOR_BURN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.HARD_LIGHT] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.SOFT_LIGHT] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.DIFFERENCE] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.EXCLUSION] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.HUE] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.SATURATION] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.COLOR] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.LUMINOSITY] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + } +}; + +PIXI.WebGLRenderer.glContextId = 0; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @class WebGLBlendModeManager +* @constructor +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.WebGLBlendModeManager = function() +{ + /** + * @property currentBlendMode + * @type Number + */ + this.currentBlendMode = 99999; +}; + +PIXI.WebGLBlendModeManager.prototype.constructor = PIXI.WebGLBlendModeManager; + +/** + * Sets the WebGL Context. + * + * @method setContext + * @param gl {WebGLContext} the current WebGL drawing context + */ +PIXI.WebGLBlendModeManager.prototype.setContext = function(gl) +{ + this.gl = gl; +}; + +/** +* Sets-up the given blendMode from WebGL's point of view. +* +* @method setBlendMode +* @param blendMode {Number} the blendMode, should be a Pixi const, such as PIXI.BlendModes.ADD +*/ +PIXI.WebGLBlendModeManager.prototype.setBlendMode = function(blendMode) +{ + if(this.currentBlendMode === blendMode)return false; + + this.currentBlendMode = blendMode; + + var blendModeWebGL = PIXI.blendModesWebGL[this.currentBlendMode]; + this.gl.blendFunc(blendModeWebGL[0], blendModeWebGL[1]); + + return true; +}; + +/** +* Destroys this object. +* +* @method destroy +*/ +PIXI.WebGLBlendModeManager.prototype.destroy = function() +{ + this.gl = null; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @class WebGLMaskManager +* @constructor +* @private +*/ +PIXI.WebGLMaskManager = function() +{ +}; + +PIXI.WebGLMaskManager.prototype.constructor = PIXI.WebGLMaskManager; + +/** +* Sets the drawing context to the one given in parameter. +* +* @method setContext +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.WebGLMaskManager.prototype.setContext = function(gl) +{ + this.gl = gl; +}; + +/** +* Applies the Mask and adds it to the current filter stack. +* +* @method pushMask +* @param maskData {Array} +* @param renderSession {Object} +*/ +PIXI.WebGLMaskManager.prototype.pushMask = function(maskData, renderSession) +{ + var gl = renderSession.gl; + + if(maskData.dirty) + { + PIXI.WebGLGraphics.updateGraphics(maskData, gl); + } + + if(!maskData._webGL[gl.id].data.length)return; + + renderSession.stencilManager.pushStencil(maskData, maskData._webGL[gl.id].data[0], renderSession); +}; + +/** +* Removes the last filter from the filter stack and doesn't return it. +* +* @method popMask +* @param maskData {Array} +* @param renderSession {Object} an object containing all the useful parameters +*/ +PIXI.WebGLMaskManager.prototype.popMask = function(maskData, renderSession) +{ + var gl = this.gl; + renderSession.stencilManager.popStencil(maskData, maskData._webGL[gl.id].data[0], renderSession); +}; + +/** +* Destroys the mask stack. +* +* @method destroy +*/ +PIXI.WebGLMaskManager.prototype.destroy = function() +{ + this.gl = null; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @class WebGLStencilManager +* @constructor +* @private +*/ +PIXI.WebGLStencilManager = function() +{ + this.stencilStack = []; + this.reverse = true; + this.count = 0; +}; + +/** +* Sets the drawing context to the one given in parameter. +* +* @method setContext +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.WebGLStencilManager.prototype.setContext = function(gl) +{ + this.gl = gl; +}; + +/** +* Applies the Mask and adds it to the current filter stack. +* +* @method pushMask +* @param graphics {Graphics} +* @param webGLData {Array} +* @param renderSession {Object} +*/ +PIXI.WebGLStencilManager.prototype.pushStencil = function(graphics, webGLData, renderSession) +{ + var gl = this.gl; + this.bindGraphics(graphics, webGLData, renderSession); + + if(this.stencilStack.length === 0) + { + gl.enable(gl.STENCIL_TEST); + gl.clear(gl.STENCIL_BUFFER_BIT); + this.reverse = true; + this.count = 0; + } + + this.stencilStack.push(webGLData); + + var level = this.count; + + gl.colorMask(false, false, false, false); + + gl.stencilFunc(gl.ALWAYS,0,0xFF); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.INVERT); + + // draw the triangle strip! + + if(webGLData.mode === 1) + { + gl.drawElements(gl.TRIANGLE_FAN, webGLData.indices.length - 4, gl.UNSIGNED_SHORT, 0 ); + + if(this.reverse) + { + gl.stencilFunc(gl.EQUAL, 0xFF - level, 0xFF); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.DECR); + } + else + { + gl.stencilFunc(gl.EQUAL,level, 0xFF); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.INCR); + } + + // draw a quad to increment.. + gl.drawElements(gl.TRIANGLE_FAN, 4, gl.UNSIGNED_SHORT, ( webGLData.indices.length - 4 ) * 2 ); + + if(this.reverse) + { + gl.stencilFunc(gl.EQUAL,0xFF-(level+1), 0xFF); + } + else + { + gl.stencilFunc(gl.EQUAL,level+1, 0xFF); + } + + this.reverse = !this.reverse; + } + else + { + if(!this.reverse) + { + gl.stencilFunc(gl.EQUAL, 0xFF - level, 0xFF); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.DECR); + } + else + { + gl.stencilFunc(gl.EQUAL,level, 0xFF); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.INCR); + } + + gl.drawElements(gl.TRIANGLE_STRIP, webGLData.indices.length, gl.UNSIGNED_SHORT, 0 ); + + if(!this.reverse) + { + gl.stencilFunc(gl.EQUAL,0xFF-(level+1), 0xFF); + } + else + { + gl.stencilFunc(gl.EQUAL,level+1, 0xFF); + } + } + + gl.colorMask(true, true, true, true); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.KEEP); + + this.count++; +}; + +/** + * TODO this does not belong here! + * + * @method bindGraphics + * @param graphics {Graphics} + * @param webGLData {Array} + * @param renderSession {Object} + */ +PIXI.WebGLStencilManager.prototype.bindGraphics = function(graphics, webGLData, renderSession) +{ + //if(this._currentGraphics === graphics)return; + this._currentGraphics = graphics; + + var gl = this.gl; + + // bind the graphics object.. + var projection = renderSession.projection, + offset = renderSession.offset, + shader;// = renderSession.shaderManager.primitiveShader; + + if(webGLData.mode === 1) + { + shader = renderSession.shaderManager.complexPrimitiveShader; + + renderSession.shaderManager.setShader( shader ); + + gl.uniform1f(shader.flipY, renderSession.flipY); + + gl.uniformMatrix3fv(shader.translationMatrix, false, graphics.worldTransform.toArray(true)); + + gl.uniform2f(shader.projectionVector, projection.x, -projection.y); + gl.uniform2f(shader.offsetVector, -offset.x, -offset.y); + + gl.uniform3fv(shader.tintColor, PIXI.hex2rgb(graphics.tint)); + gl.uniform3fv(shader.color, webGLData.color); + + gl.uniform1f(shader.alpha, graphics.worldAlpha * webGLData.alpha); + + gl.bindBuffer(gl.ARRAY_BUFFER, webGLData.buffer); + + gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 4 * 2, 0); + + + // now do the rest.. + // set the index buffer! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, webGLData.indexBuffer); + } + else + { + //renderSession.shaderManager.activatePrimitiveShader(); + shader = renderSession.shaderManager.primitiveShader; + renderSession.shaderManager.setShader( shader ); + + gl.uniformMatrix3fv(shader.translationMatrix, false, graphics.worldTransform.toArray(true)); + + gl.uniform1f(shader.flipY, renderSession.flipY); + gl.uniform2f(shader.projectionVector, projection.x, -projection.y); + gl.uniform2f(shader.offsetVector, -offset.x, -offset.y); + + gl.uniform3fv(shader.tintColor, PIXI.hex2rgb(graphics.tint)); + + gl.uniform1f(shader.alpha, graphics.worldAlpha); + + gl.bindBuffer(gl.ARRAY_BUFFER, webGLData.buffer); + + gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 4 * 6, 0); + gl.vertexAttribPointer(shader.colorAttribute, 4, gl.FLOAT, false,4 * 6, 2 * 4); + + // set the index buffer! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, webGLData.indexBuffer); + } +}; + +/** + * @method popStencil + * @param graphics {Graphics} + * @param webGLData {Array} + * @param renderSession {Object} + */ +PIXI.WebGLStencilManager.prototype.popStencil = function(graphics, webGLData, renderSession) +{ + var gl = this.gl; + this.stencilStack.pop(); + + this.count--; + + if(this.stencilStack.length === 0) + { + // the stack is empty! + gl.disable(gl.STENCIL_TEST); + + } + else + { + + var level = this.count; + + this.bindGraphics(graphics, webGLData, renderSession); + + gl.colorMask(false, false, false, false); + + if(webGLData.mode === 1) + { + this.reverse = !this.reverse; + + if(this.reverse) + { + gl.stencilFunc(gl.EQUAL, 0xFF - (level+1), 0xFF); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.INCR); + } + else + { + gl.stencilFunc(gl.EQUAL,level+1, 0xFF); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.DECR); + } + + // draw a quad to increment.. + gl.drawElements(gl.TRIANGLE_FAN, 4, gl.UNSIGNED_SHORT, ( webGLData.indices.length - 4 ) * 2 ); + + gl.stencilFunc(gl.ALWAYS,0,0xFF); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.INVERT); + + // draw the triangle strip! + gl.drawElements(gl.TRIANGLE_FAN, webGLData.indices.length - 4, gl.UNSIGNED_SHORT, 0 ); + + if(!this.reverse) + { + gl.stencilFunc(gl.EQUAL,0xFF-(level), 0xFF); + } + else + { + gl.stencilFunc(gl.EQUAL,level, 0xFF); + } + + } + else + { + // console.log("<<>>") + if(!this.reverse) + { + gl.stencilFunc(gl.EQUAL, 0xFF - (level+1), 0xFF); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.INCR); + } + else + { + gl.stencilFunc(gl.EQUAL,level+1, 0xFF); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.DECR); + } + + gl.drawElements(gl.TRIANGLE_STRIP, webGLData.indices.length, gl.UNSIGNED_SHORT, 0 ); + + if(!this.reverse) + { + gl.stencilFunc(gl.EQUAL,0xFF-(level), 0xFF); + } + else + { + gl.stencilFunc(gl.EQUAL,level, 0xFF); + } + } + + gl.colorMask(true, true, true, true); + gl.stencilOp(gl.KEEP,gl.KEEP,gl.KEEP); + + + } +}; + +/** +* Destroys the mask stack. +* +* @method destroy +*/ +PIXI.WebGLStencilManager.prototype.destroy = function() +{ + this.stencilStack = null; + this.gl = null; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @class WebGLShaderManager +* @constructor +* @private +*/ +PIXI.WebGLShaderManager = function() +{ + /** + * @property maxAttibs + * @type Number + */ + this.maxAttibs = 10; + + /** + * @property attribState + * @type Array + */ + this.attribState = []; + + /** + * @property tempAttribState + * @type Array + */ + this.tempAttribState = []; + + for (var i = 0; i < this.maxAttibs; i++) + { + this.attribState[i] = false; + } + + /** + * @property stack + * @type Array + */ + this.stack = []; + +}; + +PIXI.WebGLShaderManager.prototype.constructor = PIXI.WebGLShaderManager; + +/** +* Initialises the context and the properties. +* +* @method setContext +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.WebGLShaderManager.prototype.setContext = function(gl) +{ + this.gl = gl; + + // the next one is used for rendering primitives + this.primitiveShader = new PIXI.PrimitiveShader(gl); + + // the next one is used for rendering triangle strips + this.complexPrimitiveShader = new PIXI.ComplexPrimitiveShader(gl); + + // this shader is used for the default sprite rendering + this.defaultShader = new PIXI.PixiShader(gl); + + // this shader is used for the fast sprite rendering + this.fastShader = new PIXI.PixiFastShader(gl); + + // the next one is used for rendering triangle strips + this.stripShader = new PIXI.StripShader(gl); + this.setShader(this.defaultShader); +}; + +/** +* Takes the attributes given in parameters. +* +* @method setAttribs +* @param attribs {Array} attribs +*/ +PIXI.WebGLShaderManager.prototype.setAttribs = function(attribs) +{ + // reset temp state + var i; + + for (i = 0; i < this.tempAttribState.length; i++) + { + this.tempAttribState[i] = false; + } + + // set the new attribs + for (i = 0; i < attribs.length; i++) + { + var attribId = attribs[i]; + this.tempAttribState[attribId] = true; + } + + var gl = this.gl; + + for (i = 0; i < this.attribState.length; i++) + { + if(this.attribState[i] !== this.tempAttribState[i]) + { + this.attribState[i] = this.tempAttribState[i]; + + if(this.tempAttribState[i]) + { + gl.enableVertexAttribArray(i); + } + else + { + gl.disableVertexAttribArray(i); + } + } + } +}; + +/** +* Sets the current shader. +* +* @method setShader +* @param shader {Any} +*/ +PIXI.WebGLShaderManager.prototype.setShader = function(shader) +{ + if(this._currentId === shader._UID)return false; + + this._currentId = shader._UID; + + this.currentShader = shader; + + this.gl.useProgram(shader.program); + this.setAttribs(shader.attributes); + + return true; +}; + +/** +* Destroys this object. +* +* @method destroy +*/ +PIXI.WebGLShaderManager.prototype.destroy = function() +{ + this.attribState = null; + + this.tempAttribState = null; + + this.primitiveShader.destroy(); + + this.complexPrimitiveShader.destroy(); + + this.defaultShader.destroy(); + + this.fastShader.destroy(); + + this.stripShader.destroy(); + + this.gl = null; +}; + +/** + * @author Mat Groves + * + * Big thanks to the very clever Matt DesLauriers https://github.com/mattdesl/ + * for creating the original pixi version! + * Also a thanks to https://github.com/bchevalier for tweaking the tint and alpha so that they now share 4 bytes on the vertex buffer + * + * Heavily inspired by LibGDX's WebGLSpriteBatch: + * https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g2d/WebGLSpriteBatch.java + */ + + /** + * + * @class WebGLSpriteBatch + * @private + * @constructor + */ +PIXI.WebGLSpriteBatch = function() +{ + /** + * @property vertSize + * @type Number + */ + this.vertSize = 5; + + /** + * The number of images in the SpriteBatch before it flushes + * @property size + * @type Number + */ + this.size = 2000;//Math.pow(2, 16) / this.vertSize; + + //the total number of bytes in our batch + var numVerts = this.size * 4 * 4 * this.vertSize; + //the total number of indices in our batch + var numIndices = this.size * 6; + + /** + * Holds the vertices + * + * @property vertices + * @type ArrayBuffer + */ + this.vertices = new PIXI.ArrayBuffer(numVerts); + + /** + * View on the vertices as a Float32Array + * + * @property positions + * @type Float32Array + */ + this.positions = new PIXI.Float32Array(this.vertices); + + /** + * View on the vertices as a Uint32Array + * + * @property colors + * @type Uint32Array + */ + this.colors = new PIXI.Uint32Array(this.vertices); + + /** + * Holds the indices + * + * @property indices + * @type Uint16Array + */ + this.indices = new PIXI.Uint16Array(numIndices); + + /** + * @property lastIndexCount + * @type Number + */ + this.lastIndexCount = 0; + + for (var i=0, j=0; i < numIndices; i += 6, j += 4) + { + this.indices[i + 0] = j + 0; + this.indices[i + 1] = j + 1; + this.indices[i + 2] = j + 2; + this.indices[i + 3] = j + 0; + this.indices[i + 4] = j + 2; + this.indices[i + 5] = j + 3; + } + + /** + * @property drawing + * @type Boolean + */ + this.drawing = false; + + /** + * @property currentBatchSize + * @type Number + */ + this.currentBatchSize = 0; + + /** + * @property currentBaseTexture + * @type BaseTexture + */ + this.currentBaseTexture = null; + + /** + * @property dirty + * @type Boolean + */ + this.dirty = true; + + /** + * @property textures + * @type Array + */ + this.textures = []; + + /** + * @property blendModes + * @type Array + */ + this.blendModes = []; + + /** + * @property shaders + * @type Array + */ + this.shaders = []; + + /** + * @property sprites + * @type Array + */ + this.sprites = []; + + /** + * @property defaultShader + * @type AbstractFilter + */ + this.defaultShader = new PIXI.AbstractFilter([ + 'precision lowp float;', + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + 'uniform sampler2D uSampler;', + 'void main(void) {', + ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;', + '}' + ]); +}; + +/** +* @method setContext +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.WebGLSpriteBatch.prototype.setContext = function(gl) +{ + this.gl = gl; + + // create a couple of buffers + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + + // 65535 is max index, so 65535 / 6 = 10922. + + //upload the index data + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW); + + this.currentBlendMode = 99999; + + var shader = new PIXI.PixiShader(gl); + + shader.fragmentSrc = this.defaultShader.fragmentSrc; + shader.uniforms = {}; + shader.init(); + + this.defaultShader.shaders[gl.id] = shader; +}; + +/** +* @method begin +* @param renderSession {Object} The RenderSession object +*/ +PIXI.WebGLSpriteBatch.prototype.begin = function(renderSession) +{ + this.renderSession = renderSession; + this.shader = this.renderSession.shaderManager.defaultShader; + + this.start(); +}; + +/** +* @method end +*/ +PIXI.WebGLSpriteBatch.prototype.end = function() +{ + this.flush(); +}; + +/** +* @method render +* @param sprite {Sprite} the sprite to render when using this spritebatch +*/ +PIXI.WebGLSpriteBatch.prototype.render = function(sprite) +{ + var texture = sprite.texture; + + //TODO set blend modes.. + // check texture.. + if(this.currentBatchSize >= this.size) + { + this.flush(); + this.currentBaseTexture = texture.baseTexture; + } + + // get the uvs for the texture + var uvs = texture._uvs; + // if the uvs have not updated then no point rendering just yet! + if(!uvs)return; + + // TODO trim?? + var aX = sprite.anchor.x; + var aY = sprite.anchor.y; + + var w0, w1, h0, h1; + + if (texture.trim) + { + // if the sprite is trimmed then we need to add the extra space before transforming the sprite coords.. + var trim = texture.trim; + + w1 = trim.x - aX * trim.width; + w0 = w1 + texture.crop.width; + + h1 = trim.y - aY * trim.height; + h0 = h1 + texture.crop.height; + + } + else + { + w0 = (texture.frame.width ) * (1-aX); + w1 = (texture.frame.width ) * -aX; + + h0 = texture.frame.height * (1-aY); + h1 = texture.frame.height * -aY; + } + + var index = this.currentBatchSize * 4 * this.vertSize; + + var resolution = texture.baseTexture.resolution; + + var worldTransform = sprite.worldTransform; + + var a = worldTransform.a / resolution; + var b = worldTransform.b / resolution; + var c = worldTransform.c / resolution; + var d = worldTransform.d / resolution; + var tx = worldTransform.tx; + var ty = worldTransform.ty; + + var colors = this.colors; + var positions = this.positions; + + if(this.renderSession.roundPixels) + { + // xy + positions[index] = a * w1 + c * h1 + tx | 0; + positions[index+1] = d * h1 + b * w1 + ty | 0; + + // xy + positions[index+5] = a * w0 + c * h1 + tx | 0; + positions[index+6] = d * h1 + b * w0 + ty | 0; + + // xy + positions[index+10] = a * w0 + c * h0 + tx | 0; + positions[index+11] = d * h0 + b * w0 + ty | 0; + + // xy + positions[index+15] = a * w1 + c * h0 + tx | 0; + positions[index+16] = d * h0 + b * w1 + ty | 0; + } + else + { + // xy + positions[index] = a * w1 + c * h1 + tx; + positions[index+1] = d * h1 + b * w1 + ty; + + // xy + positions[index+5] = a * w0 + c * h1 + tx; + positions[index+6] = d * h1 + b * w0 + ty; + + // xy + positions[index+10] = a * w0 + c * h0 + tx; + positions[index+11] = d * h0 + b * w0 + ty; + + // xy + positions[index+15] = a * w1 + c * h0 + tx; + positions[index+16] = d * h0 + b * w1 + ty; + } + + // uv + positions[index+2] = uvs.x0; + positions[index+3] = uvs.y0; + + // uv + positions[index+7] = uvs.x1; + positions[index+8] = uvs.y1; + + // uv + positions[index+12] = uvs.x2; + positions[index+13] = uvs.y2; + + // uv + positions[index+17] = uvs.x3; + positions[index+18] = uvs.y3; + + // color and alpha + var tint = sprite.tint; + colors[index+4] = colors[index+9] = colors[index+14] = colors[index+19] = (tint >> 16) + (tint & 0xff00) + ((tint & 0xff) << 16) + (sprite.worldAlpha * 255 << 24); + + // increment the batchsize + this.sprites[this.currentBatchSize++] = sprite; + + +}; + +/** +* Renders a TilingSprite using the spriteBatch. +* +* @method renderTilingSprite +* @param sprite {TilingSprite} the tilingSprite to render +*/ +PIXI.WebGLSpriteBatch.prototype.renderTilingSprite = function(tilingSprite) +{ + var texture = tilingSprite.tilingTexture; + + // check texture.. + if(this.currentBatchSize >= this.size) + { + //return; + this.flush(); + this.currentBaseTexture = texture.baseTexture; + } + + // set the textures uvs temporarily + // TODO create a separate texture so that we can tile part of a texture + + if(!tilingSprite._uvs)tilingSprite._uvs = new PIXI.TextureUvs(); + + var uvs = tilingSprite._uvs; + + tilingSprite.tilePosition.x %= texture.baseTexture.width * tilingSprite.tileScaleOffset.x; + tilingSprite.tilePosition.y %= texture.baseTexture.height * tilingSprite.tileScaleOffset.y; + + var offsetX = tilingSprite.tilePosition.x/(texture.baseTexture.width*tilingSprite.tileScaleOffset.x); + var offsetY = tilingSprite.tilePosition.y/(texture.baseTexture.height*tilingSprite.tileScaleOffset.y); + + var scaleX = (tilingSprite.width / texture.baseTexture.width) / (tilingSprite.tileScale.x * tilingSprite.tileScaleOffset.x); + var scaleY = (tilingSprite.height / texture.baseTexture.height) / (tilingSprite.tileScale.y * tilingSprite.tileScaleOffset.y); + + uvs.x0 = 0 - offsetX; + uvs.y0 = 0 - offsetY; + + uvs.x1 = (1 * scaleX) - offsetX; + uvs.y1 = 0 - offsetY; + + uvs.x2 = (1 * scaleX) - offsetX; + uvs.y2 = (1 * scaleY) - offsetY; + + uvs.x3 = 0 - offsetX; + uvs.y3 = (1 * scaleY) - offsetY; + + // get the tilingSprites current alpha and tint and combining them into a single color + var tint = tilingSprite.tint; + var color = (tint >> 16) + (tint & 0xff00) + ((tint & 0xff) << 16) + (tilingSprite.alpha * 255 << 24); + + var positions = this.positions; + var colors = this.colors; + + var width = tilingSprite.width; + var height = tilingSprite.height; + + // TODO trim?? + var aX = tilingSprite.anchor.x; + var aY = tilingSprite.anchor.y; + var w0 = width * (1-aX); + var w1 = width * -aX; + + var h0 = height * (1-aY); + var h1 = height * -aY; + + var index = this.currentBatchSize * 4 * this.vertSize; + + var resolution = texture.baseTexture.resolution; + + var worldTransform = tilingSprite.worldTransform; + + var a = worldTransform.a / resolution;//[0]; + var b = worldTransform.b / resolution;//[3]; + var c = worldTransform.c / resolution;//[1]; + var d = worldTransform.d / resolution;//[4]; + var tx = worldTransform.tx;//[2]; + var ty = worldTransform.ty;//[5]; + + // xy + positions[index++] = a * w1 + c * h1 + tx; + positions[index++] = d * h1 + b * w1 + ty; + // uv + positions[index++] = uvs.x0; + positions[index++] = uvs.y0; + // color + colors[index++] = color; + + // xy + positions[index++] = (a * w0 + c * h1 + tx); + positions[index++] = d * h1 + b * w0 + ty; + // uv + positions[index++] = uvs.x1; + positions[index++] = uvs.y1; + // color + colors[index++] = color; + + // xy + positions[index++] = a * w0 + c * h0 + tx; + positions[index++] = d * h0 + b * w0 + ty; + // uv + positions[index++] = uvs.x2; + positions[index++] = uvs.y2; + // color + colors[index++] = color; + + // xy + positions[index++] = a * w1 + c * h0 + tx; + positions[index++] = d * h0 + b * w1 + ty; + // uv + positions[index++] = uvs.x3; + positions[index++] = uvs.y3; + // color + colors[index++] = color; + + // increment the batchsize + this.sprites[this.currentBatchSize++] = tilingSprite; +}; + +/** +* Renders the content and empties the current batch. +* +* @method flush +*/ +PIXI.WebGLSpriteBatch.prototype.flush = function() +{ + // If the batch is length 0 then return as there is nothing to draw + if (this.currentBatchSize===0)return; + + var gl = this.gl; + var shader; + + if(this.dirty) + { + this.dirty = false; + // bind the main texture + gl.activeTexture(gl.TEXTURE0); + + // bind the buffers + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + shader = this.defaultShader.shaders[gl.id]; + + // this is the same for each shader? + var stride = this.vertSize * 4; + gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, stride, 0); + gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, stride, 2 * 4); + + // color attributes will be interpreted as unsigned bytes and normalized + gl.vertexAttribPointer(shader.colorAttribute, 4, gl.UNSIGNED_BYTE, true, stride, 4 * 4); + } + + // upload the verts to the buffer + if(this.currentBatchSize > ( this.size * 0.5 ) ) + { + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); + } + else + { + var view = this.positions.subarray(0, this.currentBatchSize * 4 * this.vertSize); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, view); + } + + var nextTexture, nextBlendMode, nextShader; + var batchSize = 0; + var start = 0; + + var currentBaseTexture = null; + var currentBlendMode = this.renderSession.blendModeManager.currentBlendMode; + var currentShader = null; + + var blendSwap = false; + var shaderSwap = false; + var sprite; + + for (var i = 0, j = this.currentBatchSize; i < j; i++) { + + sprite = this.sprites[i]; + + nextTexture = sprite.texture.baseTexture; + nextBlendMode = sprite.blendMode; + nextShader = sprite.shader || this.defaultShader; + + blendSwap = currentBlendMode !== nextBlendMode; + shaderSwap = currentShader !== nextShader; // should I use _UIDS??? + + if(currentBaseTexture !== nextTexture || blendSwap || shaderSwap) + { + this.renderBatch(currentBaseTexture, batchSize, start); + + start = i; + batchSize = 0; + currentBaseTexture = nextTexture; + + if( blendSwap ) + { + currentBlendMode = nextBlendMode; + this.renderSession.blendModeManager.setBlendMode( currentBlendMode ); + } + + if( shaderSwap ) + { + currentShader = nextShader; + + shader = currentShader.shaders[gl.id]; + + if(!shader) + { + shader = new PIXI.PixiShader(gl); + + shader.fragmentSrc =currentShader.fragmentSrc; + shader.uniforms =currentShader.uniforms; + shader.init(); + + currentShader.shaders[gl.id] = shader; + } + + // set shader function??? + this.renderSession.shaderManager.setShader(shader); + + if(shader.dirty)shader.syncUniforms(); + + // both thease only need to be set if they are changing.. + // set the projection + var projection = this.renderSession.projection; + gl.uniform2f(shader.projectionVector, projection.x, projection.y); + + // TODO - this is temprorary! + var offsetVector = this.renderSession.offset; + gl.uniform2f(shader.offsetVector, offsetVector.x, offsetVector.y); + + // set the pointers + } + } + + batchSize++; + } + + this.renderBatch(currentBaseTexture, batchSize, start); + + // then reset the batch! + this.currentBatchSize = 0; +}; + +/** +* @method renderBatch +* @param texture {Texture} +* @param size {Number} +* @param startIndex {Number} +*/ +PIXI.WebGLSpriteBatch.prototype.renderBatch = function(texture, size, startIndex) +{ + if(size === 0)return; + + var gl = this.gl; + + // check if a texture is dirty.. + if(texture._dirty[gl.id]) + { + this.renderSession.renderer.updateTexture(texture); + } + else + { + // bind the current texture + gl.bindTexture(gl.TEXTURE_2D, texture._glTextures[gl.id]); + } + + // now draw those suckas! + gl.drawElements(gl.TRIANGLES, size * 6, gl.UNSIGNED_SHORT, startIndex * 6 * 2); + + // increment the draw count + this.renderSession.drawCount++; +}; + +/** +* @method stop +*/ +PIXI.WebGLSpriteBatch.prototype.stop = function() +{ + this.flush(); + this.dirty = true; +}; + +/** +* @method start +*/ +PIXI.WebGLSpriteBatch.prototype.start = function() +{ + this.dirty = true; +}; + +/** +* Destroys the SpriteBatch. +* +* @method destroy +*/ +PIXI.WebGLSpriteBatch.prototype.destroy = function() +{ + this.vertices = null; + this.indices = null; + + this.gl.deleteBuffer( this.vertexBuffer ); + this.gl.deleteBuffer( this.indexBuffer ); + + this.currentBaseTexture = null; + + this.gl = null; +}; +/** + * @author Mat Groves + * + * Big thanks to the very clever Matt DesLauriers https://github.com/mattdesl/ + * for creating the original pixi version! + * + * Heavily inspired by LibGDX's WebGLSpriteBatch: + * https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g2d/WebGLSpriteBatch.java + */ + +/** +* @class WebGLFastSpriteBatch +* @constructor +*/ +PIXI.WebGLFastSpriteBatch = function(gl) +{ + /** + * @property vertSize + * @type Number + */ + this.vertSize = 10; + + /** + * @property maxSize + * @type Number + */ + this.maxSize = 6000;//Math.pow(2, 16) / this.vertSize; + + /** + * @property size + * @type Number + */ + this.size = this.maxSize; + + //the total number of floats in our batch + var numVerts = this.size * 4 * this.vertSize; + + //the total number of indices in our batch + var numIndices = this.maxSize * 6; + + /** + * Vertex data + * @property vertices + * @type Float32Array + */ + this.vertices = new PIXI.Float32Array(numVerts); + + /** + * Index data + * @property indices + * @type Uint16Array + */ + this.indices = new PIXI.Uint16Array(numIndices); + + /** + * @property vertexBuffer + * @type Object + */ + this.vertexBuffer = null; + + /** + * @property indexBuffer + * @type Object + */ + this.indexBuffer = null; + + /** + * @property lastIndexCount + * @type Number + */ + this.lastIndexCount = 0; + + for (var i=0, j=0; i < numIndices; i += 6, j += 4) + { + this.indices[i + 0] = j + 0; + this.indices[i + 1] = j + 1; + this.indices[i + 2] = j + 2; + this.indices[i + 3] = j + 0; + this.indices[i + 4] = j + 2; + this.indices[i + 5] = j + 3; + } + + /** + * @property drawing + * @type Boolean + */ + this.drawing = false; + + /** + * @property currentBatchSize + * @type Number + */ + this.currentBatchSize = 0; + + /** + * @property currentBaseTexture + * @type BaseTexture + */ + this.currentBaseTexture = null; + + /** + * @property currentBlendMode + * @type Number + */ + this.currentBlendMode = 0; + + /** + * @property renderSession + * @type Object + */ + this.renderSession = null; + + /** + * @property shader + * @type Object + */ + this.shader = null; + + /** + * @property matrix + * @type Matrix + */ + this.matrix = null; + + this.setContext(gl); +}; + +PIXI.WebGLFastSpriteBatch.prototype.constructor = PIXI.WebGLFastSpriteBatch; + +/** + * Sets the WebGL Context. + * + * @method setContext + * @param gl {WebGLContext} the current WebGL drawing context + */ +PIXI.WebGLFastSpriteBatch.prototype.setContext = function(gl) +{ + this.gl = gl; + + // create a couple of buffers + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + + // 65535 is max index, so 65535 / 6 = 10922. + + //upload the index data + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW); +}; + +/** + * @method begin + * @param spriteBatch {WebGLSpriteBatch} + * @param renderSession {Object} + */ +PIXI.WebGLFastSpriteBatch.prototype.begin = function(spriteBatch, renderSession) +{ + this.renderSession = renderSession; + this.shader = this.renderSession.shaderManager.fastShader; + + this.matrix = spriteBatch.worldTransform.toArray(true); + + this.start(); +}; + +/** + * @method end + */ +PIXI.WebGLFastSpriteBatch.prototype.end = function() +{ + this.flush(); +}; + +/** + * @method render + * @param spriteBatch {WebGLSpriteBatch} + */ +PIXI.WebGLFastSpriteBatch.prototype.render = function(spriteBatch) +{ + var children = spriteBatch.children; + var sprite = children[0]; + + // if the uvs have not updated then no point rendering just yet! + + // check texture. + if(!sprite.texture._uvs)return; + + this.currentBaseTexture = sprite.texture.baseTexture; + + // check blend mode + if(sprite.blendMode !== this.renderSession.blendModeManager.currentBlendMode) + { + this.flush(); + this.renderSession.blendModeManager.setBlendMode(sprite.blendMode); + } + + for(var i=0,j= children.length; i= this.size) + { + this.flush(); + } +}; + +/** + * @method flush + */ +PIXI.WebGLFastSpriteBatch.prototype.flush = function() +{ + // If the batch is length 0 then return as there is nothing to draw + if (this.currentBatchSize===0)return; + + var gl = this.gl; + + // bind the current texture + + if(!this.currentBaseTexture._glTextures[gl.id])this.renderSession.renderer.updateTexture(this.currentBaseTexture, gl); + + gl.bindTexture(gl.TEXTURE_2D, this.currentBaseTexture._glTextures[gl.id]); + + // upload the verts to the buffer + + if(this.currentBatchSize > ( this.size * 0.5 ) ) + { + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); + } + else + { + var view = this.vertices.subarray(0, this.currentBatchSize * 4 * this.vertSize); + + gl.bufferSubData(gl.ARRAY_BUFFER, 0, view); + } + + // now draw those suckas! + gl.drawElements(gl.TRIANGLES, this.currentBatchSize * 6, gl.UNSIGNED_SHORT, 0); + + // then reset the batch! + this.currentBatchSize = 0; + + // increment the draw count + this.renderSession.drawCount++; +}; + + +/** + * @method stop + */ +PIXI.WebGLFastSpriteBatch.prototype.stop = function() +{ + this.flush(); +}; + +/** + * @method start + */ +PIXI.WebGLFastSpriteBatch.prototype.start = function() +{ + var gl = this.gl; + + // bind the main texture + gl.activeTexture(gl.TEXTURE0); + + // bind the buffers + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // set the projection + var projection = this.renderSession.projection; + gl.uniform2f(this.shader.projectionVector, projection.x, projection.y); + + // set the matrix + gl.uniformMatrix3fv(this.shader.uMatrix, false, this.matrix); + + // set the pointers + var stride = this.vertSize * 4; + + gl.vertexAttribPointer(this.shader.aVertexPosition, 2, gl.FLOAT, false, stride, 0); + gl.vertexAttribPointer(this.shader.aPositionCoord, 2, gl.FLOAT, false, stride, 2 * 4); + gl.vertexAttribPointer(this.shader.aScale, 2, gl.FLOAT, false, stride, 4 * 4); + gl.vertexAttribPointer(this.shader.aRotation, 1, gl.FLOAT, false, stride, 6 * 4); + gl.vertexAttribPointer(this.shader.aTextureCoord, 2, gl.FLOAT, false, stride, 7 * 4); + gl.vertexAttribPointer(this.shader.colorAttribute, 1, gl.FLOAT, false, stride, 9 * 4); + +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @class WebGLFilterManager +* @constructor +*/ +PIXI.WebGLFilterManager = function() +{ + /** + * @property filterStack + * @type Array + */ + this.filterStack = []; + + /** + * @property offsetX + * @type Number + */ + this.offsetX = 0; + + /** + * @property offsetY + * @type Number + */ + this.offsetY = 0; +}; + +PIXI.WebGLFilterManager.prototype.constructor = PIXI.WebGLFilterManager; + +/** +* Initialises the context and the properties. +* +* @method setContext +* @param gl {WebGLContext} the current WebGL drawing context +*/ +PIXI.WebGLFilterManager.prototype.setContext = function(gl) +{ + this.gl = gl; + this.texturePool = []; + + this.initShaderBuffers(); +}; + +/** +* @method begin +* @param renderSession {RenderSession} +* @param buffer {ArrayBuffer} +*/ +PIXI.WebGLFilterManager.prototype.begin = function(renderSession, buffer) +{ + this.renderSession = renderSession; + this.defaultShader = renderSession.shaderManager.defaultShader; + + var projection = this.renderSession.projection; + this.width = projection.x * 2; + this.height = -projection.y * 2; + this.buffer = buffer; +}; + +/** +* Applies the filter and adds it to the current filter stack. +* +* @method pushFilter +* @param filterBlock {Object} the filter that will be pushed to the current filter stack +*/ +PIXI.WebGLFilterManager.prototype.pushFilter = function(filterBlock) +{ + var gl = this.gl; + + var projection = this.renderSession.projection; + var offset = this.renderSession.offset; + + filterBlock._filterArea = filterBlock.target.filterArea || filterBlock.target.getBounds(); + + // filter program + // OPTIMISATION - the first filter is free if its a simple color change? + this.filterStack.push(filterBlock); + + var filter = filterBlock.filterPasses[0]; + + this.offsetX += filterBlock._filterArea.x; + this.offsetY += filterBlock._filterArea.y; + + var texture = this.texturePool.pop(); + if(!texture) + { + texture = new PIXI.FilterTexture(this.gl, this.width, this.height); + } + else + { + texture.resize(this.width, this.height); + } + + gl.bindTexture(gl.TEXTURE_2D, texture.texture); + + var filterArea = filterBlock._filterArea;// filterBlock.target.getBounds();///filterBlock.target.filterArea; + + var padding = filter.padding; + filterArea.x -= padding; + filterArea.y -= padding; + filterArea.width += padding * 2; + filterArea.height += padding * 2; + + // cap filter to screen size.. + if(filterArea.x < 0)filterArea.x = 0; + if(filterArea.width > this.width)filterArea.width = this.width; + if(filterArea.y < 0)filterArea.y = 0; + if(filterArea.height > this.height)filterArea.height = this.height; + + //gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, filterArea.width, filterArea.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + gl.bindFramebuffer(gl.FRAMEBUFFER, texture.frameBuffer); + + // set view port + gl.viewport(0, 0, filterArea.width, filterArea.height); + + projection.x = filterArea.width/2; + projection.y = -filterArea.height/2; + + offset.x = -filterArea.x; + offset.y = -filterArea.y; + + // update projection + // now restore the regular shader.. + // this.renderSession.shaderManager.setShader(this.defaultShader); + //gl.uniform2f(this.defaultShader.projectionVector, filterArea.width/2, -filterArea.height/2); + //gl.uniform2f(this.defaultShader.offsetVector, -filterArea.x, -filterArea.y); + + gl.colorMask(true, true, true, true); + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + + filterBlock._glFilterTexture = texture; + +}; + +/** +* Removes the last filter from the filter stack and doesn't return it. +* +* @method popFilter +*/ +PIXI.WebGLFilterManager.prototype.popFilter = function() +{ + var gl = this.gl; + var filterBlock = this.filterStack.pop(); + var filterArea = filterBlock._filterArea; + var texture = filterBlock._glFilterTexture; + var projection = this.renderSession.projection; + var offset = this.renderSession.offset; + + if(filterBlock.filterPasses.length > 1) + { + gl.viewport(0, 0, filterArea.width, filterArea.height); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + + this.vertexArray[0] = 0; + this.vertexArray[1] = filterArea.height; + + this.vertexArray[2] = filterArea.width; + this.vertexArray[3] = filterArea.height; + + this.vertexArray[4] = 0; + this.vertexArray[5] = 0; + + this.vertexArray[6] = filterArea.width; + this.vertexArray[7] = 0; + + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertexArray); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + // now set the uvs.. + this.uvArray[2] = filterArea.width/this.width; + this.uvArray[5] = filterArea.height/this.height; + this.uvArray[6] = filterArea.width/this.width; + this.uvArray[7] = filterArea.height/this.height; + + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvArray); + + var inputTexture = texture; + var outputTexture = this.texturePool.pop(); + if(!outputTexture)outputTexture = new PIXI.FilterTexture(this.gl, this.width, this.height); + outputTexture.resize(this.width, this.height); + + // need to clear this FBO as it may have some left over elements from a previous filter. + gl.bindFramebuffer(gl.FRAMEBUFFER, outputTexture.frameBuffer ); + gl.clear(gl.COLOR_BUFFER_BIT); + + gl.disable(gl.BLEND); + + for (var i = 0; i < filterBlock.filterPasses.length-1; i++) + { + var filterPass = filterBlock.filterPasses[i]; + + gl.bindFramebuffer(gl.FRAMEBUFFER, outputTexture.frameBuffer ); + + // set texture + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, inputTexture.texture); + + // draw texture.. + //filterPass.applyFilterPass(filterArea.width, filterArea.height); + this.applyFilterPass(filterPass, filterArea, filterArea.width, filterArea.height); + + // swap the textures.. + var temp = inputTexture; + inputTexture = outputTexture; + outputTexture = temp; + } + + gl.enable(gl.BLEND); + + texture = inputTexture; + this.texturePool.push(outputTexture); + } + + var filter = filterBlock.filterPasses[filterBlock.filterPasses.length-1]; + + this.offsetX -= filterArea.x; + this.offsetY -= filterArea.y; + + var sizeX = this.width; + var sizeY = this.height; + + var offsetX = 0; + var offsetY = 0; + + var buffer = this.buffer; + + // time to render the filters texture to the previous scene + if(this.filterStack.length === 0) + { + gl.colorMask(true, true, true, true);//this.transparent); + } + else + { + var currentFilter = this.filterStack[this.filterStack.length-1]; + filterArea = currentFilter._filterArea; + + sizeX = filterArea.width; + sizeY = filterArea.height; + + offsetX = filterArea.x; + offsetY = filterArea.y; + + buffer = currentFilter._glFilterTexture.frameBuffer; + } + + // TODO need to remove these global elements.. + projection.x = sizeX/2; + projection.y = -sizeY/2; + + offset.x = offsetX; + offset.y = offsetY; + + filterArea = filterBlock._filterArea; + + var x = filterArea.x-offsetX; + var y = filterArea.y-offsetY; + + // update the buffers.. + // make sure to flip the y! + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + + this.vertexArray[0] = x; + this.vertexArray[1] = y + filterArea.height; + + this.vertexArray[2] = x + filterArea.width; + this.vertexArray[3] = y + filterArea.height; + + this.vertexArray[4] = x; + this.vertexArray[5] = y; + + this.vertexArray[6] = x + filterArea.width; + this.vertexArray[7] = y; + + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertexArray); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + this.uvArray[2] = filterArea.width/this.width; + this.uvArray[5] = filterArea.height/this.height; + this.uvArray[6] = filterArea.width/this.width; + this.uvArray[7] = filterArea.height/this.height; + + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvArray); + + gl.viewport(0, 0, sizeX * this.renderSession.resolution, sizeY * this.renderSession.resolution); + + // bind the buffer + gl.bindFramebuffer(gl.FRAMEBUFFER, buffer ); + + // set the blend mode! + //gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA) + + // set texture + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, texture.texture); + + // apply! + this.applyFilterPass(filter, filterArea, sizeX, sizeY); + + // now restore the regular shader.. should happen automatically now.. + // this.renderSession.shaderManager.setShader(this.defaultShader); + // gl.uniform2f(this.defaultShader.projectionVector, sizeX/2, -sizeY/2); + // gl.uniform2f(this.defaultShader.offsetVector, -offsetX, -offsetY); + + // return the texture to the pool + this.texturePool.push(texture); + filterBlock._glFilterTexture = null; +}; + + +/** +* Applies the filter to the specified area. +* +* @method applyFilterPass +* @param filter {AbstractFilter} the filter that needs to be applied +* @param filterArea {Texture} TODO - might need an update +* @param width {Number} the horizontal range of the filter +* @param height {Number} the vertical range of the filter +*/ +PIXI.WebGLFilterManager.prototype.applyFilterPass = function(filter, filterArea, width, height) +{ + // use program + var gl = this.gl; + var shader = filter.shaders[gl.id]; + + if(!shader) + { + shader = new PIXI.PixiShader(gl); + + shader.fragmentSrc = filter.fragmentSrc; + shader.uniforms = filter.uniforms; + shader.init(); + + filter.shaders[gl.id] = shader; + } + + // set the shader + this.renderSession.shaderManager.setShader(shader); + +// gl.useProgram(shader.program); + + gl.uniform2f(shader.projectionVector, width/2, -height/2); + gl.uniform2f(shader.offsetVector, 0,0); + + if(filter.uniforms.dimensions) + { + filter.uniforms.dimensions.value[0] = this.width;//width; + filter.uniforms.dimensions.value[1] = this.height;//height; + filter.uniforms.dimensions.value[2] = this.vertexArray[0]; + filter.uniforms.dimensions.value[3] = this.vertexArray[5];//filterArea.height; + } + + shader.syncUniforms(); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.vertexAttribPointer(shader.colorAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + // draw the filter... + gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + this.renderSession.drawCount++; +}; + +/** +* Initialises the shader buffers. +* +* @method initShaderBuffers +*/ +PIXI.WebGLFilterManager.prototype.initShaderBuffers = function() +{ + var gl = this.gl; + + // create some buffers + this.vertexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + + // bind and upload the vertexs.. + // keep a reference to the vertexFloatData.. + this.vertexArray = new PIXI.Float32Array([0.0, 0.0, + 1.0, 0.0, + 0.0, 1.0, + 1.0, 1.0]); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.vertexArray, gl.STATIC_DRAW); + + // bind and upload the uv buffer + this.uvArray = new PIXI.Float32Array([0.0, 0.0, + 1.0, 0.0, + 0.0, 1.0, + 1.0, 1.0]); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvArray, gl.STATIC_DRAW); + + this.colorArray = new PIXI.Float32Array([1.0, 0xFFFFFF, + 1.0, 0xFFFFFF, + 1.0, 0xFFFFFF, + 1.0, 0xFFFFFF]); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colorArray, gl.STATIC_DRAW); + + // bind and upload the index + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 1, 3, 2]), gl.STATIC_DRAW); + +}; + +/** +* Destroys the filter and removes it from the filter stack. +* +* @method destroy +*/ +PIXI.WebGLFilterManager.prototype.destroy = function() +{ + var gl = this.gl; + + this.filterStack = null; + + this.offsetX = 0; + this.offsetY = 0; + + // destroy textures + for (var i = 0; i < this.texturePool.length; i++) { + this.texturePool[i].destroy(); + } + + this.texturePool = null; + + //destroy buffers.. + gl.deleteBuffer(this.vertexBuffer); + gl.deleteBuffer(this.uvBuffer); + gl.deleteBuffer(this.colorBuffer); + gl.deleteBuffer(this.indexBuffer); +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +* @class FilterTexture +* @constructor +* @param gl {WebGLContext} the current WebGL drawing context +* @param width {Number} the horizontal range of the filter +* @param height {Number} the vertical range of the filter +* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values +*/ +PIXI.FilterTexture = function(gl, width, height, scaleMode) +{ + /** + * @property gl + * @type WebGLContext + */ + this.gl = gl; + + // next time to create a frame buffer and texture + + /** + * @property frameBuffer + * @type Any + */ + this.frameBuffer = gl.createFramebuffer(); + + /** + * @property texture + * @type Any + */ + this.texture = gl.createTexture(); + + /** + * @property scaleMode + * @type Number + */ + scaleMode = scaleMode || PIXI.scaleModes.DEFAULT; + + gl.bindTexture(gl.TEXTURE_2D, this.texture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer ); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texture, 0); + + // required for masking a mask?? + this.renderBuffer = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, this.renderBuffer); + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, this.renderBuffer); + + this.resize(width, height); +}; + +PIXI.FilterTexture.prototype.constructor = PIXI.FilterTexture; + +/** +* Clears the filter texture. +* +* @method clear +*/ +PIXI.FilterTexture.prototype.clear = function() +{ + var gl = this.gl; + + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); +}; + +/** + * Resizes the texture to the specified width and height + * + * @method resize + * @param width {Number} the new width of the texture + * @param height {Number} the new height of the texture + */ +PIXI.FilterTexture.prototype.resize = function(width, height) +{ + if(this.width === width && this.height === height) return; + + this.width = width; + this.height = height; + + var gl = this.gl; + + gl.bindTexture(gl.TEXTURE_2D, this.texture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width , height , 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + // update the stencil buffer width and height + gl.bindRenderbuffer(gl.RENDERBUFFER, this.renderBuffer); + gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width , height ); +}; + +/** +* Destroys the filter texture. +* +* @method destroy +*/ +PIXI.FilterTexture.prototype.destroy = function() +{ + var gl = this.gl; + gl.deleteFramebuffer( this.frameBuffer ); + gl.deleteTexture( this.texture ); + + this.frameBuffer = null; + this.texture = null; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * Creates a Canvas element of the given size. + * + * @class CanvasBuffer + * @constructor + * @param width {Number} the width for the newly created canvas + * @param height {Number} the height for the newly created canvas + */ +PIXI.CanvasBuffer = function(width, height) +{ + /** + * The width of the Canvas in pixels. + * + * @property width + * @type Number + */ + this.width = width; + + /** + * The height of the Canvas in pixels. + * + * @property height + * @type Number + */ + this.height = height; + + /** + * The Canvas object that belongs to this CanvasBuffer. + * + * @property canvas + * @type HTMLCanvasElement + */ + this.canvas = document.createElement("canvas"); + + /** + * A CanvasRenderingContext2D object representing a two-dimensional rendering context. + * + * @property context + * @type CanvasRenderingContext2D + */ + this.context = this.canvas.getContext("2d"); + + this.canvas.width = width; + this.canvas.height = height; +}; + +PIXI.CanvasBuffer.prototype.constructor = PIXI.CanvasBuffer; + +/** + * Clears the canvas that was created by the CanvasBuffer class. + * + * @method clear + * @private + */ +PIXI.CanvasBuffer.prototype.clear = function() +{ + this.context.setTransform(1, 0, 0, 1, 0, 0); + this.context.clearRect(0,0, this.width, this.height); +}; + +/** + * Resizes the canvas to the specified width and height. + * + * @method resize + * @param width {Number} the new width of the canvas + * @param height {Number} the new height of the canvas + */ +PIXI.CanvasBuffer.prototype.resize = function(width, height) +{ + this.width = this.canvas.width = width; + this.height = this.canvas.height = height; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A set of functions used to handle masking. + * + * @class CanvasMaskManager + * @constructor + */ +PIXI.CanvasMaskManager = function() +{ +}; + +PIXI.CanvasMaskManager.prototype.constructor = PIXI.CanvasMaskManager; + +/** + * This method adds it to the current stack of masks. + * + * @method pushMask + * @param maskData {Object} the maskData that will be pushed + * @param renderSession {Object} The renderSession whose context will be used for this mask manager. + */ +PIXI.CanvasMaskManager.prototype.pushMask = function(maskData, renderSession) +{ + var context = renderSession.context; + + context.save(); + + var cacheAlpha = maskData.alpha; + var transform = maskData.worldTransform; + + var resolution = renderSession.resolution; + + context.setTransform(transform.a * resolution, + transform.b * resolution, + transform.c * resolution, + transform.d * resolution, + transform.tx * resolution, + transform.ty * resolution); + + PIXI.CanvasGraphics.renderGraphicsMask(maskData, context); + + context.clip(); + + maskData.worldAlpha = cacheAlpha; +}; + +/** + * Restores the current drawing context to the state it was before the mask was applied. + * + * @method popMask + * @param renderSession {Object} The renderSession whose context will be used for this mask manager. + */ +PIXI.CanvasMaskManager.prototype.popMask = function(renderSession) +{ + renderSession.context.restore(); +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * Utility methods for Sprite/Texture tinting. + * + * @class CanvasTinter + * @static + */ +PIXI.CanvasTinter = function() +{ +}; + +/** + * Basically this method just needs a sprite and a color and tints the sprite with the given color. + * + * @method getTintedTexture + * @static + * @param sprite {Sprite} the sprite to tint + * @param color {Number} the color to use to tint the sprite with + * @return {HTMLCanvasElement} The tinted canvas + */ +PIXI.CanvasTinter.getTintedTexture = function(sprite, color) +{ + var texture = sprite.texture; + + color = PIXI.CanvasTinter.roundColor(color); + + var stringColor = "#" + ("00000" + ( color | 0).toString(16)).substr(-6); + + texture.tintCache = texture.tintCache || {}; + + if(texture.tintCache[stringColor]) return texture.tintCache[stringColor]; + + // clone texture.. + var canvas = PIXI.CanvasTinter.canvas || document.createElement("canvas"); + + //PIXI.CanvasTinter.tintWithPerPixel(texture, stringColor, canvas); + PIXI.CanvasTinter.tintMethod(texture, color, canvas); + + if(PIXI.CanvasTinter.convertTintToImage) + { + // is this better? + var tintImage = new Image(); + tintImage.src = canvas.toDataURL(); + + texture.tintCache[stringColor] = tintImage; + } + else + { + texture.tintCache[stringColor] = canvas; + // if we are not converting the texture to an image then we need to lose the reference to the canvas + PIXI.CanvasTinter.canvas = null; + } + + return canvas; +}; + +/** + * Tint a texture using the "multiply" operation. + * + * @method tintWithMultiply + * @static + * @param texture {Texture} the texture to tint + * @param color {Number} the color to use to tint the sprite with + * @param canvas {HTMLCanvasElement} the current canvas + */ +PIXI.CanvasTinter.tintWithMultiply = function(texture, color, canvas) +{ + var context = canvas.getContext( "2d" ); + + var crop = texture.crop; + + canvas.width = crop.width; + canvas.height = crop.height; + + context.fillStyle = "#" + ("00000" + ( color | 0).toString(16)).substr(-6); + + context.fillRect(0, 0, crop.width, crop.height); + + context.globalCompositeOperation = "multiply"; + + context.drawImage(texture.baseTexture.source, + crop.x, + crop.y, + crop.width, + crop.height, + 0, + 0, + crop.width, + crop.height); + + context.globalCompositeOperation = "destination-atop"; + + context.drawImage(texture.baseTexture.source, + crop.x, + crop.y, + crop.width, + crop.height, + 0, + 0, + crop.width, + crop.height); +}; + +/** + * Tint a texture using the "overlay" operation. + * + * @method tintWithOverlay + * @static + * @param texture {Texture} the texture to tint + * @param color {Number} the color to use to tint the sprite with + * @param canvas {HTMLCanvasElement} the current canvas + */ +PIXI.CanvasTinter.tintWithOverlay = function(texture, color, canvas) +{ + var context = canvas.getContext( "2d" ); + + var crop = texture.crop; + + canvas.width = crop.width; + canvas.height = crop.height; + + context.globalCompositeOperation = "copy"; + context.fillStyle = "#" + ("00000" + ( color | 0).toString(16)).substr(-6); + context.fillRect(0, 0, crop.width, crop.height); + + context.globalCompositeOperation = "destination-atop"; + context.drawImage(texture.baseTexture.source, + crop.x, + crop.y, + crop.width, + crop.height, + 0, + 0, + crop.width, + crop.height); + + //context.globalCompositeOperation = "copy"; +}; + +/** + * Tint a texture pixel per pixel. + * + * @method tintPerPixel + * @static + * @param texture {Texture} the texture to tint + * @param color {Number} the color to use to tint the sprite with + * @param canvas {HTMLCanvasElement} the current canvas + */ +PIXI.CanvasTinter.tintWithPerPixel = function(texture, color, canvas) +{ + var context = canvas.getContext( "2d" ); + + var crop = texture.crop; + + canvas.width = crop.width; + canvas.height = crop.height; + + context.globalCompositeOperation = "copy"; + context.drawImage(texture.baseTexture.source, + crop.x, + crop.y, + crop.width, + crop.height, + 0, + 0, + crop.width, + crop.height); + + var rgbValues = PIXI.hex2rgb(color); + var r = rgbValues[0], g = rgbValues[1], b = rgbValues[2]; + + var pixelData = context.getImageData(0, 0, crop.width, crop.height); + + var pixels = pixelData.data; + + for (var i = 0; i < pixels.length; i += 4) + { + pixels[i+0] *= r; + pixels[i+1] *= g; + pixels[i+2] *= b; + } + + context.putImageData(pixelData, 0, 0); +}; + +/** + * Rounds the specified color according to the PIXI.CanvasTinter.cacheStepsPerColorChannel. + * + * @method roundColor + * @static + * @param color {number} the color to round, should be a hex color + */ +PIXI.CanvasTinter.roundColor = function(color) +{ + var step = PIXI.CanvasTinter.cacheStepsPerColorChannel; + + var rgbValues = PIXI.hex2rgb(color); + + rgbValues[0] = Math.min(255, (rgbValues[0] / step) * step); + rgbValues[1] = Math.min(255, (rgbValues[1] / step) * step); + rgbValues[2] = Math.min(255, (rgbValues[2] / step) * step); + + return PIXI.rgb2hex(rgbValues); +}; + +/** + * Number of steps which will be used as a cap when rounding colors. + * + * @property cacheStepsPerColorChannel + * @type Number + * @static + */ +PIXI.CanvasTinter.cacheStepsPerColorChannel = 8; + +/** + * Tint cache boolean flag. + * + * @property convertTintToImage + * @type Boolean + * @static + */ +PIXI.CanvasTinter.convertTintToImage = false; + +/** + * Whether or not the Canvas BlendModes are supported, consequently the ability to tint using the multiply method. + * + * @property canUseMultiply + * @type Boolean + * @static + */ +PIXI.CanvasTinter.canUseMultiply = PIXI.canUseNewCanvasBlendModes(); + +/** + * The tinting method that will be used. + * + * @method tintMethod + * @static + */ +PIXI.CanvasTinter.tintMethod = PIXI.CanvasTinter.canUseMultiply ? PIXI.CanvasTinter.tintWithMultiply : PIXI.CanvasTinter.tintWithPerPixel; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The CanvasRenderer draws the Stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Don't forget to add the CanvasRenderer.view to your DOM or you will not see anything :) + * + * @class CanvasRenderer + * @constructor + * @param [width=800] {Number} the width of the canvas view + * @param [height=600] {Number} the height of the canvas view + * @param [options] {Object} The optional renderer parameters + * @param [options.view] {HTMLCanvasElement} the canvas to use as a view, optional + * @param [options.transparent=false] {Boolean} If the render view is transparent, default false + * @param [options.autoResize=false] {Boolean} If the render view is automatically resized, default false + * @param [options.resolution=1] {Number} the resolution of the renderer retina would be 2 + * @param [options.clearBeforeRender=true] {Boolean} This sets if the CanvasRenderer will clear the canvas or not before the new render pass. + */ +PIXI.CanvasRenderer = function(width, height, options) +{ + if(options) + { + for (var i in PIXI.defaultRenderOptions) + { + if (typeof options[i] === "undefined") options[i] = PIXI.defaultRenderOptions[i]; + } + } + else + { + options = PIXI.defaultRenderOptions; + } + + if(!PIXI.defaultRenderer) + { + PIXI.sayHello("Canvas"); + PIXI.defaultRenderer = this; + } + + /** + * The renderer type. + * + * @property type + * @type Number + */ + this.type = PIXI.CANVAS_RENDERER; + + /** + * The resolution of the canvas. + * + * @property resolution + * @type Number + */ + this.resolution = options.resolution; + + /** + * This sets if the CanvasRenderer will clear the canvas or not before the new render pass. + * If the Stage is NOT transparent Pixi will use a canvas sized fillRect operation every frame to set the canvas background color. + * If the Stage is transparent Pixi will use clearRect to clear the canvas every frame. + * Disable this by setting this to false. For example if your game has a canvas filling background image you often don't need this set. + * + * @property clearBeforeRender + * @type Boolean + * @default + */ + this.clearBeforeRender = options.clearBeforeRender; + + /** + * Whether the render view is transparent + * + * @property transparent + * @type Boolean + */ + this.transparent = options.transparent; + + /** + * Whether the render view should be resized automatically + * + * @property autoResize + * @type Boolean + */ + this.autoResize = options.autoResize || false; + + + /** + * The width of the canvas view + * + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + + /** + * The height of the canvas view + * + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.width *= this.resolution; + this.height *= this.resolution; + + /** + * The canvas element that everything is drawn to. + * + * @property view + * @type HTMLCanvasElement + */ + this.view = options.view || document.createElement( "canvas" ); + + /** + * The canvas 2d context that everything is drawn with + * @property context + * @type CanvasRenderingContext2D + */ + this.context = this.view.getContext( "2d", { alpha: this.transparent } ); + + /** + * Boolean flag controlling canvas refresh. + * + * @property refresh + * @type Boolean + */ + this.refresh = true; + + this.view.width = this.width * this.resolution; + this.view.height = this.height * this.resolution; + + /** + * Internal var. + * + * @property count + * @type Number + */ + this.count = 0; + + /** + * Instance of a PIXI.CanvasMaskManager, handles masking when using the canvas renderer + * @property maskManager + * @type CanvasMaskManager + */ + this.maskManager = new PIXI.CanvasMaskManager(); + + /** + * The render session is just a bunch of parameter used for rendering + * @property renderSession + * @type Object + */ + this.renderSession = { + context: this.context, + maskManager: this.maskManager, + scaleMode: null, + smoothProperty: null, + /** + * If true Pixi will Math.floor() x/y values when rendering, stopping pixel interpolation. + * Handy for crisp pixel art and speed on legacy devices. + * + */ + roundPixels: false + }; + + this.mapBlendModes(); + + this.resize(width, height); + + if("imageSmoothingEnabled" in this.context) + this.renderSession.smoothProperty = "imageSmoothingEnabled"; + else if("webkitImageSmoothingEnabled" in this.context) + this.renderSession.smoothProperty = "webkitImageSmoothingEnabled"; + else if("mozImageSmoothingEnabled" in this.context) + this.renderSession.smoothProperty = "mozImageSmoothingEnabled"; + else if("oImageSmoothingEnabled" in this.context) + this.renderSession.smoothProperty = "oImageSmoothingEnabled"; + else if ("msImageSmoothingEnabled" in this.context) + this.renderSession.smoothProperty = "msImageSmoothingEnabled"; +}; + +// constructor +PIXI.CanvasRenderer.prototype.constructor = PIXI.CanvasRenderer; + +/** + * Renders the Stage to this canvas view + * + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + stage.updateTransform(); + + this.context.setTransform(1,0,0,1,0,0); + + this.context.globalAlpha = 1; + + this.renderSession.currentBlendMode = PIXI.blendModes.NORMAL; + this.context.globalCompositeOperation = PIXI.blendModesCanvas[PIXI.blendModes.NORMAL]; + + if (navigator.isCocoonJS && this.view.screencanvas) { + this.context.fillStyle = "black"; + this.context.clear(); + } + + if (this.clearBeforeRender) + { + if (this.transparent) + { + this.context.clearRect(0, 0, this.width, this.height); + } + else + { + this.context.fillStyle = stage.backgroundColorString; + this.context.fillRect(0, 0, this.width , this.height); + } + } + + this.renderDisplayObject(stage); + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } +}; + +/** + * Removes everything from the renderer and optionally removes the Canvas DOM element. + * + * @method destroy + * @param [removeView=true] {boolean} Removes the Canvas element from the DOM. + */ +PIXI.CanvasRenderer.prototype.destroy = function(removeView) +{ + if (typeof removeView === "undefined") { removeView = true; } + + if (removeView && this.view.parent) + { + this.view.parent.removeChild(this.view); + } + + this.view = null; + this.context = null; + this.maskManager = null; + this.renderSession = null; + +}; + +/** + * Resizes the canvas view to the specified width and height + * + * @method resize + * @param width {Number} the new width of the canvas view + * @param height {Number} the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width * this.resolution; + this.height = height * this.resolution; + + this.view.width = this.width; + this.view.height = this.height; + + if (this.autoResize) { + this.view.style.width = this.width / this.resolution + "px"; + this.view.style.height = this.height / this.resolution + "px"; + } +}; + +/** + * Renders a display object + * + * @method renderDisplayObject + * @param displayObject {DisplayObject} The displayObject to render + * @param context {CanvasRenderingContext2D} the context 2d method of the canvas + * @private + */ +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject, context) +{ + this.renderSession.context = context || this.context; + this.renderSession.resolution = this.resolution; + displayObject._renderCanvas(this.renderSession); +}; + +/** + * Maps Pixi blend modes to canvas blend modes. + * + * @method mapBlendModes + * @private + */ +PIXI.CanvasRenderer.prototype.mapBlendModes = function() +{ + if(!PIXI.blendModesCanvas) + { + PIXI.blendModesCanvas = []; + + if(PIXI.canUseNewCanvasBlendModes()) + { + PIXI.blendModesCanvas[PIXI.blendModes.NORMAL] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.ADD] = "lighter"; //IS THIS OK??? + PIXI.blendModesCanvas[PIXI.blendModes.MULTIPLY] = "multiply"; + PIXI.blendModesCanvas[PIXI.blendModes.SCREEN] = "screen"; + PIXI.blendModesCanvas[PIXI.blendModes.OVERLAY] = "overlay"; + PIXI.blendModesCanvas[PIXI.blendModes.DARKEN] = "darken"; + PIXI.blendModesCanvas[PIXI.blendModes.LIGHTEN] = "lighten"; + PIXI.blendModesCanvas[PIXI.blendModes.COLOR_DODGE] = "color-dodge"; + PIXI.blendModesCanvas[PIXI.blendModes.COLOR_BURN] = "color-burn"; + PIXI.blendModesCanvas[PIXI.blendModes.HARD_LIGHT] = "hard-light"; + PIXI.blendModesCanvas[PIXI.blendModes.SOFT_LIGHT] = "soft-light"; + PIXI.blendModesCanvas[PIXI.blendModes.DIFFERENCE] = "difference"; + PIXI.blendModesCanvas[PIXI.blendModes.EXCLUSION] = "exclusion"; + PIXI.blendModesCanvas[PIXI.blendModes.HUE] = "hue"; + PIXI.blendModesCanvas[PIXI.blendModes.SATURATION] = "saturation"; + PIXI.blendModesCanvas[PIXI.blendModes.COLOR] = "color"; + PIXI.blendModesCanvas[PIXI.blendModes.LUMINOSITY] = "luminosity"; + } + else + { + // this means that the browser does not support the cool new blend modes in canvas "cough" ie "cough" + PIXI.blendModesCanvas[PIXI.blendModes.NORMAL] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.ADD] = "lighter"; //IS THIS OK??? + PIXI.blendModesCanvas[PIXI.blendModes.MULTIPLY] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.SCREEN] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.OVERLAY] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.DARKEN] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.LIGHTEN] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.COLOR_DODGE] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.COLOR_BURN] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.HARD_LIGHT] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.SOFT_LIGHT] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.DIFFERENCE] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.EXCLUSION] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.HUE] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.SATURATION] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.COLOR] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.LUMINOSITY] = "source-over"; + } + } +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A set of functions used by the canvas renderer to draw the primitive graphics data. + * + * @class CanvasGraphics + * @static + */ +PIXI.CanvasGraphics = function() +{ +}; + +/* + * Renders a PIXI.Graphics object to a canvas. + * + * @method renderGraphics + * @static + * @param graphics {Graphics} the actual graphics object to render + * @param context {CanvasRenderingContext2D} the 2d drawing method of the canvas + */ +PIXI.CanvasGraphics.renderGraphics = function(graphics, context) +{ + var worldAlpha = graphics.worldAlpha; + + if(graphics.dirty) + { + this.updateGraphicsTint(graphics); + graphics.dirty = false; + } + + + for (var i = 0; i < graphics.graphicsData.length; i++) + { + var data = graphics.graphicsData[i]; + var shape = data.shape; + + var fillColor = data._fillTint; + var lineColor = data._lineTint; + + context.lineWidth = data.lineWidth; + + if(data.type === PIXI.Graphics.POLY) + { + context.beginPath(); + + var points = shape.points; + + context.moveTo(points[0], points[1]); + + for (var j=1; j < points.length/2; j++) + { + context.lineTo(points[j * 2], points[j * 2 + 1]); + } + + if(shape.closed) + { + context.lineTo(points[0], points[1]); + } + + // if the first and last point are the same close the path - much neater :) + if(points[0] === points[points.length-2] && points[1] === points[points.length-1]) + { + context.closePath(); + } + + if(data.fill) + { + context.globalAlpha = data.fillAlpha * worldAlpha; + context.fillStyle = '#' + ('00000' + ( fillColor | 0).toString(16)).substr(-6); + context.fill(); + } + if(data.lineWidth) + { + context.globalAlpha = data.lineAlpha * worldAlpha; + context.strokeStyle = '#' + ('00000' + ( lineColor | 0).toString(16)).substr(-6); + context.stroke(); + } + } + else if(data.type === PIXI.Graphics.RECT) + { + + if(data.fillColor || data.fillColor === 0) + { + context.globalAlpha = data.fillAlpha * worldAlpha; + context.fillStyle = '#' + ('00000' + ( fillColor | 0).toString(16)).substr(-6); + context.fillRect(shape.x, shape.y, shape.width, shape.height); + + } + if(data.lineWidth) + { + context.globalAlpha = data.lineAlpha * worldAlpha; + context.strokeStyle = '#' + ('00000' + ( lineColor | 0).toString(16)).substr(-6); + context.strokeRect(shape.x, shape.y, shape.width, shape.height); + } + } + else if(data.type === PIXI.Graphics.CIRC) + { + // TODO - need to be Undefined! + context.beginPath(); + context.arc(shape.x, shape.y, shape.radius,0,2*Math.PI); + context.closePath(); + + if(data.fill) + { + context.globalAlpha = data.fillAlpha * worldAlpha; + context.fillStyle = '#' + ('00000' + ( fillColor | 0).toString(16)).substr(-6); + context.fill(); + } + if(data.lineWidth) + { + context.globalAlpha = data.lineAlpha * worldAlpha; + context.strokeStyle = '#' + ('00000' + ( lineColor | 0).toString(16)).substr(-6); + context.stroke(); + } + } + else if(data.type === PIXI.Graphics.ELIP) + { + // ellipse code taken from: http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + + var w = shape.width * 2; + var h = shape.height * 2; + + var x = shape.x - w/2; + var y = shape.y - h/2; + + context.beginPath(); + + var kappa = 0.5522848, + ox = (w / 2) * kappa, // control point offset horizontal + oy = (h / 2) * kappa, // control point offset vertical + xe = x + w, // x-end + ye = y + h, // y-end + xm = x + w / 2, // x-middle + ym = y + h / 2; // y-middle + + context.moveTo(x, ym); + context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + context.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + context.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + context.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + + context.closePath(); + + if(data.fill) + { + context.globalAlpha = data.fillAlpha * worldAlpha; + context.fillStyle = '#' + ('00000' + ( fillColor | 0).toString(16)).substr(-6); + context.fill(); + } + if(data.lineWidth) + { + context.globalAlpha = data.lineAlpha * worldAlpha; + context.strokeStyle = '#' + ('00000' + ( lineColor | 0).toString(16)).substr(-6); + context.stroke(); + } + } + else if (data.type === PIXI.Graphics.RREC) + { + var rx = shape.x; + var ry = shape.y; + var width = shape.width; + var height = shape.height; + var radius = shape.radius; + + var maxRadius = Math.min(width, height) / 2 | 0; + radius = radius > maxRadius ? maxRadius : radius; + + context.beginPath(); + context.moveTo(rx, ry + radius); + context.lineTo(rx, ry + height - radius); + context.quadraticCurveTo(rx, ry + height, rx + radius, ry + height); + context.lineTo(rx + width - radius, ry + height); + context.quadraticCurveTo(rx + width, ry + height, rx + width, ry + height - radius); + context.lineTo(rx + width, ry + radius); + context.quadraticCurveTo(rx + width, ry, rx + width - radius, ry); + context.lineTo(rx + radius, ry); + context.quadraticCurveTo(rx, ry, rx, ry + radius); + context.closePath(); + + if(data.fillColor || data.fillColor === 0) + { + context.globalAlpha = data.fillAlpha * worldAlpha; + context.fillStyle = '#' + ('00000' + ( fillColor | 0).toString(16)).substr(-6); + context.fill(); + + } + if(data.lineWidth) + { + context.globalAlpha = data.lineAlpha * worldAlpha; + context.strokeStyle = '#' + ('00000' + ( lineColor | 0).toString(16)).substr(-6); + context.stroke(); + } + } + } +}; + +/* + * Renders a graphics mask + * + * @static + * @private + * @method renderGraphicsMask + * @param graphics {Graphics} the graphics which will be used as a mask + * @param context {CanvasRenderingContext2D} the context 2d method of the canvas + */ +PIXI.CanvasGraphics.renderGraphicsMask = function(graphics, context) +{ + var len = graphics.graphicsData.length; + + if(len === 0) return; + + if(len > 1) + { + len = 1; + window.console.log('Pixi.js warning: masks in canvas can only mask using the first path in the graphics object'); + } + + for (var i = 0; i < 1; i++) + { + var data = graphics.graphicsData[i]; + var shape = data.shape; + + if(data.type === PIXI.Graphics.POLY) + { + context.beginPath(); + + var points = shape.points; + + context.moveTo(points[0], points[1]); + + for (var j=1; j < points.length/2; j++) + { + context.lineTo(points[j * 2], points[j * 2 + 1]); + } + + // if the first and last point are the same close the path - much neater :) + if(points[0] === points[points.length-2] && points[1] === points[points.length-1]) + { + context.closePath(); + } + + } + else if(data.type === PIXI.Graphics.RECT) + { + context.beginPath(); + context.rect(shape.x, shape.y, shape.width, shape.height); + context.closePath(); + } + else if(data.type === PIXI.Graphics.CIRC) + { + // TODO - need to be Undefined! + context.beginPath(); + context.arc(shape.x, shape.y, shape.radius,0,2*Math.PI); + context.closePath(); + } + else if(data.type === PIXI.Graphics.ELIP) + { + + // ellipse code taken from: http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + + var w = shape.width * 2; + var h = shape.height * 2; + + var x = shape.x - w/2; + var y = shape.y - h/2; + + context.beginPath(); + + var kappa = 0.5522848, + ox = (w / 2) * kappa, // control point offset horizontal + oy = (h / 2) * kappa, // control point offset vertical + xe = x + w, // x-end + ye = y + h, // y-end + xm = x + w / 2, // x-middle + ym = y + h / 2; // y-middle + + context.moveTo(x, ym); + context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + context.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + context.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + context.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + context.closePath(); + } + else if (data.type === PIXI.Graphics.RREC) + { + + var pts = shape.points; + var rx = pts[0]; + var ry = pts[1]; + var width = pts[2]; + var height = pts[3]; + var radius = pts[4]; + + var maxRadius = Math.min(width, height) / 2 | 0; + radius = radius > maxRadius ? maxRadius : radius; + + context.beginPath(); + context.moveTo(rx, ry + radius); + context.lineTo(rx, ry + height - radius); + context.quadraticCurveTo(rx, ry + height, rx + radius, ry + height); + context.lineTo(rx + width - radius, ry + height); + context.quadraticCurveTo(rx + width, ry + height, rx + width, ry + height - radius); + context.lineTo(rx + width, ry + radius); + context.quadraticCurveTo(rx + width, ry, rx + width - radius, ry); + context.lineTo(rx + radius, ry); + context.quadraticCurveTo(rx, ry, rx, ry + radius); + context.closePath(); + } + } +}; + +PIXI.CanvasGraphics.updateGraphicsTint = function(graphics) +{ + if(graphics.tint === 0xFFFFFF)return; + + var tintR = (graphics.tint >> 16 & 0xFF) / 255; + var tintG = (graphics.tint >> 8 & 0xFF) / 255; + var tintB = (graphics.tint & 0xFF)/ 255; + + for (var i = 0; i < graphics.graphicsData.length; i++) + { + var data = graphics.graphicsData[i]; + + var fillColor = data.fillColor | 0; + var lineColor = data.lineColor | 0; + + /* + var colorR = (fillColor >> 16 & 0xFF) / 255; + var colorG = (fillColor >> 8 & 0xFF) / 255; + var colorB = (fillColor & 0xFF) / 255; + + colorR *= tintR; + colorG *= tintG; + colorB *= tintB; + + fillColor = ((colorR*255 << 16) + (colorG*255 << 8) + colorB*255); + + colorR = (lineColor >> 16 & 0xFF) / 255; + colorG = (lineColor >> 8 & 0xFF) / 255; + colorB = (lineColor & 0xFF) / 255; + + colorR *= tintR; + colorG *= tintG; + colorB *= tintB; + + lineColor = ((colorR*255 << 16) + (colorG*255 << 8) + colorB*255); + */ + + // super inline cos im an optimization NAZI :) + data._fillTint = (((fillColor >> 16 & 0xFF) / 255 * tintR*255 << 16) + ((fillColor >> 8 & 0xFF) / 255 * tintG*255 << 8) + (fillColor & 0xFF) / 255 * tintB*255); + data._lineTint = (((lineColor >> 16 & 0xFF) / 255 * tintR*255 << 16) + ((lineColor >> 8 & 0xFF) / 255 * tintG*255 << 8) + (lineColor & 0xFF) / 255 * tintB*255); + + } +}; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Graphics class contains methods used to draw primitive shapes such as lines, circles and rectangles to the display, and color and fill them. + * + * @class Graphics + * @extends DisplayObjectContainer + * @constructor + */ +PIXI.Graphics = function() +{ + PIXI.DisplayObjectContainer.call( this ); + + this.renderable = true; + + /** + * The alpha value used when filling the Graphics object. + * + * @property fillAlpha + * @type Number + */ + this.fillAlpha = 1; + + /** + * The width (thickness) of any lines drawn. + * + * @property lineWidth + * @type Number + */ + this.lineWidth = 0; + + /** + * The color of any lines drawn. + * + * @property lineColor + * @type String + * @default 0 + */ + this.lineColor = 0; + + /** + * Graphics data + * + * @property graphicsData + * @type Array + * @private + */ + this.graphicsData = []; + + /** + * The tint applied to the graphic shape. This is a hex value. Apply a value of 0xFFFFFF to reset the tint. + * + * @property tint + * @type Number + * @default 0xFFFFFF + */ + this.tint = 0xFFFFFF; + + /** + * The blend mode to be applied to the graphic shape. Apply a value of PIXI.blendModes.NORMAL to reset the blend mode. + * + * @property blendMode + * @type Number + * @default PIXI.blendModes.NORMAL; + */ + this.blendMode = PIXI.blendModes.NORMAL; + + /** + * Current path + * + * @property currentPath + * @type Object + * @private + */ + this.currentPath = null; + + /** + * Array containing some WebGL-related properties used by the WebGL renderer. + * + * @property _webGL + * @type Array + * @private + */ + this._webGL = []; + + /** + * Whether this shape is being used as a mask. + * + * @property isMask + * @type Boolean + */ + this.isMask = false; + + /** + * The bounds' padding used for bounds calculation. + * + * @property boundsPadding + * @type Number + */ + this.boundsPadding = 0; + + this._localBounds = new PIXI.Rectangle(0,0,1,1); + + /** + * Used to detect if the graphics object has changed. If this is set to true then the graphics object will be recalculated. + * + * @property dirty + * @type Boolean + * @private + */ + this.dirty = true; + + /** + * Used to detect if the webgl graphics object has changed. If this is set to true then the graphics object will be recalculated. + * + * @property webGLDirty + * @type Boolean + * @private + */ + this.webGLDirty = false; + + /** + * Used to detect if the cached sprite object needs to be updated. + * + * @property cachedSpriteDirty + * @type Boolean + * @private + */ + this.cachedSpriteDirty = false; + +}; + +// constructor +PIXI.Graphics.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Graphics.prototype.constructor = PIXI.Graphics; + +/** + * When cacheAsBitmap is set to true the graphics object will be rendered as if it was a sprite. + * This is useful if your graphics element does not change often, as it will speed up the rendering of the object in exchange for taking up texture memory. + * It is also useful if you need the graphics object to be anti-aliased, because it will be rendered using canvas. + * This is not recommended if you are constantly redrawing the graphics element. + * + * @property cacheAsBitmap + * @type Boolean + * @default false + * @private + */ +Object.defineProperty(PIXI.Graphics.prototype, "cacheAsBitmap", { + get: function() { + return this._cacheAsBitmap; + }, + set: function(value) { + this._cacheAsBitmap = value; + + if(this._cacheAsBitmap) + { + + this._generateCachedSprite(); + } + else + { + this.destroyCachedSprite(); + this.dirty = true; + } + + } +}); + +/** + * Specifies the line style used for subsequent calls to Graphics methods such as the lineTo() method or the drawCircle() method. + * + * @method lineStyle + * @param lineWidth {Number} width of the line to draw, will update the objects stored style + * @param color {Number} color of the line to draw, will update the objects stored style + * @param alpha {Number} alpha of the line to draw, will update the objects stored style + * @return {Graphics} + */ +PIXI.Graphics.prototype.lineStyle = function(lineWidth, color, alpha) +{ + this.lineWidth = lineWidth || 0; + this.lineColor = color || 0; + this.lineAlpha = (alpha === undefined) ? 1 : alpha; + + if(this.currentPath) + { + if(this.currentPath.shape.points.length) + { + // halfway through a line? start a new one! + this.drawShape( new PIXI.Polygon( this.currentPath.shape.points.slice(-2) )); + return this; + } + + // otherwise its empty so lets just set the line properties + this.currentPath.lineWidth = this.lineWidth; + this.currentPath.lineColor = this.lineColor; + this.currentPath.lineAlpha = this.lineAlpha; + + } + + return this; +}; + +/** + * Moves the current drawing position to x, y. + * + * @method moveTo + * @param x {Number} the X coordinate to move to + * @param y {Number} the Y coordinate to move to + * @return {Graphics} + */ +PIXI.Graphics.prototype.moveTo = function(x, y) +{ + this.drawShape(new PIXI.Polygon([x,y])); + + return this; +}; + +/** + * Draws a line using the current line style from the current drawing position to (x, y); + * The current drawing position is then set to (x, y). + * + * @method lineTo + * @param x {Number} the X coordinate to draw to + * @param y {Number} the Y coordinate to draw to + * @return {Graphics} + */ +PIXI.Graphics.prototype.lineTo = function(x, y) +{ + this.currentPath.shape.points.push(x, y); + this.dirty = true; + + return this; +}; + +/** + * Calculate the points for a quadratic bezier curve and then draws it. + * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c + * + * @method quadraticCurveTo + * @param cpX {Number} Control point x + * @param cpY {Number} Control point y + * @param toX {Number} Destination point x + * @param toY {Number} Destination point y + * @return {Graphics} + */ +PIXI.Graphics.prototype.quadraticCurveTo = function(cpX, cpY, toX, toY) +{ + if( this.currentPath ) + { + if(this.currentPath.shape.points.length === 0)this.currentPath.shape.points = [0,0]; + } + else + { + this.moveTo(0,0); + } + + var xa, + ya, + n = 20, + points = this.currentPath.shape.points; + if(points.length === 0)this.moveTo(0, 0); + + + var fromX = points[points.length-2]; + var fromY = points[points.length-1]; + + var j = 0; + for (var i = 1; i <= n; i++ ) + { + j = i / n; + + xa = fromX + ( (cpX - fromX) * j ); + ya = fromY + ( (cpY - fromY) * j ); + + points.push( xa + ( ((cpX + ( (toX - cpX) * j )) - xa) * j ), + ya + ( ((cpY + ( (toY - cpY) * j )) - ya) * j ) ); + } + + + this.dirty = true; + + return this; +}; + +/** + * Calculate the points for a bezier curve and then draws it. + * + * @method bezierCurveTo + * @param cpX {Number} Control point x + * @param cpY {Number} Control point y + * @param cpX2 {Number} Second Control point x + * @param cpY2 {Number} Second Control point y + * @param toX {Number} Destination point x + * @param toY {Number} Destination point y + * @return {Graphics} + */ +PIXI.Graphics.prototype.bezierCurveTo = function(cpX, cpY, cpX2, cpY2, toX, toY) +{ + if( this.currentPath ) + { + if(this.currentPath.shape.points.length === 0)this.currentPath.shape.points = [0,0]; + } + else + { + this.moveTo(0,0); + } + + var n = 20, + dt, + dt2, + dt3, + t2, + t3, + points = this.currentPath.shape.points; + + var fromX = points[points.length-2]; + var fromY = points[points.length-1]; + + var j = 0; + + for (var i=1; i<=n; i++) + { + j = i / n; + + dt = (1 - j); + dt2 = dt * dt; + dt3 = dt2 * dt; + + t2 = j * j; + t3 = t2 * j; + + points.push( dt3 * fromX + 3 * dt2 * j * cpX + 3 * dt * t2 * cpX2 + t3 * toX, + dt3 * fromY + 3 * dt2 * j * cpY + 3 * dt * t2 * cpY2 + t3 * toY); + } + + this.dirty = true; + + return this; +}; + +/* + * The arcTo() method creates an arc/curve between two tangents on the canvas. + * + * "borrowed" from https://code.google.com/p/fxcanvas/ - thanks google! + * + * @method arcTo + * @param x1 {Number} The x-coordinate of the beginning of the arc + * @param y1 {Number} The y-coordinate of the beginning of the arc + * @param x2 {Number} The x-coordinate of the end of the arc + * @param y2 {Number} The y-coordinate of the end of the arc + * @param radius {Number} The radius of the arc + * @return {Graphics} + */ +PIXI.Graphics.prototype.arcTo = function(x1, y1, x2, y2, radius) +{ + if( this.currentPath ) + { + if(this.currentPath.shape.points.length === 0) + { + this.currentPath.shape.points.push(x1, y1); + } + } + else + { + this.moveTo(x1, y1); + } + + var points = this.currentPath.shape.points; + var fromX = points[points.length-2]; + var fromY = points[points.length-1]; + var a1 = fromY - y1; + var b1 = fromX - x1; + var a2 = y2 - y1; + var b2 = x2 - x1; + var mm = Math.abs(a1 * b2 - b1 * a2); + + + if (mm < 1.0e-8 || radius === 0) + { + if( points[points.length-2] !== x1 || points[points.length-1] !== y1) + { + //console.log(">>") + points.push(x1, y1); + } + } + else + { + var dd = a1 * a1 + b1 * b1; + var cc = a2 * a2 + b2 * b2; + var tt = a1 * a2 + b1 * b2; + var k1 = radius * Math.sqrt(dd) / mm; + var k2 = radius * Math.sqrt(cc) / mm; + var j1 = k1 * tt / dd; + var j2 = k2 * tt / cc; + var cx = k1 * b2 + k2 * b1; + var cy = k1 * a2 + k2 * a1; + var px = b1 * (k2 + j1); + var py = a1 * (k2 + j1); + var qx = b2 * (k1 + j2); + var qy = a2 * (k1 + j2); + var startAngle = Math.atan2(py - cy, px - cx); + var endAngle = Math.atan2(qy - cy, qx - cx); + + this.arc(cx + x1, cy + y1, radius, startAngle, endAngle, b1 * a2 > b2 * a1); + } + + this.dirty = true; + + return this; +}; + +/** + * The arc method creates an arc/curve (used to create circles, or parts of circles). + * + * @method arc + * @param cx {Number} The x-coordinate of the center of the circle + * @param cy {Number} The y-coordinate of the center of the circle + * @param radius {Number} The radius of the circle + * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle) + * @param endAngle {Number} The ending angle, in radians + * @param anticlockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise. + * @return {Graphics} + */ +PIXI.Graphics.prototype.arc = function(cx, cy, radius, startAngle, endAngle, anticlockwise) +{ + anticlockwise = anticlockwise || false; + + if (startAngle === endAngle) + { + return this; + } + + if( !anticlockwise && endAngle <= startAngle ) + { + endAngle += Math.PI * 2; + } + else if( anticlockwise && startAngle <= endAngle ) + { + startAngle += Math.PI * 2; + } + + var sweep = anticlockwise ? (startAngle - endAngle) * -1 : (endAngle - startAngle); + var segs = ( Math.abs(sweep) / (Math.PI * 2) ) * 40; + + if(sweep === 0) + { + return this; + } + + var startX = cx + Math.cos(startAngle) * radius; + var startY = cy + Math.sin(startAngle) * radius; + + if (anticlockwise && this.filling) + { + this.moveTo(cx, cy); + } + else + { + this.moveTo(startX, startY); + } + + // currentPath will always exist after calling a moveTo + var points = this.currentPath.shape.points; + + var theta = sweep/(segs*2); + var theta2 = theta*2; + + var cTheta = Math.cos(theta); + var sTheta = Math.sin(theta); + + var segMinus = segs - 1; + + var remainder = ( segMinus % 1 ) / segMinus; + + for(var i=0; i<=segMinus; i++) + { + var real = i + remainder * i; + + + var angle = ((theta) + startAngle + (theta2 * real)); + + var c = Math.cos(angle); + var s = -Math.sin(angle); + + points.push(( (cTheta * c) + (sTheta * s) ) * radius + cx, + ( (cTheta * -s) + (sTheta * c) ) * radius + cy); + } + + this.dirty = true; + + return this; +}; + +/** + * Specifies a simple one-color fill that subsequent calls to other Graphics methods + * (such as lineTo() or drawCircle()) use when drawing. + * + * @method beginFill + * @param color {Number} the color of the fill + * @param alpha {Number} the alpha of the fill + * @return {Graphics} + */ +PIXI.Graphics.prototype.beginFill = function(color, alpha) +{ + this.filling = true; + this.fillColor = color || 0; + this.fillAlpha = (alpha === undefined) ? 1 : alpha; + + if(this.currentPath) + { + if(this.currentPath.shape.points.length <= 2) + { + this.currentPath.fill = this.filling; + this.currentPath.fillColor = this.fillColor; + this.currentPath.fillAlpha = this.fillAlpha; + } + } + return this; +}; + +/** + * Applies a fill to the lines and shapes that were added since the last call to the beginFill() method. + * + * @method endFill + * @return {Graphics} + */ +PIXI.Graphics.prototype.endFill = function() +{ + this.filling = false; + this.fillColor = null; + this.fillAlpha = 1; + + return this; +}; + +/** + * Draws a rectangle. + * + * @method drawRect + * + * @param x {Number} The X coord of the top-left of the rectangle + * @param y {Number} The Y coord of the top-left of the rectangle + * @param width {Number} The width of the rectangle + * @param height {Number} The height of the rectangle + * @return {Graphics} + */ +PIXI.Graphics.prototype.drawRect = function( x, y, width, height ) +{ + this.drawShape(new PIXI.Rectangle(x,y, width, height)); + + return this; +}; + +/** + * Draws a rounded rectangle. + * + * @method drawRoundedRect + * + * @param x {Number} The X coord of the top-left of the rectangle + * @param y {Number} The Y coord of the top-left of the rectangle + * @param width {Number} The width of the rectangle + * @param height {Number} The height of the rectangle + * @param radius {Number} Radius of the rectangle corners + * @return {Graphics} + */ +PIXI.Graphics.prototype.drawRoundedRect = function( x, y, width, height, radius ) +{ + this.drawShape(new PIXI.RoundedRectangle(x, y, width, height, radius)); + + return this; +}; + +/** + * Draws a circle. + * + * @method drawCircle + * @param x {Number} The X coordinate of the center of the circle + * @param y {Number} The Y coordinate of the center of the circle + * @param radius {Number} The radius of the circle + * @return {Graphics} + */ +PIXI.Graphics.prototype.drawCircle = function(x, y, radius) +{ + this.drawShape(new PIXI.Circle(x,y, radius)); + + return this; +}; + +/** + * Draws an ellipse. + * + * @method drawEllipse + * @param x {Number} The X coordinate of the center of the ellipse + * @param y {Number} The Y coordinate of the center of the ellipse + * @param width {Number} The half width of the ellipse + * @param height {Number} The half height of the ellipse + * @return {Graphics} + */ +PIXI.Graphics.prototype.drawEllipse = function(x, y, width, height) +{ + this.drawShape(new PIXI.Ellipse(x, y, width, height)); + + return this; +}; + +/** + * Draws a polygon using the given path. + * + * @method drawPolygon + * @param path {Array} The path data used to construct the polygon. + * @return {Graphics} + */ +PIXI.Graphics.prototype.drawPolygon = function(path) +{ + if(!(path instanceof Array))path = Array.prototype.slice.call(arguments); + this.drawShape(new PIXI.Polygon(path)); + return this; +}; + +/** + * Clears the graphics that were drawn to this Graphics object, and resets fill and line style settings. + * + * @method clear + * @return {Graphics} + */ +PIXI.Graphics.prototype.clear = function() +{ + this.lineWidth = 0; + this.filling = false; + + this.dirty = true; + this.clearDirty = true; + this.graphicsData = []; + + return this; +}; + +/** + * Useful function that returns a texture of the graphics object that can then be used to create sprites + * This can be quite useful if your geometry is complicated and needs to be reused multiple times. + * + * @method generateTexture + * @param resolution {Number} The resolution of the texture being generated + * @param scaleMode {Number} Should be one of the PIXI.scaleMode consts + * @return {Texture} a texture of the graphics object + */ +PIXI.Graphics.prototype.generateTexture = function(resolution, scaleMode) +{ + resolution = resolution || 1; + + var bounds = this.getBounds(); + + var canvasBuffer = new PIXI.CanvasBuffer(bounds.width * resolution, bounds.height * resolution); + + var texture = PIXI.Texture.fromCanvas(canvasBuffer.canvas, scaleMode); + texture.baseTexture.resolution = resolution; + + canvasBuffer.context.scale(resolution, resolution); + + canvasBuffer.context.translate(-bounds.x,-bounds.y); + + PIXI.CanvasGraphics.renderGraphics(this, canvasBuffer.context); + + return texture; +}; + +/** +* Renders the object using the WebGL renderer +* +* @method _renderWebGL +* @param renderSession {RenderSession} +* @private +*/ +PIXI.Graphics.prototype._renderWebGL = function(renderSession) +{ + // if the sprite is not visible or the alpha is 0 then no need to render this element + if(this.visible === false || this.alpha === 0 || this.isMask === true)return; + + if(this._cacheAsBitmap) + { + + if(this.dirty || this.cachedSpriteDirty) + { + + this._generateCachedSprite(); + + // we will also need to update the texture on the gpu too! + this.updateCachedSpriteTexture(); + + this.cachedSpriteDirty = false; + this.dirty = false; + } + + this._cachedSprite.worldAlpha = this.worldAlpha; + PIXI.Sprite.prototype._renderWebGL.call(this._cachedSprite, renderSession); + + return; + } + else + { + renderSession.spriteBatch.stop(); + renderSession.blendModeManager.setBlendMode(this.blendMode); + + if(this._mask)renderSession.maskManager.pushMask(this._mask, renderSession); + if(this._filters)renderSession.filterManager.pushFilter(this._filterBlock); + + // check blend mode + if(this.blendMode !== renderSession.spriteBatch.currentBlendMode) + { + renderSession.spriteBatch.currentBlendMode = this.blendMode; + var blendModeWebGL = PIXI.blendModesWebGL[renderSession.spriteBatch.currentBlendMode]; + renderSession.spriteBatch.gl.blendFunc(blendModeWebGL[0], blendModeWebGL[1]); + } + + // check if the webgl graphic needs to be updated + if(this.webGLDirty) + { + this.dirty = true; + this.webGLDirty = false; + } + + PIXI.WebGLGraphics.renderGraphics(this, renderSession); + + // only render if it has children! + if(this.children.length) + { + renderSession.spriteBatch.start(); + + // simple render children! + for(var i=0, j=this.children.length; i maxX ? x2 : maxX; + maxX = x3 > maxX ? x3 : maxX; + maxX = x4 > maxX ? x4 : maxX; + + maxY = y2 > maxY ? y2 : maxY; + maxY = y3 > maxY ? y3 : maxY; + maxY = y4 > maxY ? y4 : maxY; + + this._bounds.x = minX; + this._bounds.width = maxX - minX; + + this._bounds.y = minY; + this._bounds.height = maxY - minY; + + return this._bounds; +}; + +/** + * Update the bounds of the object + * + * @method updateLocalBounds + */ +PIXI.Graphics.prototype.updateLocalBounds = function() +{ + var minX = Infinity; + var maxX = -Infinity; + + var minY = Infinity; + var maxY = -Infinity; + + if(this.graphicsData.length) + { + var shape, points, x, y, w, h; + + for (var i = 0; i < this.graphicsData.length; i++) { + var data = this.graphicsData[i]; + var type = data.type; + var lineWidth = data.lineWidth; + shape = data.shape; + + + if(type === PIXI.Graphics.RECT || type === PIXI.Graphics.RREC) + { + x = shape.x - lineWidth/2; + y = shape.y - lineWidth/2; + w = shape.width + lineWidth; + h = shape.height + lineWidth; + + minX = x < minX ? x : minX; + maxX = x + w > maxX ? x + w : maxX; + + minY = y < minY ? y : minY; + maxY = y + h > maxY ? y + h : maxY; + } + else if(type === PIXI.Graphics.CIRC) + { + x = shape.x; + y = shape.y; + w = shape.radius + lineWidth/2; + h = shape.radius + lineWidth/2; + + minX = x - w < minX ? x - w : minX; + maxX = x + w > maxX ? x + w : maxX; + + minY = y - h < minY ? y - h : minY; + maxY = y + h > maxY ? y + h : maxY; + } + else if(type === PIXI.Graphics.ELIP) + { + x = shape.x; + y = shape.y; + w = shape.width + lineWidth/2; + h = shape.height + lineWidth/2; + + minX = x - w < minX ? x - w : minX; + maxX = x + w > maxX ? x + w : maxX; + + minY = y - h < minY ? y - h : minY; + maxY = y + h > maxY ? y + h : maxY; + } + else + { + // POLY + points = shape.points; + + for (var j = 0; j < points.length; j+=2) + { + + x = points[j]; + y = points[j+1]; + minX = x-lineWidth < minX ? x-lineWidth : minX; + maxX = x+lineWidth > maxX ? x+lineWidth : maxX; + + minY = y-lineWidth < minY ? y-lineWidth : minY; + maxY = y+lineWidth > maxY ? y+lineWidth : maxY; + } + } + } + } + else + { + minX = 0; + maxX = 0; + minY = 0; + maxY = 0; + } + + var padding = this.boundsPadding; + + this._localBounds.x = minX - padding; + this._localBounds.width = (maxX - minX) + padding * 2; + + this._localBounds.y = minY - padding; + this._localBounds.height = (maxY - minY) + padding * 2; +}; + +/** + * Generates the cached sprite when the sprite has cacheAsBitmap = true + * + * @method _generateCachedSprite + * @private + */ +PIXI.Graphics.prototype._generateCachedSprite = function() +{ + var bounds = this.getLocalBounds(); + + if(!this._cachedSprite) + { + var canvasBuffer = new PIXI.CanvasBuffer(bounds.width, bounds.height); + var texture = PIXI.Texture.fromCanvas(canvasBuffer.canvas); + + this._cachedSprite = new PIXI.Sprite(texture); + this._cachedSprite.buffer = canvasBuffer; + + this._cachedSprite.worldTransform = this.worldTransform; + } + else + { + this._cachedSprite.buffer.resize(bounds.width, bounds.height); + } + + // leverage the anchor to account for the offset of the element + this._cachedSprite.anchor.x = -( bounds.x / bounds.width ); + this._cachedSprite.anchor.y = -( bounds.y / bounds.height ); + + // this._cachedSprite.buffer.context.save(); + this._cachedSprite.buffer.context.translate(-bounds.x,-bounds.y); + + // make sure we set the alpha of the graphics to 1 for the render.. + this.worldAlpha = 1; + + // now render the graphic.. + PIXI.CanvasGraphics.renderGraphics(this, this._cachedSprite.buffer.context); + this._cachedSprite.alpha = this.alpha; +}; + +/** + * Updates texture size based on canvas size + * + * @method updateCachedSpriteTexture + * @private + */ +PIXI.Graphics.prototype.updateCachedSpriteTexture = function() +{ + var cachedSprite = this._cachedSprite; + var texture = cachedSprite.texture; + var canvas = cachedSprite.buffer.canvas; + + texture.baseTexture.width = canvas.width; + texture.baseTexture.height = canvas.height; + texture.crop.width = texture.frame.width = canvas.width; + texture.crop.height = texture.frame.height = canvas.height; + + cachedSprite._width = canvas.width; + cachedSprite._height = canvas.height; + + // update the dirty base textures + texture.baseTexture.dirty(); +}; + +/** + * Destroys a previous cached sprite. + * + * @method destroyCachedSprite + */ +PIXI.Graphics.prototype.destroyCachedSprite = function() +{ + this._cachedSprite.texture.destroy(true); + + // let the gc collect the unused sprite + // TODO could be object pooled! + this._cachedSprite = null; +}; + +/** + * Draws the given shape to this Graphics object. Can be any of Circle, Rectangle, Ellipse, Line or Polygon. + * + * @method drawShape + * @param {Circle|Rectangle|Ellipse|Line|Polygon} shape The Shape object to draw. + * @return {GraphicsData} The generated GraphicsData object. + */ +PIXI.Graphics.prototype.drawShape = function(shape) +{ + if(this.currentPath) + { + // check current path! + if(this.currentPath.shape.points.length <= 2)this.graphicsData.pop(); + } + + this.currentPath = null; + + var data = new PIXI.GraphicsData(this.lineWidth, this.lineColor, this.lineAlpha, this.fillColor, this.fillAlpha, this.filling, shape); + + this.graphicsData.push(data); + + if(data.type === PIXI.Graphics.POLY) + { + data.shape.closed = this.filling; + this.currentPath = data; + } + + this.dirty = true; + + return data; +}; + +/** + * A GraphicsData object. + * + * @class GraphicsData + * @constructor + */ +PIXI.GraphicsData = function(lineWidth, lineColor, lineAlpha, fillColor, fillAlpha, fill, shape) +{ + this.lineWidth = lineWidth; + this.lineColor = lineColor; + this.lineAlpha = lineAlpha; + this._lineTint = lineColor; + + this.fillColor = fillColor; + this.fillAlpha = fillAlpha; + this._fillTint = fillColor; + this.fill = fill; + + this.shape = shape; + this.type = shape.type; +}; + +// SOME TYPES: +PIXI.Graphics.POLY = 0; +PIXI.Graphics.RECT = 1; +PIXI.Graphics.CIRC = 2; +PIXI.Graphics.ELIP = 3; +PIXI.Graphics.RREC = 4; + +PIXI.Polygon.prototype.type = PIXI.Graphics.POLY; +PIXI.Rectangle.prototype.type = PIXI.Graphics.RECT; +PIXI.Circle.prototype.type = PIXI.Graphics.CIRC; +PIXI.Ellipse.prototype.type = PIXI.Graphics.ELIP; +PIXI.RoundedRectangle.prototype.type = PIXI.Graphics.RREC; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + /** + * + * @class Strip + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} The texture to use + * @param width {Number} the width + * @param height {Number} the height + * + */ +PIXI.Strip = function(texture) +{ + PIXI.DisplayObjectContainer.call( this ); + + + /** + * The texture of the strip + * + * @property texture + * @type Texture + */ + this.texture = texture; + + // set up the main bits.. + this.uvs = new PIXI.Float32Array([0, 1, + 1, 1, + 1, 0, + 0, 1]); + + this.vertices = new PIXI.Float32Array([0, 0, + 100, 0, + 100, 100, + 0, 100]); + + this.colors = new PIXI.Float32Array([1, 1, 1, 1]); + + this.indices = new PIXI.Uint16Array([0, 1, 2, 3]); + + /** + * Whether the strip is dirty or not + * + * @property dirty + * @type Boolean + */ + this.dirty = true; + + /** + * The blend mode to be applied to the sprite. Set to PIXI.blendModes.NORMAL to remove any blend mode. + * + * @property blendMode + * @type Number + * @default PIXI.blendModes.NORMAL; + */ + this.blendMode = PIXI.blendModes.NORMAL; + + /** + * Triangles in canvas mode are automatically antialiased, use this value to force triangles to overlap a bit with each other. + * + * @property canvasPadding + * @type Number + */ + this.canvasPadding = 0; + + this.drawMode = PIXI.Strip.DrawModes.TRIANGLE_STRIP; + +}; + +// constructor +PIXI.Strip.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); +PIXI.Strip.prototype.constructor = PIXI.Strip; + +PIXI.Strip.prototype._renderWebGL = function(renderSession) +{ + // if the sprite is not visible or the alpha is 0 then no need to render this element + if(!this.visible || this.alpha <= 0)return; + // render triangle strip.. + + renderSession.spriteBatch.stop(); + + // init! init! + if(!this._vertexBuffer)this._initWebGL(renderSession); + + renderSession.shaderManager.setShader(renderSession.shaderManager.stripShader); + + this._renderStrip(renderSession); + + ///renderSession.shaderManager.activateDefaultShader(); + + renderSession.spriteBatch.start(); + + //TODO check culling +}; + +PIXI.Strip.prototype._initWebGL = function(renderSession) +{ + // build the strip! + var gl = renderSession.gl; + + this._vertexBuffer = gl.createBuffer(); + this._indexBuffer = gl.createBuffer(); + this._uvBuffer = gl.createBuffer(); + this._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, this._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, this._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); +}; + +PIXI.Strip.prototype._renderStrip = function(renderSession) +{ + var gl = renderSession.gl; + var projection = renderSession.projection, + offset = renderSession.offset, + shader = renderSession.shaderManager.stripShader; + + var drawMode = this.drawMode === PIXI.Strip.DrawModes.TRIANGLE_STRIP ? gl.TRIANGLE_STRIP : gl.TRIANGLES; + + // gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + renderSession.blendModeManager.setBlendMode(this.blendMode); + + + // set uniforms + gl.uniformMatrix3fv(shader.translationMatrix, false, this.worldTransform.toArray(true)); + gl.uniform2f(shader.projectionVector, projection.x, -projection.y); + gl.uniform2f(shader.offsetVector, -offset.x, -offset.y); + gl.uniform1f(shader.alpha, this.worldAlpha); + + if(!this.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); + gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this._uvBuffer); + gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + + // check if a texture is dirty.. + if(this.texture.baseTexture._dirty[gl.id]) + { + renderSession.renderer.updateTexture(this.texture.baseTexture); + } + else + { + // bind the current texture + gl.bindTexture(gl.TEXTURE_2D, this.texture.baseTexture._glTextures[gl.id]); + } + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer); + + + } + else + { + + this.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.STATIC_DRAW); + gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs, gl.STATIC_DRAW); + gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + + // check if a texture is dirty.. + if(this.texture.baseTexture._dirty[gl.id]) + { + renderSession.renderer.updateTexture(this.texture.baseTexture); + } + else + { + gl.bindTexture(gl.TEXTURE_2D, this.texture.baseTexture._glTextures[gl.id]); + } + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + // + // + gl.drawElements(drawMode, this.indices.length, gl.UNSIGNED_SHORT, 0); + + +}; + + + +PIXI.Strip.prototype._renderCanvas = function(renderSession) +{ + var context = renderSession.context; + + var transform = this.worldTransform; + + if (renderSession.roundPixels) + { + context.setTransform(transform.a, transform.b, transform.c, transform.d, transform.tx | 0, transform.ty | 0); + } + else + { + context.setTransform(transform.a, transform.b, transform.c, transform.d, transform.tx, transform.ty); + } + + if (this.drawMode === PIXI.Strip.DrawModes.TRIANGLE_STRIP) + { + this._renderCanvasTriangleStrip(context); + } + else + { + this._renderCanvasTriangles(context); + } +}; + +PIXI.Strip.prototype._renderCanvasTriangleStrip = function(context) +{ + // draw triangles!! + var vertices = this.vertices; + var uvs = this.uvs; + + var length = vertices.length / 2; + this.count++; + + for (var i = 0; i < length - 2; i++) { + // draw some triangles! + var index = i * 2; + this._renderCanvasDrawTriangle(context, vertices, uvs, index, (index + 2), (index + 4)); + } +}; + +PIXI.Strip.prototype._renderCanvasTriangles = function(context) +{ + // draw triangles!! + var vertices = this.vertices; + var uvs = this.uvs; + var indices = this.indices; + + var length = indices.length; + this.count++; + + for (var i = 0; i < length; i += 3) { + // draw some triangles! + var index0 = indices[i] * 2, index1 = indices[i + 1] * 2, index2 = indices[i + 2] * 2; + this._renderCanvasDrawTriangle(context, vertices, uvs, index0, index1, index2); + } +}; + +PIXI.Strip.prototype._renderCanvasDrawTriangle = function(context, vertices, uvs, index0, index1, index2) +{ + var textureSource = this.texture.baseTexture.source; + var textureWidth = this.texture.width; + var textureHeight = this.texture.height; + + var x0 = vertices[index0], x1 = vertices[index1], x2 = vertices[index2]; + var y0 = vertices[index0 + 1], y1 = vertices[index1 + 1], y2 = vertices[index2 + 1]; + + var u0 = uvs[index0] * textureWidth, u1 = uvs[index1] * textureWidth, u2 = uvs[index2] * textureWidth; + var v0 = uvs[index0 + 1] * textureHeight, v1 = uvs[index1 + 1] * textureHeight, v2 = uvs[index2 + 1] * textureHeight; + + if (this.canvasPadding > 0) { + var paddingX = this.canvasPadding / this.worldTransform.a; + var paddingY = this.canvasPadding / this.worldTransform.d; + var centerX = (x0 + x1 + x2) / 3; + var centerY = (y0 + y1 + y2) / 3; + + var normX = x0 - centerX; + var normY = y0 - centerY; + + var dist = Math.sqrt(normX * normX + normY * normY); + x0 = centerX + (normX / dist) * (dist + paddingX); + y0 = centerY + (normY / dist) * (dist + paddingY); + + // + + normX = x1 - centerX; + normY = y1 - centerY; + + dist = Math.sqrt(normX * normX + normY * normY); + x1 = centerX + (normX / dist) * (dist + paddingX); + y1 = centerY + (normY / dist) * (dist + paddingY); + + normX = x2 - centerX; + normY = y2 - centerY; + + dist = Math.sqrt(normX * normX + normY * normY); + x2 = centerX + (normX / dist) * (dist + paddingX); + y2 = centerY + (normY / dist) * (dist + paddingY); + } + + context.save(); + context.beginPath(); + + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + context.closePath(); + + context.clip(); + + // Compute matrix transform + var delta = (u0 * v1) + (v0 * u2) + (u1 * v2) - (v1 * u2) - (v0 * u1) - (u0 * v2); + var deltaA = (x0 * v1) + (v0 * x2) + (x1 * v2) - (v1 * x2) - (v0 * x1) - (x0 * v2); + var deltaB = (u0 * x1) + (x0 * u2) + (u1 * x2) - (x1 * u2) - (x0 * u1) - (u0 * x2); + var deltaC = (u0 * v1 * x2) + (v0 * x1 * u2) + (x0 * u1 * v2) - (x0 * v1 * u2) - (v0 * u1 * x2) - (u0 * x1 * v2); + var deltaD = (y0 * v1) + (v0 * y2) + (y1 * v2) - (v1 * y2) - (v0 * y1) - (y0 * v2); + var deltaE = (u0 * y1) + (y0 * u2) + (u1 * y2) - (y1 * u2) - (y0 * u1) - (u0 * y2); + var deltaF = (u0 * v1 * y2) + (v0 * y1 * u2) + (y0 * u1 * v2) - (y0 * v1 * u2) - (v0 * u1 * y2) - (u0 * y1 * v2); + + context.transform(deltaA / delta, deltaD / delta, + deltaB / delta, deltaE / delta, + deltaC / delta, deltaF / delta); + + context.drawImage(textureSource, 0, 0); + context.restore(); +}; + + + +/** + * Renders a flat strip + * + * @method renderStripFlat + * @param strip {Strip} The Strip to render + * @private + */ +PIXI.Strip.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var vertices = strip.vertices; + + var length = vertices.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + // draw some triangles! + var index = i*2; + + var x0 = vertices[index], x1 = vertices[index+2], x2 = vertices[index+4]; + var y0 = vertices[index+1], y1 = vertices[index+3], y2 = vertices[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + } + + context.fillStyle = '#FF0000'; + context.fill(); + context.closePath(); +}; + +/* +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +}; +*/ + +/** + * When the texture is updated, this event will fire to update the scale and frame + * + * @method onTextureUpdate + * @param event + * @private + */ + +PIXI.Strip.prototype.onTextureUpdate = function() +{ + this.updateFrame = true; +}; + +/** + * Returns the bounds of the mesh as a rectangle. The bounds calculation takes the worldTransform into account. + * + * @method getBounds + * @param matrix {Matrix} the transformation matrix of the sprite + * @return {Rectangle} the framing rectangle + */ +PIXI.Strip.prototype.getBounds = function(matrix) +{ + var worldTransform = matrix || this.worldTransform; + + var a = worldTransform.a; + var b = worldTransform.b; + var c = worldTransform.c; + var d = worldTransform.d; + var tx = worldTransform.tx; + var ty = worldTransform.ty; + + var maxX = -Infinity; + var maxY = -Infinity; + + var minX = Infinity; + var minY = Infinity; + + var vertices = this.vertices; + for (var i = 0, n = vertices.length; i < n; i += 2) + { + var rawX = vertices[i], rawY = vertices[i + 1]; + var x = (a * rawX) + (c * rawY) + tx; + var y = (d * rawY) + (b * rawX) + ty; + + minX = x < minX ? x : minX; + minY = y < minY ? y : minY; + + maxX = x > maxX ? x : maxX; + maxY = y > maxY ? y : maxY; + } + + if (minX === -Infinity || maxY === Infinity) + { + return PIXI.EmptyRectangle; + } + + var bounds = this._bounds; + + bounds.x = minX; + bounds.width = maxX - minX; + + bounds.y = minY; + bounds.height = maxY - minY; + + // store a reference so that if this function gets called again in the render cycle we do not have to recalculate + this._currentBounds = bounds; + + return bounds; +}; + +/** + * Different drawing buffer modes supported + * + * @property + * @type {{TRIANGLE_STRIP: number, TRIANGLES: number}} + * @static + */ +PIXI.Strip.DrawModes = { + TRIANGLE_STRIP: 0, + TRIANGLES: 1 +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * @copyright Mat Groves, Rovanion Luckey + */ + +/** + * + * @class Rope + * @constructor + * @extends Strip + * @param {Texture} texture - The texture to use on the rope. + * @param {Array} points - An array of {PIXI.Point}. + * + */ +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + this.vertices = new PIXI.Float32Array(points.length * 4); + this.uvs = new PIXI.Float32Array(points.length * 4); + this.colors = new PIXI.Float32Array(points.length * 2); + this.indices = new PIXI.Uint16Array(points.length * 2); + + + this.refresh(); +}; + + +// constructor +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); +PIXI.Rope.prototype.constructor = PIXI.Rope; + +/* + * Refreshes + * + * @method refresh + */ +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1) return; + + var uvs = this.uvs; + + var lastPoint = points[0]; + var indices = this.indices; + var colors = this.colors; + + this.count-=0.2; + + uvs[0] = 0; + uvs[1] = 0; + uvs[2] = 0; + uvs[3] = 1; + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length, + point, index, amount; + + for (var i = 1; i < total; i++) + { + point = points[i]; + index = i * 4; + // time to do some smart drawing! + amount = i / (total-1); + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount; + uvs[index+3] = 1; + } + else + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount; + uvs[index+3] = 1; + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +}; + +/* + * Updates the object transform for rendering + * + * @method updateTransform + * @private + */ +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + + this.count-=0.2; + + var vertices = this.vertices; + var total = points.length, + point, index, ratio, perpLength, num; + + for (var i = 0; i < total; i++) + { + point = points[i]; + index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point; + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + ratio = (1 - (i / (total-1))) * 10; + + if(ratio > 1) ratio = 1; + + perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + num = this.texture.height / 2; //(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + vertices[index] = point.x + perp.x; + vertices[index+1] = point.y + perp.y; + vertices[index+2] = point.x - perp.x; + vertices[index+3] = point.y - perp.y; + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +}; +/* + * Sets the texture that the Rope will use + * + * @method setTexture + * @param texture {Texture} the texture that will be used + */ +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + //this.updateFrame = true; +}; + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * + * @class TilingSprite + * @extends Sprite + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.Sprite.call( this, texture); + + /** + * The with of the tiling sprite + * + * @property width + * @type Number + */ + this._width = width || 100; + + /** + * The height of the tiling sprite + * + * @property height + * @type Number + */ + this._height = height || 100; + + /** + * The scaling of the image that is being tiled + * + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + + /** + * A point that represents the scale of the texture object + * + * @property tileScaleOffset + * @type Point + */ + this.tileScaleOffset = new PIXI.Point(1,1); + + /** + * The offset position of the image that is being tiled + * + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + /** + * Whether this sprite is renderable or not + * + * @property renderable + * @type Boolean + * @default true + */ + this.renderable = true; + + /** + * The tint applied to the sprite. This is a hex value + * + * @property tint + * @type Number + * @default 0xFFFFFF + */ + this.tint = 0xFFFFFF; + + /** + * The blend mode to be applied to the sprite + * + * @property blendMode + * @type Number + * @default PIXI.blendModes.NORMAL; + */ + this.blendMode = PIXI.blendModes.NORMAL; + + + +}; + +// constructor +PIXI.TilingSprite.prototype = Object.create(PIXI.Sprite.prototype); +PIXI.TilingSprite.prototype.constructor = PIXI.TilingSprite; + + +/** + * The width of the sprite, setting this will actually modify the scale to achieve the value set + * + * @property width + * @type Number + */ +Object.defineProperty(PIXI.TilingSprite.prototype, 'width', { + get: function() { + return this._width; + }, + set: function(value) { + + this._width = value; + } +}); + +/** + * The height of the TilingSprite, setting this will actually modify the scale to achieve the value set + * + * @property height + * @type Number + */ +Object.defineProperty(PIXI.TilingSprite.prototype, 'height', { + get: function() { + return this._height; + }, + set: function(value) { + this._height = value; + } +}); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + if (this.texture === texture) return; + + this.texture = texture; + + this.refreshTexture = true; + + this.cachedTint = 0xFFFFFF; +}; + +/** +* Renders the object using the WebGL renderer +* +* @method _renderWebGL +* @param renderSession {RenderSession} +* @private +*/ +PIXI.TilingSprite.prototype._renderWebGL = function(renderSession) +{ + if (this.visible === false || this.alpha === 0) return; + var i,j; + + if (this._mask) + { + renderSession.spriteBatch.stop(); + renderSession.maskManager.pushMask(this.mask, renderSession); + renderSession.spriteBatch.start(); + } + + if (this._filters) + { + renderSession.spriteBatch.flush(); + renderSession.filterManager.pushFilter(this._filterBlock); + } + + + + if (!this.tilingTexture || this.refreshTexture) + { + this.generateTilingTexture(true); + + if (this.tilingTexture && this.tilingTexture.needsUpdate) + { + //TODO - tweaking + renderSession.renderer.updateTexture(this.tilingTexture.baseTexture); + this.tilingTexture.needsUpdate = false; + // this.tilingTexture._uvs = null; + } + } + else + { + renderSession.spriteBatch.renderTilingSprite(this); + } + // simple render children! + for (i=0,j=this.children.length; i maxX ? x1 : maxX; + maxX = x2 > maxX ? x2 : maxX; + maxX = x3 > maxX ? x3 : maxX; + maxX = x4 > maxX ? x4 : maxX; + + maxY = y1 > maxY ? y1 : maxY; + maxY = y2 > maxY ? y2 : maxY; + maxY = y3 > maxY ? y3 : maxY; + maxY = y4 > maxY ? y4 : maxY; + + var bounds = this._bounds; + + bounds.x = minX; + bounds.width = maxX - minX; + + bounds.y = minY; + bounds.height = maxY - minY; + + // store a reference so that if this function gets called again in the render cycle we do not have to recalculate + this._currentBounds = bounds; + + return bounds; +}; + + + +/** + * When the texture is updated, this event will fire to update the scale and frame + * + * @method onTextureUpdate + * @param event + * @private + */ +PIXI.TilingSprite.prototype.onTextureUpdate = function() +{ + // overriding the sprite version of this! +}; + + +/** +* +* @method generateTilingTexture +* +* @param forcePowerOfTwo {Boolean} Whether we want to force the texture to be a power of two +*/ +PIXI.TilingSprite.prototype.generateTilingTexture = function(forcePowerOfTwo) +{ + if (!this.texture.baseTexture.hasLoaded) return; + + var texture = this.originalTexture || this.texture; + var frame = texture.frame; + var targetWidth, targetHeight; + + // Check that the frame is the same size as the base texture. + var isFrame = frame.width !== texture.baseTexture.width || frame.height !== texture.baseTexture.height; + + var newTextureRequired = false; + + if (!forcePowerOfTwo) + { + if (isFrame) + { + if (texture.trim) + { + targetWidth = texture.trim.width; + targetHeight = texture.trim.height; + } + else + { + targetWidth = frame.width; + targetHeight = frame.height; + } + + newTextureRequired = true; + } + } + else + { + targetWidth = PIXI.getNextPowerOfTwo(frame.width); + targetHeight = PIXI.getNextPowerOfTwo(frame.height); + + // If the BaseTexture dimensions don't match the texture frame then we need a new texture anyway because it's part of a texture atlas + if (frame.width !== targetWidth || frame.height !== targetHeight || texture.baseTexture.width !== targetWidth || texture.baseTexture.height || targetHeight) newTextureRequired = true; + } + + if (newTextureRequired) + { + var canvasBuffer; + + if (this.tilingTexture && this.tilingTexture.isTiling) + { + canvasBuffer = this.tilingTexture.canvasBuffer; + canvasBuffer.resize(targetWidth, targetHeight); + this.tilingTexture.baseTexture.width = targetWidth; + this.tilingTexture.baseTexture.height = targetHeight; + this.tilingTexture.needsUpdate = true; + } + else + { + canvasBuffer = new PIXI.CanvasBuffer(targetWidth, targetHeight); + + this.tilingTexture = PIXI.Texture.fromCanvas(canvasBuffer.canvas); + this.tilingTexture.canvasBuffer = canvasBuffer; + this.tilingTexture.isTiling = true; + } + + canvasBuffer.context.drawImage(texture.baseTexture.source, + texture.crop.x, + texture.crop.y, + texture.crop.width, + texture.crop.height, + 0, + 0, + targetWidth, + targetHeight); + + this.tileScaleOffset.x = frame.width / targetWidth; + this.tileScaleOffset.y = frame.height / targetHeight; + } + else + { + // TODO - switching? + if (this.tilingTexture && this.tilingTexture.isTiling) + { + // destroy the tiling texture! + // TODO could store this somewhere? + this.tilingTexture.destroy(true); + } + + this.tileScaleOffset.x = 1; + this.tileScaleOffset.y = 1; + this.tilingTexture = texture; + } + + this.refreshTexture = false; + + this.originalTexture = this.texture; + this.texture = this.tilingTexture; + + this.tilingTexture.baseTexture._powerOf2 = true; +}; + +PIXI.TilingSprite.prototype.destroy = function () { + PIXI.Sprite.prototype.destroy.call(this); + + this.tileScale = null; + this.tileScaleOffset = null; + this.tilePosition = null; + + if (this.tilingTexture) { + this.tilingTexture.destroy(true); + this.tilingTexture = null; + } +}; + +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.1 + * + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable and + * non-transferable license to install, execute and perform the Spine Runtimes + * Software (the "Software") solely for internal use. Without the written + * permission of Esoteric Software (typically granted by licensing Spine), you + * may not (a) modify, translate, adapt or otherwise create derivative works, + * improvements of the Software or develop new applications using the Software + * or (b) remove, delete, alter or obscure any trademarks or any copyright, + * trademark, patent or other intellectual property or proprietary rights + * notices on or in the Software, including any copy thereof. Redistributions + * in binary or source form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +var spine = { + radDeg: 180 / Math.PI, + degRad: Math.PI / 180, + temp: [], + Float32Array: (typeof(Float32Array) === 'undefined') ? Array : Float32Array, + Uint16Array: (typeof(Uint16Array) === 'undefined') ? Array : Uint16Array +}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + inheritScale: true, + inheritRotation: true, + flipX: false, flipY: false +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null, + additiveBlending: false +}; + +spine.IkConstraintData = function (name) { + this.name = name; + this.bones = []; +}; +spine.IkConstraintData.prototype = { + target: null, + bendDirection: 1, + mix: 1 +}; + +spine.Bone = function (boneData, skeleton, parent) { + this.data = boneData; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, rotationIK: 0, + scaleX: 1, scaleY: 1, + flipX: false, flipY: false, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + worldFlipX: false, worldFlipY: false, + updateWorldTransform: function () { + var parent = this.parent; + if (parent) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + if (this.data.inheritScale) { + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + } else { + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + } + this.worldRotation = this.data.inheritRotation ? (parent.worldRotation + this.rotationIK) : this.rotationIK; + this.worldFlipX = parent.worldFlipX != this.flipX; + this.worldFlipY = parent.worldFlipY != this.flipY; + } else { + var skeletonFlipX = this.skeleton.flipX, skeletonFlipY = this.skeleton.flipY; + this.worldX = skeletonFlipX ? -this.x : this.x; + this.worldY = (skeletonFlipY != spine.Bone.yDown) ? -this.y : this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotationIK; + this.worldFlipX = skeletonFlipX != this.flipX; + this.worldFlipY = skeletonFlipY != this.flipY; + } + var radians = this.worldRotation * spine.degRad; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + if (this.worldFlipX) { + this.m00 = -cos * this.worldScaleX; + this.m01 = sin * this.worldScaleY; + } else { + this.m00 = cos * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + } + if (this.worldFlipY != spine.Bone.yDown) { + this.m10 = -sin * this.worldScaleX; + this.m11 = -cos * this.worldScaleY; + } else { + this.m10 = sin * this.worldScaleX; + this.m11 = cos * this.worldScaleY; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.rotationIK = this.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.flipX = data.flipX; + this.flipY = data.flipY; + }, + worldToLocal: function (world) { + var dx = world[0] - this.worldX, dy = world[1] - this.worldY; + var m00 = this.m00, m10 = this.m10, m01 = this.m01, m11 = this.m11; + if (this.worldFlipX != (this.worldFlipY != spine.Bone.yDown)) { + m00 = -m00; + m11 = -m11; + } + var invDet = 1 / (m00 * m11 - m01 * m10); + world[0] = dx * m00 * invDet - dy * m01 * invDet; + world[1] = dy * m11 * invDet - dx * m10 * invDet; + }, + localToWorld: function (local) { + var localX = local[0], localY = local[1]; + local[0] = localX * this.m00 + localY * this.m01 + this.worldX; + local[1] = localX * this.m10 + localY * this.m11 + this.worldY; + } +}; + +spine.Slot = function (slotData, bone) { + this.data = slotData; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + attachmentVertices: [], + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.bone.skeleton.time; + this.attachmentVertices.length = 0; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.bone.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.bone.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.bone.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.bone.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.IkConstraint = function (data, skeleton) { + this.data = data; + this.mix = data.mix; + this.bendDirection = data.bendDirection; + + this.bones = []; + for (var i = 0, n = data.bones.length; i < n; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); +}; +spine.IkConstraint.prototype = { + apply: function () { + var target = this.target; + var bones = this.bones; + switch (bones.length) { + case 1: + spine.IkConstraint.apply1(bones[0], target.worldX, target.worldY, this.mix); + break; + case 2: + spine.IkConstraint.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.mix); + break; + } + } +}; +/** Adjusts the bone rotation so the tip is as close to the target position as possible. The target is specified in the world + * coordinate system. */ +spine.IkConstraint.apply1 = function (bone, targetX, targetY, alpha) { + var parentRotation = (!bone.data.inheritRotation || !bone.parent) ? 0 : bone.parent.worldRotation; + var rotation = bone.rotation; + var rotationIK = Math.atan2(targetY - bone.worldY, targetX - bone.worldX) * spine.radDeg - parentRotation; + bone.rotationIK = rotation + (rotationIK - rotation) * alpha; +}; +/** Adjusts the parent and child bone rotations so the tip of the child is as close to the target position as possible. The + * target is specified in the world coordinate system. + * @param child Any descendant bone of the parent. */ +spine.IkConstraint.apply2 = function (parent, child, targetX, targetY, bendDirection, alpha) { + var childRotation = child.rotation, parentRotation = parent.rotation; + if (!alpha) { + child.rotationIK = childRotation; + parent.rotationIK = parentRotation; + return; + } + var positionX, positionY, tempPosition = spine.temp; + var parentParent = parent.parent; + if (parentParent) { + tempPosition[0] = targetX; + tempPosition[1] = targetY; + parentParent.worldToLocal(tempPosition); + targetX = (tempPosition[0] - parent.x) * parentParent.worldScaleX; + targetY = (tempPosition[1] - parent.y) * parentParent.worldScaleY; + } else { + targetX -= parent.x; + targetY -= parent.y; + } + if (child.parent == parent) { + positionX = child.x; + positionY = child.y; + } else { + tempPosition[0] = child.x; + tempPosition[1] = child.y; + child.parent.localToWorld(tempPosition); + parent.worldToLocal(tempPosition); + positionX = tempPosition[0]; + positionY = tempPosition[1]; + } + var childX = positionX * parent.worldScaleX, childY = positionY * parent.worldScaleY; + var offset = Math.atan2(childY, childX); + var len1 = Math.sqrt(childX * childX + childY * childY), len2 = child.data.length * child.worldScaleX; + // Based on code by Ryan Juckett with permission: Copyright (c) 2008-2009 Ryan Juckett, http://www.ryanjuckett.com/ + var cosDenom = 2 * len1 * len2; + if (cosDenom < 0.0001) { + child.rotationIK = childRotation + (Math.atan2(targetY, targetX) * spine.radDeg - parentRotation - childRotation) * alpha; + return; + } + var cos = (targetX * targetX + targetY * targetY - len1 * len1 - len2 * len2) / cosDenom; + if (cos < -1) + cos = -1; + else if (cos > 1) + cos = 1; + var childAngle = Math.acos(cos) * bendDirection; + var adjacent = len1 + len2 * cos, opposite = len2 * Math.sin(childAngle); + var parentAngle = Math.atan2(targetY * adjacent - targetX * opposite, targetX * adjacent + targetY * opposite); + var rotation = (parentAngle - offset) * spine.radDeg - parentRotation; + if (rotation > 180) + rotation -= 360; + else if (rotation < -180) // + rotation += 360; + parent.rotationIK = parentRotation + rotation * alpha; + rotation = (childAngle + offset) * spine.radDeg - childRotation; + if (rotation > 180) + rotation -= 360; + else if (rotation < -180) // + rotation += 360; + child.rotationIK = childRotation + (rotation + parent.worldRotation - child.parent.worldRotation) * alpha; +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, lastTime, time, loop, events) { + if (loop && this.duration != 0) { + time %= this.duration; + lastTime %= this.duration; + } + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, 1); + }, + mix: function (skeleton, lastTime, time, loop, events, alpha) { + if (loop && this.duration != 0) { + time %= this.duration; + lastTime %= this.duration; + } + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, alpha); + } +}; +spine.Animation.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (!high) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.Animation.binarySearch1 = function (values, target) { + var low = 0; + var high = values.length - 2; + if (!high) return 1; + var current = high >>> 1; + while (true) { + if (values[current + 1] <= target) + low = current + 1; + else + high = current; + if (low == high) return low + 1; + current = (low + high) >>> 1; + } +}; +spine.Animation.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // type, x, y, ... + //this.curves.length = (frameCount - 1) * 19/*BEZIER_SIZE*/; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 19/*BEZIER_SIZE*/] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 19/*BEZIER_SIZE*/] = 1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv1 = 1 / 10/*BEZIER_SEGMENTS*/, subdiv2 = subdiv1 * subdiv1, subdiv3 = subdiv2 * subdiv1; + var pre1 = 3 * subdiv1, pre2 = 3 * subdiv2, pre4 = 6 * subdiv2, pre5 = 6 * subdiv3; + var tmp1x = -cx1 * 2 + cx2, tmp1y = -cy1 * 2 + cy2, tmp2x = (cx1 - cx2) * 3 + 1, tmp2y = (cy1 - cy2) * 3 + 1; + var dfx = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv3, dfy = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv3; + var ddfx = tmp1x * pre4 + tmp2x * pre5, ddfy = tmp1y * pre4 + tmp2y * pre5; + var dddfx = tmp2x * pre5, dddfy = tmp2y * pre5; + + var i = frameIndex * 19/*BEZIER_SIZE*/; + var curves = this.curves; + curves[i++] = 2/*BEZIER*/; + + var x = dfx, y = dfy; + for (var n = i + 19/*BEZIER_SIZE*/ - 1; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curves = this.curves; + var i = frameIndex * 19/*BEZIER_SIZE*/; + var type = curves[i]; + if (type === 0/*LINEAR*/) return percent; + if (type == 1/*STEPPED*/) return 0; + i++; + var x = 0; + for (var start = i, n = i + 19/*BEZIER_SIZE*/ - 1; i < n; i += 2) { + x = curves[i]; + if (x >= percent) { + var prevX, prevY; + if (i == start) { + prevX = 0; + prevY = 0; + } else { + prevX = curves[i - 2]; + prevY = curves[i - 1]; + } + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX); + } + } + var y = curves[i - 1]; + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + var frameIndex = spine.Animation.binarySearch(frames, time, 2); + var prevFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*PREV_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - prevFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (prevFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + var frameIndex = spine.Animation.binarySearch(frames, time, 3); + var prevFrameX = frames[frameIndex - 2]; + var prevFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*PREV_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.x += (bone.data.x + prevFrameX + (frames[frameIndex + 1/*FRAME_X*/] - prevFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + prevFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - prevFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX * frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY * frames[frames.length - 1] - bone.scaleY) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + var frameIndex = spine.Animation.binarySearch(frames, time, 3); + var prevFrameX = frames[frameIndex - 2]; + var prevFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*PREV_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX * (prevFrameX + (frames[frameIndex + 1/*FRAME_X*/] - prevFrameX) * percent) - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY * (prevFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - prevFrameY) * percent) - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 5; + }, + setFrame: function (frameIndex, time, r, g, b, a) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var r, g, b, a; + if (time >= frames[frames.length - 5]) { + // Time is after last frame. + var i = frames.length - 1; + r = frames[i - 3]; + g = frames[i - 2]; + b = frames[i - 1]; + a = frames[i]; + } else { + // Interpolate between the previous frame and the current frame. + var frameIndex = spine.Animation.binarySearch(frames, time, 5); + var prevFrameR = frames[frameIndex - 4]; + var prevFrameG = frames[frameIndex - 3]; + var prevFrameB = frames[frameIndex - 2]; + var prevFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*PREV_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + r = prevFrameR + (frames[frameIndex + 1/*FRAME_R*/] - prevFrameR) * percent; + g = prevFrameG + (frames[frameIndex + 2/*FRAME_G*/] - prevFrameG) * percent; + b = prevFrameB + (frames[frameIndex + 3/*FRAME_B*/] - prevFrameB) * percent; + a = prevFrameA + (frames[frameIndex + 4/*FRAME_A*/] - prevFrameA) * percent; + } + var slot = skeleton.slots[this.slotIndex]; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + var frames = this.frames; + if (time < frames[0]) { + if (lastTime > time) this.apply(skeleton, lastTime, Number.MAX_VALUE, null, 0); + return; + } else if (lastTime > time) // + lastTime = -1; + + var frameIndex = time >= frames[frames.length - 1] ? frames.length - 1 : spine.Animation.binarySearch1(frames, time) - 1; + if (frames[frameIndex] < lastTime) return; + + var attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex].setAttachment( + !attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.EventTimeline = function (frameCount) { + this.frames = []; // time, ... + this.frames.length = frameCount; + this.events = []; + this.events.length = frameCount; +}; +spine.EventTimeline.prototype = { + getFrameCount: function () { + return this.frames.length; + }, + setFrame: function (frameIndex, time, event) { + this.frames[frameIndex] = time; + this.events[frameIndex] = event; + }, + /** Fires events for frames > lastTime and <= time. */ + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + if (!firedEvents) return; + + var frames = this.frames; + var frameCount = frames.length; + + if (lastTime > time) { // Fire events after last time for looped animations. + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha); + lastTime = -1; + } else if (lastTime >= frames[frameCount - 1]) // Last time is after last frame. + return; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (lastTime < frames[0]) + frameIndex = 0; + else { + frameIndex = spine.Animation.binarySearch1(frames, lastTime); + var frame = frames[frameIndex]; + while (frameIndex > 0) { // Fire multiple events with the same frame. + if (frames[frameIndex - 1] != frame) break; + frameIndex--; + } + } + var events = this.events; + for (; frameIndex < frameCount && time >= frames[frameIndex]; frameIndex++) + firedEvents.push(events[frameIndex]); + } +}; + +spine.DrawOrderTimeline = function (frameCount) { + this.frames = []; // time, ... + this.frames.length = frameCount; + this.drawOrders = []; + this.drawOrders.length = frameCount; +}; +spine.DrawOrderTimeline.prototype = { + getFrameCount: function () { + return this.frames.length; + }, + setFrame: function (frameIndex, time, drawOrder) { + this.frames[frameIndex] = time; + this.drawOrders[frameIndex] = drawOrder; + }, + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.Animation.binarySearch1(frames, time) - 1; + + var drawOrder = skeleton.drawOrder; + var slots = skeleton.slots; + var drawOrderToSetupIndex = this.drawOrders[frameIndex]; + if (drawOrderToSetupIndex) { + for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++) + drawOrder[i] = drawOrderToSetupIndex[i]; + } + + } +}; + +spine.FfdTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; + this.frames.length = frameCount; + this.frameVertices = []; + this.frameVertices.length = frameCount; +}; +spine.FfdTimeline.prototype = { + slotIndex: 0, + attachment: 0, + getFrameCount: function () { + return this.frames.length; + }, + setFrame: function (frameIndex, time, vertices) { + this.frames[frameIndex] = time; + this.frameVertices[frameIndex] = vertices; + }, + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + var slot = skeleton.slots[this.slotIndex]; + if (slot.attachment != this.attachment) return; + + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameVertices = this.frameVertices; + var vertexCount = frameVertices[0].length; + + var vertices = slot.attachmentVertices; + if (vertices.length != vertexCount) alpha = 1; + vertices.length = vertexCount; + + if (time >= frames[frames.length - 1]) { // Time is after last frame. + var lastVertices = frameVertices[frames.length - 1]; + if (alpha < 1) { + for (var i = 0; i < vertexCount; i++) + vertices[i] += (lastVertices[i] - vertices[i]) * alpha; + } else { + for (var i = 0; i < vertexCount; i++) + vertices[i] = lastVertices[i]; + } + return; + } + + // Interpolate between the previous frame and the current frame. + var frameIndex = spine.Animation.binarySearch1(frames, time); + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 1] - frameTime); + percent = this.curves.getCurvePercent(frameIndex - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + + var prevVertices = frameVertices[frameIndex - 1]; + var nextVertices = frameVertices[frameIndex]; + + if (alpha < 1) { + for (var i = 0; i < vertexCount; i++) { + var prev = prevVertices[i]; + vertices[i] += (prev + (nextVertices[i] - prev) * percent - vertices[i]) * alpha; + } + } else { + for (var i = 0; i < vertexCount; i++) { + var prev = prevVertices[i]; + vertices[i] = prev + (nextVertices[i] - prev) * percent; + } + } + } +}; + +spine.IkConstraintTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, mix, bendDirection, ... + this.frames.length = frameCount * 3; +}; +spine.IkConstraintTimeline.prototype = { + ikConstraintIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, mix, bendDirection) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = mix; + this.frames[frameIndex + 2] = bendDirection; + }, + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var ikConstraint = skeleton.ikConstraints[this.ikConstraintIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + ikConstraint.mix += (frames[frames.length - 2] - ikConstraint.mix) * alpha; + ikConstraint.bendDirection = frames[frames.length - 1]; + return; + } + + // Interpolate between the previous frame and the current frame. + var frameIndex = spine.Animation.binarySearch(frames, time, 3); + var prevFrameMix = frames[frameIndex + -2/*PREV_FRAME_MIX*/]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*PREV_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + var mix = prevFrameMix + (frames[frameIndex + 1/*FRAME_MIX*/] - prevFrameMix) * percent; + ikConstraint.mix += (mix - ikConstraint.mix) * alpha; + ikConstraint.bendDirection = frames[frameIndex + -1/*PREV_FRAME_BEND_DIRECTION*/]; + } +}; + +spine.FlipXTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, flip, ... + this.frames.length = frameCount * 2; +}; +spine.FlipXTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, flip) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = flip ? 1 : 0; + }, + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + var frames = this.frames; + if (time < frames[0]) { + if (lastTime > time) this.apply(skeleton, lastTime, Number.MAX_VALUE, null, 0); + return; + } else if (lastTime > time) // + lastTime = -1; + var frameIndex = (time >= frames[frames.length - 2] ? frames.length : spine.Animation.binarySearch(frames, time, 2)) - 2; + if (frames[frameIndex] < lastTime) return; + skeleton.bones[this.boneIndex].flipX = frames[frameIndex + 1] != 0; + } +}; + +spine.FlipYTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, flip, ... + this.frames.length = frameCount * 2; +}; +spine.FlipYTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, flip) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = flip ? 1 : 0; + }, + apply: function (skeleton, lastTime, time, firedEvents, alpha) { + var frames = this.frames; + if (time < frames[0]) { + if (lastTime > time) this.apply(skeleton, lastTime, Number.MAX_VALUE, null, 0); + return; + } else if (lastTime > time) // + lastTime = -1; + var frameIndex = (time >= frames[frames.length - 2] ? frames.length : spine.Animation.binarySearch(frames, time, 2)) - 2; + if (frames[frameIndex] < lastTime) return; + skeleton.bones[this.boneIndex].flipY = frames[frameIndex + 1] != 0; + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.events = []; + this.animations = []; + this.ikConstraints = []; +}; +spine.SkeletonData.prototype = { + name: null, + defaultSkin: null, + width: 0, height: 0, + version: null, hash: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findEvent: function (eventName) { + var events = this.events; + for (var i = 0, n = events.length; i < n; i++) + if (events[i].name == eventName) return events[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + }, + /** @return May be null. */ + findIkConstraint: function (ikConstraintName) { + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) + if (ikConstraints[i].name == ikConstraintName) return ikConstraints[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, this, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(i); + } + + this.ikConstraints = []; + for (var i = 0, n = skeletonData.ikConstraints.length; i < n; i++) + this.ikConstraints.push(new spine.IkConstraint(skeletonData.ikConstraints[i], this)); + + this.boneCache = []; + this.updateCache(); +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Caches information about bones and IK constraints. Must be called if bones or IK constraints are added or removed. */ + updateCache: function () { + var ikConstraints = this.ikConstraints; + var ikConstraintsCount = ikConstraints.length; + + var arrayCount = ikConstraintsCount + 1; + var boneCache = this.boneCache; + if (boneCache.length > arrayCount) boneCache.length = arrayCount; + for (var i = 0, n = boneCache.length; i < n; i++) + boneCache[i].length = 0; + while (boneCache.length < arrayCount) + boneCache[boneCache.length] = []; + + var nonIkBones = boneCache[0]; + var bones = this.bones; + + outer: + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var current = bone; + do { + for (var ii = 0; ii < ikConstraintsCount; ii++) { + var ikConstraint = ikConstraints[ii]; + var parent = ikConstraint.bones[0]; + var child= ikConstraint.bones[ikConstraint.bones.length - 1]; + while (true) { + if (current == child) { + boneCache[ii].push(bone); + boneCache[ii + 1].push(bone); + continue outer; + } + if (child == parent) break; + child = child.parent; + } + } + current = current.parent; + } while (current); + nonIkBones[nonIkBones.length] = bone; + } + }, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.rotationIK = bone.rotation; + } + var i = 0, last = this.boneCache.length - 1; + while (true) { + var cacheBones = this.boneCache[i]; + for (var ii = 0, nn = cacheBones.length; ii < nn; ii++) + cacheBones[ii].updateWorldTransform(); + if (i == last) break; + this.ikConstraints[i].apply(); + i++; + } + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var ikConstraint = ikConstraints[i]; + ikConstraint.bendDirection = ikConstraint.data.bendDirection; + ikConstraint.mix = ikConstraint.data.mix; + } + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + slots[i].setToSetupPose(i); + } + this.resetDrawOrder(); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length ? this.bones[0] : null; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#getDefaultSkin() default skin}. + * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was + * no old skin, each slot's setup mode attachment is attached from the new skin. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (newSkin) { + if (this.skin) + newSkin._attachAll(this, this.skin); + else { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var name = slot.data.attachmentName; + if (name) { + var attachment = newSkin.getAttachment(i, name); + if (attachment) slot.setAttachment(attachment); + } + } + } + } + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + attachment = this.getAttachmentBySlotIndex(i, attachmentName); + if (!attachment) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + /** @return May be null. */ + findIkConstraint: function (ikConstraintName) { + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) + if (ikConstraints[i].data.name == ikConstraintName) return ikConstraints[i]; + return null; + }, + update: function (delta) { + this.time += delta; + }, + resetDrawOrder: function() { + for (var i = 0, n = this.drawOrder.length; i < n; i++) + this.drawOrder[i] = i; + } +}; + +spine.EventData = function (name) { + this.name = name; +}; +spine.EventData.prototype = { + intValue: 0, + floatValue: 0, + stringValue: null +}; + +spine.Event = function (data) { + this.data = data; +}; +spine.Event.prototype = { + intValue: 0, + floatValue: 0, + stringValue: null +}; + +spine.AttachmentType = { + region: 0, + boundingbox: 1, + mesh: 2, + skinnedmesh: 3 +}; + +spine.RegionAttachment = function (name) { + this.name = name; + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + type: spine.AttachmentType.region, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + r: 1, g: 1, b: 1, a: 1, + path: null, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * spine.degRad; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00, m01 = bone.m01, m10 = bone.m10, m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +}; + +spine.MeshAttachment = function (name) { + this.name = name; +}; +spine.MeshAttachment.prototype = { + type: spine.AttachmentType.mesh, + vertices: null, + uvs: null, + regionUVs: null, + triangles: null, + hullLength: 0, + r: 1, g: 1, b: 1, a: 1, + path: null, + rendererObject: null, + regionU: 0, regionV: 0, regionU2: 0, regionV2: 0, regionRotate: false, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + edges: null, + width: 0, height: 0, + updateUVs: function () { + var width = this.regionU2 - this.regionU, height = this.regionV2 - this.regionV; + var n = this.regionUVs.length; + if (!this.uvs || this.uvs.length != n) { + this.uvs = new spine.Float32Array(n); + } + if (this.regionRotate) { + for (var i = 0; i < n; i += 2) { + this.uvs[i] = this.regionU + this.regionUVs[i + 1] * width; + this.uvs[i + 1] = this.regionV + height - this.regionUVs[i] * height; + } + } else { + for (var i = 0; i < n; i += 2) { + this.uvs[i] = this.regionU + this.regionUVs[i] * width; + this.uvs[i + 1] = this.regionV + this.regionUVs[i + 1] * height; + } + } + }, + computeWorldVertices: function (x, y, slot, worldVertices) { + var bone = slot.bone; + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00, m01 = bone.m01, m10 = bone.m10, m11 = bone.m11; + var vertices = this.vertices; + var verticesCount = vertices.length; + if (slot.attachmentVertices.length == verticesCount) vertices = slot.attachmentVertices; + for (var i = 0; i < verticesCount; i += 2) { + var vx = vertices[i]; + var vy = vertices[i + 1]; + worldVertices[i] = vx * m00 + vy * m01 + x; + worldVertices[i + 1] = vx * m10 + vy * m11 + y; + } + } +}; + +spine.SkinnedMeshAttachment = function (name) { + this.name = name; +}; +spine.SkinnedMeshAttachment.prototype = { + type: spine.AttachmentType.skinnedmesh, + bones: null, + weights: null, + uvs: null, + regionUVs: null, + triangles: null, + hullLength: 0, + r: 1, g: 1, b: 1, a: 1, + path: null, + rendererObject: null, + regionU: 0, regionV: 0, regionU2: 0, regionV2: 0, regionRotate: false, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + edges: null, + width: 0, height: 0, + updateUVs: function (u, v, u2, v2, rotate) { + var width = this.regionU2 - this.regionU, height = this.regionV2 - this.regionV; + var n = this.regionUVs.length; + if (!this.uvs || this.uvs.length != n) { + this.uvs = new spine.Float32Array(n); + } + if (this.regionRotate) { + for (var i = 0; i < n; i += 2) { + this.uvs[i] = this.regionU + this.regionUVs[i + 1] * width; + this.uvs[i + 1] = this.regionV + height - this.regionUVs[i] * height; + } + } else { + for (var i = 0; i < n; i += 2) { + this.uvs[i] = this.regionU + this.regionUVs[i] * width; + this.uvs[i + 1] = this.regionV + this.regionUVs[i + 1] * height; + } + } + }, + computeWorldVertices: function (x, y, slot, worldVertices) { + var skeletonBones = slot.bone.skeleton.bones; + var weights = this.weights; + var bones = this.bones; + + var w = 0, v = 0, b = 0, f = 0, n = bones.length, nn; + var wx, wy, bone, vx, vy, weight; + if (!slot.attachmentVertices.length) { + for (; v < n; w += 2) { + wx = 0; + wy = 0; + nn = bones[v++] + v; + for (; v < nn; v++, b += 3) { + bone = skeletonBones[bones[v]]; + vx = weights[b]; + vy = weights[b + 1]; + weight = weights[b + 2]; + wx += (vx * bone.m00 + vy * bone.m01 + bone.worldX) * weight; + wy += (vx * bone.m10 + vy * bone.m11 + bone.worldY) * weight; + } + worldVertices[w] = wx + x; + worldVertices[w + 1] = wy + y; + } + } else { + var ffd = slot.attachmentVertices; + for (; v < n; w += 2) { + wx = 0; + wy = 0; + nn = bones[v++] + v; + for (; v < nn; v++, b += 3, f += 2) { + bone = skeletonBones[bones[v]]; + vx = weights[b] + ffd[f]; + vy = weights[b + 1] + ffd[f + 1]; + weight = weights[b + 2]; + wx += (vx * bone.m00 + vy * bone.m01 + bone.worldX) * weight; + wy += (vx * bone.m10 + vy * bone.m11 + bone.worldY) * weight; + } + worldVertices[w] = wx + x; + worldVertices[w + 1] = wy + y; + } + } + } +}; + +spine.BoundingBoxAttachment = function (name) { + this.name = name; + this.vertices = []; +}; +spine.BoundingBoxAttachment.prototype = { + type: spine.AttachmentType.boundingbox, + computeWorldVertices: function (x, y, bone, worldVertices) { + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00, m01 = bone.m01, m10 = bone.m10, m11 = bone.m11; + var vertices = this.vertices; + for (var i = 0, n = vertices.length; i < n; i += 2) { + var px = vertices[i]; + var py = vertices[i + 1]; + worldVertices[i] = px * m00 + py * m01 + x; + worldVertices[i + 1] = px * m10 + py * m11 + y; + } + } +}; + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + defaultMix: 0, + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var key = from.name + ":" + to.name; + return this.animationToMixTime.hasOwnProperty(key) ? this.animationToMixTime[key] : this.defaultMix; + } +}; + +spine.TrackEntry = function () {}; +spine.TrackEntry.prototype = { + next: null, previous: null, + animation: null, + loop: false, + delay: 0, time: 0, lastTime: -1, endTime: 0, + timeScale: 1, + mixTime: 0, mixDuration: 0, mix: 1, + onStart: null, onEnd: null, onComplete: null, onEvent: null +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.tracks = []; + this.events = []; +}; +spine.AnimationState.prototype = { + onStart: null, + onEnd: null, + onComplete: null, + onEvent: null, + timeScale: 1, + update: function (delta) { + delta *= this.timeScale; + for (var i = 0; i < this.tracks.length; i++) { + var current = this.tracks[i]; + if (!current) continue; + + current.time += delta * current.timeScale; + if (current.previous) { + var previousDelta = delta * current.previous.timeScale; + current.previous.time += previousDelta; + current.mixTime += previousDelta; + } + + var next = current.next; + if (next) { + next.time = current.lastTime - next.delay; + if (next.time >= 0) this.setCurrent(i, next); + } else { + // End non-looping animation when it reaches its end time and there is no next entry. + if (!current.loop && current.lastTime >= current.endTime) this.clearTrack(i); + } + } + }, + apply: function (skeleton) { + skeleton.resetDrawOrder(); + for (var i = 0; i < this.tracks.length; i++) { + var current = this.tracks[i]; + if (!current) continue; + + this.events.length = 0; + + var time = current.time; + var lastTime = current.lastTime; + var endTime = current.endTime; + var loop = current.loop; + if (!loop && time > endTime) time = endTime; + + var previous = current.previous; + if (!previous) { + if (current.mix == 1) + current.animation.apply(skeleton, current.lastTime, time, loop, this.events); + else + current.animation.mix(skeleton, current.lastTime, time, loop, this.events, current.mix); + } else { + var previousTime = previous.time; + if (!previous.loop && previousTime > previous.endTime) previousTime = previous.endTime; + previous.animation.apply(skeleton, previousTime, previousTime, previous.loop, null); + + var alpha = current.mixTime / current.mixDuration * current.mix; + if (alpha >= 1) { + alpha = 1; + current.previous = null; + } + current.animation.mix(skeleton, current.lastTime, time, loop, this.events, alpha); + } + + for (var ii = 0, nn = this.events.length; ii < nn; ii++) { + var event = this.events[ii]; + if (current.onEvent) current.onEvent(i, event); + if (this.onEvent) this.onEvent(i, event); + } + + // Check if completed the animation or a loop iteration. + if (loop ? (lastTime % endTime > time % endTime) : (lastTime < endTime && time >= endTime)) { + var count = Math.floor(time / endTime); + if (current.onComplete) current.onComplete(i, count); + if (this.onComplete) this.onComplete(i, count); + } + + current.lastTime = current.time; + } + }, + clearTracks: function () { + for (var i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + }, + clearTrack: function (trackIndex) { + if (trackIndex >= this.tracks.length) return; + var current = this.tracks[trackIndex]; + if (!current) return; + + if (current.onEnd) current.onEnd(trackIndex); + if (this.onEnd) this.onEnd(trackIndex); + + this.tracks[trackIndex] = null; + }, + _expandToIndex: function (index) { + if (index < this.tracks.length) return this.tracks[index]; + while (index >= this.tracks.length) + this.tracks.push(null); + return null; + }, + setCurrent: function (index, entry) { + var current = this._expandToIndex(index); + if (current) { + var previous = current.previous; + current.previous = null; + + if (current.onEnd) current.onEnd(index); + if (this.onEnd) this.onEnd(index); + + entry.mixDuration = this.data.getMix(current.animation, entry.animation); + if (entry.mixDuration > 0) { + entry.mixTime = 0; + // If a mix is in progress, mix from the closest animation. + if (previous && current.mixTime / current.mixDuration < 0.5) + entry.previous = previous; + else + entry.previous = current; + } + } + + this.tracks[index] = entry; + + if (entry.onStart) entry.onStart(index); + if (this.onStart) this.onStart(index); + }, + setAnimationByName: function (trackIndex, animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + return this.setAnimation(trackIndex, animation, loop); + }, + /** Set the current animation. Any queued animations are cleared. */ + setAnimation: function (trackIndex, animation, loop) { + var entry = new spine.TrackEntry(); + entry.animation = animation; + entry.loop = loop; + entry.endTime = animation.duration; + this.setCurrent(trackIndex, entry); + return entry; + }, + addAnimationByName: function (trackIndex, animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + return this.addAnimation(trackIndex, animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (trackIndex, animation, loop, delay) { + var entry = new spine.TrackEntry(); + entry.animation = animation; + entry.loop = loop; + entry.endTime = animation.duration; + + var last = this._expandToIndex(trackIndex); + if (last) { + while (last.next) + last = last.next; + last.next = entry; + } else + this.tracks[trackIndex] = entry; + + if (delay <= 0) { + if (last) + delay += last.endTime - this.data.getMix(last.animation, animation); + else + delay = 0; + } + entry.delay = delay; + + return entry; + }, + /** May be null. */ + getCurrent: function (trackIndex) { + if (trackIndex >= this.tracks.length) return null; + return this.tracks[trackIndex]; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root, name) { + var skeletonData = new spine.SkeletonData(); + skeletonData.name = name; + + // Skeleton. + var skeletonMap = root["skeleton"]; + if (skeletonMap) { + skeletonData.hash = skeletonMap["hash"]; + skeletonData.version = skeletonMap["spine"]; + skeletonData.width = skeletonMap["width"] || 0; + skeletonData.height = skeletonMap["height"] || 0; + } + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap.hasOwnProperty("scaleX") ? boneMap["scaleX"] : 1; + boneData.scaleY = boneMap.hasOwnProperty("scaleY") ? boneMap["scaleY"] : 1; + boneData.inheritScale = boneMap.hasOwnProperty("inheritScale") ? boneMap["inheritScale"] : true; + boneData.inheritRotation = boneMap.hasOwnProperty("inheritRotation") ? boneMap["inheritRotation"] : true; + skeletonData.bones.push(boneData); + } + + // IK constraints. + var ik = root["ik"]; + if (ik) { + for (var i = 0, n = ik.length; i < n; i++) { + var ikMap = ik[i]; + var ikConstraintData = new spine.IkConstraintData(ikMap["name"]); + + var bones = ikMap["bones"]; + for (var ii = 0, nn = bones.length; ii < nn; ii++) { + var bone = skeletonData.findBone(bones[ii]); + if (!bone) throw "IK bone not found: " + bones[ii]; + ikConstraintData.bones.push(bone); + } + + ikConstraintData.target = skeletonData.findBone(ikMap["target"]); + if (!ikConstraintData.target) throw "Target bone not found: " + ikMap["target"]; + + ikConstraintData.bendDirection = (!ikMap.hasOwnProperty("bendPositive") || ikMap["bendPositive"]) ? 1 : -1; + ikConstraintData.mix = ikMap.hasOwnProperty("mix") ? ikMap["mix"] : 1; + + skeletonData.ikConstraints.push(ikConstraintData); + } + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = this.toColor(color, 0); + slotData.g = this.toColor(color, 1); + slotData.b = this.toColor(color, 2); + slotData.a = this.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + slotData.additiveBlending = slotMap["additive"] && slotMap["additive"] == "true"; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Events. + var events = root["events"]; + for (var eventName in events) { + if (!events.hasOwnProperty(eventName)) continue; + var eventMap = events[eventName]; + var eventData = new spine.EventData(eventName); + eventData.intValue = eventMap["int"] || 0; + eventData.floatValue = eventMap["float"] || 0; + eventData.stringValue = eventMap["string"] || null; + skeletonData.events.push(eventData); + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + var path = map["path"] || name; + + var scale = this.scale; + if (type == spine.AttachmentType.region) { + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (!region) return null; + region.path = path; + region.x = (map["x"] || 0) * scale; + region.y = (map["y"] || 0) * scale; + region.scaleX = map.hasOwnProperty("scaleX") ? map["scaleX"] : 1; + region.scaleY = map.hasOwnProperty("scaleY") ? map["scaleY"] : 1; + region.rotation = map["rotation"] || 0; + region.width = (map["width"] || 0) * scale; + region.height = (map["height"] || 0) * scale; + + var color = map["color"]; + if (color) { + region.r = this.toColor(color, 0); + region.g = this.toColor(color, 1); + region.b = this.toColor(color, 2); + region.a = this.toColor(color, 3); + } + + region.updateOffset(); + return region; + } else if (type == spine.AttachmentType.mesh) { + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (!mesh) return null; + mesh.path = path; + mesh.vertices = this.getFloatArray(map, "vertices", scale); + mesh.triangles = this.getIntArray(map, "triangles"); + mesh.regionUVs = this.getFloatArray(map, "uvs", 1); + mesh.updateUVs(); + + color = map["color"]; + if (color) { + mesh.r = this.toColor(color, 0); + mesh.g = this.toColor(color, 1); + mesh.b = this.toColor(color, 2); + mesh.a = this.toColor(color, 3); + } + + mesh.hullLength = (map["hull"] || 0) * 2; + if (map["edges"]) mesh.edges = this.getIntArray(map, "edges"); + mesh.width = (map["width"] || 0) * scale; + mesh.height = (map["height"] || 0) * scale; + return mesh; + } else if (type == spine.AttachmentType.skinnedmesh) { + var mesh = this.attachmentLoader.newSkinnedMeshAttachment(skin, name, path); + if (!mesh) return null; + mesh.path = path; + + var uvs = this.getFloatArray(map, "uvs", 1); + var vertices = this.getFloatArray(map, "vertices", 1); + var weights = []; + var bones = []; + for (var i = 0, n = vertices.length; i < n; ) { + var boneCount = vertices[i++] | 0; + bones[bones.length] = boneCount; + for (var nn = i + boneCount * 4; i < nn; ) { + bones[bones.length] = vertices[i]; + weights[weights.length] = vertices[i + 1] * scale; + weights[weights.length] = vertices[i + 2] * scale; + weights[weights.length] = vertices[i + 3]; + i += 4; + } + } + mesh.bones = bones; + mesh.weights = weights; + mesh.triangles = this.getIntArray(map, "triangles"); + mesh.regionUVs = uvs; + mesh.updateUVs(); + + color = map["color"]; + if (color) { + mesh.r = this.toColor(color, 0); + mesh.g = this.toColor(color, 1); + mesh.b = this.toColor(color, 2); + mesh.a = this.toColor(color, 3); + } + + mesh.hullLength = (map["hull"] || 0) * 2; + if (map["edges"]) mesh.edges = this.getIntArray(map, "edges"); + mesh.width = (map["width"] || 0) * scale; + mesh.height = (map["height"] || 0) * scale; + return mesh; + } else if (type == spine.AttachmentType.boundingbox) { + var attachment = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + var vertices = map["vertices"]; + for (var i = 0, n = vertices.length; i < n; i++) + attachment.vertices.push(vertices[i] * scale); + return attachment; + } + throw "Unknown attachment type: " + type; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = this.toColor(color, 0); + var g = this.toColor(color, 1); + var b = this.toColor(color, 2); + var a = this.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + this.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + this.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + this.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else if (timelineName == "flipX" || timelineName == "flipY") { + var x = timelineName == "flipX"; + var timeline = x ? new spine.FlipXTimeline(values.length) : new spine.FlipYTimeline(values.length); + timeline.boneIndex = boneIndex; + + var field = x ? "x" : "y"; + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap[field] || false); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + + var ikMap = map["ik"]; + for (var ikConstraintName in ikMap) { + if (!ikMap.hasOwnProperty(ikConstraintName)) continue; + var ikConstraint = skeletonData.findIkConstraint(ikConstraintName); + var values = ikMap[ikConstraintName]; + var timeline = new spine.IkConstraintTimeline(values.length); + timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(ikConstraint); + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var mix = valueMap.hasOwnProperty("mix") ? valueMap["mix"] : 1; + var bendDirection = (!valueMap.hasOwnProperty("bendPositive") || valueMap["bendPositive"]) ? 1 : -1; + timeline.setFrame(frameIndex, valueMap["time"], mix, bendDirection); + this.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + } + + var ffd = map["ffd"]; + for (var skinName in ffd) { + var skin = skeletonData.findSkin(skinName); + var slotMap = ffd[skinName]; + for (slotName in slotMap) { + var slotIndex = skeletonData.findSlotIndex(slotName); + var meshMap = slotMap[slotName]; + for (var meshName in meshMap) { + var values = meshMap[meshName]; + var timeline = new spine.FfdTimeline(values.length); + var attachment = skin.getAttachment(slotIndex, meshName); + if (!attachment) throw "FFD attachment not found: " + meshName; + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + + var isMesh = attachment.type == spine.AttachmentType.mesh; + var vertexCount; + if (isMesh) + vertexCount = attachment.vertices.length; + else + vertexCount = attachment.weights.length / 3 * 2; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var vertices; + if (!valueMap["vertices"]) { + if (isMesh) + vertices = attachment.vertices; + else { + vertices = []; + vertices.length = vertexCount; + } + } else { + var verticesValue = valueMap["vertices"]; + var vertices = []; + vertices.length = vertexCount; + var start = valueMap["offset"] || 0; + var nn = verticesValue.length; + if (this.scale == 1) { + for (var ii = 0; ii < nn; ii++) + vertices[ii + start] = verticesValue[ii]; + } else { + for (var ii = 0; ii < nn; ii++) + vertices[ii + start] = verticesValue[ii] * this.scale; + } + if (isMesh) { + var meshVertices = attachment.vertices; + for (var ii = 0, nn = vertices.length; ii < nn; ii++) + vertices[ii] += meshVertices[ii]; + } + } + + timeline.setFrame(frameIndex, valueMap["time"], vertices); + this.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines[timelines.length] = timeline; + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + } + } + + var drawOrderValues = map["drawOrder"]; + if (!drawOrderValues) drawOrderValues = map["draworder"]; + if (drawOrderValues) { + var timeline = new spine.DrawOrderTimeline(drawOrderValues.length); + var slotCount = skeletonData.slots.length; + var frameIndex = 0; + for (var i = 0, n = drawOrderValues.length; i < n; i++) { + var drawOrderMap = drawOrderValues[i]; + var drawOrder = null; + if (drawOrderMap["offsets"]) { + drawOrder = []; + drawOrder.length = slotCount; + for (var ii = slotCount - 1; ii >= 0; ii--) + drawOrder[ii] = -1; + var offsets = drawOrderMap["offsets"]; + var unchanged = []; + unchanged.length = slotCount - offsets.length; + var originalIndex = 0, unchangedIndex = 0; + for (var ii = 0, nn = offsets.length; ii < nn; ii++) { + var offsetMap = offsets[ii]; + var slotIndex = skeletonData.findSlotIndex(offsetMap["slot"]); + if (slotIndex == -1) throw "Slot not found: " + offsetMap["slot"]; + // Collect unchanged items. + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + // Set changed items. + drawOrder[originalIndex + offsetMap["offset"]] = originalIndex++; + } + // Collect remaining unchanged items. + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + // Fill in unchanged items. + for (var ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) drawOrder[ii] = unchanged[--unchangedIndex]; + } + timeline.setFrame(frameIndex++, drawOrderMap["time"], drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + + var events = map["events"]; + if (events) { + var timeline = new spine.EventTimeline(events.length); + var frameIndex = 0; + for (var i = 0, n = events.length; i < n; i++) { + var eventMap = events[i]; + var eventData = skeletonData.findEvent(eventMap["name"]); + if (!eventData) throw "Event not found: " + eventMap["name"]; + var event = new spine.Event(eventData); + event.intValue = eventMap.hasOwnProperty("int") ? eventMap["int"] : eventData.intValue; + event.floatValue = eventMap.hasOwnProperty("float") ? eventMap["float"] : eventData.floatValue; + event.stringValue = eventMap.hasOwnProperty("string") ? eventMap["string"] : eventData.stringValue; + timeline.setFrame(frameIndex++, eventMap["time"], event); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + }, + readCurve: function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) + timeline.curves.setLinear(frameIndex); + else if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); + }, + toColor: function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, (colorIndex * 2) + 2), 16) / 255; + }, + getFloatArray: function (map, name, scale) { + var list = map[name]; + var values = new spine.Float32Array(list.length); + var i = 0, n = list.length; + if (scale == 1) { + for (; i < n; i++) + values[i] = list[i]; + } else { + for (; i < n; i++) + values[i] = list[i] * scale; + } + return values; + }, + getIntArray: function (map, name) { + var list = map[name]; + var values = new spine.Uint16Array(list.length); + for (var i = 0, n = list.length; i < n; i++) + values[i] = list[i] | 0; + return values; + } +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line === null) break; + line = reader.trim(line); + if (!line.length) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + if (reader.readTuple(tuple) == 2) { // size is only optional for an atlas packed with an old TexturePacker. + page.width = parseInt(tuple[0]); + page.height = parseInt(tuple[1]); + reader.readTuple(tuple); + } + page.format = spine.Atlas.Format[tuple[0]]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line, this); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (1, 2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch = colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) break; + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +}; + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +}; +spine.AtlasAttachmentLoader.prototype = { + newRegionAttachment: function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (!region) throw "Region not found in atlas: " + path + " (region attachment: " + name + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + }, + newMeshAttachment: function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (!region) throw "Region not found in atlas: " + path + " (mesh attachment: " + name + ")"; + var attachment = new spine.MeshAttachment(name); + attachment.rendererObject = region; + attachment.regionU = region.u; + attachment.regionV = region.v; + attachment.regionU2 = region.u2; + attachment.regionV2 = region.v2; + attachment.regionRotate = region.rotate; + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + }, + newSkinnedMeshAttachment: function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (!region) throw "Region not found in atlas: " + path + " (skinned mesh attachment: " + name + ")"; + var attachment = new spine.SkinnedMeshAttachment(name); + attachment.rendererObject = region; + attachment.regionU = region.u; + attachment.regionV = region.v; + attachment.regionU2 = region.u2; + attachment.regionV2 = region.v2; + attachment.regionRotate = region.rotate; + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + }, + newBoundingBoxAttachment: function (skin, name) { + return new spine.BoundingBoxAttachment(name); + } +}; + +spine.SkeletonBounds = function () { + this.polygonPool = []; + this.polygons = []; + this.boundingBoxes = []; +}; +spine.SkeletonBounds.prototype = { + minX: 0, minY: 0, maxX: 0, maxY: 0, + update: function (skeleton, updateAabb) { + var slots = skeleton.slots; + var slotCount = slots.length; + var x = skeleton.x, y = skeleton.y; + var boundingBoxes = this.boundingBoxes; + var polygonPool = this.polygonPool; + var polygons = this.polygons; + + boundingBoxes.length = 0; + for (var i = 0, n = polygons.length; i < n; i++) + polygonPool.push(polygons[i]); + polygons.length = 0; + + for (var i = 0; i < slotCount; i++) { + var slot = slots[i]; + var boundingBox = slot.attachment; + if (boundingBox.type != spine.AttachmentType.boundingbox) continue; + boundingBoxes.push(boundingBox); + + var poolCount = polygonPool.length, polygon; + if (poolCount > 0) { + polygon = polygonPool[poolCount - 1]; + polygonPool.splice(poolCount - 1, 1); + } else + polygon = []; + polygons.push(polygon); + + polygon.length = boundingBox.vertices.length; + boundingBox.computeWorldVertices(x, y, slot.bone, polygon); + } + + if (updateAabb) this.aabbCompute(); + }, + aabbCompute: function () { + var polygons = this.polygons; + var minX = Number.MAX_VALUE, minY = Number.MAX_VALUE, maxX = Number.MIN_VALUE, maxY = Number.MIN_VALUE; + for (var i = 0, n = polygons.length; i < n; i++) { + var vertices = polygons[i]; + for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) { + var x = vertices[ii]; + var y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + }, + /** Returns true if the axis aligned bounding box contains the point. */ + aabbContainsPoint: function (x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + }, + /** Returns true if the axis aligned bounding box intersects the line segment. */ + aabbIntersectsSegment: function (x1, y1, x2, y2) { + var minX = this.minX, minY = this.minY, maxX = this.maxX, maxY = this.maxY; + if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY)) + return false; + var m = (y2 - y1) / (x2 - x1); + var y = m * (minX - x1) + y1; + if (y > minY && y < maxY) return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) return true; + var x = (minY - y1) / m + x1; + if (x > minX && x < maxX) return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) return true; + return false; + }, + /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */ + aabbIntersectsSkeleton: function (bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + }, + /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more + * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */ + containsPoint: function (x, y) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.polygonContainsPoint(polygons[i], x, y)) return this.boundingBoxes[i]; + return null; + }, + /** Returns the first bounding box attachment that contains the line segment, or null. When doing many checks, it is usually + * more efficient to only call this method if {@link #aabbIntersectsSegment(float, float, float, float)} returns true. */ + intersectsSegment: function (x1, y1, x2, y2) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (polygons[i].intersectsSegment(x1, y1, x2, y2)) return this.boundingBoxes[i]; + return null; + }, + /** Returns true if the polygon contains the point. */ + polygonContainsPoint: function (polygon, x, y) { + var nn = polygon.length; + var prevIndex = nn - 2; + var inside = false; + for (var ii = 0; ii < nn; ii += 2) { + var vertexY = polygon[ii + 1]; + var prevY = polygon[prevIndex + 1]; + if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) { + var vertexX = polygon[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (polygon[prevIndex] - vertexX) < x) inside = !inside; + } + prevIndex = ii; + } + return inside; + }, + /** Returns true if the polygon contains the line segment. */ + polygonIntersectsSegment: function (polygon, x1, y1, x2, y2) { + var nn = polygon.length; + var width12 = x1 - x2, height12 = y1 - y2; + var det1 = x1 * y2 - y1 * x2; + var x3 = polygon[nn - 2], y3 = polygon[nn - 1]; + for (var ii = 0; ii < nn; ii += 2) { + var x4 = polygon[ii], y4 = polygon[ii + 1]; + var det2 = x3 * y4 - y3 * x4; + var width34 = x3 - x4, height34 = y3 - y4; + var det3 = width12 * height34 - height12 * width34; + var x = (det1 * width34 - width12 * det2) / det3; + if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) { + var y = (det1 * height34 - height12 * det2) / det3; + if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) return true; + } + x3 = x4; + y3 = y4; + } + return false; + }, + getPolygon: function (attachment) { + var index = this.boundingBoxes.indexOf(attachment); + return index == -1 ? null : this.polygons[index]; + }, + getWidth: function () { + return this.maxX - this.minX; + }, + getHeight: function () { + return this.maxY - this.minY; + } +}; + +/* Esoteric Software SPINE wrapper for pixi.js */ + +spine.Bone.yDown = true; +PIXI.AnimCache = {}; + +/** + * Supporting class to load images from spine atlases as per spine spec. + * + * @class SpineTextureLoader + * @uses EventTarget + * @constructor + * @param basePath {String} Tha base path where to look for the images to be loaded + * @param crossorigin {Boolean} Whether requests should be treated as crossorigin + */ +PIXI.SpineTextureLoader = function(basePath, crossorigin) +{ + PIXI.EventTarget.call(this); + + this.basePath = basePath; + this.crossorigin = crossorigin; + this.loadingCount = 0; +}; + +/* constructor */ +PIXI.SpineTextureLoader.prototype = PIXI.SpineTextureLoader; + +/** + * Starts loading a base texture as per spine specification + * + * @method load + * @param page {spine.AtlasPage} Atlas page to which texture belongs + * @param file {String} The file to load, this is just the file path relative to the base path configured in the constructor + */ +PIXI.SpineTextureLoader.prototype.load = function(page, file) +{ + page.rendererObject = PIXI.BaseTexture.fromImage(this.basePath + '/' + file, this.crossorigin); + if (!page.rendererObject.hasLoaded) + { + var scope = this; + ++scope.loadingCount; + page.rendererObject.addEventListener('loaded', function(){ + --scope.loadingCount; + scope.dispatchEvent({ + type: 'loadedBaseTexture', + content: scope + }); + }); + } +}; + +/** + * Unloads a previously loaded texture as per spine specification + * + * @method unload + * @param texture {BaseTexture} Texture object to destroy + */ +PIXI.SpineTextureLoader.prototype.unload = function(texture) +{ + texture.destroy(true); +}; + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * + * @class Spine + * @extends DisplayObjectContainer + * @constructor + * @param url {String} The url of the spine anim file to be used + */ +PIXI.Spine = function (url) { + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if (!this.spineData) { + throw new Error('Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: ' + url); + } + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + this.slotContainers = []; + + for (var i = 0, n = this.skeleton.slots.length; i < n; i++) { + var slot = this.skeleton.slots[i]; + var attachment = slot.attachment; + var slotContainer = new PIXI.DisplayObjectContainer(); + this.slotContainers.push(slotContainer); + this.addChild(slotContainer); + + if (attachment instanceof spine.RegionAttachment) + { + var spriteName = attachment.rendererObject.name; + var sprite = this.createSprite(slot, attachment); + slot.currentSprite = sprite; + slot.currentSpriteName = spriteName; + slotContainer.addChild(sprite); + } + else if (attachment instanceof spine.MeshAttachment) + { + var mesh = this.createMesh(slot, attachment); + slot.currentMesh = mesh; + slot.currentMeshName = attachment.name; + slotContainer.addChild(mesh); + } + else + { + continue; + } + + } + + this.autoUpdate = true; +}; + +PIXI.Spine.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); +PIXI.Spine.prototype.constructor = PIXI.Spine; + +/** + * If this flag is set to true, the spine animation will be autoupdated every time + * the object id drawn. The down side of this approach is that the delta time is + * automatically calculated and you could miss out on cool effects like slow motion, + * pause, skip ahead and the sorts. Most of these effects can be achieved even with + * autoupdate enabled but are harder to achieve. + * + * @property autoUpdate + * @type { Boolean } + * @default true + */ +Object.defineProperty(PIXI.Spine.prototype, 'autoUpdate', { + get: function() + { + return (this.updateTransform === PIXI.Spine.prototype.autoUpdateTransform); + }, + + set: function(value) + { + this.updateTransform = value ? PIXI.Spine.prototype.autoUpdateTransform : PIXI.DisplayObjectContainer.prototype.updateTransform; + } +}); + +/** + * Update the spine skeleton and its animations by delta time (dt) + * + * @method update + * @param dt {Number} Delta time. Time by which the animation should be updated + */ +PIXI.Spine.prototype.update = function(dt) +{ + this.state.update(dt); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + var drawOrder = this.skeleton.drawOrder; + var slots = this.skeleton.slots; + for (var i = 0, n = drawOrder.length; i < n; i++) + this.children[i] = this.slotContainers[drawOrder[i]]; + for (i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var attachment = slot.attachment; + var slotContainer = this.slotContainers[i]; + + if (!attachment) + { + slotContainer.visible = false; + continue; + } + + var type = attachment.type; + if (type === spine.AttachmentType.region) + { + if (attachment.rendererObject) + { + if (!slot.currentSpriteName || slot.currentSpriteName !== attachment.name) + { + var spriteName = attachment.rendererObject.name; + if (slot.currentSprite !== undefined) + { + slot.currentSprite.visible = false; + } + slot.sprites = slot.sprites || {}; + if (slot.sprites[spriteName] !== undefined) + { + slot.sprites[spriteName].visible = true; + } + else + { + var sprite = this.createSprite(slot, attachment); + slotContainer.addChild(sprite); + } + slot.currentSprite = slot.sprites[spriteName]; + slot.currentSpriteName = spriteName; + } + } + + var bone = slot.bone; + + slotContainer.position.x = bone.worldX + attachment.x * bone.m00 + attachment.y * bone.m01; + slotContainer.position.y = bone.worldY + attachment.x * bone.m10 + attachment.y * bone.m11; + slotContainer.scale.x = bone.worldScaleX; + slotContainer.scale.y = bone.worldScaleY; + + slotContainer.rotation = -(slot.bone.worldRotation * spine.degRad); + + slot.currentSprite.tint = PIXI.rgb2hex([slot.r,slot.g,slot.b]); + } + else if (type === spine.AttachmentType.skinnedmesh) + { + if (!slot.currentMeshName || slot.currentMeshName !== attachment.name) + { + var meshName = attachment.name; + if (slot.currentMesh !== undefined) + { + slot.currentMesh.visible = false; + } + + slot.meshes = slot.meshes || {}; + + if (slot.meshes[meshName] !== undefined) + { + slot.meshes[meshName].visible = true; + } + else + { + var mesh = this.createMesh(slot, attachment); + slotContainer.addChild(mesh); + } + + slot.currentMesh = slot.meshes[meshName]; + slot.currentMeshName = meshName; + } + + attachment.computeWorldVertices(slot.bone.skeleton.x, slot.bone.skeleton.y, slot, slot.currentMesh.vertices); + + } + else + { + slotContainer.visible = false; + continue; + } + slotContainer.visible = true; + + slotContainer.alpha = slot.a; + } +}; + +/** + * When autoupdate is set to yes this function is used as pixi's updateTransform function + * + * @method autoUpdateTransform + * @private + */ +PIXI.Spine.prototype.autoUpdateTransform = function () { + this.lastTime = this.lastTime || Date.now(); + var timeDelta = (Date.now() - this.lastTime) * 0.001; + this.lastTime = Date.now(); + + this.update(timeDelta); + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +/** + * Create a new sprite to be used with spine.RegionAttachment + * + * @method createSprite + * @param slot {spine.Slot} The slot to which the attachment is parented + * @param attachment {spine.RegionAttachment} The attachment that the sprite will represent + * @private + */ +PIXI.Spine.prototype.createSprite = function (slot, attachment) { + var descriptor = attachment.rendererObject; + var baseTexture = descriptor.page.rendererObject; + var spriteRect = new PIXI.Rectangle(descriptor.x, + descriptor.y, + descriptor.rotate ? descriptor.height : descriptor.width, + descriptor.rotate ? descriptor.width : descriptor.height); + var spriteTexture = new PIXI.Texture(baseTexture, spriteRect); + var sprite = new PIXI.Sprite(spriteTexture); + + var baseRotation = descriptor.rotate ? Math.PI * 0.5 : 0.0; + sprite.scale.set(descriptor.width / descriptor.originalWidth * attachment.scaleX, descriptor.height / descriptor.originalHeight * attachment.scaleY); + sprite.rotation = baseRotation - (attachment.rotation * spine.degRad); + sprite.anchor.x = sprite.anchor.y = 0.5; + sprite.alpha = attachment.a; + + slot.sprites = slot.sprites || {}; + slot.sprites[descriptor.name] = sprite; + return sprite; +}; + +PIXI.Spine.prototype.createMesh = function (slot, attachment) { + var descriptor = attachment.rendererObject; + var baseTexture = descriptor.page.rendererObject; + var texture = new PIXI.Texture(baseTexture); + + var strip = new PIXI.Strip(texture); + strip.drawMode = PIXI.Strip.DrawModes.TRIANGLES; + strip.canvasPadding = 1.5; + + strip.vertices = new PIXI.Float32Array(attachment.uvs.length); + strip.uvs = attachment.uvs; + strip.indices = attachment.triangles; + strip.alpha = attachment.a; + + slot.meshes = slot.meshes || {}; + slot.meshes[attachment.name] = strip; + + return strip; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; + +PIXI.BaseTextureCacheIdGenerator = 0; + +/** + * A texture stores the information that represents an image. All textures have a base texture. + * + * @class BaseTexture + * @uses EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + * @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values + */ +PIXI.BaseTexture = function(source, scaleMode) +{ + /** + * The Resolution of the texture. + * + * @property resolution + * @type Number + */ + this.resolution = 1; + + /** + * [read-only] The width of the base texture set when the image has loaded + * + * @property width + * @type Number + * @readOnly + */ + this.width = 100; + + /** + * [read-only] The height of the base texture set when the image has loaded + * + * @property height + * @type Number + * @readOnly + */ + this.height = 100; + + /** + * The scale mode to apply when scaling this texture + * + * @property scaleMode + * @type {Number} + * @default PIXI.scaleModes.LINEAR + */ + this.scaleMode = scaleMode || PIXI.scaleModes.DEFAULT; + + /** + * [read-only] Set to true once the base texture has loaded + * + * @property hasLoaded + * @type Boolean + * @readOnly + */ + this.hasLoaded = false; + + /** + * The image source that is used to create the texture. + * + * @property source + * @type Image + */ + this.source = source; + + this._UID = PIXI._UID++; + + /** + * Controls if RGB channels should be pre-multiplied by Alpha (WebGL only) + * + * @property premultipliedAlpha + * @type Boolean + * @default true + */ + this.premultipliedAlpha = true; + + // used for webGL + + /** + * @property _glTextures + * @type Array + * @private + */ + this._glTextures = []; + + /** + * + * Set this to true if a mipmap of this texture needs to be generated. This value needs to be set before the texture is used + * Also the texture must be a power of two size to work + * + * @property mipmap + * @type {Boolean} + */ + this.mipmap = false; + + // used for webGL texture updating... + // TODO - this needs to be addressed + + /** + * @property _dirty + * @type Array + * @private + */ + this._dirty = [true, true, true, true]; + + if(!source)return; + + if((this.source.complete || this.source.getContext) && this.source.width && this.source.height) + { + this.hasLoaded = true; + this.width = this.source.naturalWidth || this.source.width; + this.height = this.source.naturalHeight || this.source.height; + this.dirty(); + } + else + { + var scope = this; + + this.source.onload = function() { + + scope.hasLoaded = true; + scope.width = scope.source.naturalWidth || scope.source.width; + scope.height = scope.source.naturalHeight || scope.source.height; + + scope.dirty(); + + // add it to somewhere... + scope.dispatchEvent( { type: 'loaded', content: scope } ); + }; + + this.source.onerror = function() { + scope.dispatchEvent( { type: 'error', content: scope } ); + }; + } + + /** + * @property imageUrl + * @type String + */ + this.imageUrl = null; + + /** + * @property _powerOf2 + * @type Boolean + * @private + */ + this._powerOf2 = false; + +}; + +PIXI.BaseTexture.prototype.constructor = PIXI.BaseTexture; + +PIXI.EventTarget.mixin(PIXI.BaseTexture.prototype); + +/** + * Destroys this base texture + * + * @method destroy + */ +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.imageUrl) + { + delete PIXI.BaseTextureCache[this.imageUrl]; + delete PIXI.TextureCache[this.imageUrl]; + this.imageUrl = null; + if (!navigator.isCocoonJS) this.source.src = ''; + } + else if (this.source && this.source._pixiId) + { + delete PIXI.BaseTextureCache[this.source._pixiId]; + } + this.source = null; + + this.unloadFromGPU(); +}; + +/** + * Changes the source image of the texture + * + * @method updateSourceImage + * @param newSrc {String} the path of the image + */ +PIXI.BaseTexture.prototype.updateSourceImage = function(newSrc) +{ + this.hasLoaded = false; + this.source.src = null; + this.source.src = newSrc; +}; + +/** + * Sets all glTextures to be dirty. + * + * @method dirty + */ +PIXI.BaseTexture.prototype.dirty = function() +{ + for (var i = 0; i < this._glTextures.length; i++) + { + this._dirty[i] = true; + } +}; + +/** + * Removes the base texture from the GPU, useful for managing resources on the GPU. + * Atexture is still 100% usable and will simply be reuploaded if there is a sprite on screen that is using it. + * + * @method unloadFromGPU + */ +PIXI.BaseTexture.prototype.unloadFromGPU = function() +{ + this.dirty(); + + // delete the webGL textures if any. + for (var i = this._glTextures.length - 1; i >= 0; i--) + { + var glTexture = this._glTextures[i]; + var gl = PIXI.glContexts[i]; + + if(gl && glTexture) + { + gl.deleteTexture(glTexture); + } + + } + + this._glTextures.length = 0; + + this.dirty(); +}; + +/** + * Helper function that creates a base texture from the given image url. + * If the image is not in the base texture cache it will be created and loaded. + * + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @param crossorigin {Boolean} + * @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin, scaleMode) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + + if(crossorigin === undefined && imageUrl.indexOf('data:') === -1) crossorigin = true; + + if(!baseTexture) + { + // new Image() breaks tex loading in some versions of Chrome. + // See https://code.google.com/p/chromium/issues/detail?id=238071 + var image = new Image();//document.createElement('img'); + if (crossorigin) + { + image.crossOrigin = ''; + } + + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image, scaleMode); + baseTexture.imageUrl = imageUrl; + PIXI.BaseTextureCache[imageUrl] = baseTexture; + + // if there is an @2x at the end of the url we are going to assume its a highres image + if( imageUrl.indexOf(PIXI.RETINA_PREFIX + '.') !== -1) + { + baseTexture.resolution = 2; + } + } + + return baseTexture; +}; + +/** + * Helper function that creates a base texture from the given canvas element. + * + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values + * @return BaseTexture + */ +PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode) +{ + if(!canvas._pixiId) + { + canvas._pixiId = 'canvas_' + PIXI.TextureCacheIdGenerator++; + } + + var baseTexture = PIXI.BaseTextureCache[canvas._pixiId]; + + if(!baseTexture) + { + baseTexture = new PIXI.BaseTexture(canvas, scaleMode); + PIXI.BaseTextureCache[canvas._pixiId] = baseTexture; + } + + return baseTexture; +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +PIXI.TextureCacheIdGenerator = 0; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added + * to the display list directly. Instead use it as the texture for a PIXI.Sprite. If no frame is provided then the whole image is used. + * + * @class Texture + * @uses EventTarget + * @constructor + * @param baseTexture {BaseTexture} The base texture source to create the texture from + * @param [frame] {Rectangle} The rectangle frame of the texture to show + * @param [crop] {Rectangle} The area of original texture + * @param [trim] {Rectangle} Trimmed texture rectangle + */ +PIXI.Texture = function(baseTexture, frame, crop, trim) +{ + /** + * Does this Texture have any frame data assigned to it? + * + * @property noFrame + * @type Boolean + */ + this.noFrame = false; + + if (!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + if (baseTexture instanceof PIXI.Texture) + { + baseTexture = baseTexture.baseTexture; + } + + /** + * The base texture that this texture uses. + * + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + /** + * The frame specifies the region of the base texture that this texture uses + * + * @property frame + * @type Rectangle + */ + this.frame = frame; + + /** + * The texture trim data. + * + * @property trim + * @type Rectangle + */ + this.trim = trim; + + /** + * This will let the renderer know if the texture is valid. If it's not then it cannot be rendered. + * + * @property valid + * @type Boolean + */ + this.valid = false; + + /** + * This will let a renderer know that a texture has been updated (used mainly for webGL uv updates) + * + * @property requiresUpdate + * @type Boolean + */ + this.requiresUpdate = false; + + /** + * The WebGL UV data cache. + * + * @property _uvs + * @type Object + * @private + */ + this._uvs = null; + + /** + * The width of the Texture in pixels. + * + * @property width + * @type Number + */ + this.width = 0; + + /** + * The height of the Texture in pixels. + * + * @property height + * @type Number + */ + this.height = 0; + + /** + * This is the area of the BaseTexture image to actually copy to the Canvas / WebGL when rendering, + * irrespective of the actual frame size or placement (which can be influenced by trimmed texture atlases) + * + * @property crop + * @type Rectangle + */ + this.crop = crop || new PIXI.Rectangle(0, 0, 1, 1); + + if (baseTexture.hasLoaded) + { + if (this.noFrame) frame = new PIXI.Rectangle(0, 0, baseTexture.width, baseTexture.height); + this.setFrame(frame); + } + else + { + baseTexture.addEventListener('loaded', this.onBaseTextureLoaded.bind(this)); + } +}; + +PIXI.Texture.prototype.constructor = PIXI.Texture; +PIXI.EventTarget.mixin(PIXI.Texture.prototype); + +/** + * Called when the base texture is loaded + * + * @method onBaseTextureLoaded + * @private + */ +PIXI.Texture.prototype.onBaseTextureLoaded = function() +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener('loaded', this.onLoaded); + + if (this.noFrame) this.frame = new PIXI.Rectangle(0, 0, baseTexture.width, baseTexture.height); + + this.setFrame(this.frame); + + this.dispatchEvent( { type: 'update', content: this } ); +}; + +/** + * Destroys this texture + * + * @method destroy + * @param destroyBase {Boolean} Whether to destroy the base texture as well + */ +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if (destroyBase) this.baseTexture.destroy(); + + this.valid = false; +}; + +/** + * Specifies the region of the baseTexture that this texture will use. + * + * @method setFrame + * @param frame {Rectangle} The frame of the texture to set it to + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.noFrame = false; + + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + this.crop.x = frame.x; + this.crop.y = frame.y; + this.crop.width = frame.width; + this.crop.height = frame.height; + + if (!this.trim && (frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height)) + { + throw new Error('Texture Error: frame does not fit inside the base Texture dimensions ' + this); + } + + this.valid = frame && frame.width && frame.height && this.baseTexture.source && this.baseTexture.hasLoaded; + + if (this.trim) + { + this.width = this.trim.width; + this.height = this.trim.height; + this.frame.width = this.trim.width; + this.frame.height = this.trim.height; + } + + if (this.valid) this._updateUvs(); + +}; + +/** + * Updates the internal WebGL UV cache. + * + * @method _updateUvs + * @private + */ +PIXI.Texture.prototype._updateUvs = function() +{ + if(!this._uvs)this._uvs = new PIXI.TextureUvs(); + + var frame = this.crop; + var tw = this.baseTexture.width; + var th = this.baseTexture.height; + + this._uvs.x0 = frame.x / tw; + this._uvs.y0 = frame.y / th; + + this._uvs.x1 = (frame.x + frame.width) / tw; + this._uvs.y1 = frame.y / th; + + this._uvs.x2 = (frame.x + frame.width) / tw; + this._uvs.y2 = (frame.y + frame.height) / th; + + this._uvs.x3 = frame.x / tw; + this._uvs.y3 = (frame.y + frame.height) / th; +}; + +/** + * Helper function that creates a Texture object from the given image url. + * If the image is not in the texture cache it will be created and loaded. + * + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @param crossorigin {Boolean} Whether requests should be treated as crossorigin + * @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin, scaleMode) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin, scaleMode)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +}; + +/** + * Helper function that returns a Texture objected based on the given frame id. + * If the frame id is not in the texture cache an error will be thrown. + * + * @static + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture) throw new Error('The frameId "' + frameId + '" does not exist in the texture cache '); + return texture; +}; + +/** + * Helper function that creates a new a Texture based on the given canvas element. + * + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas, scaleMode) +{ + var baseTexture = PIXI.BaseTexture.fromCanvas(canvas, scaleMode); + + return new PIXI.Texture( baseTexture ); + +}; + +/** + * Adds a texture to the global PIXI.TextureCache. This cache is shared across the whole PIXI object. + * + * @static + * @method addTextureToCache + * @param texture {Texture} The Texture to add to the cache. + * @param id {String} The id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +}; + +/** + * Remove a texture from the global PIXI.TextureCache. + * + * @static + * @method removeTextureFromCache + * @param id {String} The id of the texture to be removed + * @return {Texture} The texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id]; + delete PIXI.TextureCache[id]; + delete PIXI.BaseTextureCache[id]; + return texture; +}; + +PIXI.TextureUvs = function() +{ + this.x0 = 0; + this.y0 = 0; + + this.x1 = 0; + this.y1 = 0; + + this.x2 = 0; + this.y2 = 0; + + this.x3 = 0; + this.y3 = 0; +}; + +PIXI.Texture.emptyTexture = new PIXI.Texture(new PIXI.BaseTexture()); + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any Pixi display object to be rendered to it. + * + * __Hint__: All DisplayObjects (i.e. Sprites) that render to a RenderTexture should be preloaded otherwise black rectangles will be drawn instead. + * + * A RenderTexture takes a snapshot of any Display Object given to its render method. The position and rotation of the given Display Objects is ignored. For example: + * + * var renderTexture = new PIXI.RenderTexture(800, 600); + * var sprite = PIXI.Sprite.fromImage("spinObj_01.png"); + * sprite.position.x = 800/2; + * sprite.position.y = 600/2; + * sprite.anchor.x = 0.5; + * sprite.anchor.y = 0.5; + * renderTexture.render(sprite); + * + * The Sprite in this case will be rendered to a position of 0,0. To render this sprite at its actual position a DisplayObjectContainer should be used: + * + * var doc = new PIXI.DisplayObjectContainer(); + * doc.addChild(sprite); + * renderTexture.render(doc); // Renders to center of renderTexture + * + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} The width of the render texture + * @param height {Number} The height of the render texture + * @param renderer {CanvasRenderer|WebGLRenderer} The renderer used for this RenderTexture + * @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values + * @param resolution {Number} The resolution of the texture being generated + */ +PIXI.RenderTexture = function(width, height, renderer, scaleMode, resolution) +{ + /** + * The with of the render texture + * + * @property width + * @type Number + */ + this.width = width || 100; + + /** + * The height of the render texture + * + * @property height + * @type Number + */ + this.height = height || 100; + + /** + * The Resolution of the texture. + * + * @property resolution + * @type Number + */ + this.resolution = resolution || 1; + + /** + * The framing rectangle of the render texture + * + * @property frame + * @type Rectangle + */ + this.frame = new PIXI.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution); + + /** + * This is the area of the BaseTexture image to actually copy to the Canvas / WebGL when rendering, + * irrespective of the actual frame size or placement (which can be influenced by trimmed texture atlases) + * + * @property crop + * @type Rectangle + */ + this.crop = new PIXI.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution); + + /** + * The base texture object that this texture uses + * + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = new PIXI.BaseTexture(); + this.baseTexture.width = this.width * this.resolution; + this.baseTexture.height = this.height * this.resolution; + this.baseTexture._glTextures = []; + this.baseTexture.resolution = this.resolution; + + this.baseTexture.scaleMode = scaleMode || PIXI.scaleModes.DEFAULT; + + this.baseTexture.hasLoaded = true; + + PIXI.Texture.call(this, + this.baseTexture, + new PIXI.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution) + ); + + /** + * The renderer this RenderTexture uses. A RenderTexture can only belong to one renderer at the moment if its webGL. + * + * @property renderer + * @type CanvasRenderer|WebGLRenderer + */ + this.renderer = renderer || PIXI.defaultRenderer; + + if(this.renderer.type === PIXI.WEBGL_RENDERER) + { + var gl = this.renderer.gl; + this.baseTexture._dirty[gl.id] = false; + + this.textureBuffer = new PIXI.FilterTexture(gl, this.width, this.height, this.baseTexture.scaleMode); + this.baseTexture._glTextures[gl.id] = this.textureBuffer.texture; + + this.render = this.renderWebGL; + this.projection = new PIXI.Point(this.width*0.5, -this.height*0.5); + } + else + { + this.render = this.renderCanvas; + this.textureBuffer = new PIXI.CanvasBuffer(this.width* this.resolution, this.height* this.resolution); + this.baseTexture.source = this.textureBuffer.canvas; + } + + /** + * @property valid + * @type Boolean + */ + this.valid = true; + + this._updateUvs(); +}; + +PIXI.RenderTexture.prototype = Object.create(PIXI.Texture.prototype); +PIXI.RenderTexture.prototype.constructor = PIXI.RenderTexture; + +/** + * Resizes the RenderTexture. + * + * @method resize + * @param width {Number} The width to resize to. + * @param height {Number} The height to resize to. + * @param updateBase {Boolean} Should the baseTexture.width and height values be resized as well? + */ +PIXI.RenderTexture.prototype.resize = function(width, height, updateBase) +{ + if (width === this.width && height === this.height)return; + + this.valid = (width > 0 && height > 0); + + this.width = width; + this.height = height; + + this.frame.width = this.crop.width = width * this.resolution; + this.frame.height = this.crop.height = height * this.resolution; + + if (updateBase) + { + this.baseTexture.width = this.width * this.resolution; + this.baseTexture.height = this.height * this.resolution; + } + + if (this.renderer.type === PIXI.WEBGL_RENDERER) + { + this.projection.x = this.width / 2; + this.projection.y = -this.height / 2; + } + + if(!this.valid)return; + + this.textureBuffer.resize(this.width, this.height); +}; + +/** + * Clears the RenderTexture. + * + * @method clear + */ +PIXI.RenderTexture.prototype.clear = function() +{ + if(!this.valid)return; + + if (this.renderer.type === PIXI.WEBGL_RENDERER) + { + this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER, this.textureBuffer.frameBuffer); + } + + this.textureBuffer.clear(); +}; + +/** + * This function will draw the display object to the texture. + * + * @method renderWebGL + * @param displayObject {DisplayObject} The display object to render this texture on + * @param [matrix] {Matrix} Optional matrix to apply to the display object before rendering. + * @param [clear] {Boolean} If true the texture will be cleared before the displayObject is drawn + * @private + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, matrix, clear) +{ + if(!this.valid)return; + //TOOD replace position with matrix.. + + //Lets create a nice matrix to apply to our display object. Frame buffers come in upside down so we need to flip the matrix + var wt = displayObject.worldTransform; + wt.identity(); + wt.translate(0, this.projection.y * 2); + if(matrix)wt.append(matrix); + wt.scale(1,-1); + + // setWorld Alpha to ensure that the object is renderer at full opacity + displayObject.worldAlpha = 1; + + // Time to update all the children of the displayObject with the new matrix.. + var children = displayObject.children; + + for(var i=0,j=children.length; i 'image/gif' + var info = data.slice(0, sepIdx).split(';')[0]; + + //We might need to handle some special cases here... + //standardize text/plain to 'txt' file extension + if (!info || info.toLowerCase() === 'text/plain') + return 'txt'; + + //User specified mime type, try splitting it by '/' + return info.split('/').pop().toLowerCase(); + } + + return null; +}; + +/** + * Starts loading the assets sequentially + * + * @method load + */ +PIXI.AssetLoader.prototype.load = function() +{ + var scope = this; + + function onLoad(evt) { + scope.onAssetLoaded(evt.data.content); + } + + this.loadCount = this.assetURLs.length; + + for (var i=0; i < this.assetURLs.length; i++) + { + var fileName = this.assetURLs[i]; + //first see if we have a data URI scheme.. + var fileType = this._getDataType(fileName); + + //if not, assume it's a file URI + if (!fileType) + fileType = fileName.split('?').shift().split('.').pop().toLowerCase(); + + var Constructor = this.loadersByType[fileType]; + if(!Constructor) + throw new Error(fileType + ' is an unsupported file type'); + + var loader = new Constructor(fileName, this.crossorigin); + + loader.on('loaded', onLoad); + loader.load(); + } +}; + +/** + * Invoked after each file is loaded + * + * @method onAssetLoaded + * @private + */ +PIXI.AssetLoader.prototype.onAssetLoaded = function(loader) +{ + this.loadCount--; + + this.emit('onProgress', { + content: this, + loader: loader, + loaded: this.assetURLs.length - this.loadCount, + total: this.assetURLs.length + }); + + if (this.onProgress) this.onProgress(loader); + + if (!this.loadCount) + { + this.emit('onComplete', { content: this }); + if(this.onComplete) this.onComplete(); + } +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The json file loader is used to load in JSON data and parse it + * When loaded this class will dispatch a 'loaded' event + * If loading fails this class will dispatch an 'error' event + * + * @class JsonLoader + * @uses EventTarget + * @constructor + * @param url {String} The url of the JSON file + * @param crossorigin {Boolean} Whether requests should be treated as crossorigin + */ +PIXI.JsonLoader = function (url, crossorigin) { + /** + * The url of the bitmap font data + * + * @property url + * @type String + */ + this.url = url; + + /** + * Whether the requests should be treated as cross origin + * + * @property crossorigin + * @type Boolean + */ + this.crossorigin = crossorigin; + + /** + * [read-only] The base url of the bitmap font data + * + * @property baseUrl + * @type String + * @readOnly + */ + this.baseUrl = url.replace(/[^\/]*$/, ''); + + /** + * [read-only] Whether the data has loaded yet + * + * @property loaded + * @type Boolean + * @readOnly + */ + this.loaded = false; + +}; + +// constructor +PIXI.JsonLoader.prototype.constructor = PIXI.JsonLoader; +PIXI.EventTarget.mixin(PIXI.JsonLoader.prototype); + +/** + * Loads the JSON data + * + * @method load + */ +PIXI.JsonLoader.prototype.load = function () { + + if(window.XDomainRequest && this.crossorigin) + { + this.ajaxRequest = new window.XDomainRequest(); + + // XDomainRequest has a few quirks. Occasionally it will abort requests + // A way to avoid this is to make sure ALL callbacks are set even if not used + // More info here: http://stackoverflow.com/questions/15786966/xdomainrequest-aborts-post-on-ie-9 + this.ajaxRequest.timeout = 3000; + + this.ajaxRequest.onerror = this.onError.bind(this); + + this.ajaxRequest.ontimeout = this.onError.bind(this); + + this.ajaxRequest.onprogress = function() {}; + + this.ajaxRequest.onload = this.onJSONLoaded.bind(this); + } + else + { + if (window.XMLHttpRequest) + { + this.ajaxRequest = new window.XMLHttpRequest(); + } + else + { + this.ajaxRequest = new window.ActiveXObject('Microsoft.XMLHTTP'); + } + + this.ajaxRequest.onreadystatechange = this.onReadyStateChanged.bind(this); + } + + this.ajaxRequest.open('GET',this.url,true); + + this.ajaxRequest.send(); +}; + +/** + * Bridge function to be able to use the more reliable onreadystatechange in XMLHttpRequest. + * + * @method onReadyStateChanged + * @private + */ +PIXI.JsonLoader.prototype.onReadyStateChanged = function () { + if (this.ajaxRequest.readyState === 4 && (this.ajaxRequest.status === 200 || window.location.href.indexOf('http') === -1)) { + this.onJSONLoaded(); + } +}; + +/** + * Invoke when JSON file is loaded + * + * @method onJSONLoaded + * @private + */ +PIXI.JsonLoader.prototype.onJSONLoaded = function () { + + if(!this.ajaxRequest.responseText ) + { + this.onError(); + return; + } + + this.json = JSON.parse(this.ajaxRequest.responseText); + + if(this.json.frames && this.json.meta && this.json.meta.image) + { + // sprite sheet + var textureUrl = this.json.meta.image; + if (textureUrl.indexOf('data:') === -1) { + textureUrl = this.baseUrl + textureUrl; + } + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; + + this.texture = image.texture.baseTexture; + image.addEventListener('loaded', this.onLoaded.bind(this)); + + for (var i in frameData) + { + var rect = frameData[i].frame; + + if (rect) + { + var textureSize = new PIXI.Rectangle(rect.x, rect.y, rect.w, rect.h); + var crop = textureSize.clone(); + var trim = null; + + // Check to see if the sprite is trimmed + if (frameData[i].trimmed) + { + var actualSize = frameData[i].sourceSize; + var realSize = frameData[i].spriteSourceSize; + trim = new PIXI.Rectangle(realSize.x, realSize.y, actualSize.w, actualSize.h); + } + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, textureSize, crop, trim); + } + } + + image.load(); + + } + else if(this.json.bones) + { + /* check if the json was loaded before */ + if (PIXI.AnimCache[this.url]) + { + this.onLoaded(); + } + else + { + /* use a bit of hackery to load the atlas file, here we assume that the .json, .atlas and .png files + * that correspond to the spine file are in the same base URL and that the .json and .atlas files + * have the same name + */ + var atlasPath = this.url.substr(0, this.url.lastIndexOf('.')) + '.atlas'; + var atlasLoader = new PIXI.JsonLoader(atlasPath, this.crossorigin); + // save a copy of the current object for future reference // + var originalLoader = this; + // before loading the file, replace the "onJSONLoaded" function for our own // + atlasLoader.onJSONLoaded = function() + { + // at this point "this" points at the atlasLoader (JsonLoader) instance // + if(!this.ajaxRequest.responseText) + { + this.onError(); // FIXME: hmm, this is funny because we are not responding to errors yet + return; + } + // create a new instance of a spine texture loader for this spine object // + var textureLoader = new PIXI.SpineTextureLoader(this.url.substring(0, this.url.lastIndexOf('/'))); + // create a spine atlas using the loaded text and a spine texture loader instance // + var spineAtlas = new spine.Atlas(this.ajaxRequest.responseText, textureLoader); + // now we use an atlas attachment loader // + var attachmentLoader = new spine.AtlasAttachmentLoader(spineAtlas); + // spine animation + var spineJsonParser = new spine.SkeletonJson(attachmentLoader); + var skeletonData = spineJsonParser.readSkeletonData(originalLoader.json); + PIXI.AnimCache[originalLoader.url] = skeletonData; + originalLoader.spine = skeletonData; + originalLoader.spineAtlas = spineAtlas; + originalLoader.spineAtlasLoader = atlasLoader; + // wait for textures to finish loading if needed + if (textureLoader.loadingCount > 0) + { + textureLoader.addEventListener('loadedBaseTexture', function(evt){ + if (evt.content.content.loadingCount <= 0) + { + originalLoader.onLoaded(); + } + }); + } + else + { + originalLoader.onLoaded(); + } + }; + // start the loading // + atlasLoader.load(); + } + } + else + { + this.onLoaded(); + } +}; + +/** + * Invoke when json file loaded + * + * @method onLoaded + * @private + */ +PIXI.JsonLoader.prototype.onLoaded = function () { + this.loaded = true; + this.dispatchEvent({ + type: 'loaded', + content: this + }); +}; + +/** + * Invoke when error occured + * + * @method onError + * @private + */ +PIXI.JsonLoader.prototype.onError = function () { + + this.dispatchEvent({ + type: 'error', + content: this + }); +}; + +/** + * @author Martin Kelm http://mkelm.github.com + */ + +/** + * The atlas file loader is used to load in Texture Atlas data and parse it. When loaded this class will dispatch a 'loaded' event. If loading fails this class will dispatch an 'error' event. + * + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish in the 'JSON' format. + * + * It is highly recommended to use texture atlases (also know as 'sprite sheets') as it allowed sprites to be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFrameId() + * + * @class AtlasLoader + * @uses EventTarget + * @constructor + * @param url {String} The url of the JSON file + * @param crossorigin {Boolean} Whether requests should be treated as crossorigin + */ +PIXI.AtlasLoader = function (url, crossorigin) { + this.url = url; + this.baseUrl = url.replace(/[^\/]*$/, ''); + this.crossorigin = crossorigin; + this.loaded = false; + +}; + +// constructor +PIXI.AtlasLoader.constructor = PIXI.AtlasLoader; + +PIXI.EventTarget.mixin(PIXI.AtlasLoader.prototype); + + /** + * Starts loading the JSON file + * + * @method load + */ +PIXI.AtlasLoader.prototype.load = function () { + this.ajaxRequest = new PIXI.AjaxRequest(); + this.ajaxRequest.onreadystatechange = this.onAtlasLoaded.bind(this); + + this.ajaxRequest.open('GET', this.url, true); + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType('application/json'); + this.ajaxRequest.send(null); +}; + +/** + * Invoked when the Atlas has fully loaded. Parses the JSON and builds the texture frames. + * + * @method onAtlasLoaded + * @private + */ +PIXI.AtlasLoader.prototype.onAtlasLoaded = function () { + if (this.ajaxRequest.readyState === 4) { + if (this.ajaxRequest.status === 200 || window.location.href.indexOf('http') === -1) { + this.atlas = { + meta : { + image : [] + }, + frames : [] + }; + var result = this.ajaxRequest.responseText.split(/\r?\n/); + var lineCount = -3; + + var currentImageId = 0; + var currentFrame = null; + var nameInNextLine = false; + + var i = 0, + j = 0, + selfOnLoaded = this.onLoaded.bind(this); + + // parser without rotation support yet! + for (i = 0; i < result.length; i++) { + result[i] = result[i].replace(/^\s+|\s+$/g, ''); + if (result[i] === '') { + nameInNextLine = i+1; + } + if (result[i].length > 0) { + if (nameInNextLine === i) { + this.atlas.meta.image.push(result[i]); + currentImageId = this.atlas.meta.image.length - 1; + this.atlas.frames.push({}); + lineCount = -3; + } else if (lineCount > 0) { + if (lineCount % 7 === 1) { // frame name + if (currentFrame != null) { //jshint ignore:line + this.atlas.frames[currentImageId][currentFrame.name] = currentFrame; + } + currentFrame = { name: result[i], frame : {} }; + } else { + var text = result[i].split(' '); + if (lineCount % 7 === 3) { // position + currentFrame.frame.x = Number(text[1].replace(',', '')); + currentFrame.frame.y = Number(text[2]); + } else if (lineCount % 7 === 4) { // size + currentFrame.frame.w = Number(text[1].replace(',', '')); + currentFrame.frame.h = Number(text[2]); + } else if (lineCount % 7 === 5) { // real size + var realSize = { + x : 0, + y : 0, + w : Number(text[1].replace(',', '')), + h : Number(text[2]) + }; + + if (realSize.w > currentFrame.frame.w || realSize.h > currentFrame.frame.h) { + currentFrame.trimmed = true; + currentFrame.realSize = realSize; + } else { + currentFrame.trimmed = false; + } + } + } + } + lineCount++; + } + } + + if (currentFrame != null) { //jshint ignore:line + this.atlas.frames[currentImageId][currentFrame.name] = currentFrame; + } + + if (this.atlas.meta.image.length > 0) { + this.images = []; + for (j = 0; j < this.atlas.meta.image.length; j++) { + // sprite sheet + var textureUrl = this.baseUrl + this.atlas.meta.image[j]; + var frameData = this.atlas.frames[j]; + this.images.push(new PIXI.ImageLoader(textureUrl, this.crossorigin)); + + for (i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.images[j].texture.baseTexture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + PIXI.TextureCache[i].realSize = frameData[i].realSize; + // trim in pixi not supported yet, todo update trim properties if it is done ... + PIXI.TextureCache[i].trim.x = 0; + PIXI.TextureCache[i].trim.y = 0; + } + } + } + } + + this.currentImageId = 0; + for (j = 0; j < this.images.length; j++) { + this.images[j].on('loaded', selfOnLoaded); + } + this.images[this.currentImageId].load(); + + } else { + this.onLoaded(); + } + + } else { + this.onError(); + } + } +}; + +/** + * Invoked when json file has loaded. + * + * @method onLoaded + * @private + */ +PIXI.AtlasLoader.prototype.onLoaded = function () { + if (this.images.length - 1 > this.currentImageId) { + this.currentImageId++; + this.images[this.currentImageId].load(); + } else { + this.loaded = true; + this.emit('loaded', { content: this }); + } +}; + +/** + * Invoked when an error occurs. + * + * @method onError + * @private + */ +PIXI.AtlasLoader.prototype.onError = function () { + this.emit('error', { content: this }); +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The sprite sheet loader is used to load in JSON sprite sheet data + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish in the 'JSON' format + * There is a free version so thats nice, although the paid version is great value for money. + * It is highly recommended to use Sprite sheets (also know as a 'texture atlas') as it means sprites can be batched and drawn together for highly increased rendering speed. + * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFrameId() + * This loader will load the image file that the Spritesheet points to as well as the data. + * When loaded this class will dispatch a 'loaded' event + * + * @class SpriteSheetLoader + * @uses EventTarget + * @constructor + * @param url {String} The url of the sprite sheet JSON file + * @param crossorigin {Boolean} Whether requests should be treated as crossorigin + */ +PIXI.SpriteSheetLoader = function (url, crossorigin) { + + /** + * The url of the atlas data + * + * @property url + * @type String + */ + this.url = url; + + /** + * Whether the requests should be treated as cross origin + * + * @property crossorigin + * @type Boolean + */ + this.crossorigin = crossorigin; + + /** + * [read-only] The base url of the bitmap font data + * + * @property baseUrl + * @type String + * @readOnly + */ + this.baseUrl = url.replace(/[^\/]*$/, ''); + + /** + * The texture being loaded + * + * @property texture + * @type Texture + */ + this.texture = null; + + /** + * The frames of the sprite sheet + * + * @property frames + * @type Object + */ + this.frames = {}; +}; + +// constructor +PIXI.SpriteSheetLoader.prototype.constructor = PIXI.SpriteSheetLoader; + +PIXI.EventTarget.mixin(PIXI.SpriteSheetLoader.prototype); + +/** + * This will begin loading the JSON file + * + * @method load + */ +PIXI.SpriteSheetLoader.prototype.load = function () { + var scope = this; + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.on('loaded', function (event) { + scope.json = event.data.content.json; + scope.onLoaded(); + }); + jsonLoader.load(); +}; + +/** + * Invoke when all files are loaded (json and texture) + * + * @method onLoaded + * @private + */ +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.emit('loaded', { + content: this + }); +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The image loader class is responsible for loading images file formats ('jpeg', 'jpg', 'png' and 'gif') + * Once the image has been loaded it is stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrame() and PIXI.Sprite.fromFrame() + * When loaded this class will dispatch a 'loaded' event + * + * @class ImageLoader + * @uses EventTarget + * @constructor + * @param url {String} The url of the image + * @param crossorigin {Boolean} Whether requests should be treated as crossorigin + */ +PIXI.ImageLoader = function(url, crossorigin) +{ + /** + * The texture being loaded + * + * @property texture + * @type Texture + */ + this.texture = PIXI.Texture.fromImage(url, crossorigin); + + /** + * if the image is loaded with loadFramedSpriteSheet + * frames will contain the sprite sheet frames + * + * @property frames + * @type Array + * @readOnly + */ + this.frames = []; +}; + +// constructor +PIXI.ImageLoader.prototype.constructor = PIXI.ImageLoader; + +PIXI.EventTarget.mixin(PIXI.ImageLoader.prototype); + +/** + * Loads image or takes it from cache + * + * @method load + */ +PIXI.ImageLoader.prototype.load = function() +{ + if(!this.texture.baseTexture.hasLoaded) + { + this.texture.baseTexture.on('loaded', this.onLoaded.bind(this)); + } + else + { + this.onLoaded(); + } +}; + +/** + * Invoked when image file is loaded or it is already cached and ready to use + * + * @method onLoaded + * @private + */ +PIXI.ImageLoader.prototype.onLoaded = function() +{ + this.emit('loaded', { content: this }); +}; + +/** + * Loads image and split it to uniform sized frames + * + * @method loadFramedSpriteSheet + * @param frameWidth {Number} width of each frame + * @param frameHeight {Number} height of each frame + * @param textureName {String} if given, the frames will be cached in - format + */ +PIXI.ImageLoader.prototype.loadFramedSpriteSheet = function(frameWidth, frameHeight, textureName) +{ + this.frames = []; + if(!this.texture.baseTexture.hasLoaded) + { + var scope = this; + textureName = textureName || scope.texture.baseTexture.imageUrl; + this.texture.baseTexture.addEventListener('loaded', function () { + var texture; + var cols = Math.floor(scope.texture.width / frameWidth); + var rows = Math.floor(scope.texture.height / frameHeight); + + var i = 0; + for (var y = 0; y < rows; y++) { + for (var x = 0; x < cols; x++, i++) { + if (!PIXI.TextureCache[textureName + '-' + i]) { + texture = new PIXI.Texture(scope.texture, { + x: x * frameWidth, + y: y * frameHeight, + width: frameWidth, + height: frameHeight + }); + PIXI.TextureCache[textureName + '-' + i] = texture; + } + else { + texture = PIXI.TextureCache[textureName + '-' + i]; + } + scope.frames.push(texture); + } + } + + scope.onLoaded(); + }); + } + else + { + + textureName = textureName || this.texture.baseTexture.imageUrl; + + var texture; + var cols = Math.floor(this.texture.width / frameWidth); + var rows = Math.floor(this.texture.height / frameHeight); + + var i = 0; + for (var y = 0; y < rows; y++) { + for (var x = 0; x < cols; x++, i++) { + if (!PIXI.TextureCache[textureName + '-' + i]) { + texture = new PIXI.Texture(this.texture, { + x: x * frameWidth, + y: y * frameHeight, + width: frameWidth, + height: frameHeight + }); + PIXI.TextureCache[textureName + '-' + i] = texture; + } + else { + texture = PIXI.TextureCache[textureName + '-' + i]; + } + + this.frames.push(texture); + } + } + this.onLoaded(); + } +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The xml loader is used to load in XML bitmap font data ('xml' or 'fnt') + * To generate the data you can use http://www.angelcode.com/products/bmfont/ + * This loader will also load the image file as the data. + * When loaded this class will dispatch a 'loaded' event + * + * @class BitmapFontLoader + * @uses EventTarget + * @constructor + * @param url {String} The url of the sprite sheet JSON file + * @param crossorigin {Boolean} Whether requests should be treated as crossorigin + */ +PIXI.BitmapFontLoader = function(url, crossorigin) +{ + /** + * The url of the bitmap font data + * + * @property url + * @type String + */ + this.url = url; + + /** + * Whether the requests should be treated as cross origin + * + * @property crossorigin + * @type Boolean + */ + this.crossorigin = crossorigin; + + /** + * [read-only] The base url of the bitmap font data + * + * @property baseUrl + * @type String + * @readOnly + */ + this.baseUrl = url.replace(/[^\/]*$/, ''); + + /** + * [read-only] The texture of the bitmap font + * + * @property texture + * @type Texture + */ + this.texture = null; +}; + +// constructor +PIXI.BitmapFontLoader.prototype.constructor = PIXI.BitmapFontLoader; +PIXI.EventTarget.mixin(PIXI.BitmapFontLoader.prototype); + +/** + * Loads the XML font data + * + * @method load + */ +PIXI.BitmapFontLoader.prototype.load = function() +{ + this.ajaxRequest = new PIXI.AjaxRequest(); + this.ajaxRequest.onreadystatechange = this.onXMLLoaded.bind(this); + + this.ajaxRequest.open('GET', this.url, true); + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType('application/xml'); + this.ajaxRequest.send(null); +}; + +/** + * Invoked when the XML file is loaded, parses the data. + * + * @method onXMLLoaded + * @private + */ +PIXI.BitmapFontLoader.prototype.onXMLLoaded = function() +{ + if (this.ajaxRequest.readyState === 4) + { + if (this.ajaxRequest.status === 200 || window.location.protocol.indexOf('http') === -1) + { + var responseXML = this.ajaxRequest.responseXML; + if(!responseXML || /MSIE 9/i.test(navigator.userAgent) || navigator.isCocoonJS) { + if(typeof(window.DOMParser) === 'function') { + var domparser = new DOMParser(); + responseXML = domparser.parseFromString(this.ajaxRequest.responseText, 'text/xml'); + } else { + var div = document.createElement('div'); + div.innerHTML = this.ajaxRequest.responseText; + responseXML = div; + } + } + + var textureUrl = this.baseUrl + responseXML.getElementsByTagName('page')[0].getAttribute('file'); + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + this.texture = image.texture.baseTexture; + + var data = {}; + var info = responseXML.getElementsByTagName('info')[0]; + var common = responseXML.getElementsByTagName('common')[0]; + data.font = info.getAttribute('face'); + data.size = parseInt(info.getAttribute('size'), 10); + data.lineHeight = parseInt(common.getAttribute('lineHeight'), 10); + data.chars = {}; + + //parse letters + var letters = responseXML.getElementsByTagName('char'); + + for (var i = 0; i < letters.length; i++) + { + var charCode = parseInt(letters[i].getAttribute('id'), 10); + + var textureRect = new PIXI.Rectangle( + parseInt(letters[i].getAttribute('x'), 10), + parseInt(letters[i].getAttribute('y'), 10), + parseInt(letters[i].getAttribute('width'), 10), + parseInt(letters[i].getAttribute('height'), 10) + ); + + data.chars[charCode] = { + xOffset: parseInt(letters[i].getAttribute('xoffset'), 10), + yOffset: parseInt(letters[i].getAttribute('yoffset'), 10), + xAdvance: parseInt(letters[i].getAttribute('xadvance'), 10), + kerning: {}, + texture: PIXI.TextureCache[charCode] = new PIXI.Texture(this.texture, textureRect) + + }; + } + + //parse kernings + var kernings = responseXML.getElementsByTagName('kerning'); + for (i = 0; i < kernings.length; i++) + { + var first = parseInt(kernings[i].getAttribute('first'), 10); + var second = parseInt(kernings[i].getAttribute('second'), 10); + var amount = parseInt(kernings[i].getAttribute('amount'), 10); + + data.chars[second].kerning[first] = amount; + + } + + PIXI.BitmapText.fonts[data.font] = data; + + image.addEventListener('loaded', this.onLoaded.bind(this)); + image.load(); + } + } +}; + +/** + * Invoked when all files are loaded (xml/fnt and texture) + * + * @method onLoaded + * @private + */ +PIXI.BitmapFontLoader.prototype.onLoaded = function() +{ + this.emit('loaded', { content: this }); +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * The Spine loader is used to load in JSON spine data + * To generate the data you need to use http://esotericsoftware.com/ and export in the "JSON" format + * Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * You will need to generate a sprite sheet to accompany the spine data + * When loaded this class will dispatch a "loaded" event + * + * @class SpineLoader + * @uses EventTarget + * @constructor + * @param url {String} The url of the JSON file + * @param crossorigin {Boolean} Whether requests should be treated as crossorigin + */ +PIXI.SpineLoader = function(url, crossorigin) +{ + /** + * The url of the bitmap font data + * + * @property url + * @type String + */ + this.url = url; + + /** + * Whether the requests should be treated as cross origin + * + * @property crossorigin + * @type Boolean + */ + this.crossorigin = crossorigin; + + /** + * [read-only] Whether the data has loaded yet + * + * @property loaded + * @type Boolean + * @readOnly + */ + this.loaded = false; +}; + +PIXI.SpineLoader.prototype.constructor = PIXI.SpineLoader; + +PIXI.EventTarget.mixin(PIXI.SpineLoader.prototype); + +/** + * Loads the JSON data + * + * @method load + */ +PIXI.SpineLoader.prototype.load = function () { + + var scope = this; + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.on('loaded', function (event) { + scope.json = event.data.content.json; + scope.onLoaded(); + }); + jsonLoader.load(); +}; + +/** + * Invoked when JSON file is loaded. + * + * @method onLoaded + * @private + */ +PIXI.SpineLoader.prototype.onLoaded = function () { + this.loaded = true; + this.emit('loaded', { content: this }); +}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * This is the base class for creating a PIXI filter. Currently only webGL supports filters. + * If you want to make a custom filter this should be your base class. + * @class AbstractFilter + * @constructor + * @param fragmentSrc {Array} The fragment source in an array of strings. + * @param uniforms {Object} An object containing the uniforms for this filter. + */ +PIXI.AbstractFilter = function(fragmentSrc, uniforms) +{ + /** + * An array of passes - some filters contain a few steps this array simply stores the steps in a liniear fashion. + * For example the blur filter has two passes blurX and blurY. + * @property passes + * @type Array(Filter) + * @private + */ + this.passes = [this]; + + /** + * @property shaders + * @type Array(Shader) + * @private + */ + this.shaders = []; + + /** + * @property dirty + * @type Boolean + */ + this.dirty = true; + + /** + * @property padding + * @type Number + */ + this.padding = 0; + + /** + * @property uniforms + * @type object + * @private + */ + this.uniforms = uniforms || {}; + + /** + * @property fragmentSrc + * @type Array + * @private + */ + this.fragmentSrc = fragmentSrc || []; +}; + +PIXI.AbstractFilter.prototype.constructor = PIXI.AbstractFilter; + +/** + * Syncs the uniforms between the class object and the shaders. + * + * @method syncUniforms + */ +PIXI.AbstractFilter.prototype.syncUniforms = function() +{ + for(var i=0,j=this.shaders.length; i 0) { + Yanfly.Param.GamepadTimer -= 1; + return -1; + } + if (navigator.getGamepads) { + var gamepads = navigator.getGamepads(); + if (gamepads) { + for (var i = 0; i < gamepads.length; i++) { + var gamepad = gamepads[i]; + if (gamepad && gamepad.connected) { + return this.gamepadButtonId(gamepad); + } + } + } + } + return -1; +}; + +Input.gamepadButtonId = function(gamepad) { + var buttons = gamepad.buttons; + for (var i = 0; i < buttons.length; i++) { + if (buttons[i].pressed) return i; + } + return -1; +}; + +Input.getGamepadButton = function(type) { + for (var i = 0; i < 12; ++i) { + if (Input.gamepadMapper[i] === type) return i; + } + return null; +}; + +Input.isControllerConnected = function() { + if (navigator.getGamepads) { + var gamepads = navigator.getGamepads(); + if (gamepads) { + for (var i = 0; i < gamepads.length; i++) { + var gamepad = gamepads[i]; + if (gamepad && gamepad.connected) return true; + } + } + } + return false; +}; + +//============================================================================= +// ConfigManager +//============================================================================= + +ConfigManager.gamepadInput = { + 0: 'ok', + 1: 'cancel', + 2: 'shift', + 3: 'menu', + 4: 'pageup', + 5: 'pagedown', + 12: 'up', + 13: 'down', + 14: 'left', + 15: 'right', +}; + +Yanfly.GamepadConfig.ConfigManager_makeData = ConfigManager.makeData; +ConfigManager.makeData = function() { + var config = Yanfly.GamepadConfig.ConfigManager_makeData.call(this); + config.gamepadInput = this.gamepadInput; + return config; +}; + +Yanfly.GamepadConfig.ConfigManager_applyData = ConfigManager.applyData; +ConfigManager.applyData = function(config) { + Yanfly.GamepadConfig.ConfigManager_applyData.call(this, config); + this.gamepadInput = this.readGamepadConfig(config, 'gamepadInput'); + this.applyGamepadConfig(); +}; + +ConfigManager.applyGamepadConfig = function() { + Input.gamepadMapper = this.gamepadInput; + Input.update(); + Input.clear(); +}; + +ConfigManager.readGamepadConfig = function(config, name) { + var value = config[name]; + if (value !== undefined) { + return value; + } else { + return { + 0: 'ok', + 1: 'cancel', + 2: 'shift', + 3: 'menu', + 4: 'pageup', + 5: 'pagedown', + 12: 'up', + 13: 'down', + 14: 'left', + 15: 'right', + }; + } +}; + +//============================================================================= +// Window_MenuCommand +//============================================================================= + +Yanfly.GamepadConfig.Window_Options_addGeneralOptions = + Window_Options.prototype.addGeneralOptions; +Window_Options.prototype.addGeneralOptions = function() { + Yanfly.GamepadConfig.Window_Options_addGeneralOptions.call(this); + this.addGameConfigCommand(); +}; + +Window_Options.prototype.addGameConfigCommand = function() { + if (Input.isControllerConnected()) { + this.addCommand(Yanfly.Param.GamepadConfigName, 'gamepadConfig', true); + this._addedController = true; + } +}; + +Yanfly.GamepadConfig.Window_Options_update = + Window_Options.prototype.update; +Window_Options.prototype.update = function() { + Yanfly.GamepadConfig.Window_Options_update.call(this); + if (this._addedController && !Input.isControllerConnected()) { + this.refresh(); + this.height = this.windowHeight(); + this.updatePlacement(); + } +}; + +Yanfly.GamepadConfig.Window_Options_drawItem = + Window_Options.prototype.drawItem; +Window_Options.prototype.drawItem = function(index) { + if (this.commandSymbol(index) === 'gamepadConfig') { + var rect = this.itemRectForText(index); + var text = this.commandName(index); + this.resetTextColor(); + this.changePaintOpacity(this.isCommandEnabled(index)); + this.drawText(text, rect.x, rect.y, rect.width, 'left'); + } else { + Yanfly.GamepadConfig.Window_Options_drawItem.call(this, index); + } +}; + +Yanfly.GamepadConfig.Window_Options_processOk = + Window_Options.prototype.processOk; +Window_Options.prototype.processOk = function() { + if (this.commandSymbol(this.index()) === 'gamepadConfig') { + Window_Command.prototype.processOk.call(this); + } else { + Yanfly.GamepadConfig.Window_Options_processOk.call(this); + } +}; + +//============================================================================= +// Window_GamepadConfig +//============================================================================= + +function Window_GamepadConfig() { + this.initialize.apply(this, arguments); +} + +Window_GamepadConfig.prototype = Object.create(Window_Command.prototype); +Window_GamepadConfig.prototype.constructor = Window_GamepadConfig; + +Window_GamepadConfig.prototype.initialize = function(helpWindow) { + var wy = helpWindow.height; + Window_Command.prototype.initialize.call(this, 0, wy); + this.setHelpWindow(helpWindow); + this.height = Graphics.boxHeight - wy; + this.refresh(); + this.activate(); + this.select(0); +}; + +Window_GamepadConfig.prototype.windowWidth = function() { + return Graphics.boxWidth; +}; + +Window_GamepadConfig.prototype.makeCommandList = function(index) { + for (var i = 0; i < 6; ++i) { + var text = this.getButtonTypeText(i); + this.addCommand(text, 'button', true); + } + this.addCommand('', 'filler', true); + this.addCommand(this.getButtonTypeText(7), 'reset', true); + this.addCommand(this.getButtonTypeText(8), 'finish', true); +}; + +Window_GamepadConfig.prototype.drawItem = function(index) { + if (index > 5) { + Window_Command.prototype.drawItem.call(this, index); + } else { + var rect = this.itemRectForText(index); + var align = this.itemTextAlign(); + var ww = rect.width / 2; + this.resetTextColor(); + this.changePaintOpacity(this.isCommandEnabled(index)); + this.drawText(this.commandName(index), rect.x, rect.y, ww, align); + var text = this.getButtonConfig(index); + this.drawText(text, rect.x + ww, rect.y, ww, align); + } +}; + +Window_GamepadConfig.prototype.getButtonTypeText = function(index) { + if (index === 0) return Yanfly.Param.GamepadConfigOkTx; + if (index === 1) return Yanfly.Param.GamepadConfigCancelTx; + if (index === 2) return Yanfly.Param.GamepadConfigShiftTx; + if (index === 3) return Yanfly.Param.GamepadConfigMenuTx; + if (index === 4) return Yanfly.Param.GamepadConfigPgUpTx; + if (index === 5) return Yanfly.Param.GamepadConfigPgDnTx; + if (index === 7) return Yanfly.Param.GamepadConfigResetTx; + if (index === 8) return Yanfly.Param.GamepadConfigFinishTx; + return ''; +}; + +Window_GamepadConfig.prototype.getButtonConfig = function(index) { + if (index > 5) return ''; + var key = this.getButtonKey(index); + var button = Input.getGamepadButton(key); + return Yanfly.Param.GamepadConfigButton.format(button); +}; + +Window_GamepadConfig.prototype.getButtonKey = function(index) { + if (index === 0) return 'ok'; + if (index === 1) return 'cancel'; + if (index === 2) return 'shift'; + if (index === 3) return 'menu'; + if (index === 4) return 'pageup'; + if (index === 5) return 'pagedown'; +}; + +Window_GamepadConfig.prototype.itemTextAlign = function() { + return 'center'; +}; + +Window_GamepadConfig.prototype.clearButtonConfig = function(index) { + var rect = this.itemRectForText(index); + rect.x += rect.width / 2; + rect.width /= 2; + this.contents.clearRect(rect.x, rect.y, rect.width, rect.height); +}; + +Window_GamepadConfig.prototype.updateHelp = function() { + if (!this._helpWindow) return; + switch (this.index()) { + case 0: + this._helpWindow.setText(Yanfly.Param.GamepadConfigOkHelp); + break; + case 1: + this._helpWindow.setText(Yanfly.Param.GamepadConfigCancelHelp); + break; + case 2: + this._helpWindow.setText(Yanfly.Param.GamepadConfigShiftHelp); + break; + case 3: + this._helpWindow.setText(Yanfly.Param.GamepadConfigMenuHelp); + break; + case 4: + this._helpWindow.setText(Yanfly.Param.GamepadConfigPgUpHelp); + break; + case 5: + this._helpWindow.setText(Yanfly.Param.GamepadConfigPgDnHelp); + break; + case 7: + this._helpWindow.setText(Yanfly.Param.GamepadConfigResetHelp); + break; + case 8: + this._helpWindow.setText(Yanfly.Param.GamepadConfigFinishHelp); + break; + default: + this._helpWindow.clear(); + break; + } +}; + +//============================================================================= +// Scene_Options +//============================================================================= + +Yanfly.GamepadConfig.Scene_Options_createOptionsWindow = + Scene_Options.prototype.createOptionsWindow; +Scene_Options.prototype.createOptionsWindow = function() { + Yanfly.GamepadConfig.Scene_Options_createOptionsWindow.call(this); + this._optionsWindow.setHandler('gamepadConfig', + this.commandGamepadConfig.bind(this)); +}; + +Scene_Options.prototype.commandGamepadConfig = function() { + SceneManager.push(Scene_GamepadConfig); +}; + +//============================================================================= +// Scene_GamepadConfig +//============================================================================= + +function Scene_GamepadConfig() { + this.initialize.apply(this, arguments); +} + +Scene_GamepadConfig.prototype = Object.create(Scene_MenuBase.prototype); +Scene_GamepadConfig.prototype.constructor = Scene_GamepadConfig; + +Scene_GamepadConfig.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_GamepadConfig.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + this.createHelpWindow(); + this.createGamepadConfigWindow(); +}; + +Scene_GamepadConfig.prototype.terminate = function() { + Scene_MenuBase.prototype.terminate.call(this); + ConfigManager.save(); +}; + +Scene_GamepadConfig.prototype.update = function() { + Scene_MenuBase.prototype.update.call(this); + this.updateAttachedController(); + this.updateButtonConfig(); + this.updateAfterConfig(); +}; + +Scene_GamepadConfig.prototype.updateAttachedController = function() { + if (Input.isControllerConnected()) return; + this.popScene(); +}; + +Scene_GamepadConfig.prototype.createGamepadConfigWindow = function() { + this._configWindow = new Window_GamepadConfig(this._helpWindow); + this._configWindow.setHandler('button', this.commandButton.bind(this)); + this._configWindow.setHandler('reset', this.commandReset.bind(this)); + this._configWindow.setHandler('finish', this.popScene.bind(this)); + this.addWindow(this._configWindow); +}; + +Scene_GamepadConfig.prototype.commandButton = function() { + var index = this._configWindow.index(); + this._configWindow.clearButtonConfig(index); + this._configEnabled = true; + Yanfly.Param.GamepadTimer = 12; +}; + +Scene_GamepadConfig.prototype.commandReset = function() { + ConfigManager.gamepadInput = { + 0: 'ok', + 1: 'cancel', + 2: 'shift', + 3: 'menu', + 4: 'pageup', + 5: 'pagedown', + 12: 'up', + 13: 'down', + 14: 'left', + 15: 'right', + }; + ConfigManager.applyGamepadConfig(); + this.refreshWindows(); +}; + +Scene_GamepadConfig.prototype.refreshWindows = function() { + this._configWindow.refresh(); + this._configWindow.activate(); + ConfigManager.save(); +}; + +Scene_GamepadConfig.prototype.updateButtonConfig = function() { + if (!this._configEnabled) return; + var buttonId = Input.getPressedGamepadButton(); + if (buttonId > 11) return; + if (buttonId >= 0) this.applyButtonConfig(buttonId); +}; + +Scene_GamepadConfig.prototype.applyButtonConfig = function(buttonId) { + this._configEnabled = false; + var index = this._configWindow.index(); + var newConfig = this._configWindow.getButtonKey(index); + var formerConfig = Input.gamepadMapper[buttonId]; + var formerButton = Input.getGamepadButton(newConfig); + ConfigManager.gamepadInput[buttonId] = newConfig; + ConfigManager.gamepadInput[formerButton] = formerConfig; + ConfigManager.applyGamepadConfig(); + this._configTimer = 12; +}; + +Scene_GamepadConfig.prototype.updateAfterConfig = function() { + if (!this._configTimer) return; + if (--this._configTimer > 0) return; + SoundManager.playEquip(); + this.refreshWindows(); +}; + +//============================================================================= +// End of File +//============================================================================= diff --git a/js/plugins/KeyboardConfig.js b/js/plugins/KeyboardConfig.js new file mode 100644 index 0000000..3d0126a --- /dev/null +++ b/js/plugins/KeyboardConfig.js @@ -0,0 +1,1010 @@ +//============================================================================= +// Yanfly Engine Plugins - Template +// KeyboardConfig.js +// Version: 1.00 +//============================================================================= + +var Imported = Imported || {}; +Imported.KeyboardConfig = true; + +var Yanfly = Yanfly || {}; +Yanfly.KeyConfig = Yanfly.KeyboardConfig || {}; + +//============================================================================= + /*: + * @plugindesc v1.00 Allows players to adjust their button configuration + * for keyboards. + * @author Yanfly Engine Plugins + * + * @param Command Name + * @desc This is the option name that appears in the main menu. + * @default Keyboard Config + * + * @param Key Help + * @desc This is the help message that will display for keys. + * @default Change the configuration of this key? + * + * @param Default Layout + * @desc This is the text for switching to the default layout. + * @default Default Keyboard Layout + * + * @param Default Help + * @desc This is the help message that will display for keys. + * @default Reverts your keyboard setting to the default setup. + * + * @param WASD Layout + * @desc This is the text for switching to the WASD layout. + * @default WASD Movement Layout + * + * @param WASD Help + * @desc This is the help message that will display for WASD. + * @default Changes your keyboard to WASD movement. + * + * @param Finish Config + * @desc This is the text for finishing with keyboard configuration. + * @default Finish Configuration + * + * @param Finish Help + * @desc This is the help message that will display for Finish. + * @default Are you done configuring your keyboard? + * + * @param Assigned Color + * @desc This is the background color of a key that's assigned. + * @default 21 + * + * @param Action Color + * @desc This is the text color of an assigned action. + * @default 4 + * + * @param Clear Text + * @desc This is the Clear action will appear for the config text. + * @default Clear + * + * @param OK Key + * @desc This is the OK action will appear on a key. + * @default OK + * + * @param OK Text + * @desc This is the OK action will appear for the config text. + * @default OK / Talk + * + * @param Escape Key + * @desc This is the Escape action will appear on a key. + * @default X + * + * @param Escape Text + * @desc This is the Escape action will appear for the config text. + * @default Cancel / Menu + * + * @param Cancel Key + * @desc This is the Cancel action will appear on a key. + * @default Cancel + * + * @param Cancel Text + * @desc This is the Cancel action will appear for the config text. + * @default Cancel + * + * @param Menu Key + * @desc This is the Menu action will appear on a key. + * @default Menu + * + * @param Menu Text + * @desc This is the Menu action will appear for the config text. + * @default Menu + * + * @param Shift Key + * @desc This is the Shift action will appear on a key. + * @default Dash + * + * @param Shift Text + * @desc This is the Shift action will appear for the config text. + * @default Dash + * + * @param PageUp Key + * @desc This is the PageUp action will appear on a key. + * @default PgUp + * + * @param PageUp Text + * @desc This is the PageUp action will appear for the config text. + * @default Page Up + * + * @param PageDown Key + * @desc This is the PageUp action will appear on a key. + * @default PgDn + * + * @param PageDown Text + * @desc This is the PageUp action will appear for the config text. + * @default Page Down + * + * @param Left Key + * @desc This is the Left action will appear on a key. + * @default ◄ + * + * @param Left Text + * @desc This is the Left action will appear for the config text. + * @default Move ◄ Left + * + * @param Up Key + * @desc This is the Up action will appear on a key. + * @default ▲ + * + * @param Up Text + * @desc This is the Up action will appear for the config text. + * @default Move ▲ Up + * + * @param Right Key + * @desc This is the Right action will appear on a key. + * @default ► + * + * @param Right Text + * @desc This is the Right action will appear for the config text. + * @default Move ► Right + * + * @param Down Key + * @desc This is the Down action will appear on a key. + * @default ▼ + * + * @param Down Text + * @desc This is the Down action will appear for the config text. + * @default Move ▼ Down* + * + * @help + * This plugin allows players to change their keyboard configuration from the + * in-game Options menu provided that they're using a computer to play the + * game and not from a mobile device. The "Keyboard Config" option will send + * the player to a different screen where they can assign actions to each of + * the allowed keys on the keyboard. + * + * Certain measures are made to prevent the player from locking himself or + * herself in the configuration screen. These measures are that the Enter keys + * and arrow keys cannot be changed. Almost every other key is capable of being + * changed to something of the player's liking. + */ + + /*:ja + * @plugindesc キーボード向けにボタンコンフィグを行なうプラグインです。 + * @author Yanfly Engine Plugins + * + * @param Command Name + * @desc メインメニューに表示されるオプション名を変更できます + * @default Keyboard Config + * + * @param Key Help + * @desc キー設定時に表示される補助メッセージです + * @default このキーのコンフィグを変更しますか? + * + * @param Default Layout + * @desc デフォルトのレイアウトに変更する際のテキストメッセージです. + * @default デフォルトレイアウト + * + * @param Default Help + * @desc デフォルト設定に対するヘルプメッセージを設定できます + * @default キーボード設定をデフォルトに戻します + * + * @param WASD Layout + * @desc WASDのレイアウトに切り替える際のテキストを設定します + * @default WASDレイアウト + * + * @param WASD Help + * @desc WADSD設定に対するヘルプメッセージを設定できます + * @default キーボードをWASDレイアウトに変更します + * + * @param Finish Config + * @desc キーボードコンフィグを完了する際のコマンド名を変更できます + * @default Finish Configuration + * + * @param Finish Help + * @desc 完了時のヘルプを設定できます + * @default キーボードのコンフィグを完了しますか? + * + * @param Assigned Color + * @desc アサインされたキーの背景色を設定できます + * @default 21 + * + * @param Action Color + * @desc アサインされたアクションのテキストカラーを設定できます + * @default 4 + * + * @param Clear Text + * @desc コンフィグテキストに表れるClearの説明文を変更できます + * @default Clear + * + * @param OK Key + * @desc キー上に表れるOKアクションの表記を変更できます + * @default OK + * + * @param OK Text + * @desc コンフィグテキストに表れるOKの説明文を変更できます + * @default OK / 話す + * + * @param Escape Key + * @desc キー上に表れるEscapeアクションの表記を変更できます + * @default X + * + * @param Escape Text + * @desc コンフィグテキストに表れるEscapeの説明文を変更できます + * @default Cancel / Menu + * + * @param Cancel Key + * @desc キー上に表れるキャンセルアクションの表記を変更できます + * @default Cancel + * + * @param Cancel Text + * @desc コンフィグテキストに表れるキャンセルの説明文を変更できます + * @default キャンセル + * + * @param Menu Key + * @desc キー上に表れるメニューアクションの表記を変更できます + * @default Menu + * + * @param Menu Text + * @desc コンフィグテキストに表れるメニューの説明文を変更できます + * @default Menu + * + * @param Shift Key + * @desc キー上に表れるShiftアクションの表記を変更できます + * @default Dash + * + * @param Shift Text + * @desc コンフィグテキストに表れるShiftの説明文を変更できます + * @default ダッシュする + * + * @param PageUp Key + * @desc キー上に表れるPageUpアクションの表記を変更できます + * @default PgUp + * + * @param PageUp Text + * @desc コンフィグテキストに表れるPageUpの説明文を変更できます + * @default ページアップ + * + * @param PageDown Key + * @desc キー上に表れるPageDownアクションの表記を変更できます + * @default PgDn + * + * @param PageDown Text + * @desc コンフィグテキストに表れるPageDownの説明文を変更できます + * @default ページダウン + * + * @param Left Key + * @desc キー上に表れるレフトキーアクションの表記を変更できます + * @default ◄ + * + * @param Left Text + * @desc コンフィグテキストに表れるレフトキーの説明文を変更できます + * @default 左へ ◄ + * + * @param Up Key + * @desc キー上に表れるアップキーアクションの表記を変更できます + * @default ▲ + * + * @param Up Text + * @desc コンフィグテキストに表れるアップキーの説明文を変更できます + * @default 上へ ▲ + * + * @param Right Key + * @desc キー上に表れるライトキーアクションの表記を変更できます + * @default ► + * + * @param Right Text + * @desc コンフィグテキストに表れるライトキーの説明文を変更できます + * @default 右へ ► + * + * @param Down Key + * @desc キー上に表れるダウンキーアクションの表記を変更できます + * @default ▼ + * + * @param Down Text + * @desc コンフィグテキストに表れるダウンキーの説明文を変更できます + * @default 下へ ▼ + * + * @help + * このプラグインを用いて、ゲーム内オプションから + * キーボードコンフィグを変更することができます。(PCのみ有効) + * プレイヤーは、ゲームとは別のスクリーンにて + * キーボードにアクションをアサインすることができます。 + * + * プレイヤーがコンフィグスクリーンに閉じ込められてしまうことが無いように、 + * エンターキーと矢印キーは変更できないようになっています。 + * それ以外の殆どのキーは、プレイヤーの好きなように変更することができます。 + * + */ + +//============================================================================= + +//============================================================================= +// Parameter Variables +//============================================================================= + +Yanfly.Parameters = PluginManager.parameters('KeyboardConfig'); +Yanfly.Param = Yanfly.Param || {}; + +Yanfly.Param.KeyConfigName = String(Yanfly.Parameters['Command Name']); +Yanfly.Param.KeyConfigKeyHelp = String(Yanfly.Parameters['Key Help']); +Yanfly.Param.KeyConfigDefaultTx = String(Yanfly.Parameters['Default Layout']); +Yanfly.Param.KeyConfigDefaultHelp = String(Yanfly.Parameters['Default Help']); +Yanfly.Param.KeyConfigWasdTx = String(Yanfly.Parameters['WASD Layout']); +Yanfly.Param.KeyConfigWasdHelp = String(Yanfly.Parameters['WASD Help']); +Yanfly.Param.KeyConfigFinishTx = String(Yanfly.Parameters['Finish Config']); +Yanfly.Param.KeyConfigFinishHelp = String(Yanfly.Parameters['Finish Help']); +Yanfly.Param.KeyConfigAssignColor = Number(Yanfly.Parameters['Assigned Color']); +Yanfly.Param.KeyConfigActionColor = Number(Yanfly.Parameters['Action Color']); +Yanfly.Param.KeyConfigClearTx = String(Yanfly.Parameters['Clear Text']); +Yanfly.Param.KeyConfigOkKey = String(Yanfly.Parameters['OK Key']); +Yanfly.Param.KeyConfigOkTx = String(Yanfly.Parameters['OK Text']); +Yanfly.Param.KeyConfigEscKey = String(Yanfly.Parameters['Escape Key']); +Yanfly.Param.KeyConfigEscTx = String(Yanfly.Parameters['Escape Text']); +Yanfly.Param.KeyConfigCancelKey = String(Yanfly.Parameters['Cancel Key']); +Yanfly.Param.KeyConfigCancelTx = String(Yanfly.Parameters['Cancel Text']); +Yanfly.Param.KeyConfigMenuKey = String(Yanfly.Parameters['Menu Key']); +Yanfly.Param.KeyConfigMenuTx = String(Yanfly.Parameters['Menu Text']); +Yanfly.Param.KeyConfigShiftKey = String(Yanfly.Parameters['Shift Key']); +Yanfly.Param.KeyConfigShiftTx = String(Yanfly.Parameters['Shift Text']); +Yanfly.Param.KeyConfigPageUpKey = String(Yanfly.Parameters['PageUp Key']); +Yanfly.Param.KeyConfigPageUpTx = String(Yanfly.Parameters['PageUp Text']); +Yanfly.Param.KeyConfigPageDnKey = String(Yanfly.Parameters['PageDown Key']); +Yanfly.Param.KeyConfigPageDnTx = String(Yanfly.Parameters['PageDown Text']); +Yanfly.Param.KeyConfigLeftKey = String(Yanfly.Parameters['Left Key']); +Yanfly.Param.KeyConfigLeftTx = String(Yanfly.Parameters['Left Text']); +Yanfly.Param.KeyConfigUpKey = String(Yanfly.Parameters['Up Key']); +Yanfly.Param.KeyConfigUpTx = String(Yanfly.Parameters['Up Text']); +Yanfly.Param.KeyConfigRightKey = String(Yanfly.Parameters['Right Key']); +Yanfly.Param.KeyConfigRightTx = String(Yanfly.Parameters['Right Text']); +Yanfly.Param.KeyConfigDownKey = String(Yanfly.Parameters['Down Key']); +Yanfly.Param.KeyConfigDownTx = String(Yanfly.Parameters['Down Text']); + +//============================================================================= +// ConfigManager +//============================================================================= + +ConfigManager.keyMapper = { + 9: 'tab', + 13: 'ok', + 16: 'shift', + 17: 'control', + 18: 'control', + 27: 'escape', + 32: 'ok', + 33: 'pageup', + 34: 'pagedown', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 45: 'escape', + 81: 'pageup', + 87: 'pagedown', + 88: 'escape', + 90: 'ok', + 96: 'escape', + 98: 'down', + 100: 'left', + 102: 'right', + 104: 'up', + 120: 'debug' +}; + +Yanfly.KeyConfig.ConfigManager_makeData = ConfigManager.makeData; +ConfigManager.makeData = function() { + var config = Yanfly.KeyConfig.ConfigManager_makeData.call(this); + config.keyMapper = this.keyMapper; + return config; +}; + +Yanfly.KeyConfig.ConfigManager_applyData = ConfigManager.applyData; +ConfigManager.applyData = function(config) { + Yanfly.KeyConfig.ConfigManager_applyData.call(this, config); + this.keyMapper = this.readKeyConfig(config, 'keyMapper'); + this.applyKeyConfig(); +}; + +ConfigManager.applyKeyConfig = function() { + Input.keyMapper = this.keyMapper; + Input.update(); + Input.clear(); +}; + +ConfigManager.readKeyConfig = function(config, name) { + var value = config[name]; + if (value !== undefined) { + return value; + } else { + return { + 9: 'tab', + 13: 'ok', + 16: 'shift', + 17: 'control', + 18: 'control', + 27: 'escape', + 32: 'ok', + 33: 'pageup', + 34: 'pagedown', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 45: 'escape', + 46: 'ok', + 35: 'escape', + 36: 'menu', + 81: 'pageup', + 87: 'pagedown', + 88: 'escape', + 90: 'ok', + 96: 'escape', + 98: 'down', + 100: 'left', + 102: 'right', + 104: 'up', + 120: 'debug' + }; + } +}; + +//============================================================================= +// Window_Options +//============================================================================= + +Yanfly.KeyConfig.Window_Options_addGeneralOptions = + Window_Options.prototype.addGeneralOptions; +Window_Options.prototype.addGeneralOptions = function() { + Yanfly.KeyConfig.Window_Options_addGeneralOptions.call(this); + this.addKeyConfigCommand(); +}; + +Window_Options.prototype.addKeyConfigCommand = function() { + if (Utils.isMobileDevice()) return; + this.addCommand(Yanfly.Param.KeyConfigName, 'keyConfig', true); +}; + +Yanfly.KeyConfig.Window_Options_drawItem = + Window_Options.prototype.drawItem; +Window_Options.prototype.drawItem = function(index) { + if (this.commandSymbol(index) === 'keyConfig') { + var rect = this.itemRectForText(index); + var text = this.commandName(index); + this.resetTextColor(); + this.changePaintOpacity(this.isCommandEnabled(index)); + this.drawText(text, rect.x, rect.y, rect.width, 'left'); + } else { + Yanfly.KeyConfig.Window_Options_drawItem.call(this, index); + } +}; + +Yanfly.KeyConfig.Window_Options_processOk = + Window_Options.prototype.processOk; +Window_Options.prototype.processOk = function() { + if (this.commandSymbol(this.index()) === 'keyConfig') { + Window_Command.prototype.processOk.call(this); + } else { + Yanfly.KeyConfig.Window_Options_processOk.call(this); + } +}; + +//============================================================================= +// Window_KeyConfig +//============================================================================= + +function Window_KeyConfig() { + this.initialize.apply(this, arguments); +}; + +Window_KeyConfig._keyLayout = [ + '~', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', ' ', 'Ins', + 'Home', 'PgUp', ' ', '#pD/', '*', '#pD-', ' ', 'Q', 'W', 'E', 'R', 'T', 'Y', + 'U', 'I', 'O', 'P', '[', ']', '\\', 'Del', 'End', 'PgDn', '#pD7', '#pD8', + '#pD9', '+', ' ', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', "'", + 'Enter', 'Enter', ' ', ' ', ' ', '#pD4', '#pD5', '#pD6', '+', 'Shift', + 'Shift', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', '.', '/', 'Shift', 'Shift', + ' ', '↑', ' ', '#pD1', '#pD2', '#pD3', 'En', ' ', ' ', ' ', 'Space', 'Space', + 'Space', 'Space', 'Space', 'Space', 'Space', ' ', ' ', ' ', ' ', '←', '↓', + '→', '#pD0', '#pD0', '#pD.', 'En' +]; + +Window_KeyConfig._refId = { + '~': 192, '0': 48, '1': 49, '2': 50, '3': 51, '4': 52, + '5': 53, '6': 54, '7': 55, '8': 56, '9': 57, '-': 189, + '=': 187, 'Ins': 45, 'Home': 36, 'PgUp': 33, '#pD/': 111, '*': 106, + '#pD-': 109, 'Q': 81, 'W': 87, 'E': 69, 'R': 82, 'T': 84, + 'Y': 89, 'U': 85, 'I': 73, 'O': 79, 'P': 80, '[': 219, + ']': 221, '\\': 220, 'Del': 46, 'End': 35, 'PgDn': 34, '#pD7': 103, + '#pD8': 104, '#pD9': 105, '+': 107, 'A': 65, 'S': 83, 'D': 68, + 'F': 70, 'G': 71, 'H': 72, 'J': 74, 'K': 75, 'L': 76, + ';': 186, "'": 222, 'Enter': 13, '#pD4': 100, '#pD5': 101, '#pD6': 102, + 'Shift': 16, 'Z': 90, 'X': 88, 'C': 67, 'V': 86, 'B': 66, + 'N': 78, 'M': 77, ',': 188, '.': 190, '/': 191, 'Shift': 16, + '↑': 38, '#pD1': 97, '#pD2': 98, '#pD3': 99, 'En': 13, 'Space': 32, + '←': 37, '↓': 40, '→': 39, '#pD0': 96, '#pD.': 110 +}; + +Window_KeyConfig.prototype = Object.create(Window_Command.prototype); +Window_KeyConfig.prototype.constructor = Window_KeyConfig; + +Window_KeyConfig.prototype.initialize = function(helpWindow) { + var wy = helpWindow.height; + Window_Command.prototype.initialize.call(this, 0, wy); + this.setHelpWindow(helpWindow); + this.height = Graphics.boxHeight - wy; + this.refresh(); + this.activate(); + this.select(0); +}; + +Window_KeyConfig.prototype.windowWidth = function() { + return Graphics.boxWidth; +}; + +Window_KeyConfig.prototype.maxCols = function() { + return 21; +}; + +Window_KeyConfig.prototype.spacing = function() { + return 1; +}; + +Window_KeyConfig.prototype.itemHeight = function() { + return this.lineHeight() * 2; +}; + +Window_KeyConfig.prototype.itemTextAlign = function() { + return 'center'; +}; + +Window_KeyConfig.prototype.makeCommandList = function(index) { + for (var i = 0; i < Window_KeyConfig._keyLayout.length; ++i) { + var keyName = Window_KeyConfig._keyLayout[i]; + var enabled = this.isKeyEnabled(keyName); + this.addCommand(keyName, 'key', enabled); + } + this.addCommand(Yanfly.Param.KeyConfigDefaultTx, 'default', true); + for (var i = 0; i < 6; ++i) this.addCommand(' ', 'default', true); + this.addCommand(Yanfly.Param.KeyConfigWasdTx, 'wasd', true); + for (var i = 0; i < 6; ++i) this.addCommand(' ', 'wasd', true); + this.addCommand(Yanfly.Param.KeyConfigFinishTx, 'cancel', true); + for (var i = 0; i < 6; ++i) this.addCommand(' ', 'cancel', true); +}; + +Window_KeyConfig.prototype.isKeyEnabled = function(keyName) { + return !([' ', 'Enter', 'En', '↑', '←', '↓', '→'].contains(keyName)); +}; + +Window_KeyConfig.prototype.itemRect = function(index) { + var rect = Window_Selectable.prototype.itemRect.call(this, index); + var maxCols = this.maxCols(); + if ([41, 62].contains(index)) { + rect.y = Math.floor(41 / maxCols) * rect.height - this._scrollY; + rect.height = this.itemHeight() * 2; + } else if ([54, 55].contains(index)) { + rect.x = 54 % maxCols * (rect.width + this.spacing()) - this._scrollX; + rect.width = (this.itemWidth() + this.spacing()) * 2 - this.spacing(); + } else if ([63, 64].contains(index)) { + rect.x = 63 % maxCols * (rect.width + this.spacing()) - this._scrollX; + rect.width = (this.itemWidth() + this.spacing()) * 2 - this.spacing(); + } else if ([75, 76].contains(index)) { + rect.x = 75 % maxCols * (rect.width + this.spacing()) - this._scrollX; + rect.width = (this.itemWidth() + this.spacing()) * 2 - this.spacing(); + } else if ([83, 104].contains(index)) { + rect.y = Math.floor(83 / maxCols) * rect.height - this._scrollY; + rect.height = this.itemHeight() * 2; + } else if ([87, 88, 89, 90, 91, 92, 93].contains(index)) { + rect.x = 87 % maxCols * (rect.width + this.spacing()) - this._scrollX; + rect.width = (this.itemWidth() + this.spacing()) * 7 - this.spacing(); + } else if ([101, 102].contains(index)) { + rect.x = 101 % maxCols * (rect.width + this.spacing()) - this._scrollX; + rect.width = (this.itemWidth() + this.spacing()) * 2 - this.spacing(); + } else if ([105, 106, 107, 108, 109, 110, 111].contains(index)) { + rect.x = 105 % maxCols * (rect.width + this.spacing()) - this._scrollX; + rect.width = (this.itemWidth() + this.spacing()) * 7 - this.spacing(); + } else if ([112, 113, 114, 115, 116, 117, 118].contains(index)) { + rect.x = 112 % maxCols * (rect.width + this.spacing()) - this._scrollX; + rect.width = (this.itemWidth() + this.spacing()) * 7 - this.spacing(); + } else if ([119, 120, 121, 122, 123, 124, 125].contains(index)) { + rect.x = 119 % maxCols * (rect.width + this.spacing()) - this._scrollX; + rect.width = (this.itemWidth() + this.spacing()) * 7 - this.spacing(); + } + rect.y += Math.max(0, (this.contents.height - this.lineHeight() * 12) / 2); + return rect; +}; + +Window_KeyConfig.prototype.leaveEmpty = function(index) { + return [55, 56, 57, 58, 62, 64, 76, 77, 79, 84, 85, 86, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 102, 104, 106, 107, 108, 109, 110, 111, 113, 114, + 115, 116, 117, 118, 120, 121, 122, 123, 124, 125].contains(index); +}; + +Window_KeyConfig.prototype.drawItem = function(index) { + if (this.leaveEmpty(index)) return; + this.drawItemRect(index); + this.drawItemKey(index); + this.drawItemAction(index); +}; + +Window_KeyConfig.prototype.drawItemRect = function(index) { + var rect = this.itemRect(index); + var color = this.getRectColor(index); + this.drawRect(rect.x+1, rect.y+1, rect.width-2, rect.height-2, color); +}; + +Window_KeyConfig.prototype.getRectColor = function(index) { + if (index > 104) return this.gaugeBackColor(); + var key = Window_KeyConfig._refId[this.commandName(index)]; + var action = Input.keyMapper[key]; + if (action !== undefined) { + return this.textColor(Yanfly.Param.KeyConfigAssignColor); + } else { + return this.gaugeBackColor(); + } +}; + +Window_KeyConfig.prototype.drawRect = function(dx, dy, dw, dh, color) { + this.changePaintOpacity(false); + this.contents.fillRect(dx, dy, dw, dh, color); + this.changePaintOpacity(true); +}; + +Window_KeyConfig.prototype.drawItemKey = function(index) { + this.resetFontSettings(); + this.contents.fontSize -= 8; + this.resetTextColor(); + this.changePaintOpacity(true); + var rect = this.itemRectForText(index); + var align = this.itemTextAlign(); + this.drawText(this.visualName(index), rect.x, rect.y, rect.width, align); +}; + +Window_KeyConfig.prototype.visualName = function(index) { + var text = this._list[index].name; + text = text.replace(/#pD/gi, '' ); + return text; +}; + +Window_KeyConfig.prototype.drawItemAction = function(index) { + var key = Window_KeyConfig._refId[this.commandName(index)]; + var action = Input.keyMapper[key]; + if (action === undefined) return; + this.resetFontSettings(); + this.contents.fontSize -= 8; + var color = this.textColor(Yanfly.Param.KeyConfigActionColor); + this.changeTextColor(color); + this.changePaintOpacity(true); + var rect = this.itemRectForText(index); + rect.y += this.lineHeight(); + var align = this.itemTextAlign(); + this.drawText(this.actionKey(action), rect.x, rect.y, rect.width, align); +}; + +Window_KeyConfig.prototype.actionKey = function(action) { + switch(action) { + case 'ok': + return Yanfly.Param.KeyConfigOkKey; + break; + case 'escape': + return Yanfly.Param.KeyConfigEscKey; + break; + case 'cancel': + return Yanfly.Param.KeyConfigCancelKey; + break; + case 'menu': + return Yanfly.Param.KeyConfigMenuKey; + break; + case 'shift': + return Yanfly.Param.KeyConfigShiftKey; + break; + case 'pageup': + return Yanfly.Param.KeyConfigPageUpKey; + break; + case 'pagedown': + return Yanfly.Param.KeyConfigPageDnKey; + break; + case 'left': + return Yanfly.Param.KeyConfigLeftKey; + break; + case 'up': + return Yanfly.Param.KeyConfigUpKey; + break; + case 'right': + return Yanfly.Param.KeyConfigRightKey; + break; + case 'down': + return Yanfly.Param.KeyConfigDownKey; + break; + } +}; + +Window_KeyConfig.prototype.cursorDown = function(wrap) { + var index = this.index(); + if (index >= 105) { + this.select(index - 104); + } else if ([41, 62].contains(index)) { + this.select(83); + } else if ([83, 104].contains(index)) { + this.select(125); + } else { + Window_Command.prototype.cursorDown.call(this, wrap); + } +}; + +Window_KeyConfig.prototype.cursorUp = function(wrap) { + var index = this.index(); + if (index === 0) { + this.select(125); + } else if (index <= 20) { + this.select(index + 104); + } else if ([41, 62].contains(index)) { + this.select(20); + } else if ([83, 104].contains(index)) { + this.select(41); + } else { + Window_Command.prototype.cursorUp.call(this, wrap); + } +}; + +Window_KeyConfig.prototype.cursorRight = function(wrap) { + var index = this.index(); + if ([54, 55].contains(index)) { + this.select(56); + } else if ([63, 64].contains(index)) { + this.select(65); + } else if ([75, 76].contains(index)) { + this.select(77); + } else if ([87, 88, 89, 90, 91, 92, 93].contains(index)) { + this.select(94); + } else if ([101, 102].contains(index)) { + this.select(103); + } else if ([105, 106, 107, 108, 109, 110, 111].contains(index)) { + this.select(112); + } else if ([112, 113, 114, 115, 116, 117, 118].contains(index)) { + this.select(119); + } else if ([119, 120, 121, 122, 123, 124, 125].contains(index)) { + this.select(0); + } else { + Window_Command.prototype.cursorRight.call(this, wrap); + } +}; + +Window_KeyConfig.prototype.cursorLeft = function(wrap) { + var index = this.index(); + if (index === 0) { + this.select(125); + } else if ([54, 55].contains(index)) { + this.select(53); + } else if ([63, 64].contains(index)) { + this.select(62); + } else if ([75, 76].contains(index)) { + this.select(74); + } else if ([87, 88, 89, 90, 91, 92, 93].contains(index)) { + this.select(86); + } else if ([101, 102].contains(index)) { + this.select(100); + } else if ([105, 106, 107, 108, 109, 110, 111].contains(index)) { + this.select(104); + } else if ([112, 113, 114, 115, 116, 117, 118].contains(index)) { + this.select(111); + } else if ([119, 120, 121, 122, 123, 124, 125].contains(index)) { + this.select(118); + } else { + Window_Command.prototype.cursorLeft.call(this, wrap); + } +}; + +Window_KeyConfig.prototype.updateHelp = function() { + if (!this._helpWindow) return; + switch (this.currentSymbol()) { + case 'key': + this._helpWindow.setText(Yanfly.Param.KeyConfigKeyHelp); + break; + case 'default': + this._helpWindow.setText(Yanfly.Param.KeyConfigDefaultHelp); + break; + case 'wasd': + this._helpWindow.setText(Yanfly.Param.KeyConfigWasdHelp); + break; + case 'cancel': + this._helpWindow.setText(Yanfly.Param.KeyConfigFinishHelp); + break; + default: + this._helpWindow.clear(); + break; + } +}; + +//============================================================================= +// Window_KeyAction +//============================================================================= + +function Window_KeyAction() { + this.initialize.apply(this, arguments); +}; + +Window_KeyAction.prototype = Object.create(Window_Command.prototype); +Window_KeyAction.prototype.constructor = Window_KeyAction; + +Window_KeyAction.prototype.initialize = function() { + Window_Command.prototype.initialize.call(this, 0, 0); + this.x = (Graphics.boxWidth - this.width) / 2; + this.y = (Graphics.boxHeight - this.height) / 2; + this.openness = 0; + this.deactivate(); +}; + +Window_KeyAction.prototype.makeCommandList = function() { + this.addCommand(Yanfly.Param.KeyConfigClearTx, 'ok', true, 'clear'); + this.addCommand(Yanfly.Param.KeyConfigOkTx, 'ok', true, 'ok'); + this.addCommand(Yanfly.Param.KeyConfigEscTx, 'ok', true, 'escape'); + this.addCommand(Yanfly.Param.KeyConfigCancelTx, 'ok', true, 'cancel'); + this.addCommand(Yanfly.Param.KeyConfigMenuTx, 'ok', true, 'menu'); + this.addCommand(Yanfly.Param.KeyConfigShiftTx, 'ok', true, 'shift'); + this.addCommand(Yanfly.Param.KeyConfigPageUpTx, 'ok', true, 'pageup'); + this.addCommand(Yanfly.Param.KeyConfigPageDnTx, 'ok', true, 'pagedown'); + this.addCommand(Yanfly.Param.KeyConfigLeftTx, 'ok', true, 'left'); + this.addCommand(Yanfly.Param.KeyConfigUpTx, 'ok', true, 'up'); + this.addCommand(Yanfly.Param.KeyConfigRightTx, 'ok', true, 'right'); + this.addCommand(Yanfly.Param.KeyConfigDownTx, 'ok', true, 'down'); +}; + +//============================================================================= +// Scene_Options +//============================================================================= + +Yanfly.KeyConfig.Scene_Options_createOptionsWindow = + Scene_Options.prototype.createOptionsWindow; +Scene_Options.prototype.createOptionsWindow = function() { + Yanfly.KeyConfig.Scene_Options_createOptionsWindow.call(this); + this._optionsWindow.setHandler('keyConfig', this.commandKeyConfig.bind(this)); +}; + +Scene_Options.prototype.commandKeyConfig = function() { + SceneManager.push(Scene_KeyConfig); +}; + +//============================================================================= +// Scene_KeyConfig +//============================================================================= + +function Scene_KeyConfig() { + this.initialize.apply(this, arguments); +} + +Scene_KeyConfig.prototype = Object.create(Scene_MenuBase.prototype); +Scene_KeyConfig.prototype.constructor = Scene_KeyConfig; + +Scene_KeyConfig.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_KeyConfig.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + this.createHelpWindow(); + this.createKeyConfigWindow(); + this.createKeyActionWindow(); +}; + +Scene_KeyConfig.prototype.terminate = function() { + Scene_MenuBase.prototype.terminate.call(this); + ConfigManager.save(); +}; + +Scene_KeyConfig.prototype.refreshWindows = function() { + this._configWindow.refresh(); + this._configWindow.activate(); + ConfigManager.save(); +}; + +Scene_KeyConfig.prototype.createKeyConfigWindow = function() { + this._configWindow = new Window_KeyConfig(this._helpWindow); + this._configWindow.setHandler('default', this.commandDefault.bind(this)); + this._configWindow.setHandler('wasd', this.commandWasd.bind(this)); + this._configWindow.setHandler('cancel', this.popScene.bind(this)); + this._configWindow.setHandler('key', this.commandKey.bind(this)); + this.addWindow(this._configWindow); +}; + +Scene_KeyConfig.prototype.createKeyActionWindow = function() { + this._actionWindow = new Window_KeyAction(); + this._actionWindow.setHandler('ok', this.onActionOk.bind(this)); + this._actionWindow.setHandler('cancel', this.onActionCancel.bind(this)); + this.addWindow(this._actionWindow); +}; + +Scene_KeyConfig.prototype.commandDefault = function() { + ConfigManager.keyMapper = { + 9: 'tab', + 13: 'ok', + 16: 'shift', + 17: 'control', + 18: 'control', + 27: 'escape', + 32: 'ok', + 33: 'pageup', + 34: 'pagedown', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 45: 'escape', + 46: 'ok', + 35: 'escape', + 36: 'menu', + 81: 'pageup', + 87: 'pagedown', + 88: 'escape', + 90: 'ok', + 96: 'escape', + 98: 'down', + 100: 'left', + 102: 'right', + 104: 'up', + 120: 'debug' + }; + ConfigManager.applyKeyConfig(); + this.refreshWindows(); +}; + +Scene_KeyConfig.prototype.commandWasd = function() { + ConfigManager.keyMapper = { + 9: 'tab', + 13: 'ok', + 16: 'shift', + 17: 'control', + 18: 'control', + 27: 'escape', + 32: 'ok', + 33: 'pageup', + 34: 'pagedown', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 87: 'up', + 65: 'left', + 83: 'down', + 68: 'right', + 74: 'ok', + 75: 'escape', + 77: 'menu', + 219: 'pageup', + 221: 'pagedown', + 45: 'escape', + 46: 'ok', + 35: 'escape', + 36: 'menu', + 96: 'escape', + 98: 'down', + 100: 'left', + 102: 'right', + 104: 'up', + 120: 'debug' + }; + ConfigManager.applyKeyConfig(); + this.refreshWindows(); +}; + +Scene_KeyConfig.prototype.commandKey = function() { + this._actionWindow.select(0); + this._actionWindow.open(); + this._actionWindow.activate(); +}; + +Scene_KeyConfig.prototype.onActionCancel = function() { + this._actionWindow.close(); + this._actionWindow.deactivate(); + this._configWindow.activate(); +}; + +Scene_KeyConfig.prototype.onActionOk = function() { + var action = this._actionWindow.currentExt(); + var name = this._configWindow.commandName(this._configWindow.index()); + var key = Window_KeyConfig._refId[name]; + if (action === 'clear') { + ConfigManager.keyMapper[key] = undefined; + } else { + ConfigManager.keyMapper[key] = action; + } + SoundManager.playEquip(); + ConfigManager.applyKeyConfig(); + this.onActionCancel(); + this.refreshWindows(); +}; + +//============================================================================= +// End of File +//============================================================================= diff --git a/js/plugins/SmartPath.js b/js/plugins/SmartPath.js new file mode 100644 index 0000000..7124cb1 --- /dev/null +++ b/js/plugins/SmartPath.js @@ -0,0 +1,107 @@ +//============================================================================= +// Smart Pathfinding +// by Shaz +// Last Updated: 2015.10.21 +//============================================================================= + +/*: + * @plugindesc Allows events or players to do smart Pathfinding + * @author Shaz + * + * @help + * + * Plugin Command: + * SmartPath eventId1 eventId2 # Makes event 1 find path to event 2 + * SmartPath eventId x y # Makes event find a path to location x, y + * SmartPath eventId cancel # Cancel Pathfinding for event + * + * event = number for specific event + * event = 0 for "this" event + * event = -1 for player + * event = $gameVariables.value(x) to get the event id from variable x + * + * x, y = coordinates or $gameVariables.value(#) to use a variable coordinate + * + */ +/*:ja + * @plugindesc イベントもしくはプレイヤーに、高度な経路探索を提供します。 + * @author Shaz + * + * @help + * + * Plugin Command: + * SmartPath eventId1 eventId2 # + * イベント1に、イベント2までの経路を探索させます。 + * SmartPath eventId x y # + * イベントに、(x, y)までの経路を探索させます。 + * SmartPath eventId cancel # + * イベントの経路探索を中止させます。 + * + * event = 0 →このイベント + * event = -1 →プレイヤー + * event = $gameVariables.value(x) →xからイベントIDを取得 + * + * x, y = coordinates or $gameVariables.value(#) →好きな座標を指定 + * + */ + +(function() { + var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; + Game_Interpreter.prototype.pluginCommand = function(command, args) { + _Game_Interpreter_pluginCommand.call(this, command, args); + + if (command.toUpperCase() === 'SMARTPATH') { + subject = this.character(eval(args[0])); + if (args[1].toUpperCase() === 'CANCEL') { + subject.clearTarget(); + } else if (args.length > 2) { + subject.setTarget(null, eval(args[1]), eval(args[2])); + } else { + subject.setTarget(this.character(eval(args[1]))); + } + } + }; + + var _Game_CharacterBase_initMembers = Game_CharacterBase.prototype.initMembers; + Game_CharacterBase.prototype.initMembers = function() { + _Game_CharacterBase_initMembers.call(this); + this._target = null; + this._targetX = null; + this._targetY = null; + }; + + Game_CharacterBase.prototype.setTarget = function(target, targetX, targetY) { + this._target = target; + if (this._target) { + this._targetX = this._target.x; + this._targetY = this._target.y; + } else { + this._targetX = targetX; + this._targetY = targetY; + } + }; + + Game_CharacterBase.prototype.clearTarget = function() { + this._target = null; + this._targetX = null; + this._targetY = null; + }; + + var _Game_CharacterBase_updateStop = Game_CharacterBase.prototype.updateStop; + Game_CharacterBase.prototype.updateStop = function() { + _Game_CharacterBase_updateStop.call(this); + + if (this._target) { + this._targetX = this._target.x; + this._targetY = this._target.y; + } + + if (this._targetX != null) { + direction = this.findDirectionTo(this._targetX, this._targetY); + if (direction > 0) + { + this.moveStraight(direction); + } + } + }; +})(); diff --git a/js/rpg_core.js b/js/rpg_core.js new file mode 100644 index 0000000..d68242d --- /dev/null +++ b/js/rpg_core.js @@ -0,0 +1,7857 @@ +//============================================================================= +// rpg_core.js v1.2.0 +//============================================================================= + +//----------------------------------------------------------------------------- +/** + * This is not a class, but contains some methods that will be added to the + * standard Javascript objects. + * + * @class JsExtensions + */ +function JsExtensions() { + throw new Error('This is not a class'); +} + +/** + * Returns a number whose value is limited to the given range. + * + * @method Number.prototype.clamp + * @param {Number} min The lower boundary + * @param {Number} max The upper boundary + * @return {Number} A number in the range (min, max) + */ +Number.prototype.clamp = function(min, max) { + return Math.min(Math.max(this, min), max); +}; + +/** + * Returns a modulo value which is always positive. + * + * @method Number.prototype.mod + * @param {Number} n The divisor + * @return {Number} A modulo value + */ +Number.prototype.mod = function(n) { + return ((this % n) + n) % n; +}; + +/** + * Replaces %1, %2 and so on in the string to the arguments. + * + * @method String.prototype.format + * @param {Any} ...args The objects to format + * @return {String} A formatted string + */ +String.prototype.format = function() { + var args = arguments; + return this.replace(/%([0-9]+)/g, function(s, n) { + return args[Number(n) - 1]; + }); +}; + +/** + * Makes a number string with leading zeros. + * + * @method String.prototype.padZero + * @param {Number} length The length of the output string + * @return {String} A string with leading zeros + */ +String.prototype.padZero = function(length){ + var s = this; + while (s.length < length) { + s = '0' + s; + } + return s; +}; + +/** + * Makes a number string with leading zeros. + * + * @method Number.prototype.padZero + * @param {Number} length The length of the output string + * @return {String} A string with leading zeros + */ +Number.prototype.padZero = function(length){ + return String(this).padZero(length); +}; + +/** + * Checks whether the two arrays are same. + * + * @method Array.prototype.equals + * @param {Array} array The array to compare to + * @return {Boolean} True if the two arrays are same + */ +Array.prototype.equals = function(array) { + if (!array || this.length !== array.length) { + return false; + } + for (var i = 0; i < this.length; i++) { + if (this[i] instanceof Array && array[i] instanceof Array) { + if (!this[i].equals(array[i])) { + return false; + } + } else if (this[i] !== array[i]) { + return false; + } + } + return true; +}; + +/** + * Makes a shallow copy of the array. + * + * @method Array.prototype.clone + * @return {Array} A shallow copy of the array + */ +Array.prototype.clone = function() { + return this.slice(0); +}; + +/** + * Checks whether the array contains a given element. + * + * @method Array.prototype.contains + * @param {Any} element The element to search for + * @return {Boolean} True if the array contains a given element + */ +Array.prototype.contains = function(element) { + return this.indexOf(element) >= 0; +}; + +/** + * Checks whether the string contains a given string. + * + * @method String.prototype.contains + * @param {String} string The string to search for + * @return {Boolean} True if the string contains a given string + */ +String.prototype.contains = function(string) { + return this.indexOf(string) >= 0; +}; + +/** + * Generates a random integer in the range (0, max-1). + * + * @static + * @method Math.randomInt + * @param {Number} max The upper boundary (excluded) + * @return {Number} A random integer + */ +Math.randomInt = function(max) { + return Math.floor(max * Math.random()); +}; + +//----------------------------------------------------------------------------- +/** + * The static class that defines utility methods. + * + * @class Utils + */ +function Utils() { + throw new Error('This is a static class'); +} + +/** + * The name of the RPG Maker. 'MV' in the current version. + * + * @static + * @property RPGMAKER_NAME + * @type String + * @final + */ +Utils.RPGMAKER_NAME = 'MV'; + +/** + * The version of the RPG Maker. + * + * @static + * @property RPGMAKER_VERSION + * @type String + * @final + */ +Utils.RPGMAKER_VERSION = "1.2.0"; + +/** + * Checks whether the option is in the query string. + * + * @static + * @method isOptionValid + * @param {String} name The option name + * @return {Boolean} True if the option is in the query string + */ +Utils.isOptionValid = function(name) { + return location.search.slice(1).split('&').contains(name); +}; + +/** + * Checks whether the platform is NW.js. + * + * @static + * @method isNwjs + * @return {Boolean} True if the platform is NW.js + */ +Utils.isNwjs = function() { + return typeof require === 'function' && typeof process === 'object'; +}; + +/** + * Checks whether the platform is a mobile device. + * + * @static + * @method isMobileDevice + * @return {Boolean} True if the platform is a mobile device + */ +Utils.isMobileDevice = function() { + var r = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i; + return !!navigator.userAgent.match(r); +}; + +/** + * Checks whether the browser is Mobile Safari. + * + * @static + * @method isMobileSafari + * @return {Boolean} True if the browser is Mobile Safari + */ +Utils.isMobileSafari = function() { + var agent = navigator.userAgent; + return !!(agent.match(/iPhone|iPad|iPod/) && agent.match(/AppleWebKit/) && + !agent.match('CriOS')); +}; + +/** + * Checks whether the browser is Android Chrome. + * + * @static + * @method isAndroidChrome + * @return {Boolean} True if the browser is Android Chrome + */ +Utils.isAndroidChrome = function() { + var agent = navigator.userAgent; + return !!(agent.match(/Android/) && agent.match(/Chrome/)); +}; + +/** + * Checks whether the browser can read files in the game folder. + * + * @static + * @method canReadGameFiles + * @return {Boolean} True if the browser can read files in the game folder + */ +Utils.canReadGameFiles = function() { + var scripts = document.getElementsByTagName('script'); + var lastScript = scripts[scripts.length - 1]; + var xhr = new XMLHttpRequest(); + try { + xhr.open('GET', lastScript.src); + xhr.overrideMimeType('text/javascript'); + xhr.send(); + return true; + } catch (e) { + return false; + } +}; + +/** + * Makes a CSS color string from RGB values. + * + * @static + * @method rgbToCssColor + * @param {Number} r The red value in the range (0, 255) + * @param {Number} g The green value in the range (0, 255) + * @param {Number} b The blue value in the range (0, 255) + * @return {String} CSS color string + */ +Utils.rgbToCssColor = function(r, g, b) { + r = Math.round(r); + g = Math.round(g); + b = Math.round(b); + return 'rgb(' + r + ',' + g + ',' + b + ')'; +}; + +//----------------------------------------------------------------------------- +/** + * The point class. + * + * @class Point + * @constructor + * @param {Number} x The x coordinate + * @param {Number} y The y coordinate + */ +function Point() { + this.initialize.apply(this, arguments); +} + +Point.prototype = Object.create(PIXI.Point.prototype); +Point.prototype.constructor = Point; + +Point.prototype.initialize = function(x, y) { + PIXI.Point.call(this, x, y); +}; + +/** + * The x coordinate. + * + * @property x + * @type Number + */ + +/** + * The y coordinate. + * + * @property y + * @type Number + */ + +//----------------------------------------------------------------------------- +/** + * The rectangle class. + * + * @class Rectangle + * @constructor + * @param {Number} x The x coordinate for the upper-left corner + * @param {Number} y The y coordinate for the upper-left corner + * @param {Number} width The width of the rectangle + * @param {Number} height The height of the rectangle + */ +function Rectangle() { + this.initialize.apply(this, arguments); +} + +Rectangle.prototype = Object.create(PIXI.Rectangle.prototype); +Rectangle.prototype.constructor = Rectangle; + +Rectangle.prototype.initialize = function(x, y, width, height) { + PIXI.Rectangle.call(this, x, y, width, height); +}; + +/** + * @static + * @property emptyRectangle + * @type Rectangle + * @private + */ +Rectangle.emptyRectangle = new Rectangle(0, 0, 0, 0); + +/** + * The x coordinate for the upper-left corner. + * + * @property x + * @type Number + */ + +/** + * The y coordinate for the upper-left corner. + * + * @property y + * @type Number + */ + +/** + * The width of the rectangle. + * + * @property width + * @type Number + */ + +/** + * The height of the rectangle. + * + * @property height + * @type Number + */ + +//----------------------------------------------------------------------------- +/** + * The basic object that represents an image. + * + * @class Bitmap + * @constructor + * @param {Number} width The width of the bitmap + * @param {Number} height The height of the bitmap + */ +function Bitmap() { + this.initialize.apply(this, arguments); +} + +Bitmap.prototype.initialize = function(width, height) { + this._canvas = document.createElement('canvas'); + this._context = this._canvas.getContext('2d'); + this._canvas.width = Math.max(width || 0, 1); + this._canvas.height = Math.max(height || 0, 1); + this._baseTexture = new PIXI.BaseTexture(this._canvas); + this._baseTexture.scaleMode = PIXI.scaleModes.NEAREST; + this._image = null; + this._url = ''; + this._paintOpacity = 255; + this._smooth = false; + this._loadListeners = []; + this._isLoading = false; + this._hasError = false; + + /** + * The face name of the font. + * + * @property fontFace + * @type String + */ + this.fontFace = 'GameFont'; + + /** + * The size of the font in pixels. + * + * @property fontSize + * @type Number + */ + this.fontSize = 28; + + /** + * Whether the font is italic. + * + * @property fontItalic + * @type Boolean + */ + this.fontItalic = false; + + /** + * The color of the text in CSS format. + * + * @property textColor + * @type String + */ + this.textColor = '#ffffff'; + + /** + * The color of the outline of the text in CSS format. + * + * @property outlineColor + * @type String + */ + this.outlineColor = 'rgba(0, 0, 0, 0.5)'; + + /** + * The width of the outline of the text. + * + * @property outlineWidth + * @type Number + */ + this.outlineWidth = 4; +}; + +/** + * Loads a image file and returns a new bitmap object. + * + * @static + * @method load + * @param {String} url The image url of the texture + * @return Bitmap + */ +Bitmap.load = function(url) { + var bitmap = new Bitmap(); + bitmap._image = new Image(); + bitmap._image.src = url; + bitmap._image.onload = Bitmap.prototype._onLoad.bind(bitmap); + bitmap._image.onerror = Bitmap.prototype._onError.bind(bitmap); + bitmap._url = url; + bitmap._isLoading = true; + return bitmap; +}; + +/** + * Takes a snapshot of the game screen and returns a new bitmap object. + * + * @static + * @method snap + * @param {Stage} stage The stage object + * @return Bitmap + */ +Bitmap.snap = function(stage) { + var width = Graphics.width; + var height = Graphics.height; + var bitmap = new Bitmap(width, height); + var context = bitmap._context; + var renderTexture = new PIXI.RenderTexture(width, height); + if (stage) { + renderTexture.render(stage); + stage.worldTransform.identity(); + } + if (Graphics.isWebGL()) { + var gl = renderTexture.renderer.gl; + var webGLPixels = new Uint8Array(4 * width * height); + gl.bindFramebuffer(gl.FRAMEBUFFER, renderTexture.textureBuffer.frameBuffer); + gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, webGLPixels); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + var canvasData = context.getImageData(0, 0, width, height); + canvasData.data.set(webGLPixels); + context.putImageData(canvasData, 0, 0); + } else { + context.drawImage(renderTexture.textureBuffer.canvas, 0, 0); + } + bitmap._setDirty(); + return bitmap; +}; + +/** + * Checks whether the bitmap is ready to render. + * + * @method isReady + * @return {Boolean} True if the bitmap is ready to render + */ +Bitmap.prototype.isReady = function() { + return !this._isLoading; +}; + +/** + * Checks whether a loading error has occurred. + * + * @method isError + * @return {Boolean} True if a loading error has occurred + */ +Bitmap.prototype.isError = function() { + return this._hasError; +}; + +/** + * [read-only] The url of the image file. + * + * @property url + * @type String + */ +Object.defineProperty(Bitmap.prototype, 'url', { + get: function() { + return this._url; + }, + configurable: true +}); + +/** + * [read-only] The base texture that holds the image. + * + * @property baseTexture + * @type PIXI.BaseTexture + */ +Object.defineProperty(Bitmap.prototype, 'baseTexture', { + get: function() { + return this._baseTexture; + }, + configurable: true +}); + +/** + * [read-only] The bitmap canvas. + * + * @property canvas + * @type HTMLCanvasElement + */ +Object.defineProperty(Bitmap.prototype, 'canvas', { + get: function() { + return this._canvas; + }, + configurable: true +}); + +/** + * [read-only] The 2d context of the bitmap canvas. + * + * @property context + * @type CanvasRenderingContext2D + */ +Object.defineProperty(Bitmap.prototype, 'context', { + get: function() { + return this._context; + }, + configurable: true +}); + +/** + * [read-only] The width of the bitmap. + * + * @property width + * @type Number + */ +Object.defineProperty(Bitmap.prototype, 'width', { + get: function() { + return this._isLoading ? 0 : this._canvas.width; + }, + configurable: true +}); + +/** + * [read-only] The height of the bitmap. + * + * @property height + * @type Number + */ +Object.defineProperty(Bitmap.prototype, 'height', { + get: function() { + return this._isLoading ? 0 : this._canvas.height; + }, + configurable: true +}); + +/** + * [read-only] The rectangle of the bitmap. + * + * @property rect + * @type Rectangle + */ +Object.defineProperty(Bitmap.prototype, 'rect', { + get: function() { + return new Rectangle(0, 0, this.width, this.height); + }, + configurable: true +}); + +/** + * Whether the smooth scaling is applied. + * + * @property smooth + * @type Boolean + */ +Object.defineProperty(Bitmap.prototype, 'smooth', { + get: function() { + return this._smooth; + }, + set: function(value) { + if (this._smooth !== value) { + this._smooth = value; + if (this._smooth) { + this._baseTexture.scaleMode = PIXI.scaleModes.LINEAR; + } else { + this._baseTexture.scaleMode = PIXI.scaleModes.NEAREST; + } + } + }, + configurable: true +}); + +/** + * The opacity of the drawing object in the range (0, 255). + * + * @property paintOpacity + * @type Number + */ +Object.defineProperty(Bitmap.prototype, 'paintOpacity', { + get: function() { + return this._paintOpacity; + }, + set: function(value) { + if (this._paintOpacity !== value) { + this._paintOpacity = value; + this._context.globalAlpha = this._paintOpacity / 255; + } + }, + configurable: true +}); + +/** + * Resizes the bitmap. + * + * @method resize + * @param {Number} width The new width of the bitmap + * @param {Number} height The new height of the bitmap + */ +Bitmap.prototype.resize = function(width, height) { + width = Math.max(width || 0, 1); + height = Math.max(height || 0, 1); + this._canvas.width = width; + this._canvas.height = height; + this._baseTexture.width = width; + this._baseTexture.height = height; +}; + +/** + * Performs a block transfer. + * + * @method blt + * @param {Bitmap} source The bitmap to draw + * @param {Number} sx The x coordinate in the source + * @param {Number} sy The y coordinate in the source + * @param {Number} sw The width of the source image + * @param {Number} sh The height of the source image + * @param {Number} dx The x coordinate in the destination + * @param {Number} dy The y coordinate in the destination + * @param {Number} [dw=sw] The width to draw the image in the destination + * @param {Number} [dh=sh] The height to draw the image in the destination + */ +Bitmap.prototype.blt = function(source, sx, sy, sw, sh, dx, dy, dw, dh) { + dw = dw || sw; + dh = dh || sh; + if (sx >= 0 && sy >= 0 && sw > 0 && sh > 0 && dw > 0 && dh > 0 && + sx + sw <= source.width && sy + sh <= source.height) { + this._context.globalCompositeOperation = 'source-over'; + this._context.drawImage(source._canvas, sx, sy, sw, sh, dx, dy, dw, dh); + this._setDirty(); + } +}; + +/** + * Returns pixel color at the specified point. + * + * @method getPixel + * @param {Number} x The x coordinate of the pixel in the bitmap + * @param {Number} y The y coordinate of the pixel in the bitmap + * @return {String} The pixel color (hex format) + */ +Bitmap.prototype.getPixel = function(x, y) { + var data = this._context.getImageData(x, y, 1, 1).data; + var result = '#'; + for (var i = 0; i < 3; i++) { + result += data[i].toString(16).padZero(2); + } + return result; +}; + +/** + * Returns alpha pixel value at the specified point. + * + * @method getAlphaPixel + * @param {Number} x The x coordinate of the pixel in the bitmap + * @param {Number} y The y coordinate of the pixel in the bitmap + * @return {String} The alpha value + */ +Bitmap.prototype.getAlphaPixel = function(x, y) { + var data = this._context.getImageData(x, y, 1, 1).data; + return data[3]; +}; + +/** + * Clears the specified rectangle. + * + * @method clearRect + * @param {Number} x The x coordinate for the upper-left corner + * @param {Number} y The y coordinate for the upper-left corner + * @param {Number} width The width of the rectangle to clear + * @param {Number} height The height of the rectangle to clear + */ +Bitmap.prototype.clearRect = function(x, y, width, height) { + this._context.clearRect(x, y, width, height); + this._setDirty(); +}; + +/** + * Clears the entire bitmap. + * + * @method clear + */ +Bitmap.prototype.clear = function() { + this.clearRect(0, 0, this.width, this.height); +}; + +/** + * Fills the specified rectangle. + * + * @method fillRect + * @param {Number} x The x coordinate for the upper-left corner + * @param {Number} y The y coordinate for the upper-left corner + * @param {Number} width The width of the rectangle to clear + * @param {Number} height The height of the rectangle to clear + * @param {String} color The color of the rectangle in CSS format + */ +Bitmap.prototype.fillRect = function(x, y, width, height, color) { + var context = this._context; + context.save(); + context.fillStyle = color; + context.fillRect(x, y, width, height); + context.restore(); + this._setDirty(); +}; + +/** + * Fills the entire bitmap. + * + * @method fillAll + * @param {String} color The color of the rectangle in CSS format + */ +Bitmap.prototype.fillAll = function(color) { + this.fillRect(0, 0, this.width, this.height, color); +}; + +/** + * Draws the rectangle with a gradation. + * + * @method gradientFillRect + * @param {Number} x The x coordinate for the upper-left corner + * @param {Number} y The y coordinate for the upper-left corner + * @param {Number} width The width of the rectangle to clear + * @param {Number} height The height of the rectangle to clear + * @param {String} color1 The start color of the gradation + * @param {String} color2 The end color of the gradation + * @param {Boolean} vertical Whether it draws a vertical gradient + */ +Bitmap.prototype.gradientFillRect = function(x, y, width, height, color1, + color2, vertical) { + var context = this._context; + var grad; + if (vertical) { + grad = context.createLinearGradient(x, y, x, y + height); + } else { + grad = context.createLinearGradient(x, y, x + width, y); + } + grad.addColorStop(0, color1); + grad.addColorStop(1, color2); + context.save(); + context.fillStyle = grad; + context.fillRect(x, y, width, height); + context.restore(); + this._setDirty(); +}; + +/** + * Draw the filled circle. + * + * @method drawCircle + * @param {Number} x The x coordinate of the center of the circle + * @param {Number} y The y coordinate of the center of the circle + * @param {Number} radius The radius of the circle + * @param {String} color The color of the circle in CSS format + */ +Bitmap.prototype.drawCircle = function(x, y, radius, color) { + var context = this._context; + context.save(); + context.fillStyle = color; + context.beginPath(); + context.arc(x, y, radius, 0, Math.PI * 2, false); + context.fill(); + context.restore(); + this._setDirty(); +}; + +/** + * Draws the outline text to the bitmap. + * + * @method drawText + * @param {String} text The text that will be drawn + * @param {Number} x The x coordinate for the left of the text + * @param {Number} y The y coordinate for the top of the text + * @param {Number} maxWidth The maximum allowed width of the text + * @param {Number} lineHeight The height of the text line + * @param {String} align The alignment of the text + */ +Bitmap.prototype.drawText = function(text, x, y, maxWidth, lineHeight, align) { + // Note: Firefox has a bug with textBaseline: Bug 737852 + // So we use 'alphabetic' here. + if (text !== undefined) { + var tx = x; + var ty = y + lineHeight - (lineHeight - this.fontSize * 0.7) / 2; + var context = this._context; + var alpha = context.globalAlpha; + maxWidth = maxWidth || 0xffffffff; + if (align === 'center') { + tx += maxWidth / 2; + } + if (align === 'right') { + tx += maxWidth; + } + context.save(); + context.font = this._makeFontNameText(); + context.textAlign = align; + context.textBaseline = 'alphabetic'; + context.globalAlpha = 1; + this._drawTextOutline(text, tx, ty, maxWidth); + context.globalAlpha = alpha; + this._drawTextBody(text, tx, ty, maxWidth); + context.restore(); + this._setDirty(); + } +}; + +/** + * Returns the width of the specified text. + * + * @method measureTextWidth + * @param {String} text The text to be measured + * @return {Number} The width of the text in pixels + */ +Bitmap.prototype.measureTextWidth = function(text) { + var context = this._context; + context.save(); + context.font = this._makeFontNameText(); + var width = context.measureText(text).width; + context.restore(); + return width; +}; + +/** + * Changes the color tone of the entire bitmap. + * + * @method adjustTone + * @param {Number} r The red strength in the range (-255, 255) + * @param {Number} g The green strength in the range (-255, 255) + * @param {Number} b The blue strength in the range (-255, 255) + */ +Bitmap.prototype.adjustTone = function(r, g, b) { + if ((r || g || b) && this.width > 0 && this.height > 0) { + var context = this._context; + var imageData = context.getImageData(0, 0, this.width, this.height); + var pixels = imageData.data; + for (var i = 0; i < pixels.length; i += 4) { + pixels[i + 0] += r; + pixels[i + 1] += g; + pixels[i + 2] += b; + } + context.putImageData(imageData, 0, 0); + this._setDirty(); + } +}; + +/** + * Rotates the hue of the entire bitmap. + * + * @method rotateHue + * @param {Number} offset The hue offset in 360 degrees + */ +Bitmap.prototype.rotateHue = function(offset) { + function rgbToHsl(r, g, b) { + var cmin = Math.min(r, g, b); + var cmax = Math.max(r, g, b); + var h = 0; + var s = 0; + var l = (cmin + cmax) / 2; + var delta = cmax - cmin; + + if (delta > 0) { + if (r === cmax) { + h = 60 * (((g - b) / delta + 6) % 6); + } else if (g === cmax) { + h = 60 * ((b - r) / delta + 2); + } else { + h = 60 * ((r - g) / delta + 4); + } + s = delta / (255 - Math.abs(2 * l - 255)); + } + return [h, s, l]; + } + + function hslToRgb(h, s, l) { + var c = (255 - Math.abs(2 * l - 255)) * s; + var x = c * (1 - Math.abs((h / 60) % 2 - 1)); + var m = l - c / 2; + var cm = c + m; + var xm = x + m; + + if (h < 60) { + return [cm, xm, m]; + } else if (h < 120) { + return [xm, cm, m]; + } else if (h < 180) { + return [m, cm, xm]; + } else if (h < 240) { + return [m, xm, cm]; + } else if (h < 300) { + return [xm, m, cm]; + } else { + return [cm, m, xm]; + } + } + + if (offset && this.width > 0 && this.height > 0) { + offset = ((offset % 360) + 360) % 360; + var context = this._context; + var imageData = context.getImageData(0, 0, this.width, this.height); + var pixels = imageData.data; + for (var i = 0; i < pixels.length; i += 4) { + var hsl = rgbToHsl(pixels[i + 0], pixels[i + 1], pixels[i + 2]); + var h = (hsl[0] + offset) % 360; + var s = hsl[1]; + var l = hsl[2]; + var rgb = hslToRgb(h, s, l); + pixels[i + 0] = rgb[0]; + pixels[i + 1] = rgb[1]; + pixels[i + 2] = rgb[2]; + } + context.putImageData(imageData, 0, 0); + this._setDirty(); + } +}; + +/** + * Applies a blur effect to the bitmap. + * + * @method blur + */ +Bitmap.prototype.blur = function() { + for (var i = 0; i < 2; i++) { + var w = this.width; + var h = this.height; + var canvas = this._canvas; + var context = this._context; + var tempCanvas = document.createElement('canvas'); + var tempContext = tempCanvas.getContext('2d'); + tempCanvas.width = w + 2; + tempCanvas.height = h + 2; + tempContext.drawImage(canvas, 0, 0, w, h, 1, 1, w, h); + tempContext.drawImage(canvas, 0, 0, w, 1, 1, 0, w, 1); + tempContext.drawImage(canvas, 0, 0, 1, h, 0, 1, 1, h); + tempContext.drawImage(canvas, 0, h - 1, w, 1, 1, h + 1, w, 1); + tempContext.drawImage(canvas, w - 1, 0, 1, h, w + 1, 1, 1, h); + context.save(); + context.fillStyle = 'black'; + context.fillRect(0, 0, w, h); + context.globalCompositeOperation = 'lighter'; + context.globalAlpha = 1 / 9; + for (var y = 0; y < 3; y++) { + for (var x = 0; x < 3; x++) { + context.drawImage(tempCanvas, x, y, w, h, 0, 0, w, h); + } + } + context.restore(); + } + this._setDirty(); +}; + +/** + * Add a callback function that will be called when the bitmap is loaded. + * + * @method addLoadListener + * @param {Function} listner The callback function + */ +Bitmap.prototype.addLoadListener = function(listner) { + if (this._isLoading) { + this._loadListeners.push(listner); + } else { + listner(); + } +}; + +/** + * @method _makeFontNameText + * @private + */ +Bitmap.prototype._makeFontNameText = function() { + return (this.fontItalic ? 'Italic ' : '') + + this.fontSize + 'px ' + this.fontFace; +}; + +/** + * @method _drawTextOutline + * @param {String} text + * @param {Number} tx + * @param {Number} ty + * @param {Number} maxWidth + * @private + */ +Bitmap.prototype._drawTextOutline = function(text, tx, ty, maxWidth) { + var context = this._context; + context.strokeStyle = this.outlineColor; + context.lineWidth = this.outlineWidth; + context.lineJoin = 'round'; + context.strokeText(text, tx, ty, maxWidth); +}; + +/** + * @method _drawTextBody + * @param {String} text + * @param {Number} tx + * @param {Number} ty + * @param {Number} maxWidth + * @private + */ +Bitmap.prototype._drawTextBody = function(text, tx, ty, maxWidth) { + var context = this._context; + context.fillStyle = this.textColor; + context.fillText(text, tx, ty, maxWidth); +}; + +/** + * @method _onLoad + * @private + */ +Bitmap.prototype._onLoad = function() { + this._isLoading = false; + this.resize(this._image.width, this._image.height); + this._context.drawImage(this._image, 0, 0); + this._setDirty(); + this._callLoadListeners(); +}; + +/** + * @method _callLoadListeners + * @private + */ +Bitmap.prototype._callLoadListeners = function() { + while (this._loadListeners.length > 0) { + var listener = this._loadListeners.shift(); + listener(); + } +}; + +/** + * @method _onError + * @private + */ +Bitmap.prototype._onError = function() { + this._hasError = true; +}; + +/** + * @method _setDirty + * @private + */ +Bitmap.prototype._setDirty = function() { + this._baseTexture.dirty(); +}; + +//----------------------------------------------------------------------------- +/** + * The static class that carries out graphics processing. + * + * @class Graphics + */ +function Graphics() { + throw new Error('This is a static class'); +} + +/** + * Initializes the graphics system. + * + * @static + * @method initialize + * @param {Number} width The width of the game screen + * @param {Number} height The height of the game screen + * @param {String} type The type of the renderer. + * 'canvas', 'webgl', or 'auto'. + */ +Graphics.initialize = function(width, height, type) { + this._width = width || 800; + this._height = height || 600; + this._rendererType = type || 'auto'; + this._boxWidth = this._width; + this._boxHeight = this._height; + + this._scale = 1; + this._realScale = 1; + + this._errorPrinter = null; + this._canvas = null; + this._video = null; + this._upperCanvas = null; + this._renderer = null; + this._fpsMeter = null; + this._modeBox = null; + this._skipCount = 0; + this._maxSkip = 3; + this._rendered = false; + this._loadingImage = null; + this._loadingCount = 0; + this._fpsMeterToggled = false; + this._stretchEnabled = this._defaultStretchMode(); + + this._canUseDifferenceBlend = false; + this._canUseSaturationBlend = false; + this._hiddenCanvas = null; + + this._testCanvasBlendModes(); + this._modifyExistingElements(); + this._updateRealScale(); + this._createAllElements(); + this._disableTextSelection(); + this._disableContextMenu(); + this._setupEventHandlers(); +}; + +/** + * The total frame count of the game screen. + * + * @static + * @property frameCount + * @type Number + */ +Graphics.frameCount = 0; + +/** + * The alias of PIXI.blendModes.NORMAL. + * + * @static + * @property BLEND_NORMAL + * @type Number + * @final + */ +Graphics.BLEND_NORMAL = 0; + +/** + * The alias of PIXI.blendModes.ADD. + * + * @static + * @property BLEND_ADD + * @type Number + * @final + */ +Graphics.BLEND_ADD = 1; + +/** + * The alias of PIXI.blendModes.MULTIPLY. + * + * @static + * @property BLEND_MULTIPLY + * @type Number + * @final + */ +Graphics.BLEND_MULTIPLY = 2; + +/** + * The alias of PIXI.blendModes.SCREEN. + * + * @static + * @property BLEND_SCREEN + * @type Number + * @final + */ +Graphics.BLEND_SCREEN = 3; + +/** + * Marks the beginning of each frame for FPSMeter. + * + * @static + * @method tickStart + */ +Graphics.tickStart = function() { + if (this._fpsMeter) { + this._fpsMeter.tickStart(); + } +}; + +/** + * Marks the end of each frame for FPSMeter. + * + * @static + * @method tickEnd + */ +Graphics.tickEnd = function() { + if (this._fpsMeter && this._rendered) { + this._fpsMeter.tick(); + } +}; + +/** + * Renders the stage to the game screen. + * + * @static + * @method render + * @param {Stage} stage The stage object to be rendered + */ +Graphics.render = function(stage) { + if (this._skipCount === 0) { + var startTime = Date.now(); + if (stage) { + this._renderer.render(stage); + } + var endTime = Date.now(); + var elapsed = endTime - startTime; + this._skipCount = Math.min(Math.floor(elapsed / 15), this._maxSkip); + this._rendered = true; + } else { + this._skipCount--; + this._rendered = false; + } + this.frameCount++; +}; + +/** + * Checks whether the renderer type is WebGL. + * + * @static + * @method isWebGL + * @return {Boolean} True if the renderer type is WebGL + */ +Graphics.isWebGL = function() { + return this._renderer && this._renderer.type === PIXI.WEBGL_RENDERER; +}; + +/** + * Checks whether the current browser supports WebGL. + * + * @static + * @method hasWebGL + * @return {Boolean} True if the current browser supports WebGL. + */ +Graphics.hasWebGL = function() { + try { + var canvas = document.createElement('canvas'); + return !!(canvas.getContext('webgl') || canvas.getContext('experimental-webgl')); + } catch (e) { + return false; + } +}; + +/** + * Checks whether the canvas blend mode 'difference' is supported. + * + * @static + * @method canUseDifferenceBlend + * @return {Boolean} True if the canvas blend mode 'difference' is supported + */ +Graphics.canUseDifferenceBlend = function() { + return this._canUseDifferenceBlend; +}; + +/** + * Checks whether the canvas blend mode 'saturation' is supported. + * + * @static + * @method canUseSaturationBlend + * @return {Boolean} True if the canvas blend mode 'saturation' is supported + */ +Graphics.canUseSaturationBlend = function() { + return this._canUseSaturationBlend; +}; + +/** + * Sets the source of the "Now Loading" image. + * + * @static + * @method setLoadingImage + */ +Graphics.setLoadingImage = function(src) { + this._loadingImage = new Image(); + this._loadingImage.src = src; +}; + +/** + * Initializes the counter for displaying the "Now Loading" image. + * + * @static + * @method startLoading + */ +Graphics.startLoading = function() { + this._loadingCount = 0; +}; + +/** + * Increments the loading counter and displays the "Now Loading" image if necessary. + * + * @static + * @method updateLoading + */ +Graphics.updateLoading = function() { + this._loadingCount++; + this._paintUpperCanvas(); + this._upperCanvas.style.opacity = 1; +}; + +/** + * Erases the "Now Loading" image. + * + * @static + * @method endLoading + */ +Graphics.endLoading = function() { + this._clearUpperCanvas(); + this._upperCanvas.style.opacity = 0; +}; + +/** + * Displays the error text to the screen. + * + * @static + * @method printError + * @param {String} name The name of the error + * @param {String} message The message of the error + */ +Graphics.printError = function(name, message) { + if (this._errorPrinter) { + this._errorPrinter.innerHTML = this._makeErrorHtml(name, message); + } + this._applyCanvasFilter(); + this._clearUpperCanvas(); +}; + +/** + * Shows the FPSMeter element. + * + * @static + * @method showFps + */ +Graphics.showFps = function() { + if (this._fpsMeter) { + this._fpsMeter.show(); + this._modeBox.style.opacity = 1; + } +}; + +/** + * Hides the FPSMeter element. + * + * @static + * @method hideFps + */ +Graphics.hideFps = function() { + if (this._fpsMeter) { + this._fpsMeter.hide(); + this._modeBox.style.opacity = 0; + } +}; + +/** + * Loads a font file. + * + * @static + * @method loadFont + * @param {String} name The face name of the font + * @param {String} url The url of the font file + */ +Graphics.loadFont = function(name, url) { + var style = document.createElement('style'); + var head = document.getElementsByTagName('head'); + var rule = '@font-face { font-family: "' + name + '"; src: url("' + url + '"); }'; + style.type = 'text/css'; + head.item(0).appendChild(style); + style.sheet.insertRule(rule, 0); + this._createFontLoader(name); +}; + +/** + * Checks whether the font file is loaded. + * + * @static + * @method isFontLoaded + * @param {String} name The face name of the font + * @return {Boolean} True if the font file is loaded + */ +Graphics.isFontLoaded = function(name) { + if (!this._hiddenCanvas) { + this._hiddenCanvas = document.createElement('canvas'); + } + var context = this._hiddenCanvas.getContext('2d'); + var text = 'abcdefghijklmnopqrstuvwxyz'; + var width1, width2; + context.font = '40px ' + name + ', sans-serif'; + width1 = context.measureText(text).width; + context.font = '40px sans-serif'; + width2 = context.measureText(text).width; + return width1 !== width2; +}; + +/** + * Starts playback of a video. + * + * @static + * @method playVideo + * @param {String} src + */ +Graphics.playVideo = function(src) { + this._video.src = src; + this._video.onloadeddata = this._onVideoLoad.bind(this); + this._video.onerror = this._onVideoError.bind(this); + this._video.onended = this._onVideoEnd.bind(this); + this._video.load(); +}; + +/** + * Checks whether the video is playing. + * + * @static + * @method isVideoPlaying + * @return {Boolean} True if the video is playing + */ +Graphics.isVideoPlaying = function() { + return this._video && this._isVideoVisible(); +}; + +/** + * Checks whether the browser can play the specified video type. + * + * @static + * @method canPlayVideoType + * @param {String} type The video type to test support for + * @return {Boolean} True if the browser can play the specified video type + */ +Graphics.canPlayVideoType = function(type) { + return this._video && this._video.canPlayType(type); +}; + +/** + * Converts an x coordinate on the page to the corresponding + * x coordinate on the canvas area. + * + * @static + * @method pageToCanvasX + * @param {Number} x The x coordinate on the page to be converted + * @return {Number} The x coordinate on the canvas area + */ +Graphics.pageToCanvasX = function(x) { + if (this._canvas) { + var left = this._canvas.offsetLeft; + return Math.round((x - left) / this._realScale); + } else { + return 0; + } +}; + +/** + * Converts a y coordinate on the page to the corresponding + * y coordinate on the canvas area. + * + * @static + * @method pageToCanvasY + * @param {Number} y The y coordinate on the page to be converted + * @return {Number} The y coordinate on the canvas area + */ +Graphics.pageToCanvasY = function(y) { + if (this._canvas) { + var top = this._canvas.offsetTop; + return Math.round((y - top) / this._realScale); + } else { + return 0; + } +}; + +/** + * Checks whether the specified point is inside the game canvas area. + * + * @static + * @method isInsideCanvas + * @param {Number} x The x coordinate on the canvas area + * @param {Number} y The y coordinate on the canvas area + * @return {Boolean} True if the specified point is inside the game canvas area + */ +Graphics.isInsideCanvas = function(x, y) { + return (x >= 0 && x < this._width && y >= 0 && y < this._height); +}; + +/** + * The width of the game screen. + * + * @static + * @property width + * @type Number + */ +Object.defineProperty(Graphics, 'width', { + get: function() { + return this._width; + }, + set: function(value) { + if (this._width !== value) { + this._width = value; + this._updateAllElements(); + } + }, + configurable: true +}); + +/** + * The height of the game screen. + * + * @static + * @property height + * @type Number + */ +Object.defineProperty(Graphics, 'height', { + get: function() { + return this._height; + }, + set: function(value) { + if (this._height !== value) { + this._height = value; + this._updateAllElements(); + } + }, + configurable: true +}); + +/** + * The width of the window display area. + * + * @static + * @property boxWidth + * @type Number + */ +Object.defineProperty(Graphics, 'boxWidth', { + get: function() { + return this._boxWidth; + }, + set: function(value) { + this._boxWidth = value; + }, + configurable: true +}); + +/** + * The height of the window display area. + * + * @static + * @property boxHeight + * @type Number + */ +Object.defineProperty(Graphics, 'boxHeight', { + get: function() { + return this._boxHeight; + }, + set: function(value) { + this._boxHeight = value; + }, + configurable: true +}); + +/** + * The zoom scale of the game screen. + * + * @static + * @property scale + * @type Number + */ +Object.defineProperty(Graphics, 'scale', { + get: function() { + return this._scale; + }, + set: function(value) { + if (this._scale !== value) { + this._scale = value; + this._updateAllElements(); + } + }, + configurable: true +}); + +/** + * @static + * @method _createAllElements + * @private + */ +Graphics._createAllElements = function() { + this._createErrorPrinter(); + this._createCanvas(); + this._createVideo(); + this._createUpperCanvas(); + this._createRenderer(); + this._createFPSMeter(); + this._createModeBox(); + this._createGameFontLoader(); +}; + +/** + * @static + * @method _updateAllElements + * @private + */ +Graphics._updateAllElements = function() { + this._updateRealScale(); + this._updateErrorPrinter(); + this._updateCanvas(); + this._updateVideo(); + this._updateUpperCanvas(); + this._updateRenderer(); + this._paintUpperCanvas(); +}; + +/** + * @static + * @method _updateRealScale + * @private + */ +Graphics._updateRealScale = function() { + if (this._stretchEnabled) { + var h = window.innerWidth / this._width; + var v = window.innerHeight / this._height; + this._realScale = Math.min(h, v); + } else { + this._realScale = this._scale; + } +}; + +/** + * @static + * @method _makeErrorHtml + * @param {String} name + * @param {String} message + * @return {String} + * @private + */ +Graphics._makeErrorHtml = function(name, message) { + return ('' + name + '
' + + '' + message + '
'); +}; + +/** + * @static + * @method _defaultStretchMode + * @private + */ +Graphics._defaultStretchMode = function() { + return Utils.isNwjs() || Utils.isMobileDevice(); +}; + +/** + * @static + * @method _testCanvasBlendModes + * @private + */ +Graphics._testCanvasBlendModes = function() { + var canvas, context, imageData1, imageData2; + canvas = document.createElement('canvas'); + canvas.width = 1; + canvas.height = 1; + context = canvas.getContext('2d'); + context.globalCompositeOperation = 'source-over'; + context.fillStyle = 'white'; + context.fillRect(0, 0, 1, 1); + context.globalCompositeOperation = 'difference'; + context.fillStyle = 'white'; + context.fillRect(0, 0, 1, 1); + imageData1 = context.getImageData(0, 0, 1, 1); + context.globalCompositeOperation = 'source-over'; + context.fillStyle = 'black'; + context.fillRect(0, 0, 1, 1); + context.globalCompositeOperation = 'saturation'; + context.fillStyle = 'white'; + context.fillRect(0, 0, 1, 1); + imageData2 = context.getImageData(0, 0, 1, 1); + this._canUseDifferenceBlend = imageData1.data[0] === 0; + this._canUseSaturationBlend = imageData2.data[0] === 0; +}; + +/** + * @static + * @method _modifyExistingElements + * @private + */ +Graphics._modifyExistingElements = function() { + var elements = document.getElementsByTagName('*'); + for (var i = 0; i < elements.length; i++) { + if (elements[i].style.zIndex > 0) { + elements[i].style.zIndex = 0; + } + } +}; + +/** + * @static + * @method _createErrorPrinter + * @private + */ +Graphics._createErrorPrinter = function() { + this._errorPrinter = document.createElement('p'); + this._errorPrinter.id = 'ErrorPrinter'; + this._updateErrorPrinter(); + document.body.appendChild(this._errorPrinter); +}; + +/** + * @static + * @method _updateErrorPrinter + * @private + */ +Graphics._updateErrorPrinter = function() { + this._errorPrinter.width = this._width * 0.9; + this._errorPrinter.height = 40; + this._errorPrinter.style.textAlign = 'center'; + this._errorPrinter.style.textShadow = '1px 1px 3px #000'; + this._errorPrinter.style.fontSize = '20px'; + this._errorPrinter.style.zIndex = 99; + this._centerElement(this._errorPrinter); +}; + +/** + * @static + * @method _createCanvas + * @private + */ +Graphics._createCanvas = function() { + this._canvas = document.createElement('canvas'); + this._canvas.id = 'GameCanvas'; + this._updateCanvas(); + document.body.appendChild(this._canvas); +}; + +/** + * @static + * @method _updateCanvas + * @private + */ +Graphics._updateCanvas = function() { + this._canvas.width = this._width; + this._canvas.height = this._height; + this._canvas.style.zIndex = 1; + this._centerElement(this._canvas); +}; + +/** + * @static + * @method _createVideo + * @private + */ +Graphics._createVideo = function() { + this._video = document.createElement('video'); + this._video.id = 'GameVideo'; + this._video.style.opacity = 0; + this._updateVideo(); + document.body.appendChild(this._video); +}; + +/** + * @static + * @method _updateVideo + * @private + */ +Graphics._updateVideo = function() { + this._video.width = this._width; + this._video.height = this._height; + this._video.style.zIndex = 2; + this._centerElement(this._video); +}; + +/** + * @static + * @method _createUpperCanvas + * @private + */ +Graphics._createUpperCanvas = function() { + this._upperCanvas = document.createElement('canvas'); + this._upperCanvas.id = 'UpperCanvas'; + this._updateUpperCanvas(); + document.body.appendChild(this._upperCanvas); +}; + +/** + * @static + * @method _updateUpperCanvas + * @private + */ +Graphics._updateUpperCanvas = function() { + this._upperCanvas.width = this._width; + this._upperCanvas.height = this._height; + this._upperCanvas.style.zIndex = 3; + this._centerElement(this._upperCanvas); +}; + +/** + * @static + * @method _clearUpperCanvas + * @private + */ +Graphics._clearUpperCanvas = function() { + var context = this._upperCanvas.getContext('2d'); + context.clearRect(0, 0, this._width, this._height); +}; + +/** + * @static + * @method _paintUpperCanvas + * @private + */ +Graphics._paintUpperCanvas = function() { + this._clearUpperCanvas(); + if (this._loadingImage && this._loadingCount >= 20) { + var context = this._upperCanvas.getContext('2d'); + var dx = (this._width - this._loadingImage.width) / 2; + var dy = (this._height - this._loadingImage.height) / 2; + var alpha = ((this._loadingCount - 20) / 30).clamp(0, 1); + context.save(); + context.globalAlpha = alpha; + context.drawImage(this._loadingImage, dx, dy); + context.restore(); + } +}; + +/** + * @static + * @method _createRenderer + * @private + */ +Graphics._createRenderer = function() { + PIXI.dontSayHello = true; + var width = this._width; + var height = this._height; + var options = { view: this._canvas }; + try { + switch (this._rendererType) { + case 'canvas': + this._renderer = new PIXI.CanvasRenderer(width, height, options); + break; + case 'webgl': + this._renderer = new PIXI.WebGLRenderer(width, height, options); + break; + default: + this._renderer = PIXI.autoDetectRenderer(width, height, options); + break; + } + } catch (e) { + this._renderer = null; + } +}; + +/** + * @static + * @method _updateRenderer + * @private + */ +Graphics._updateRenderer = function() { + if (this._renderer) { + this._renderer.resize(this._width, this._height); + } +}; + +/** + * @static + * @method _createFPSMeter + * @private + */ +Graphics._createFPSMeter = function() { + var options = { graph: 1, decimals: 0, theme: 'transparent', toggleOn: null }; + this._fpsMeter = new FPSMeter(options); + this._fpsMeter.hide(); +}; + +/** + * @static + * @method _createModeBox + * @private + */ +Graphics._createModeBox = function() { + var box = document.createElement('div'); + box.id = 'modeTextBack'; + box.style.position = 'absolute'; + box.style.left = '5px'; + box.style.top = '5px'; + box.style.width = '119px'; + box.style.height = '58px'; + box.style.background = 'rgba(0,0,0,0.2)'; + box.style.zIndex = 9; + box.style.opacity = 0; + + var text = document.createElement('div'); + text.id = 'modeText'; + text.style.position = 'absolute'; + text.style.left = '0px'; + text.style.top = '41px'; + text.style.width = '119px'; + text.style.fontSize = '12px'; + text.style.fontFamily = 'monospace'; + text.style.color = 'white'; + text.style.textAlign = 'center'; + text.style.textShadow = '1px 1px 0 rgba(0,0,0,0.5)'; + text.innerHTML = this.isWebGL() ? 'WebGL mode' : 'Canvas mode'; + + document.body.appendChild(box); + box.appendChild(text); + + this._modeBox = box; +}; + +/** + * @static + * @method _createGameFontLoader + * @private + */ +Graphics._createGameFontLoader = function() { + this._createFontLoader('GameFont'); +}; + +/** + * @static + * @method _createFontLoader + * @param {String} name + * @private + */ +Graphics._createFontLoader = function(name) { + var div = document.createElement('div'); + var text = document.createTextNode('.'); + div.style.fontFamily = name; + div.style.fontSize = '0px'; + div.style.color = 'transparent'; + div.style.position = 'absolute'; + div.style.margin = 'auto'; + div.style.top = '0px'; + div.style.left = '0px'; + div.style.width = '1px'; + div.style.height = '1px'; + div.appendChild(text); + document.body.appendChild(div); +}; + +/** + * @static + * @method _centerElement + * @param {HTMLElement} element + * @private + */ +Graphics._centerElement = function(element) { + var width = element.width * this._realScale; + var height = element.height * this._realScale; + element.style.position = 'absolute'; + element.style.margin = 'auto'; + element.style.top = 0; + element.style.left = 0; + element.style.right = 0; + element.style.bottom = 0; + element.style.width = width + 'px'; + element.style.height = height + 'px'; +}; + +/** + * @static + * @method _disableTextSelection + * @private + */ +Graphics._disableTextSelection = function() { + var body = document.body; + body.style.userSelect = 'none'; + body.style.webkitUserSelect = 'none'; + body.style.msUserSelect = 'none'; + body.style.mozUserSelect = 'none'; +}; + +/** + * @static + * @method _disableContextMenu + * @private + */ +Graphics._disableContextMenu = function() { + var elements = document.body.getElementsByTagName('*'); + var oncontextmenu = function() { return false; }; + for (var i = 0; i < elements.length; i++) { + elements[i].oncontextmenu = oncontextmenu; + } +}; + +/** + * @static + * @method _applyCanvasFilter + * @private + */ +Graphics._applyCanvasFilter = function() { + if (this._canvas) { + this._canvas.style.opacity = 0.5; + this._canvas.style.filter = 'blur(8px)'; + this._canvas.style.webkitFilter = 'blur(8px)'; + } +}; + +/** + * @static + * @method _onVideoLoad + * @private + */ +Graphics._onVideoLoad = function() { + this._video.play(); + this._updateVisibility(true); +}; + +/** + * @static + * @method _onVideoError + * @private + */ +Graphics._onVideoError = function() { + this._updateVisibility(false); +}; + +/** + * @static + * @method _onVideoEnd + * @private + */ +Graphics._onVideoEnd = function() { + this._updateVisibility(false); +}; + +/** + * @static + * @method _updateVisibility + * @param {Boolean} videoVisible + * @private + */ +Graphics._updateVisibility = function(videoVisible) { + this._video.style.opacity = videoVisible ? 1 : 0; + this._canvas.style.opacity = videoVisible ? 0 : 1; +}; + +/** + * @static + * @method _isVideoVisible + * @return {Boolean} + * @private + */ +Graphics._isVideoVisible = function() { + return this._video.style.opacity > 0; +}; + +/** + * @static + * @method _setupEventHandlers + * @private + */ +Graphics._setupEventHandlers = function() { + window.addEventListener('resize', this._onWindowResize.bind(this)); + document.addEventListener('keydown', this._onKeyDown.bind(this)); +}; + +/** + * @static + * @method _onWindowResize + * @private + */ +Graphics._onWindowResize = function() { + this._updateAllElements(); +}; + +/** + * @static + * @method _onKeyDown + * @param {KeyboardEvent} event + * @private + */ +Graphics._onKeyDown = function(event) { + if (!event.ctrlKey && !event.altKey) { + switch (event.keyCode) { + case 113: // F2 + event.preventDefault(); + this._switchFPSMeter(); + break; + case 114: // F3 + event.preventDefault(); + this._switchStretchMode(); + break; + case 115: // F4 + event.preventDefault(); + this._switchFullScreen(); + break; + } + } +}; + +/** + * @static + * @method _switchFPSMeter + * @private + */ +Graphics._switchFPSMeter = function() { + if (this._fpsMeter.isPaused) { + this.showFps(); + this._fpsMeter.showFps(); + this._fpsMeterToggled = false; + } else if (!this._fpsMeterToggled) { + this._fpsMeter.showDuration(); + this._fpsMeterToggled = true; + } else { + this.hideFps(); + } +}; + +/** + * @static + * @method _switchStretchMode + * @return {Boolean} + * @private + */ +Graphics._switchStretchMode = function() { + this._stretchEnabled = !this._stretchEnabled; + this._updateAllElements(); +}; + +/** + * @static + * @method _switchFullScreen + * @private + */ +Graphics._switchFullScreen = function() { + if (this._isFullScreen()) { + this._requestFullScreen(); + } else { + this._cancelFullScreen(); + } +}; + +/** + * @static + * @method _isFullScreen + * @return {Boolean} + * @private + */ +Graphics._isFullScreen = function() { + return ((document.fullScreenElement && document.fullScreenElement !== null) || + (!document.mozFullScreen && !document.webkitFullscreenElement && + !document.msFullscreenElement)); +}; + +/** + * @static + * @method _requestFullScreen + * @private + */ +Graphics._requestFullScreen = function() { + var element = document.body; + if (element.requestFullScreen) { + element.requestFullScreen(); + } else if (element.mozRequestFullScreen) { + element.mozRequestFullScreen(); + } else if (element.webkitRequestFullScreen) { + element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); + } else if (element.msRequestFullscreen) { + element.msRequestFullscreen(); + } +}; + +/** + * @static + * @method _cancelFullScreen + * @private + */ +Graphics._cancelFullScreen = function() { + if (document.cancelFullScreen) { + document.cancelFullScreen(); + } else if (document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + } else if (document.webkitCancelFullScreen) { + document.webkitCancelFullScreen(); + } else if (document.msExitFullscreen) { + document.msExitFullscreen(); + } +}; + +//----------------------------------------------------------------------------- +/** + * The static class that handles input data from the keyboard and gamepads. + * + * @class Input + */ +function Input() { + throw new Error('This is a static class'); +} + +/** + * Initializes the input system. + * + * @static + * @method initialize + */ +Input.initialize = function() { + this.clear(); + this._wrapNwjsAlert(); + this._setupEventHandlers(); +}; + +/** + * The wait time of the key repeat in frames. + * + * @static + * @property keyRepeatWait + * @type Number + */ +Input.keyRepeatWait = 24; + +/** + * The interval of the key repeat in frames. + * + * @static + * @property keyRepeatInterval + * @type Number + */ +Input.keyRepeatInterval = 6; + +/** + * A hash table to convert from a virtual key code to a mapped key name. + * + * @static + * @property keyMapper + * @type Object + */ +Input.keyMapper = { + 9: 'tab', // tab + 13: 'ok', // enter + 16: 'shift', // shift + 17: 'control', // control + 18: 'control', // alt + 27: 'escape', // escape + 32: 'ok', // space + 33: 'pageup', // pageup + 34: 'pagedown', // pagedown + 37: 'left', // left arrow + 38: 'up', // up arrow + 39: 'right', // right arrow + 40: 'down', // down arrow + 45: 'escape', // insert + 81: 'pageup', // Q + 87: 'pagedown', // W + 88: 'escape', // X + 90: 'ok', // Z + 96: 'escape', // numpad 0 + 98: 'down', // numpad 2 + 100: 'left', // numpad 4 + 102: 'right', // numpad 6 + 104: 'up', // numpad 8 + 120: 'debug' // F9 +}; + +/** + * A hash table to convert from a gamepad button to a mapped key name. + * + * @static + * @property gamepadMapper + * @type Object + */ +Input.gamepadMapper = { + 0: 'ok', // A + 1: 'cancel', // B + 2: 'shift', // X + 3: 'menu', // Y + 4: 'pageup', // LB + 5: 'pagedown', // RB + 12: 'up', // D-pad up + 13: 'down', // D-pad down + 14: 'left', // D-pad left + 15: 'right', // D-pad right +}; + +/** + * Clears all the input data. + * + * @static + * @method clear + */ +Input.clear = function() { + this._currentState = {}; + this._previousState = {}; + this._gamepadStates = []; + this._latestButton = null; + this._pressedTime = 0; + this._dir4 = 0; + this._dir8 = 0; + this._preferredAxis = ''; + this._date = 0; +}; + +/** + * Updates the input data. + * + * @static + * @method update + */ +Input.update = function() { + this._pollGamepads(); + if (this._currentState[this._latestButton]) { + this._pressedTime++; + } else { + this._latestButton = null; + } + for (var name in this._currentState) { + if (this._currentState[name] && !this._previousState[name]) { + this._latestButton = name; + this._pressedTime = 0; + this._date = Date.now(); + } + this._previousState[name] = this._currentState[name]; + } + this._updateDirection(); +}; + +/** + * Checks whether a key is currently pressed down. + * + * @static + * @method isPressed + * @param {String} keyName The mapped name of the key + * @return {Boolean} True if the key is pressed + */ +Input.isPressed = function(keyName) { + if (this._isEscapeCompatible(keyName) && this.isPressed('escape')) { + return true; + } else { + return !!this._currentState[keyName]; + } +}; + +/** + * Checks whether a key is just pressed. + * + * @static + * @method isTriggered + * @param {String} keyName The mapped name of the key + * @return {Boolean} True if the key is triggered + */ +Input.isTriggered = function(keyName) { + if (this._isEscapeCompatible(keyName) && this.isTriggered('escape')) { + return true; + } else { + return this._latestButton === keyName && this._pressedTime === 0; + } +}; + +/** + * Checks whether a key is just pressed or a key repeat occurred. + * + * @static + * @method isRepeated + * @param {String} keyName The mapped name of the key + * @return {Boolean} True if the key is repeated + */ +Input.isRepeated = function(keyName) { + if (this._isEscapeCompatible(keyName) && this.isRepeated('escape')) { + return true; + } else { + return (this._latestButton === keyName && + (this._pressedTime === 0 || + (this._pressedTime >= this.keyRepeatWait && + this._pressedTime % this.keyRepeatInterval === 0))); + } +}; + +/** + * Checks whether a key is kept depressed. + * + * @static + * @method isLongPressed + * @param {String} keyName The mapped name of the key + * @return {Boolean} True if the key is long-pressed + */ +Input.isLongPressed = function(keyName) { + if (this._isEscapeCompatible(keyName) && this.isLongPressed('escape')) { + return true; + } else { + return (this._latestButton === keyName && + this._pressedTime >= this.keyRepeatWait); + } +}; + +/** + * [read-only] The four direction value as a number of the numpad, or 0 for neutral. + * + * @static + * @property dir4 + * @type Number + */ +Object.defineProperty(Input, 'dir4', { + get: function() { + return this._dir4; + }, + configurable: true +}); + +/** + * [read-only] The eight direction value as a number of the numpad, or 0 for neutral. + * + * @static + * @property dir8 + * @type Number + */ +Object.defineProperty(Input, 'dir8', { + get: function() { + return this._dir8; + }, + configurable: true +}); + +/** + * [read-only] The time of the last input in milliseconds. + * + * @static + * @property date + * @type Number + */ +Object.defineProperty(Input, 'date', { + get: function() { + return this._date; + }, + configurable: true +}); + +/** + * @static + * @method _wrapNwjsAlert + * @private + */ +Input._wrapNwjsAlert = function() { + if (Utils.isNwjs()) { + var _alert = window.alert; + window.alert = function() { + var gui = require('nw.gui'); + var win = gui.Window.get(); + _alert.apply(this, arguments); + win.focus(); + Input.clear(); + }; + } +}; + +/** + * @static + * @method _setupEventHandlers + * @private + */ +Input._setupEventHandlers = function() { + document.addEventListener('keydown', this._onKeyDown.bind(this)); + document.addEventListener('keyup', this._onKeyUp.bind(this)); + window.addEventListener('blur', this._onLostFocus.bind(this)); +}; + +/** + * @static + * @method _onKeyDown + * @param {KeyboardEvent} event + * @private + */ +Input._onKeyDown = function(event) { + if (this._shouldPreventDefault(event.keyCode)) { + event.preventDefault(); + } + if (event.keyCode === 144) { // Numlock + this.clear(); + } + var buttonName = this.keyMapper[event.keyCode]; + if (buttonName) { + this._currentState[buttonName] = true; + } +}; + +/** + * @static + * @method _shouldPreventDefault + * @param {Number} keyCode + * @private + */ +Input._shouldPreventDefault = function(keyCode) { + switch (keyCode) { + case 8: // backspace + case 33: // pageup + case 34: // pagedown + case 37: // left arrow + case 38: // up arrow + case 39: // right arrow + case 40: // down arrow + return true; + } + return false; +}; + +/** + * @static + * @method _onKeyUp + * @param {KeyboardEvent} event + * @private + */ +Input._onKeyUp = function(event) { + var buttonName = this.keyMapper[event.keyCode]; + if (buttonName) { + this._currentState[buttonName] = false; + } + if (event.keyCode === 0) { // For QtWebEngine on OS X + this.clear(); + } +}; + +/** + * @static + * @method _onLostFocus + * @private + */ +Input._onLostFocus = function() { + this.clear(); +}; + +/** + * @static + * @method _pollGamepads + * @private + */ +Input._pollGamepads = function() { + if (navigator.getGamepads) { + var gamepads = navigator.getGamepads(); + if (gamepads) { + for (var i = 0; i < gamepads.length; i++) { + var gamepad = gamepads[i]; + if (gamepad && gamepad.connected) { + this._updateGamepadState(gamepad); + } + } + } + } +}; + +/** + * @static + * @method _updateGamepadState + * @param {Gamepad} gamepad + * @param {Number} index + * @private + */ +Input._updateGamepadState = function(gamepad) { + var lastState = this._gamepadStates[gamepad.index] || []; + var newState = []; + var buttons = gamepad.buttons; + var axes = gamepad.axes; + var threshold = 0.5; + for (var i = 0; i < buttons.length; i++) { + newState[i] = buttons[i].pressed; + } + if (axes[1] < -threshold) { + newState[12] = true; // up + } else if (axes[1] > threshold) { + newState[13] = true; // down + } + if (axes[0] < -threshold) { + newState[14] = true; // left + } else if (axes[0] > threshold) { + newState[15] = true; // right + } + for (var j = 0; j < newState.length; j++) { + if (newState[j] !== lastState[j]) { + var buttonName = this.gamepadMapper[j]; + if (buttonName) { + this._currentState[buttonName] = newState[j]; + } + } + } + this._gamepadStates[gamepad.index] = newState; +}; + +/** + * @static + * @method _updateDirection + * @private + */ +Input._updateDirection = function() { + var x = this._signX(); + var y = this._signY(); + + this._dir8 = this._makeNumpadDirection(x, y); + + if (x !== 0 && y !== 0) { + if (this._preferredAxis === 'x') { + y = 0; + } else { + x = 0; + } + } else if (x !== 0) { + this._preferredAxis = 'y'; + } else if (y !== 0) { + this._preferredAxis = 'x'; + } + + this._dir4 = this._makeNumpadDirection(x, y); +}; + +/** + * @static + * @method _signX + * @private + */ +Input._signX = function() { + var x = 0; + + if (this.isPressed('left')) { + x--; + } + if (this.isPressed('right')) { + x++; + } + return x; +}; + +/** + * @static + * @method _signY + * @private + */ +Input._signY = function() { + var y = 0; + + if (this.isPressed('up')) { + y--; + } + if (this.isPressed('down')) { + y++; + } + return y; +}; + +/** + * @static + * @method _makeNumpadDirection + * @param {Number} x + * @param {Number} y + * @return {Number} + * @private + */ +Input._makeNumpadDirection = function(x, y) { + if (x !== 0 || y !== 0) { + return 5 - y * 3 + x; + } + return 0; +}; + +/** + * @static + * @method _isEscapeCompatible + * @param {String} keyName + * @return {Boolean} + * @private + */ +Input._isEscapeCompatible = function(keyName) { + return keyName === 'cancel' || keyName === 'menu'; +}; + +//----------------------------------------------------------------------------- +/** + * The static class that handles input data from the mouse and touchscreen. + * + * @class TouchInput + */ +function TouchInput() { + throw new Error('This is a static class'); +} + +/** + * Initializes the touch system. + * + * @static + * @method initialize + */ +TouchInput.initialize = function() { + this.clear(); + this._setupEventHandlers(); +}; + +/** + * The wait time of the pseudo key repeat in frames. + * + * @static + * @property keyRepeatWait + * @type Number + */ +TouchInput.keyRepeatWait = 24; + +/** + * The interval of the pseudo key repeat in frames. + * + * @static + * @property keyRepeatInterval + * @type Number + */ +TouchInput.keyRepeatInterval = 6; + +/** + * Clears all the touch data. + * + * @static + * @method clear + */ +TouchInput.clear = function() { + this._mousePressed = false; + this._screenPressed = false; + this._pressedTime = 0; + this._events = {}; + this._events.triggered = false; + this._events.cancelled = false; + this._events.moved = false; + this._events.released = false; + this._events.wheelX = 0; + this._events.wheelY = 0; + this._triggered = false; + this._cancelled = false; + this._moved = false; + this._released = false; + this._wheelX = 0; + this._wheelY = 0; + this._x = 0; + this._y = 0; + this._date = 0; +}; + +/** + * Updates the touch data. + * + * @static + * @method update + */ +TouchInput.update = function() { + this._triggered = this._events.triggered; + this._cancelled = this._events.cancelled; + this._moved = this._events.moved; + this._released = this._events.released; + this._wheelX = this._events.wheelX; + this._wheelY = this._events.wheelY; + this._events.triggered = false; + this._events.cancelled = false; + this._events.moved = false; + this._events.released = false; + this._events.wheelX = 0; + this._events.wheelY = 0; + if (this.isPressed()) { + this._pressedTime++; + } +}; + +/** + * Checks whether the mouse button or touchscreen is currently pressed down. + * + * @static + * @method isPressed + * @return {Boolean} True if the mouse button or touchscreen is pressed + */ +TouchInput.isPressed = function() { + return this._mousePressed || this._screenPressed; +}; + +/** + * Checks whether the left mouse button or touchscreen is just pressed. + * + * @static + * @method isTriggered + * @return {Boolean} True if the mouse button or touchscreen is triggered + */ +TouchInput.isTriggered = function() { + return this._triggered; +}; + +/** + * Checks whether the left mouse button or touchscreen is just pressed + * or a pseudo key repeat occurred. + * + * @static + * @method isRepeated + * @return {Boolean} True if the mouse button or touchscreen is repeated + */ +TouchInput.isRepeated = function() { + return (this.isPressed() && + (this._triggered || + (this._pressedTime >= this.keyRepeatWait && + this._pressedTime % this.keyRepeatInterval === 0))); +}; + +/** + * Checks whether the left mouse button or touchscreen is kept depressed. + * + * @static + * @method isLongPressed + * @return {Boolean} True if the left mouse button or touchscreen is long-pressed + */ +TouchInput.isLongPressed = function() { + return this.isPressed() && this._pressedTime >= this.keyRepeatWait; +}; + +/** + * Checks whether the right mouse button is just pressed. + * + * @static + * @method isCancelled + * @return {Boolean} True if the right mouse button is just pressed + */ +TouchInput.isCancelled = function() { + return this._cancelled; +}; + +/** + * Checks whether the mouse or a finger on the touchscreen is moved. + * + * @static + * @method isMoved + * @return {Boolean} True if the mouse or a finger on the touchscreen is moved + */ +TouchInput.isMoved = function() { + return this._moved; +}; + +/** + * Checks whether the left mouse button or touchscreen is released. + * + * @static + * @method isReleased + * @return {Boolean} True if the mouse button or touchscreen is released + */ +TouchInput.isReleased = function() { + return this._released; +}; + +/** + * [read-only] The horizontal scroll amount. + * + * @static + * @property wheelX + * @type Number + */ +Object.defineProperty(TouchInput, 'wheelX', { + get: function() { + return this._wheelX; + }, + configurable: true +}); + +/** + * [read-only] The vertical scroll amount. + * + * @static + * @property wheelY + * @type Number + */ +Object.defineProperty(TouchInput, 'wheelY', { + get: function() { + return this._wheelY; + }, + configurable: true +}); + +/** + * [read-only] The x coordinate on the canvas area of the latest touch event. + * + * @static + * @property x + * @type Number + */ +Object.defineProperty(TouchInput, 'x', { + get: function() { + return this._x; + }, + configurable: true +}); + +/** + * [read-only] The y coordinate on the canvas area of the latest touch event. + * + * @static + * @property y + * @type Number + */ +Object.defineProperty(TouchInput, 'y', { + get: function() { + return this._y; + }, + configurable: true +}); + +/** + * [read-only] The time of the last input in milliseconds. + * + * @static + * @property date + * @type Number + */ +Object.defineProperty(TouchInput, 'date', { + get: function() { + return this._date; + }, + configurable: true +}); + +/** + * @static + * @method _setupEventHandlers + * @private + */ +TouchInput._setupEventHandlers = function() { + document.addEventListener('mousedown', this._onMouseDown.bind(this)); + document.addEventListener('mousemove', this._onMouseMove.bind(this)); + document.addEventListener('mouseup', this._onMouseUp.bind(this)); + document.addEventListener('wheel', this._onWheel.bind(this)); + document.addEventListener('touchstart', this._onTouchStart.bind(this)); + document.addEventListener('touchmove', this._onTouchMove.bind(this)); + document.addEventListener('touchend', this._onTouchEnd.bind(this)); + document.addEventListener('touchcancel', this._onTouchCancel.bind(this)); + document.addEventListener('pointerdown', this._onPointerDown.bind(this)); +}; + +/** + * @static + * @method _onMouseDown + * @param {MouseEvent} event + * @private + */ +TouchInput._onMouseDown = function(event) { + if (event.button === 0) { + this._onLeftButtonDown(event); + } else if (event.button === 1) { + this._onMiddleButtonDown(event); + } else if (event.button === 2) { + this._onRightButtonDown(event); + } +}; + +/** + * @static + * @method _onLeftButtonDown + * @param {MouseEvent} event + * @private + */ +TouchInput._onLeftButtonDown = function(event) { + var x = Graphics.pageToCanvasX(event.pageX); + var y = Graphics.pageToCanvasY(event.pageY); + if (Graphics.isInsideCanvas(x, y)) { + this._mousePressed = true; + this._pressedTime = 0; + this._onTrigger(x, y); + } +}; + +/** + * @static + * @method _onMiddleButtonDown + * @param {MouseEvent} event + * @private + */ +TouchInput._onMiddleButtonDown = function(event) { +}; + +/** + * @static + * @method _onRightButtonDown + * @param {MouseEvent} event + * @private + */ +TouchInput._onRightButtonDown = function(event) { + var x = Graphics.pageToCanvasX(event.pageX); + var y = Graphics.pageToCanvasY(event.pageY); + if (Graphics.isInsideCanvas(x, y)) { + this._onCancel(x, y); + } +}; + +/** + * @static + * @method _onMouseMove + * @param {MouseEvent} event + * @private + */ +TouchInput._onMouseMove = function(event) { + if (this._mousePressed) { + var x = Graphics.pageToCanvasX(event.pageX); + var y = Graphics.pageToCanvasY(event.pageY); + this._onMove(x, y); + } +}; + +/** + * @static + * @method _onMouseUp + * @param {MouseEvent} event + * @private + */ +TouchInput._onMouseUp = function(event) { + if (event.button === 0) { + var x = Graphics.pageToCanvasX(event.pageX); + var y = Graphics.pageToCanvasY(event.pageY); + this._mousePressed = false; + this._onRelease(x, y); + } +}; + +/** + * @static + * @method _onWheel + * @param {WheelEvent} event + * @private + */ +TouchInput._onWheel = function(event) { + this._events.wheelX += event.deltaX; + this._events.wheelY += event.deltaY; + event.preventDefault(); +}; + +/** + * @static + * @method _onTouchStart + * @param {TouchEvent} event + * @private + */ +TouchInput._onTouchStart = function(event) { + for (var i = 0; i < event.changedTouches.length; i++) { + var touch = event.changedTouches[i]; + var x = Graphics.pageToCanvasX(touch.pageX); + var y = Graphics.pageToCanvasY(touch.pageY); + if (Graphics.isInsideCanvas(x, y)) { + this._screenPressed = true; + this._pressedTime = 0; + if (event.touches.length >= 2) { + this._onCancel(x, y); + } else { + this._onTrigger(x, y); + } + event.preventDefault(); + } + } + if (window.cordova || window.navigator.standalone) { + event.preventDefault(); + } +}; + +/** + * @static + * @method _onTouchMove + * @param {TouchEvent} event + * @private + */ +TouchInput._onTouchMove = function(event) { + for (var i = 0; i < event.changedTouches.length; i++) { + var touch = event.changedTouches[i]; + var x = Graphics.pageToCanvasX(touch.pageX); + var y = Graphics.pageToCanvasY(touch.pageY); + this._onMove(x, y); + } +}; + +/** + * @static + * @method _onTouchEnd + * @param {TouchEvent} event + * @private + */ +TouchInput._onTouchEnd = function(event) { + for (var i = 0; i < event.changedTouches.length; i++) { + var touch = event.changedTouches[i]; + var x = Graphics.pageToCanvasX(touch.pageX); + var y = Graphics.pageToCanvasY(touch.pageY); + this._screenPressed = false; + this._onRelease(x, y); + } +}; + +/** + * @static + * @method _onTouchCancel + * @param {TouchEvent} event + * @private + */ +TouchInput._onTouchCancel = function(event) { + this._screenPressed = false; +}; + +/** + * @static + * @method _onPointerDown + * @param {PointerEvent} event + * @private + */ +TouchInput._onPointerDown = function(event) { + if (event.pointerType === 'touch' && !event.isPrimary) { + var x = Graphics.pageToCanvasX(event.pageX); + var y = Graphics.pageToCanvasY(event.pageY); + if (Graphics.isInsideCanvas(x, y)) { + // For Microsoft Edge + this._onCancel(x, y); + event.preventDefault(); + } + } +}; + +/** + * @static + * @method _onTrigger + * @param {Number} x + * @param {Number} y + * @private + */ +TouchInput._onTrigger = function(x, y) { + this._events.triggered = true; + this._x = x; + this._y = y; + this._date = Date.now(); +}; + +/** + * @static + * @method _onCancel + * @param {Number} x + * @param {Number} y + * @private + */ +TouchInput._onCancel = function(x, y) { + this._events.cancelled = true; + this._x = x; + this._y = y; +}; + +/** + * @static + * @method _onMove + * @param {Number} x + * @param {Number} y + * @private + */ +TouchInput._onMove = function(x, y) { + this._events.moved = true; + this._x = x; + this._y = y; +}; + +/** + * @static + * @method _onRelease + * @param {Number} x + * @param {Number} y + * @private + */ +TouchInput._onRelease = function(x, y) { + this._events.released = true; + this._x = x; + this._y = y; +}; + +//----------------------------------------------------------------------------- +/** + * The basic object that is rendered to the game screen. + * + * @class Sprite + * @constructor + * @param {Bitmap} bitmap The image for the sprite + */ +function Sprite() { + this.initialize.apply(this, arguments); +} + +Sprite.prototype = Object.create(PIXI.Sprite.prototype); +Sprite.prototype.constructor = Sprite; + +Sprite.prototype.initialize = function(bitmap) { + var texture = new PIXI.Texture(new PIXI.BaseTexture()); + + PIXI.Sprite.call(this, texture); + + this._bitmap = null; + this._frame = new Rectangle(); + this._realFrame = new Rectangle(); + this._offset = new Point(); + this._blendColor = [0, 0, 0, 0]; + this._colorTone = [0, 0, 0, 0]; + this._canvas = null; + this._context = null; + this._tintTexture = null; + + this.spriteId = Sprite._counter++; + this.opaque = false; + + this.bitmap = bitmap; +}; + +// Number of the created objects. +Sprite._counter = 0; + +/** + * The image for the sprite. + * + * @property bitmap + * @type Bitmap + */ +Object.defineProperty(Sprite.prototype, 'bitmap', { + get: function() { + return this._bitmap; + }, + set: function(value) { + if (this._bitmap !== value) { + this._bitmap = value; + if (this._bitmap) { + this.setFrame(0, 0, 0, 0); + this._bitmap.addLoadListener(this._onBitmapLoad.bind(this)); + } else { + this.texture.setFrame(Rectangle.emptyRectangle); + } + } + }, + configurable: true +}); + +/** + * The width of the sprite without the scale. + * + * @property width + * @type Number + */ +Object.defineProperty(Sprite.prototype, 'width', { + get: function() { + return this._frame.width; + }, + set: function(value) { + this._frame.width = value; + this._refresh(); + }, + configurable: true +}); + +/** + * The height of the sprite without the scale. + * + * @property height + * @type Number + */ +Object.defineProperty(Sprite.prototype, 'height', { + get: function() { + return this._frame.height; + }, + set: function(value) { + this._frame.height = value; + this._refresh(); + }, + configurable: true +}); + +/** + * The opacity of the sprite (0 to 255). + * + * @property opacity + * @type Number + */ +Object.defineProperty(Sprite.prototype, 'opacity', { + get: function() { + return this.alpha * 255; + }, + set: function(value) { + this.alpha = value.clamp(0, 255) / 255; + }, + configurable: true +}); + +/** + * Updates the sprite for each frame. + * + * @method update + */ +Sprite.prototype.update = function() { + this.children.forEach(function(child) { + if (child.update) { + child.update(); + } + }); +}; + +/** + * Sets the x and y at once. + * + * @method move + * @param {Number} x The x coordinate of the sprite + * @param {Number} y The y coordinate of the sprite + */ +Sprite.prototype.move = function(x, y) { + this.x = x; + this.y = y; +}; + +/** + * Sets the rectagle of the bitmap that the sprite displays. + * + * @method setFrame + * @param {Number} x The x coordinate of the frame + * @param {Number} y The y coordinate of the frame + * @param {Number} width The width of the frame + * @param {Number} height The height of the frame + */ +Sprite.prototype.setFrame = function(x, y, width, height) { + var frame = this._frame; + if (x !== frame.x || y !== frame.y || + width !== frame.width || height !== frame.height) { + frame.x = x; + frame.y = y; + frame.width = width; + frame.height = height; + this._refresh(); + } +}; + +/** + * Gets the blend color for the sprite. + * + * @method getBlendColor + * @return {Array} The blend color [r, g, b, a] + */ +Sprite.prototype.getBlendColor = function() { + return this._blendColor.clone(); +}; + +/** + * Sets the blend color for the sprite. + * + * @method setBlendColor + * @param {Array} color The blend color [r, g, b, a] + */ +Sprite.prototype.setBlendColor = function(color) { + if (!(color instanceof Array)) { + throw new Error('Argument must be an array'); + } + if (!this._blendColor.equals(color)) { + this._blendColor = color.clone(); + this._refresh(); + } +}; + +/** + * Gets the color tone for the sprite. + * + * @method getColorTone + * @return {Array} The color tone [r, g, b, gray] + */ +Sprite.prototype.getColorTone = function() { + return this._colorTone.clone(); +}; + +/** + * Sets the color tone for the sprite. + * + * @method setColorTone + * @param {Array} tone The color tone [r, g, b, gray] + */ +Sprite.prototype.setColorTone = function(tone) { + if (!(tone instanceof Array)) { + throw new Error('Argument must be an array'); + } + if (!this._colorTone.equals(tone)) { + this._colorTone = tone.clone(); + this._refresh(); + } +}; + +/** + * @method _onBitmapLoad + * @private + */ +Sprite.prototype._onBitmapLoad = function() { + if (this._frame.width === 0 && this._frame.height === 0) { + this._frame.width = this._bitmap.width; + this._frame.height = this._bitmap.height; + } + this._refresh(); +}; + +/** + * @method _refresh + * @private + */ +Sprite.prototype._refresh = function() { + var frameX = Math.floor(this._frame.x); + var frameY = Math.floor(this._frame.y); + var frameW = Math.floor(this._frame.width); + var frameH = Math.floor(this._frame.height); + var bitmapW = this._bitmap ? this._bitmap.width : 0; + var bitmapH = this._bitmap ? this._bitmap.height : 0; + var realX = frameX.clamp(0, bitmapW); + var realY = frameY.clamp(0, bitmapH); + var realW = (frameW - realX + frameX).clamp(0, bitmapW - realX); + var realH = (frameH - realY + frameY).clamp(0, bitmapH - realY); + + this._realFrame.x = realX; + this._realFrame.y = realY; + this._realFrame.width = realW; + this._realFrame.height = realH; + this._offset.x = realX - frameX; + this._offset.y = realY - frameY; + + if (realW > 0 && realH > 0) { + if (this._needsTint()) { + this._createTinter(realW, realH); + this._executeTint(realX, realY, realW, realH); + this._tintTexture.dirty(); + this.texture.baseTexture = this._tintTexture; + this.texture.setFrame(new Rectangle(0, 0, realW, realH)); + } else { + if (this._bitmap) { + this.texture.baseTexture = this._bitmap.baseTexture; + } + this.texture.setFrame(this._realFrame); + } + } else if (this._bitmap) { + this.texture.setFrame(Rectangle.emptyRectangle); + } else { + this.texture.trim = this._frame; + this.texture.setFrame(this._frame); + this.texture.trim = null; + } +}; + +/** + * @method _isInBitmapRect + * @param {Number} x + * @param {Number} y + * @param {Number} w + * @param {Number} h + * @return {Boolean} + * @private + */ +Sprite.prototype._isInBitmapRect = function(x, y, w, h) { + return (this._bitmap && x + w > 0 && y + h > 0 && + x < this._bitmap.width && y < this._bitmap.height); +}; + +/** + * @method _needsTint + * @return {Boolean} + * @private + */ +Sprite.prototype._needsTint = function() { + var tone = this._colorTone; + return tone[0] || tone[1] || tone[2] || tone[3] || this._blendColor[3] > 0; +}; + +/** + * @method _createTinter + * @param {Number} w + * @param {Number} h + * @private + */ +Sprite.prototype._createTinter = function(w, h) { + if (!this._canvas) { + this._canvas = document.createElement('canvas'); + this._context = this._canvas.getContext('2d'); + } + + this._canvas.width = w; + this._canvas.height = h; + + if (!this._tintTexture) { + this._tintTexture = new PIXI.BaseTexture(this._canvas); + } + + this._tintTexture.width = w; + this._tintTexture.height = h; + this._tintTexture.scaleMode = this._bitmap.baseTexture.scaleMode; +}; + +/** + * @method _executeTint + * @param {Number} x + * @param {Number} y + * @param {Number} w + * @param {Number} h + * @private + */ +Sprite.prototype._executeTint = function(x, y, w, h) { + var context = this._context; + var tone = this._colorTone; + var color = this._blendColor; + + context.globalCompositeOperation = 'copy'; + context.drawImage(this._bitmap.canvas, x, y, w, h, 0, 0, w, h); + + if (Graphics.canUseSaturationBlend()) { + var gray = Math.max(0, tone[3]); + context.globalCompositeOperation = 'saturation'; + context.fillStyle = 'rgba(255,255,255,' + gray / 255 + ')'; + context.fillRect(0, 0, w, h); + } + + var r1 = Math.max(0, tone[0]); + var g1 = Math.max(0, tone[1]); + var b1 = Math.max(0, tone[2]); + context.globalCompositeOperation = 'lighter'; + context.fillStyle = Utils.rgbToCssColor(r1, g1, b1); + context.fillRect(0, 0, w, h); + + if (Graphics.canUseDifferenceBlend()) { + context.globalCompositeOperation = 'difference'; + context.fillStyle = 'white'; + context.fillRect(0, 0, w, h); + + var r2 = Math.max(0, -tone[0]); + var g2 = Math.max(0, -tone[1]); + var b2 = Math.max(0, -tone[2]); + context.globalCompositeOperation = 'lighter'; + context.fillStyle = Utils.rgbToCssColor(r2, g2, b2); + context.fillRect(0, 0, w, h); + + context.globalCompositeOperation = 'difference'; + context.fillStyle = 'white'; + context.fillRect(0, 0, w, h); + } + + var r3 = Math.max(0, color[0]); + var g3 = Math.max(0, color[1]); + var b3 = Math.max(0, color[2]); + var a3 = Math.max(0, color[3]); + context.globalCompositeOperation = 'source-atop'; + context.fillStyle = Utils.rgbToCssColor(r3, g3, b3); + context.globalAlpha = a3 / 255; + context.fillRect(0, 0, w, h); + + context.globalCompositeOperation = 'destination-in'; + context.globalAlpha = 1; + context.drawImage(this._bitmap.canvas, x, y, w, h, 0, 0, w, h); +}; + +/** + * @method updateTransform + * @private + */ +Sprite.prototype.updateTransform = function() { + PIXI.Sprite.prototype.updateTransform.call(this); + this.worldTransform.tx += this._offset.x; + this.worldTransform.ty += this._offset.y; +}; + +/** + * @method _renderCanvas + * @param {Object} renderSession + * @private + */ +Sprite.prototype._renderCanvas = function(renderSession) { + if (this.visible && this.alpha > 0) { + if (this.texture.crop.width <= 0 || this.texture.crop.height <= 0) { + if (this._mask) { + renderSession.maskManager.pushMask(this._mask, renderSession); + } + for (var i = 0, j = this.children.length; i < j; i++) { + this.children[i]._renderCanvas(renderSession); + } + if (this._mask) { + renderSession.maskManager.popMask(renderSession); + } + } else { + PIXI.Sprite.prototype._renderCanvas.call(this, renderSession); + } + } +}; + +/** + * @method _renderWebGL + * @param {Object} renderSession + * @private + */ +Sprite.prototype._renderWebGL = function(renderSession) { + if (this.visible && this.alpha > 0) { + var spriteBatch = renderSession.spriteBatch; + if (this._filters) { + spriteBatch.flush(); + renderSession.filterManager.pushFilter(this._filterBlock); + if (this.opaque) { + // Required for a bug in Firefox on Windows + renderSession.gl.clearColor(0, 0, 0, 1); + renderSession.gl.clear(renderSession.gl.COLOR_BUFFER_BIT); + } + } + if (this._mask) { + spriteBatch.stop(); + renderSession.maskManager.pushMask(this.mask, renderSession); + spriteBatch.start(); + } + spriteBatch.render(this); + for (var i = 0, j = this.children.length; i < j; i++) { + this.children[i]._renderWebGL(renderSession); + } + if (this._mask) { + spriteBatch.stop(); + renderSession.maskManager.popMask(this._mask, renderSession); + spriteBatch.start(); + } + if (this._filters) { + spriteBatch.stop(); + renderSession.filterManager.popFilter(); + spriteBatch.start(); + } + } +}; + +// The important members from Pixi.js + +/** + * The visibility of the sprite. + * + * @property visible + * @type Boolean + */ + +/** + * The x coordinate of the sprite. + * + * @property x + * @type Number + */ + +/** + * The y coordinate of the sprite. + * + * @property y + * @type Number + */ + +/** + * The origin point of the sprite. (0,0) to (1,1). + * + * @property anchor + * @type Point + */ + +/** + * The scale factor of the sprite. + * + * @property scale + * @type Point + */ + +/** + * The rotation of the sprite in radians. + * + * @property rotation + * @type Number + */ + +/** + * The blend mode to be applied to the sprite. + * + * @property blendMode + * @type Number + */ + +/** + * Sets the filters for the sprite. + * + * @property filters + * @type Array + */ + +/** + * [read-only] The array of children of the sprite. + * + * @property children + * @type Array + */ + +/** + * [read-only] The object that contains the sprite. + * + * @property parent + * @type Object + */ + +/** + * Adds a child to the container. + * + * @method addChild + * @param {Object} child The child to add + * @return {Object} The child that was added + */ + +/** + * Adds a child to the container at a specified index. + * + * @method addChildAt + * @param {Object} child The child to add + * @param {Number} index The index to place the child in + * @return {Object} The child that was added + */ + +/** + * Removes a child from the container. + * + * @method removeChild + * @param {Object} child The child to remove + * @return {Object} The child that was removed + */ + +/** + * Removes a child from the specified index position. + * + * @method removeChildAt + * @param {Number} index The index to get the child from + * @return {Object} The child that was removed + */ + +//----------------------------------------------------------------------------- +/** + * The tilemap which displays 2D tile-based game map. + * + * @class Tilemap + * @constructor + */ +function Tilemap() { + this.initialize.apply(this, arguments); +} + +Tilemap.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); +Tilemap.prototype.constructor = Tilemap; + +Tilemap.prototype.initialize = function() { + PIXI.DisplayObjectContainer.call(this); + + this._margin = 20; + this._width = Graphics.width + this._margin * 2; + this._height = Graphics.height + this._margin * 2; + this._tileWidth = 48; + this._tileHeight = 48; + this._mapWidth = 0; + this._mapHeight = 0; + this._mapData = null; + this._layerWidth = 0; + this._layerHeight = 0; + this._lastTiles = []; + + /** + * The bitmaps used as a tileset. + * + * @property bitmaps + * @type Array + */ + this.bitmaps = []; + + /** + * The origin point of the tilemap for scrolling. + * + * @property origin + * @type Point + */ + this.origin = new Point(); + + /** + * The tileset flags. + * + * @property flags + * @type Array + */ + this.flags = []; + + /** + * The animation count for autotiles. + * + * @property animationCount + * @type Number + */ + this.animationCount = 0; + + /** + * Whether the tilemap loops horizontal. + * + * @property horizontalWrap + * @type Boolean + */ + this.horizontalWrap = false; + + /** + * Whether the tilemap loops vertical. + * + * @property verticalWrap + * @type Boolean + */ + this.verticalWrap = false; + + this._createLayers(); + this.refresh(); +}; + +/** + * The width of the screen in pixels. + * + * @property width + * @type Number + */ +Object.defineProperty(Tilemap.prototype, 'width', { + get: function() { + return this._width; + }, + set: function(value) { + if (this._width !== value) { + this._width = value; + this._createLayers(); + } + } +}); + +/** + * The height of the screen in pixels. + * + * @property height + * @type Number + */ +Object.defineProperty(Tilemap.prototype, 'height', { + get: function() { + return this._height; + }, + set: function(value) { + if (this._height !== value) { + this._height = value; + this._createLayers(); + } + } +}); + +/** + * The width of a tile in pixels. + * + * @property tileWidth + * @type Number + */ +Object.defineProperty(Tilemap.prototype, 'tileWidth', { + get: function() { + return this._tileWidth; + }, + set: function(value) { + if (this._tileWidth !== value) { + this._tileWidth = value; + this._createLayers(); + } + } +}); + +/** + * The height of a tile in pixels. + * + * @property tileHeight + * @type Number + */ +Object.defineProperty(Tilemap.prototype, 'tileHeight', { + get: function() { + return this._tileHeight; + }, + set: function(value) { + if (this._tileHeight !== value) { + this._tileHeight = value; + this._createLayers(); + } + } +}); + +/** + * Sets the tilemap data. + * + * @method setData + * @param {Number} width The width of the map in number of tiles + * @param {Number} height The height of the map in number of tiles + * @param {Array} data The one dimensional array for the map data + */ +Tilemap.prototype.setData = function(width, height, data) { + this._mapWidth = width; + this._mapHeight = height; + this._mapData = data; +}; + +/** + * Checks whether the tileset is ready to render. + * + * @method isReady + * @type Boolean + * @return {Boolean} True if the tilemap is ready + */ +Tilemap.prototype.isReady = function() { + for (var i = 0; i < this.bitmaps.length; i++) { + if (this.bitmaps[i] && !this.bitmaps[i].isReady()) { + return false; + } + } + return true; +}; + +/** + * Updates the tilemap for each frame. + * + * @method update + */ +Tilemap.prototype.update = function() { + this.animationCount++; + this.children.forEach(function(child) { + if (child.update) { + child.update(); + } + }); +}; + +/** + * Forces to repaint the entire tilemap. + * + * @method refresh + */ +Tilemap.prototype.refresh = function() { + this._lastTiles.length = 0; +}; + +/** + * @method updateTransform + * @private + */ +Tilemap.prototype.updateTransform = function() { + var ox = Math.floor(this.origin.x); + var oy = Math.floor(this.origin.y); + var startX = Math.floor((ox - this._margin) / this._tileWidth); + var startY = Math.floor((oy - this._margin) / this._tileHeight); + this._updateLayerPositions(startX, startY); + this._paintAllTiles(startX, startY); + this._sortChildren(); + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +/** + * @method _createLayers + * @private + */ +Tilemap.prototype._createLayers = function() { + var width = this._width; + var height = this._height; + var margin = this._margin; + var tileCols = Math.ceil(width / this._tileWidth) + 1; + var tileRows = Math.ceil(height / this._tileHeight) + 1; + var layerWidth = tileCols * this._tileWidth; + var layerHeight = tileRows * this._tileHeight; + this._lowerBitmap = new Bitmap(layerWidth, layerHeight); + this._upperBitmap = new Bitmap(layerWidth, layerHeight); + this._layerWidth = layerWidth; + this._layerHeight = layerHeight; + + /* + * Z coordinate: + * + * 0 : Lower tiles + * 1 : Lower characters + * 3 : Normal characters + * 4 : Upper tiles + * 5 : Upper characters + * 6 : Airship shadow + * 7 : Balloon + * 8 : Animation + * 9 : Destination + */ + + this._lowerLayer = new Sprite(); + this._lowerLayer.move(-margin, -margin, width, height); + this._lowerLayer.z = 0; + + this._upperLayer = new Sprite(); + this._upperLayer.move(-margin, -margin, width, height); + this._upperLayer.z = 4; + + for (var i = 0; i < 4; i++) { + this._lowerLayer.addChild(new Sprite(this._lowerBitmap)); + this._upperLayer.addChild(new Sprite(this._upperBitmap)); + } + + this.addChild(this._lowerLayer); + this.addChild(this._upperLayer); +}; + +/** + * @method _updateLayerPositions + * @param {Number} startX + * @param {Number} startY + * @private + */ +Tilemap.prototype._updateLayerPositions = function(startX, startY) { + var m = this._margin; + var ox = Math.floor(this.origin.x); + var oy = Math.floor(this.origin.y); + var x2 = (ox - m).mod(this._layerWidth); + var y2 = (oy - m).mod(this._layerHeight); + var w1 = this._layerWidth - x2; + var h1 = this._layerHeight - y2; + var w2 = this._width - w1; + var h2 = this._height - h1; + + for (var i = 0; i < 2; i++) { + var children; + if (i === 0) { + children = this._lowerLayer.children; + } else { + children = this._upperLayer.children; + } + children[0].move(0, 0, w1, h1); + children[0].setFrame(x2, y2, w1, h1); + children[1].move(w1, 0, w2, h1); + children[1].setFrame(0, y2, w2, h1); + children[2].move(0, h1, w1, h2); + children[2].setFrame(x2, 0, w1, h2); + children[3].move(w1, h1, w2, h2); + children[3].setFrame(0, 0, w2, h2); + } +}; + +/** + * @method _paintAllTiles + * @param {Number} startX + * @param {Number} startY + * @private + */ +Tilemap.prototype._paintAllTiles = function(startX, startY) { + var tileCols = Math.ceil(this._width / this._tileWidth) + 1; + var tileRows = Math.ceil(this._height / this._tileHeight) + 1; + for (var y = 0; y < tileRows; y++) { + for (var x = 0; x < tileCols; x++) { + this._paintTiles(startX, startY, x, y); + } + } +}; + +/** + * @method _paintTiles + * @param {Number} startX + * @param {Number} startY + * @param {Number} x + * @param {Number} y + * @private + */ +Tilemap.prototype._paintTiles = function(startX, startY, x, y) { + var tableEdgeVirtualId = 10000; + var mx = startX + x; + var my = startY + y; + var dx = (mx * this._tileWidth).mod(this._layerWidth); + var dy = (my * this._tileHeight).mod(this._layerHeight); + var lx = dx / this._tileWidth; + var ly = dy / this._tileHeight; + var tileId0 = this._readMapData(mx, my, 0); + var tileId1 = this._readMapData(mx, my, 1); + var tileId2 = this._readMapData(mx, my, 2); + var tileId3 = this._readMapData(mx, my, 3); + var shadowBits = this._readMapData(mx, my, 4); + var upperTileId1 = this._readMapData(mx, my - 1, 1); + var lowerTiles = []; + var upperTiles = []; + + if (this._isHigherTile(tileId0)) { + upperTiles.push(tileId0); + } else { + lowerTiles.push(tileId0); + } + if (this._isHigherTile(tileId1)) { + upperTiles.push(tileId1); + } else { + lowerTiles.push(tileId1); + } + + lowerTiles.push(-shadowBits); + + if (this._isTableTile(upperTileId1) && !this._isTableTile(tileId1)) { + if (!Tilemap.isShadowingTile(tileId0)) { + lowerTiles.push(tableEdgeVirtualId + upperTileId1); + } + } + + if (this._isOverpassPosition(mx, my)) { + upperTiles.push(tileId2); + upperTiles.push(tileId3); + } else { + if (this._isHigherTile(tileId2)) { + upperTiles.push(tileId2); + } else { + lowerTiles.push(tileId2); + } + if (this._isHigherTile(tileId3)) { + upperTiles.push(tileId3); + } else { + lowerTiles.push(tileId3); + } + } + + var count = 1000 + this.animationCount - my; + var frameUpdated = (count % 30 === 0); + this._animationFrame = Math.floor(count / 30); + + var lastLowerTiles = this._readLastTiles(0, lx, ly); + if (!lowerTiles.equals(lastLowerTiles) || + (Tilemap.isTileA1(tileId0) && frameUpdated)) { + this._lowerBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight); + for (var i = 0; i < lowerTiles.length; i++) { + var lowerTileId = lowerTiles[i]; + if (lowerTileId < 0) { + this._drawShadow(this._lowerBitmap, shadowBits, dx, dy); + } else if (lowerTileId >= tableEdgeVirtualId) { + this._drawTableEdge(this._lowerBitmap, upperTileId1, dx, dy); + } else { + this._drawTile(this._lowerBitmap, lowerTileId, dx, dy); + } + } + this._writeLastTiles(0, lx, ly, lowerTiles); + } + + var lastUpperTiles = this._readLastTiles(1, lx, ly); + if (!upperTiles.equals(lastUpperTiles)) { + this._upperBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight); + for (var j = 0; j < upperTiles.length; j++) { + this._drawTile(this._upperBitmap, upperTiles[j], dx, dy); + } + this._writeLastTiles(1, lx, ly, upperTiles); + } +}; + +/** + * @method _readLastTiles + * @param {Number} i + * @param {Number} x + * @param {Number} y + * @private + */ +Tilemap.prototype._readLastTiles = function(i, x, y) { + var array1 = this._lastTiles[i]; + if (array1) { + var array2 = array1[y]; + if (array2) { + var tiles = array2[x]; + if (tiles) { + return tiles; + } + } + } + return []; +}; + +/** + * @method _writeLastTiles + * @param {Number} i + * @param {Number} x + * @param {Number} y + * @param {Array} tiles + * @private + */ +Tilemap.prototype._writeLastTiles = function(i, x, y, tiles) { + var array1 = this._lastTiles[i]; + if (!array1) { + array1 = this._lastTiles[i] = []; + } + var array2 = array1[y]; + if (!array2) { + array2 = array1[y] = []; + } + array2[x] = tiles; +}; + +/** + * @method _drawTile + * @param {Bitmap} bitmap + * @param {Number} tileId + * @param {Number} dx + * @param {Number} dy + * @private + */ +Tilemap.prototype._drawTile = function(bitmap, tileId, dx, dy) { + if (Tilemap.isVisibleTile(tileId)) { + if (Tilemap.isAutotile(tileId)) { + this._drawAutotile(bitmap, tileId, dx, dy); + } else { + this._drawNormalTile(bitmap, tileId, dx, dy); + } + } +}; + +/** + * @method _drawNormalTile + * @param {Bitmap} bitmap + * @param {Number} tileId + * @param {Number} dx + * @param {Number} dy + * @private + */ +Tilemap.prototype._drawNormalTile = function(bitmap, tileId, dx, dy) { + var setNumber = 0; + + if (Tilemap.isTileA5(tileId)) { + setNumber = 4; + } else { + setNumber = 5 + Math.floor(tileId / 256); + } + + var w = this._tileWidth; + var h = this._tileHeight; + var sx = (Math.floor(tileId / 128) % 2 * 8 + tileId % 8) * w; + var sy = (Math.floor(tileId % 256 / 8) % 16) * h; + + var source = this.bitmaps[setNumber]; + if (source) { + bitmap.blt(source, sx, sy, w, h, dx, dy, w, h); + } +}; + +/** + * @method _drawAutotile + * @param {Bitmap} bitmap + * @param {Number} tileId + * @param {Number} dx + * @param {Number} dy + * @private + */ +Tilemap.prototype._drawAutotile = function(bitmap, tileId, dx, dy) { + var autotileTable = Tilemap.FLOOR_AUTOTILE_TABLE; + var kind = Tilemap.getAutotileKind(tileId); + var shape = Tilemap.getAutotileShape(tileId); + var tx = kind % 8; + var ty = Math.floor(kind / 8); + var bx = 0; + var by = 0; + var setNumber = 0; + var isTable = false; + + if (Tilemap.isTileA1(tileId)) { + var waterSurfaceIndex = [0, 1, 2, 1][this._animationFrame % 4]; + setNumber = 0; + if (kind === 0) { + bx = waterSurfaceIndex * 2; + by = 0; + } else if (kind === 1) { + bx = waterSurfaceIndex * 2; + by = 3; + } else if (kind === 2) { + bx = 6; + by = 0; + } else if (kind === 3) { + bx = 6; + by = 3; + } else { + bx = Math.floor(tx / 4) * 8; + by = ty * 6 + Math.floor(tx / 2) % 2 * 3; + if (kind % 2 === 0) { + bx += waterSurfaceIndex * 2; + } + else { + bx += 6; + autotileTable = Tilemap.WATERFALL_AUTOTILE_TABLE; + by += this._animationFrame % 3; + } + } + } else if (Tilemap.isTileA2(tileId)) { + setNumber = 1; + bx = tx * 2; + by = (ty - 2) * 3; + isTable = this._isTableTile(tileId); + } else if (Tilemap.isTileA3(tileId)) { + setNumber = 2; + bx = tx * 2; + by = (ty - 6) * 2; + autotileTable = Tilemap.WALL_AUTOTILE_TABLE; + } else if (Tilemap.isTileA4(tileId)) { + setNumber = 3; + bx = tx * 2; + by = Math.floor((ty - 10) * 2.5 + (ty % 2 === 1 ? 0.5 : 0)); + if (ty % 2 === 1) { + autotileTable = Tilemap.WALL_AUTOTILE_TABLE; + } + } + + var table = autotileTable[shape]; + var source = this.bitmaps[setNumber]; + + if (table && source) { + var w1 = this._tileWidth / 2; + var h1 = this._tileHeight / 2; + for (var i = 0; i < 4; i++) { + var qsx = table[i][0]; + var qsy = table[i][1]; + var sx1 = (bx * 2 + qsx) * w1; + var sy1 = (by * 2 + qsy) * h1; + var dx1 = dx + (i % 2) * w1; + var dy1 = dy + Math.floor(i / 2) * h1; + if (isTable && (qsy === 1 || qsy === 5)) { + var qsx2 = qsx; + var qsy2 = 3; + if (qsy === 1) { + qsx2 = [0,3,2,1][qsx]; + } + var sx2 = (bx * 2 + qsx2) * w1; + var sy2 = (by * 2 + qsy2) * h1; + bitmap.blt(source, sx2, sy2, w1, h1, dx1, dy1, w1, h1); + dy1 += h1/2; + bitmap.blt(source, sx1, sy1, w1, h1/2, dx1, dy1, w1, h1/2); + } else { + bitmap.blt(source, sx1, sy1, w1, h1, dx1, dy1, w1, h1); + } + } + } +}; + +/** + * @method _drawTableEdge + * @param {Bitmap} bitmap + * @param {Number} tileId + * @param {Number} dx + * @param {Number} dy + * @private + */ +Tilemap.prototype._drawTableEdge = function(bitmap, tileId, dx, dy) { + if (Tilemap.isTileA2(tileId)) { + var autotileTable = Tilemap.FLOOR_AUTOTILE_TABLE; + var kind = Tilemap.getAutotileKind(tileId); + var shape = Tilemap.getAutotileShape(tileId); + var tx = kind % 8; + var ty = Math.floor(kind / 8); + var setNumber = 1; + var bx = tx * 2; + var by = (ty - 2) * 3; + var table = autotileTable[shape]; + + if (table) { + var source = this.bitmaps[setNumber]; + var w1 = this._tileWidth / 2; + var h1 = this._tileHeight / 2; + for (var i = 0; i < 2; i++) { + var qsx = table[2 + i][0]; + var qsy = table[2 + i][1]; + var sx1 = (bx * 2 + qsx) * w1; + var sy1 = (by * 2 + qsy) * h1 + h1/2; + var dx1 = dx + (i % 2) * w1; + var dy1 = dy + Math.floor(i / 2) * h1; + bitmap.blt(source, sx1, sy1, w1, h1/2, dx1, dy1, w1, h1/2); + } + } + } +}; + +/** + * @method _drawShadow + * @param {Bitmap} bitmap + * @param {Number} shadowBits + * @param {Number} dx + * @param {Number} dy + * @private + */ +Tilemap.prototype._drawShadow = function(bitmap, shadowBits, dx, dy) { + if (shadowBits & 0x0f) { + var w1 = this._tileWidth / 2; + var h1 = this._tileHeight / 2; + var color = 'rgba(0,0,0,0.5)'; + for (var i = 0; i < 4; i++) { + if (shadowBits & (1 << i)) { + var dx1 = dx + (i % 2) * w1; + var dy1 = dy + Math.floor(i / 2) * h1; + bitmap.fillRect(dx1, dy1, w1, h1, color); + } + } + } +}; + +/** + * @method _readMapData + * @param {Number} x + * @param {Number} y + * @param {Number} z + * @return {Number} + * @private + */ +Tilemap.prototype._readMapData = function(x, y, z) { + if (this._mapData) { + var width = this._mapWidth; + var height = this._mapHeight; + if (this.horizontalWrap) { + x = x.mod(width); + } + if (this.verticalWrap) { + y = y.mod(height); + } + if (x >= 0 && x < width && y >= 0 && y < height) { + return this._mapData[(z * height + y) * width + x] || 0; + } else { + return 0; + } + } else { + return 0; + } +}; + +/** + * @method _isHigherTile + * @param {Number} tileId + * @return {Boolean} + * @private + */ +Tilemap.prototype._isHigherTile = function(tileId) { + return this.flags[tileId] & 0x10; +}; + +/** + * @method _isTableTile + * @param {Number} tileId + * @return {Boolean} + * @private + */ +Tilemap.prototype._isTableTile = function(tileId) { + return Tilemap.isTileA2(tileId) && (this.flags[tileId] & 0x80); +}; + +/** + * @method _isOverpassPosition + * @param {Number} mx + * @param {Number} my + * @return {Boolean} + * @private + */ +Tilemap.prototype._isOverpassPosition = function(mx, my) { + return false; +}; + +/** + * @method _sortChildren + * @private + */ +Tilemap.prototype._sortChildren = function() { + this.children.sort(this._compareChildOrder.bind(this)); +}; + +/** + * @method _compareChildOrder + * @param {Object} a + * @param {Object} b + * @private + */ +Tilemap.prototype._compareChildOrder = function(a, b) { + if (a.z !== b.z) { + return a.z - b.z; + } else if (a.y !== b.y) { + return a.y - b.y; + } else { + return a.spriteId - b.spriteId; + } +}; + +// Tile type checkers + +Tilemap.TILE_ID_B = 0; +Tilemap.TILE_ID_C = 256; +Tilemap.TILE_ID_D = 512; +Tilemap.TILE_ID_E = 768; +Tilemap.TILE_ID_A5 = 1536; +Tilemap.TILE_ID_A1 = 2048; +Tilemap.TILE_ID_A2 = 2816; +Tilemap.TILE_ID_A3 = 4352; +Tilemap.TILE_ID_A4 = 5888; +Tilemap.TILE_ID_MAX = 8192; + +Tilemap.isVisibleTile = function(tileId) { + return tileId > 0 && tileId < this.TILE_ID_MAX; +}; + +Tilemap.isAutotile = function(tileId) { + return tileId >= this.TILE_ID_A1; +}; + +Tilemap.getAutotileKind = function(tileId) { + return Math.floor((tileId - this.TILE_ID_A1) / 48); +}; + +Tilemap.getAutotileShape = function(tileId) { + return (tileId - this.TILE_ID_A1) % 48; +}; + +Tilemap.makeAutotileId = function(kind, shape) { + return this.TILE_ID_A1 + kind * 48 + shape; +}; + +Tilemap.isSameKindTile = function(tileID1, tileID2) { + if (this.isAutotile(tileID1) && this.isAutotile(tileID2)) { + return this.getAutotileKind(tileID1) === this.getAutotileKind(tileID2); + } else { + return tileID1 === tileID2; + } +}; + +Tilemap.isTileA1 = function(tileId) { + return tileId >= this.TILE_ID_A1 && tileId < this.TILE_ID_A2; +}; + +Tilemap.isTileA2 = function(tileId) { + return tileId >= this.TILE_ID_A2 && tileId < this.TILE_ID_A3; +}; + +Tilemap.isTileA3 = function(tileId) { + return tileId >= this.TILE_ID_A3 && tileId < this.TILE_ID_A4; +}; + +Tilemap.isTileA4 = function(tileId) { + return tileId >= this.TILE_ID_A4 && tileId < this.TILE_ID_MAX; +}; + +Tilemap.isTileA5 = function(tileId) { + return tileId >= this.TILE_ID_A5 && tileId < this.TILE_ID_A1; +}; + +Tilemap.isWaterTile = function(tileId) { + if (this.isTileA1(tileId)) { + return !(tileId >= this.TILE_ID_A1 + 96 && tileId < this.TILE_ID_A1 + 192); + } else { + return false; + } +}; + +Tilemap.isWaterfallTile = function(tileId) { + if (tileId >= this.TILE_ID_A1 + 192 && tileId < this.TILE_ID_A2) { + return this.getAutotileKind(tileId) % 2 === 1; + } else { + return false; + } +}; + +Tilemap.isGroundTile = function(tileId) { + return this.isTileA1(tileId) || this.isTileA2(tileId) || this.isTileA5(tileId); +}; + +Tilemap.isShadowingTile = function(tileId) { + return this.isTileA3(tileId) || this.isTileA4(tileId); +}; + +Tilemap.isRoofTile = function(tileId) { + return this.isTileA3(tileId) && this.getAutotileKind(tileId) % 16 < 8; +}; + +Tilemap.isWallTopTile = function(tileId) { + return this.isTileA4(tileId) && this.getAutotileKind(tileId) % 16 < 8; +}; + +Tilemap.isWallSideTile = function(tileId) { + return (this.isTileA3(tileId) || this.isTileA4(tileId)) && + getAutotileKind(tileId) % 16 >= 8; +}; + +Tilemap.isWallTile = function(tileId) { + return this.isWallTopTile(tileId) || this.isWallSideTile(tileId); +}; + +Tilemap.isFloorTypeAutotile = function(tileId) { + return (this.isTileA1(tileId) && !this.isWaterfallTile(tileId)) || + this.isTileA2(tileId) || this.isWallTopTile(tileId); +}; + +Tilemap.isWallTypeAutotile = function(tileId) { + return this.isRoofTile(tileId) || this.isWallSideTile(tileId); +}; + +Tilemap.isWaterfallTypeAutotile = function(tileId) { + return this.isWaterfallTile(tileId); +}; + +// Autotile shape number to coordinates of tileset images + +Tilemap.FLOOR_AUTOTILE_TABLE = [ + [[2,4],[1,4],[2,3],[1,3]],[[2,0],[1,4],[2,3],[1,3]], + [[2,4],[3,0],[2,3],[1,3]],[[2,0],[3,0],[2,3],[1,3]], + [[2,4],[1,4],[2,3],[3,1]],[[2,0],[1,4],[2,3],[3,1]], + [[2,4],[3,0],[2,3],[3,1]],[[2,0],[3,0],[2,3],[3,1]], + [[2,4],[1,4],[2,1],[1,3]],[[2,0],[1,4],[2,1],[1,3]], + [[2,4],[3,0],[2,1],[1,3]],[[2,0],[3,0],[2,1],[1,3]], + [[2,4],[1,4],[2,1],[3,1]],[[2,0],[1,4],[2,1],[3,1]], + [[2,4],[3,0],[2,1],[3,1]],[[2,0],[3,0],[2,1],[3,1]], + [[0,4],[1,4],[0,3],[1,3]],[[0,4],[3,0],[0,3],[1,3]], + [[0,4],[1,4],[0,3],[3,1]],[[0,4],[3,0],[0,3],[3,1]], + [[2,2],[1,2],[2,3],[1,3]],[[2,2],[1,2],[2,3],[3,1]], + [[2,2],[1,2],[2,1],[1,3]],[[2,2],[1,2],[2,1],[3,1]], + [[2,4],[3,4],[2,3],[3,3]],[[2,4],[3,4],[2,1],[3,3]], + [[2,0],[3,4],[2,3],[3,3]],[[2,0],[3,4],[2,1],[3,3]], + [[2,4],[1,4],[2,5],[1,5]],[[2,0],[1,4],[2,5],[1,5]], + [[2,4],[3,0],[2,5],[1,5]],[[2,0],[3,0],[2,5],[1,5]], + [[0,4],[3,4],[0,3],[3,3]],[[2,2],[1,2],[2,5],[1,5]], + [[0,2],[1,2],[0,3],[1,3]],[[0,2],[1,2],[0,3],[3,1]], + [[2,2],[3,2],[2,3],[3,3]],[[2,2],[3,2],[2,1],[3,3]], + [[2,4],[3,4],[2,5],[3,5]],[[2,0],[3,4],[2,5],[3,5]], + [[0,4],[1,4],[0,5],[1,5]],[[0,4],[3,0],[0,5],[1,5]], + [[0,2],[3,2],[0,3],[3,3]],[[0,2],[1,2],[0,5],[1,5]], + [[0,4],[3,4],[0,5],[3,5]],[[2,2],[3,2],[2,5],[3,5]], + [[0,2],[3,2],[0,5],[3,5]],[[0,0],[1,0],[0,1],[1,1]] +]; + +Tilemap.WALL_AUTOTILE_TABLE = [ + [[2,2],[1,2],[2,1],[1,1]],[[0,2],[1,2],[0,1],[1,1]], + [[2,0],[1,0],[2,1],[1,1]],[[0,0],[1,0],[0,1],[1,1]], + [[2,2],[3,2],[2,1],[3,1]],[[0,2],[3,2],[0,1],[3,1]], + [[2,0],[3,0],[2,1],[3,1]],[[0,0],[3,0],[0,1],[3,1]], + [[2,2],[1,2],[2,3],[1,3]],[[0,2],[1,2],[0,3],[1,3]], + [[2,0],[1,0],[2,3],[1,3]],[[0,0],[1,0],[0,3],[1,3]], + [[2,2],[3,2],[2,3],[3,3]],[[0,2],[3,2],[0,3],[3,3]], + [[2,0],[3,0],[2,3],[3,3]],[[0,0],[3,0],[0,3],[3,3]] +]; + +Tilemap.WATERFALL_AUTOTILE_TABLE = [ + [[2,0],[1,0],[2,1],[1,1]],[[0,0],[1,0],[0,1],[1,1]], + [[2,0],[3,0],[2,1],[3,1]],[[0,0],[3,0],[0,1],[3,1]] +]; + +// The important members from Pixi.js + +/** + * [read-only] The array of children of the tilemap. + * + * @property children + * @type Array + */ + +/** + * [read-only] The object that contains the tilemap. + * + * @property parent + * @type Object + */ + +/** + * Adds a child to the container. + * + * @method addChild + * @param {Object} child The child to add + * @return {Object} The child that was added + */ + +/** + * Adds a child to the container at a specified index. + * + * @method addChildAt + * @param {Object} child The child to add + * @param {Number} index The index to place the child in + * @return {Object} The child that was added + */ + +/** + * Removes a child from the container. + * + * @method removeChild + * @param {Object} child The child to remove + * @return {Object} The child that was removed + */ + +/** + * Removes a child from the specified index position. + * + * @method removeChildAt + * @param {Number} index The index to get the child from + * @return {Object} The child that was removed + */ + +//----------------------------------------------------------------------------- +/** + * The sprite object for a tiling image. + * + * @class TilingSprite + * @constructor + * @param {Bitmap} bitmap The image for the tiling sprite + */ +function TilingSprite() { + this.initialize.apply(this, arguments); +} + +TilingSprite.prototype = Object.create(PIXI.TilingSprite.prototype); +TilingSprite.prototype.constructor = TilingSprite; + +TilingSprite.prototype.initialize = function(bitmap) { + var texture = new PIXI.Texture(new PIXI.BaseTexture()); + + PIXI.TilingSprite.call(this, texture); + + this._bitmap = null; + this._width = 0; + this._height = 0; + this._frame = new Rectangle(); + + /** + * The origin point of the tiling sprite for scrolling. + * + * @property origin + * @type Point + */ + this.origin = new Point(); + + this.bitmap = bitmap; +}; + +/** + * The image for the tiling sprite. + * + * @property bitmap + * @type Bitmap + */ +Object.defineProperty(TilingSprite.prototype, 'bitmap', { + get: function() { + return this._bitmap; + }, + set: function(value) { + if (this._bitmap !== value) { + this._bitmap = value; + if (this._bitmap) { + this._bitmap.addLoadListener(this._onBitmapLoad.bind(this)); + } else { + this.texture.setFrame(Rectangle.emptyRectangle); + } + } + }, + configurable: true +}); + +/** + * The opacity of the tiling sprite (0 to 255). + * + * @property opacity + * @type Number + */ +Object.defineProperty(TilingSprite.prototype, 'opacity', { + get: function() { + return this.alpha * 255; + }, + set: function(value) { + this.alpha = value.clamp(0, 255) / 255; + }, + configurable: true +}); + +TilingSprite.prototype.generateTilingTexture = function(arg) { + PIXI.TilingSprite.prototype.generateTilingTexture.call(this, arg); + // Purge from Pixi's Cache + if (Graphics.isWebGL()) { + if (this.tilingTexture.canvasBuffer) + PIXI.Texture.removeTextureFromCache(this.tilingTexture.canvasBuffer.canvas._pixiId); + } +}; + +/** + * Updates the tiling sprite for each frame. + * + * @method update + */ +TilingSprite.prototype.update = function() { + this.children.forEach(function(child) { + if (child.update) { + child.update(); + } + }); +}; + +/** + * Sets the x, y, width, and height all at once. + * + * @method move + * @param {Number} x The x coordinate of the tiling sprite + * @param {Number} y The y coordinate of the tiling sprite + * @param {Number} width The width of the tiling sprite + * @param {Number} height The height of the tiling sprite + */ +TilingSprite.prototype.move = function(x, y, width, height) { + this.x = x || 0; + this.y = y || 0; + this._width = width || 0; + this._height = height || 0; +}; + +/** + * Specifies the region of the image that the tiling sprite will use. + * + * @method setFrame + * @param {Number} x The x coordinate of the frame + * @param {Number} y The y coordinate of the frame + * @param {Number} width The width of the frame + * @param {Number} height The height of the frame + */ +TilingSprite.prototype.setFrame = function(x, y, width, height) { + this._frame.x = x; + this._frame.y = y; + this._frame.width = width; + this._frame.height = height; + this._refresh(); +}; + +/** + * @method updateTransform + * @private + */ +TilingSprite.prototype.updateTransform = function() { + this.tilePosition.x = Math.round(-this.origin.x); + this.tilePosition.y = Math.round(-this.origin.y); + if (!this.tilingTexture) { + this.originalTexture = null; + this.generateTilingTexture(true); + } + PIXI.TilingSprite.prototype.updateTransform.call(this); +}; + +/** + * @method _onBitmapLoad + * @private + */ +TilingSprite.prototype._onBitmapLoad = function() { + this.texture.baseTexture = this._bitmap.baseTexture; + this._refresh(); +}; + +/** + * @method _refresh + * @private + */ +TilingSprite.prototype._refresh = function() { + var frame = this._frame.clone(); + if (frame.width === 0 && frame.height === 0 && this._bitmap) { + frame.width = this._bitmap.width; + frame.height = this._bitmap.height; + } + var lastTrim = this.texture.trim; + this.texture.trim = frame; + this.texture.setFrame(frame); + this.texture.trim = lastTrim; + this.tilingTexture = null; +}; + +// The important members from Pixi.js + +/** + * The visibility of the tiling sprite. + * + * @property visible + * @type Boolean + */ + +/** + * The x coordinate of the tiling sprite. + * + * @property x + * @type Number + */ + +/** + * The y coordinate of the tiling sprite. + * + * @property y + * @type Number + */ + +//----------------------------------------------------------------------------- +/** + * The sprite which covers the entire game screen. + * + * @class ScreenSprite + * @constructor + */ +function ScreenSprite() { + this.initialize.apply(this, arguments); +} + +ScreenSprite.prototype = Object.create(PIXI.Sprite.prototype); +ScreenSprite.prototype.constructor = ScreenSprite; + +ScreenSprite.prototype.initialize = function() { + var texture = new PIXI.Texture(new PIXI.BaseTexture()); + + PIXI.Sprite.call(this, texture); + + this._bitmap = new Bitmap(1, 1); + this.texture.baseTexture = this._bitmap.baseTexture; + this.texture.setFrame(new Rectangle(0, 0, 1, 1)); + this.scale.x = Graphics.width; + this.scale.y = Graphics.height; + this.opacity = 0; + + this._red = -1; + this._green = -1; + this._blue = -1; + this._colorText = ''; + this.setBlack(); +}; + +/** + * The opacity of the sprite (0 to 255). + * + * @property opacity + * @type Number + */ +Object.defineProperty(ScreenSprite.prototype, 'opacity', { + get: function() { + return this.alpha * 255; + }, + set: function(value) { + this.alpha = value.clamp(0, 255) / 255; + }, + configurable: true +}); + +/** + * Sets black to the color of the screen sprite. + * + * @method setBlack + */ +ScreenSprite.prototype.setBlack = function() { + this.setColor(0, 0, 0); +}; + +/** + * Sets white to the color of the screen sprite. + * + * @method setWhite + */ +ScreenSprite.prototype.setWhite = function() { + this.setColor(255, 255, 255); +}; + +/** + * Sets the color of the screen sprite by values. + * + * @method setColor + * @param {Number} r The red value in the range (0, 255) + * @param {Number} g The green value in the range (0, 255) + * @param {Number} b The blue value in the range (0, 255) + */ +ScreenSprite.prototype.setColor = function(r, g, b) { + if (this._red !== r || this._green !== g || this._blue !== b) { + r = Math.round(r || 0).clamp(0, 255); + g = Math.round(g || 0).clamp(0, 255); + b = Math.round(b || 0).clamp(0, 255); + this._red = r; + this._green = g; + this._blue = b; + this._colorText = Utils.rgbToCssColor(r, g, b); + this._bitmap.fillAll(this._colorText); + } +}; + +/** + * @method _renderCanvas + * @param {Object} renderSession + * @private + */ +ScreenSprite.prototype._renderCanvas = function(renderSession) { + if (this.visible && this.alpha > 0) { + var context = renderSession.context; + var t = this.worldTransform; + var r = renderSession.resolution; + context.setTransform(t.a, t.b, t.c, t.d, t.tx * r, t.ty * r); + context.globalCompositeOperation = PIXI.blendModesCanvas[this.blendMode]; + context.globalAlpha = this.alpha; + context.fillStyle = this._colorText; + context.fillRect(0, 0, Graphics.width, Graphics.height); + } +}; + +//----------------------------------------------------------------------------- +/** + * The window in the game. + * + * @class Window + * @constructor + */ +function Window() { + this.initialize.apply(this, arguments); +} + +Window.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); +Window.prototype.constructor = Window; + +Window.prototype.initialize = function() { + PIXI.DisplayObjectContainer.call(this); + + this._isWindow = true; + this._windowskin = null; + this._width = 0; + this._height = 0; + this._cursorRect = new Rectangle(); + this._openness = 255; + this._animationCount = 0; + + this._padding = 18; + this._margin = 4; + this._colorTone = [0, 0, 0]; + + this._windowSpriteContainer = null; + this._windowBackSprite = null; + this._windowCursorSprite = null; + this._windowFrameSprite = null; + this._windowContentsSprite = null; + this._windowArrowSprites = []; + this._windowPauseSignSprite = null; + + this._createAllParts(); + + /** + * The origin point of the window for scrolling. + * + * @property origin + * @type Point + */ + this.origin = new Point(); + + /** + * The active state for the window. + * + * @property active + * @type Boolean + */ + this.active = true; + + /** + * The visibility of the down scroll arrow. + * + * @property downArrowVisible + * @type Boolean + */ + this.downArrowVisible = false; + + /** + * The visibility of the up scroll arrow. + * + * @property upArrowVisible + * @type Boolean + */ + this.upArrowVisible = false; + + /** + * The visibility of the pause sign. + * + * @property pause + * @type Boolean + */ + this.pause = false; +}; + +/** + * The image used as a window skin. + * + * @property windowskin + * @type Bitmap + */ +Object.defineProperty(Window.prototype, 'windowskin', { + get: function() { + return this._windowskin; + }, + set: function(value) { + if (this._windowskin !== value) { + this._windowskin = value; + this._windowskin.addLoadListener(this._onWindowskinLoad.bind(this)); + } + }, + configurable: true +}); + +/** + * The bitmap used for the window contents. + * + * @property contents + * @type Bitmap + */ +Object.defineProperty(Window.prototype, 'contents', { + get: function() { + return this._windowContentsSprite.bitmap; + }, + set: function(value) { + this._windowContentsSprite.bitmap = value; + }, + configurable: true +}); + +/** + * The width of the window in pixels. + * + * @property width + * @type Number + */ +Object.defineProperty(Window.prototype, 'width', { + get: function() { + return this._width; + }, + set: function(value) { + this._width = value; + this._refreshAllParts(); + }, + configurable: true +}); + +/** + * The height of the window in pixels. + * + * @property height + * @type Number + */ +Object.defineProperty(Window.prototype, 'height', { + get: function() { + return this._height; + }, + set: function(value) { + this._height = value; + this._refreshAllParts(); + }, + configurable: true +}); + +/** + * The size of the padding between the frame and contents. + * + * @property padding + * @type Number + */ +Object.defineProperty(Window.prototype, 'padding', { + get: function() { + return this._padding; + }, + set: function(value) { + this._padding = value; + this._refreshAllParts(); + }, + configurable: true +}); + +/** + * The size of the margin for the window background. + * + * @property margin + * @type Number + */ +Object.defineProperty(Window.prototype, 'margin', { + get: function() { + return this._margin; + }, + set: function(value) { + this._margin = value; + this._refreshAllParts(); + }, + configurable: true +}); + +/** + * The opacity of the window without contents (0 to 255). + * + * @property opacity + * @type Number + */ +Object.defineProperty(Window.prototype, 'opacity', { + get: function() { + return this._windowSpriteContainer.alpha * 255; + }, + set: function(value) { + this._windowSpriteContainer.alpha = value.clamp(0, 255) / 255; + }, + configurable: true +}); + +/** + * The opacity of the window background (0 to 255). + * + * @property backOpacity + * @type Number + */ +Object.defineProperty(Window.prototype, 'backOpacity', { + get: function() { + return this._windowBackSprite.alpha * 255; + }, + set: function(value) { + this._windowBackSprite.alpha = value.clamp(0, 255) / 255; + }, + configurable: true +}); + +/** + * The opacity of the window contents (0 to 255). + * + * @property contentsOpacity + * @type Number + */ +Object.defineProperty(Window.prototype, 'contentsOpacity', { + get: function() { + return this._windowContentsSprite.alpha * 255; + }, + set: function(value) { + this._windowContentsSprite.alpha = value.clamp(0, 255) / 255; + }, + configurable: true +}); + +/** + * The openness of the window (0 to 255). + * + * @property openness + * @type Number + */ +Object.defineProperty(Window.prototype, 'openness', { + get: function() { + return this._openness; + }, + set: function(value) { + if (this._openness !== value) { + this._openness = value.clamp(0, 255); + this._windowSpriteContainer.scale.y = this._openness / 255; + this._windowSpriteContainer.y = this.height / 2 * (1 - this._openness / 255); + } + }, + configurable: true +}); + +/** + * Updates the window for each frame. + * + * @method update + */ +Window.prototype.update = function() { + if (this.active) { + this._animationCount++; + } + this.children.forEach(function(child) { + if (child.update) { + child.update(); + } + }); +}; + +/** + * Sets the x, y, width, and height all at once. + * + * @method move + * @param {Number} x The x coordinate of the window + * @param {Number} y The y coordinate of the window + * @param {Number} width The width of the window + * @param {Number} height The height of the window + */ +Window.prototype.move = function(x, y, width, height) { + this.x = x || 0; + this.y = y || 0; + if (this._width !== width || this._height !== height) { + this._width = width || 0; + this._height = height || 0; + this._refreshAllParts(); + } +}; + +/** + * Returns true if the window is completely open (openness == 255). + * + * @method isOpen + */ +Window.prototype.isOpen = function() { + return this._openness >= 255; +}; + +/** + * Returns true if the window is completely closed (openness == 0). + * + * @method isClosed + */ +Window.prototype.isClosed = function() { + return this._openness <= 0; +}; + +/** + * Sets the position of the command cursor. + * + * @method setCursorRect + * @param {Number} x The x coordinate of the cursor + * @param {Number} y The y coordinate of the cursor + * @param {Number} width The width of the cursor + * @param {Number} height The height of the cursor + */ +Window.prototype.setCursorRect = function(x, y, width, height) { + var cx = Math.floor(x || 0); + var cy = Math.floor(y || 0); + var cw = Math.floor(width || 0); + var ch = Math.floor(height || 0); + var rect = this._cursorRect; + if (rect.x !== cx || rect.y !== cy || rect.width !== cw || rect.height !== ch) { + this._cursorRect.x = cx; + this._cursorRect.y = cy; + this._cursorRect.width = cw; + this._cursorRect.height = ch; + this._refreshCursor(); + } +}; + +/** + * Changes the color of the background. + * + * @method setTone + * @param {Number} r The red value in the range (-255, 255) + * @param {Number} g The green value in the range (-255, 255) + * @param {Number} b The blue value in the range (-255, 255) + */ +Window.prototype.setTone = function(r, g, b) { + var tone = this._colorTone; + if (r !== tone[0] || g !== tone[1] || b !== tone[2]) { + this._colorTone = [r, g, b]; + this._refreshBack(); + } +}; + +/** + * Adds a child between the background and contents. + * + * @method addChildToBack + * @param {Object} child The child to add + * @return {Object} The child that was added + */ +Window.prototype.addChildToBack = function(child) { + var containerIndex = this.children.indexOf(this._windowSpriteContainer); + return this.addChildAt(child, containerIndex + 1); +}; + +/** + * @method updateTransform + * @private + */ +Window.prototype.updateTransform = function() { + this._updateCursor(); + this._updateArrows(); + this._updatePauseSign(); + this._updateContents(); + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +/** + * @method _createAllParts + * @private + */ +Window.prototype._createAllParts = function() { + this._windowSpriteContainer = new PIXI.DisplayObjectContainer(); + this._windowBackSprite = new Sprite(); + this._windowCursorSprite = new Sprite(); + this._windowFrameSprite = new Sprite(); + this._windowContentsSprite = new Sprite(); + this._downArrowSprite = new Sprite(); + this._upArrowSprite = new Sprite(); + this._windowPauseSignSprite = new Sprite(); + this._windowBackSprite.bitmap = new Bitmap(1, 1); + this._windowBackSprite.alpha = 192 / 255; + this.addChild(this._windowSpriteContainer); + this._windowSpriteContainer.addChild(this._windowBackSprite); + this._windowSpriteContainer.addChild(this._windowFrameSprite); + this.addChild(this._windowCursorSprite); + this.addChild(this._windowContentsSprite); + this.addChild(this._downArrowSprite); + this.addChild(this._upArrowSprite); + this.addChild(this._windowPauseSignSprite); +}; + +/** + * @method _onWindowskinLoad + * @private + */ +Window.prototype._onWindowskinLoad = function() { + this._refreshAllParts(); +}; + +/** + * @method _refreshAllParts + * @private + */ +Window.prototype._refreshAllParts = function() { + this._refreshBack(); + this._refreshFrame(); + this._refreshCursor(); + this._refreshContents(); + this._refreshArrows(); + this._refreshPauseSign(); +}; + +/** + * @method _refreshBack + * @private + */ +Window.prototype._refreshBack = function() { + var m = this._margin; + var w = this._width - m * 2; + var h = this._height - m * 2; + var bitmap = new Bitmap(w, h); + + this._windowBackSprite.bitmap = bitmap; + this._windowBackSprite.setFrame(0, 0, w, h); + this._windowBackSprite.move(m, m); + + if (w > 0 && h > 0 && this._windowskin) { + var p = 96; + bitmap.blt(this._windowskin, 0, 0, p, p, 0, 0, w, h); + for (var y = 0; y < h; y += p) { + for (var x = 0; x < w; x += p) { + bitmap.blt(this._windowskin, 0, p, p, p, x, y, p, p); + } + } + var tone = this._colorTone; + bitmap.adjustTone(tone[0], tone[1], tone[2]); + } +}; + +/** + * @method _refreshFrame + * @private + */ +Window.prototype._refreshFrame = function() { + var w = this._width; + var h = this._height; + var m = 24; + var bitmap = new Bitmap(w, h); + + this._windowFrameSprite.bitmap = bitmap; + this._windowFrameSprite.setFrame(0, 0, w, h); + + if (w > 0 && h > 0 && this._windowskin) { + var skin = this._windowskin; + var p = 96; + var q = 96; + bitmap.blt(skin, p+m, 0+0, p-m*2, m, m, 0, w-m*2, m); + bitmap.blt(skin, p+m, 0+q-m, p-m*2, m, m, h-m, w-m*2, m); + bitmap.blt(skin, p+0, 0+m, m, p-m*2, 0, m, m, h-m*2); + bitmap.blt(skin, p+q-m, 0+m, m, p-m*2, w-m, m, m, h-m*2); + bitmap.blt(skin, p+0, 0+0, m, m, 0, 0, m, m); + bitmap.blt(skin, p+q-m, 0+0, m, m, w-m, 0, m, m); + bitmap.blt(skin, p+0, 0+q-m, m, m, 0, h-m, m, m); + bitmap.blt(skin, p+q-m, 0+q-m, m, m, w-m, h-m, m, m); + } +}; + +/** + * @method _refreshCursor + * @private + */ +Window.prototype._refreshCursor = function() { + var pad = this._padding; + var x = this._cursorRect.x + pad - this.origin.x; + var y = this._cursorRect.y + pad - this.origin.y; + var w = this._cursorRect.width; + var h = this._cursorRect.height; + var m = 4; + var x2 = Math.max(x, pad); + var y2 = Math.max(y, pad); + var ox = x - x2; + var oy = y - y2; + var w2 = Math.min(w, this._width - pad - x2); + var h2 = Math.min(h, this._height - pad - y2); + var bitmap = new Bitmap(w2, h2); + + this._windowCursorSprite.bitmap = bitmap; + this._windowCursorSprite.setFrame(0, 0, w2, h2); + this._windowCursorSprite.move(x2, y2); + + if (w > 0 && h > 0 && this._windowskin) { + var skin = this._windowskin; + var p = 96; + var q = 48; + bitmap.blt(skin, p+m, p+m, q-m*2, q-m*2, ox+m, oy+m, w-m*2, h-m*2); + bitmap.blt(skin, p+m, p+0, q-m*2, m, ox+m, oy+0, w-m*2, m); + bitmap.blt(skin, p+m, p+q-m, q-m*2, m, ox+m, oy+h-m, w-m*2, m); + bitmap.blt(skin, p+0, p+m, m, q-m*2, ox+0, oy+m, m, h-m*2); + bitmap.blt(skin, p+q-m, p+m, m, q-m*2, ox+w-m, oy+m, m, h-m*2); + bitmap.blt(skin, p+0, p+0, m, m, ox+0, oy+0, m, m); + bitmap.blt(skin, p+q-m, p+0, m, m, ox+w-m, oy+0, m, m); + bitmap.blt(skin, p+0, p+q-m, m, m, ox+0, oy+h-m, m, m); + bitmap.blt(skin, p+q-m, p+q-m, m, m, ox+w-m, oy+h-m, m, m); + } +}; + +/** + * @method _refreshContents + * @private + */ +Window.prototype._refreshContents = function() { + this._windowContentsSprite.move(this.padding, this.padding); +}; + +/** + * @method _refreshArrows + * @private + */ +Window.prototype._refreshArrows = function() { + var w = this._width; + var h = this._height; + var p = 24; + var q = p/2; + var sx = 96+p; + var sy = 0+p; + this._downArrowSprite.bitmap = this._windowskin; + this._downArrowSprite.anchor.x = 0.5; + this._downArrowSprite.anchor.y = 0.5; + this._downArrowSprite.setFrame(sx+q, sy+q+p, p, q); + this._downArrowSprite.move(w/2, h-q); + this._upArrowSprite.bitmap = this._windowskin; + this._upArrowSprite.anchor.x = 0.5; + this._upArrowSprite.anchor.y = 0.5; + this._upArrowSprite.setFrame(sx+q, sy, p, q); + this._upArrowSprite.move(w/2, q); +}; + +/** + * @method _refreshPauseSign + * @private + */ +Window.prototype._refreshPauseSign = function() { + var sx = 144; + var sy = 96; + var p = 24; + this._windowPauseSignSprite.bitmap = this._windowskin; + this._windowPauseSignSprite.anchor.x = 0.5; + this._windowPauseSignSprite.anchor.y = 1; + this._windowPauseSignSprite.move(this._width / 2, this._height); + this._windowPauseSignSprite.setFrame(sx, sy, p, p); + this._windowPauseSignSprite.alpha = 0; +}; + +/** + * @method _updateCursor + * @private + */ +Window.prototype._updateCursor = function() { + var blinkCount = this._animationCount % 40; + var cursorOpacity = this.contentsOpacity; + if (this.active) { + if (blinkCount < 20) { + cursorOpacity -= blinkCount * 8; + } else { + cursorOpacity -= (40 - blinkCount) * 8; + } + } + this._windowCursorSprite.alpha = cursorOpacity / 255; + this._windowCursorSprite.visible = this.isOpen(); +}; + +/** + * @method _updateContents + * @private + */ +Window.prototype._updateContents = function() { + var w = this._width - this._padding * 2; + var h = this._height - this._padding * 2; + if (w > 0 && h > 0) { + this._windowContentsSprite.setFrame(this.origin.x, this.origin.y, w, h); + this._windowContentsSprite.visible = this.isOpen(); + } else { + this._windowContentsSprite.visible = false; + } +}; + +/** + * @method _updateArrows + * @private + */ +Window.prototype._updateArrows = function() { + this._downArrowSprite.visible = this.isOpen() && this.downArrowVisible; + this._upArrowSprite.visible = this.isOpen() && this.upArrowVisible; +}; + +/** + * @method _updatePauseSign + * @private + */ +Window.prototype._updatePauseSign = function() { + var sprite = this._windowPauseSignSprite; + var x = Math.floor(this._animationCount / 16) % 2; + var y = Math.floor(this._animationCount / 16 / 2) % 2; + var sx = 144; + var sy = 96; + var p = 24; + if (!this.pause) { + sprite.alpha = 0; + } else if (sprite.alpha < 1) { + sprite.alpha = Math.min(sprite.alpha + 0.1, 1); + } + sprite.setFrame(sx+x*p, sy+y*p, p, p); + sprite.visible = this.isOpen(); +}; + +// The important members from Pixi.js + +/** + * The visibility of the window. + * + * @property visible + * @type Boolean + */ + +/** + * The x coordinate of the window. + * + * @property x + * @type Number + */ + +/** + * The y coordinate of the window. + * + * @property y + * @type Number + */ + +/** + * [read-only] The array of children of the window. + * + * @property children + * @type Array + */ + +/** + * [read-only] The object that contains the window. + * + * @property parent + * @type Object + */ + +/** + * Adds a child to the container. + * + * @method addChild + * @param {Object} child The child to add + * @return {Object} The child that was added + */ + +/** + * Adds a child to the container at a specified index. + * + * @method addChildAt + * @param {Object} child The child to add + * @param {Number} index The index to place the child in + * @return {Object} The child that was added + */ + +/** + * Removes a child from the container. + * + * @method removeChild + * @param {Object} child The child to remove + * @return {Object} The child that was removed + */ + +/** + * Removes a child from the specified index position. + * + * @method removeChildAt + * @param {Number} index The index to get the child from + * @return {Object} The child that was removed + */ + +//----------------------------------------------------------------------------- +/** + * The layer which contains game windows. + * + * @class WindowLayer + * @constructor + */ +function WindowLayer() { + this.initialize.apply(this, arguments); +} + +WindowLayer.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); +WindowLayer.prototype.constructor = WindowLayer; + +WindowLayer.prototype.initialize = function() { + PIXI.DisplayObjectContainer.call(this); + this._width = 0; + this._height = 0; + this._tempCanvas = null; + this._vertexBuffer = null; + this._translationMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; + this._dummySprite = new Sprite(new Bitmap(1, 1)); +}; + +/** + * The width of the window layer in pixels. + * + * @property width + * @type Number + */ +Object.defineProperty(WindowLayer.prototype, 'width', { + get: function() { + return this._width; + }, + set: function(value) { + this._width = value; + }, + configurable: true +}); + +/** + * The height of the window layer in pixels. + * + * @property height + * @type Number + */ +Object.defineProperty(WindowLayer.prototype, 'height', { + get: function() { + return this._height; + }, + set: function(value) { + this._height = value; + }, + configurable: true +}); + +/** + * Sets the x, y, width, and height all at once. + * + * @method move + * @param {Number} x The x coordinate of the window layer + * @param {Number} y The y coordinate of the window layer + * @param {Number} width The width of the window layer + * @param {Number} height The height of the window layer + */ +WindowLayer.prototype.move = function(x, y, width, height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; +}; + +/** + * Updates the window layer for each frame. + * + * @method update + */ +WindowLayer.prototype.update = function() { + this.children.forEach(function(child) { + if (child.update) { + child.update(); + } + }); +}; + +/** + * @method _renderCanvas + * @param {Object} renderSession + * @private + */ +WindowLayer.prototype._renderCanvas = function(renderSession) { + if (!this.visible) { + return; + } + + if (!this._tempCanvas) { + this._tempCanvas = document.createElement('canvas'); + } + + this._tempCanvas.width = Graphics.width; + this._tempCanvas.height = Graphics.height; + + var realCanvasContext = renderSession.context; + var context = this._tempCanvas.getContext('2d'); + + context.save(); + context.clearRect(0, 0, Graphics.width, Graphics.height); + context.beginPath(); + context.rect(this.x, this.y, this.width, this.height); + context.closePath(); + context.clip(); + + renderSession.context = context; + + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + if (child._isWindow && child.visible && child.openness > 0) { + this._canvasClearWindowRect(renderSession, child); + context.save(); + child._renderCanvas(renderSession); + context.restore(); + } + } + + context.restore(); + + renderSession.context = realCanvasContext; + renderSession.context.setTransform(1, 0, 0, 1, 0, 0); + renderSession.context.globalCompositeOperation = 'source-over'; + renderSession.context.globalAlpha = 1; + renderSession.context.drawImage(this._tempCanvas, 0, 0); + + for (var j = 0; j < this.children.length; j++) { + if (!this.children[j]._isWindow) { + this.children[j]._renderCanvas(renderSession); + } + } +}; + +/** + * @method _canvasClearWindowRect + * @param {Object} renderSession + * @param {Window} window + * @private + */ +WindowLayer.prototype._canvasClearWindowRect = function(renderSession, window) { + var rx = this.x + window.x; + var ry = this.y + window.y + window.height / 2 * (1 - window._openness / 255); + var rw = window.width; + var rh = window.height * window._openness / 255; + renderSession.context.clearRect(rx, ry, rw, rh); +}; + +/** + * @method _renderWebGL + * @param {Object} renderSession + * @private + */ +WindowLayer.prototype._renderWebGL = function(renderSession) { + if (!this.visible) { + return; + } + + var gl = renderSession.gl; + + if (!this._vertexBuffer) { + this._vertexBuffer = gl.createBuffer(); + } + + this._dummySprite._renderWebGL(renderSession); + + renderSession.spriteBatch.stop(); + gl.enable(gl.STENCIL_TEST); + gl.clear(gl.STENCIL_BUFFER_BIT); + this._webglMaskOutside(renderSession); + renderSession.spriteBatch.start(); + + for (var i = this.children.length - 1; i >= 0; i--) { + var child = this.children[i]; + if (child._isWindow && child.visible && child.openness > 0) { + gl.stencilFunc(gl.EQUAL, 0, 0xFF); + child._renderWebGL(renderSession); + renderSession.spriteBatch.stop(); + this._webglMaskWindow(renderSession, child); + renderSession.spriteBatch.start(); + } + } + + gl.disable(gl.STENCIL_TEST); + + for (var j = 0; j < this.children.length; j++) { + if (!this.children[j]._isWindow) { + this.children[j]._renderWebGL(renderSession); + } + } +}; + +/** + * @method _webglMaskOutside + * @param {Object} renderSession + * @private + */ +WindowLayer.prototype._webglMaskOutside = function(renderSession) { + var x1 = this.x; + var y1 = this.y; + var x2 = this.x + this.width; + var y2 = this.y + this.height; + this._webglMaskRect(renderSession, 0, 0, Graphics.width, y1); + this._webglMaskRect(renderSession, 0, y2, Graphics.width, Graphics.height - y2); + this._webglMaskRect(renderSession, 0, 0, x1, Graphics.height); + this._webglMaskRect(renderSession, x2, 0, Graphics.width - x2, Graphics.height); +}; + +/** + * @method _webglMaskWindow + * @param {Object} renderSession + * @param {Window} window + * @private + */ +WindowLayer.prototype._webglMaskWindow = function(renderSession, window) { + var rx = this.x + window.x; + var ry = this.y + window.y + window.height / 2 * (1 - window._openness / 255); + var rw = window.width; + var rh = window.height * window._openness / 255; + this._webglMaskRect(renderSession, rx, ry, rw, rh); +}; + +/** + * @method _webglMaskRect + * @param {Object} renderSession + * @param {Number} x + * @param {Number} y + * @param {Number} w + * @param {Number} h + * @private + */ +WindowLayer.prototype._webglMaskRect = function(renderSession, x, y, w, h) { + if (w > 0 && h > 0) { + var gl = renderSession.gl; + + var projection = renderSession.projection; + var offset = renderSession.offset; + var shader = renderSession.shaderManager.primitiveShader; + + renderSession.shaderManager.setShader(shader); + + gl.uniformMatrix3fv(shader.translationMatrix, false, this._translationMatrix); + gl.uniform1f(shader.flipY, 1); + gl.uniform2f(shader.projectionVector, projection.x, -projection.y); + gl.uniform2f(shader.offsetVector, -offset.x, -offset.y); + + gl.stencilFunc(gl.EQUAL, 0, 0xFF); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR); + + var data = new Float32Array([x, y, x+w, y, x, y+h, x, y+h, x+w, y, x+w, y+h]); + + gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW); + gl.enableVertexAttribArray(shader.aVertexPosition); + gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0); + gl.drawArrays(gl.TRIANGLES, 0, 6); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); + } +}; + +// The important members from Pixi.js + +/** + * The x coordinate of the window layer. + * + * @property x + * @type Number + */ + +/** + * The y coordinate of the window layer. + * + * @property y + * @type Number + */ + +/** + * [read-only] The array of children of the window layer. + * + * @property children + * @type Array + */ + +/** + * [read-only] The object that contains the window layer. + * + * @property parent + * @type Object + */ + +/** + * Adds a child to the container. + * + * @method addChild + * @param {Object} child The child to add + * @return {Object} The child that was added + */ + +/** + * Adds a child to the container at a specified index. + * + * @method addChildAt + * @param {Object} child The child to add + * @param {Number} index The index to place the child in + * @return {Object} The child that was added + */ + +/** + * Removes a child from the container. + * + * @method removeChild + * @param {Object} child The child to remove + * @return {Object} The child that was removed + */ + +/** + * Removes a child from the specified index position. + * + * @method removeChildAt + * @param {Number} index The index to get the child from + * @return {Object} The child that was removed + */ + +//----------------------------------------------------------------------------- +/** + * The weather effect which displays rain, storm, or snow. + * + * @class Weather + * @constructor + */ +function Weather() { + this.initialize.apply(this, arguments); +} + +Weather.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); +Weather.prototype.constructor = Weather; + +Weather.prototype.initialize = function() { + PIXI.DisplayObjectContainer.call(this); + + this._width = Graphics.width; + this._height = Graphics.height; + this._sprites = []; + + this._createBitmaps(); + this._createDimmer(); + + /** + * The type of the weather in ['none', 'rain', 'storm', 'snow']. + * + * @property type + * @type String + */ + this.type = 'none'; + + /** + * The power of the weather in the range (0, 9). + * + * @property power + * @type Number + */ + this.power = 0; + + /** + * The origin point of the weather for scrolling. + * + * @property origin + * @type Point + */ + this.origin = new Point(); +}; + +/** + * Updates the weather for each frame. + * + * @method update + */ +Weather.prototype.update = function() { + this._updateDimmer(); + this._updateAllSprites(); +}; + +/** + * @method _createBitmaps + * @private + */ +Weather.prototype._createBitmaps = function() { + this._rainBitmap = new Bitmap(1, 60); + this._rainBitmap.fillAll('white'); + this._stormBitmap = new Bitmap(2, 100); + this._stormBitmap.fillAll('white'); + this._snowBitmap = new Bitmap(9, 9); + this._snowBitmap.drawCircle(4, 4, 4, 'white'); +}; + +/** + * @method _createDimmer + * @private + */ +Weather.prototype._createDimmer = function() { + this._dimmerSprite = new ScreenSprite(); + this._dimmerSprite.setColor(80, 80, 80); + this.addChild(this._dimmerSprite); +}; + +/** + * @method _updateDimmer + * @private + */ +Weather.prototype._updateDimmer = function() { + this._dimmerSprite.opacity = Math.floor(this.power * 6); +}; + +/** + * @method _updateAllSprites + * @private + */ +Weather.prototype._updateAllSprites = function() { + var maxSprites = Math.floor(this.power * 10); + while (this._sprites.length < maxSprites) { + this._addSprite(); + } + while (this._sprites.length > maxSprites) { + this._removeSprite(); + } + this._sprites.forEach(function(sprite) { + this._updateSprite(sprite); + sprite.x = sprite.ax - this.origin.x; + sprite.y = sprite.ay - this.origin.y; + }, this); +}; + +/** + * @method _addSprite + * @private + */ +Weather.prototype._addSprite = function() { + var sprite = new Sprite(this.viewport); + sprite.opacity = 0; + this._sprites.push(sprite); + this.addChild(sprite); +}; + +/** + * @method _removeSprite + * @private + */ +Weather.prototype._removeSprite = function() { + this.removeChild(this._sprites.pop()); +}; + +/** + * @method _updateSprite + * @param {Sprite} sprite + * @private + */ +Weather.prototype._updateSprite = function(sprite) { + switch (this.type) { + case 'rain': + this._updateRainSprite(sprite); + break; + case 'storm': + this._updateStormSprite(sprite); + break; + case 'snow': + this._updateSnowSprite(sprite); + break; + } + if (sprite.opacity < 40) { + this._rebornSprite(sprite); + } +}; + +/** + * @method _updateRainSprite + * @param {Sprite} sprite + * @private + */ +Weather.prototype._updateRainSprite = function(sprite) { + sprite.bitmap = this._rainBitmap; + sprite.rotation = Math.PI / 16; + sprite.ax -= 6 * Math.sin(sprite.rotation); + sprite.ay += 6 * Math.cos(sprite.rotation); + sprite.opacity -= 6; +}; + +/** + * @method _updateStormSprite + * @param {Sprite} sprite + * @private + */ +Weather.prototype._updateStormSprite = function(sprite) { + sprite.bitmap = this._stormBitmap; + sprite.rotation = Math.PI / 8; + sprite.ax -= 8 * Math.sin(sprite.rotation); + sprite.ay += 8 * Math.cos(sprite.rotation); + sprite.opacity -= 8; +}; + +/** + * @method _updateSnowSprite + * @param {Sprite} sprite + * @private + */ +Weather.prototype._updateSnowSprite = function(sprite) { + sprite.bitmap = this._snowBitmap; + sprite.rotation = Math.PI / 16; + sprite.ax -= 3 * Math.sin(sprite.rotation); + sprite.ay += 3 * Math.cos(sprite.rotation); + sprite.opacity -= 3; +}; + +/** + * @method _rebornSprite + * @param {Sprite} sprite + * @private + */ +Weather.prototype._rebornSprite = function(sprite) { + sprite.ax = Math.randomInt(Graphics.width + 100) - 100 + this.origin.x; + sprite.ay = Math.randomInt(Graphics.height + 200) - 200 + this.origin.y; + sprite.opacity = 160 + Math.randomInt(60); +}; + +//----------------------------------------------------------------------------- +/** + * The color matrix filter for WebGL. + * + * @class ToneFilter + * @constructor + */ +function ToneFilter() { + PIXI.AbstractFilter.call(this); + this.initialize.apply(this, arguments); +} + +ToneFilter.prototype = Object.create(PIXI.AbstractFilter.prototype); +ToneFilter.prototype.constructor = ToneFilter; + +ToneFilter.prototype.initialize = function() { + this.passes = [this]; + + this.uniforms = { + matrix: { + type: 'mat4', + value: [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] + } + }; + + this.fragmentSrc = [ + 'precision mediump float;', + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + 'uniform mat4 matrix;', + 'uniform sampler2D uSampler;', + 'void main(void) {', + ' gl_FragColor = texture2D(uSampler, vTextureCoord) * matrix;', + '}' + ]; +}; + +/** + * Resets the filter. + * + * @method reset + */ +ToneFilter.prototype.reset = function() { + this.uniforms.matrix.value = [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]; +}; + +/** + * Changes the hue. + * + * @method adjustHue + * @param {Number} value The hue value in the range (-360, 360) + */ +ToneFilter.prototype.adjustHue = function(value) { + value = (value || 0) / 180; + + if (value !== 0) { + var c = Math.cos(value * Math.PI); + var s = Math.sin(value * Math.PI); + var a00 = 0.213 + c * 0.787 - s * 0.213; + var a01 = 0.715 - c * 0.715 - s * 0.715; + var a02 = 0.072 - c * 0.072 + s * 0.928; + var a10 = 0.213 - c * 0.213 + s * 0.143; + var a11 = 0.715 + c * 0.285 + s * 0.140; + var a12 = 0.072 - c * 0.072 - s * 0.283; + var a20 = 0.213 - c * 0.213 - s * 0.787; + var a21 = 0.715 - c * 0.715 + s * 0.715; + var a22 = 0.072 + c * 0.928 + s * 0.072; + this._multiplyMatrix([ + a00, a01, a02, 0, + a10, a11, a12, 0, + a20, a21, a22, 0, + 0, 0, 0, 1 + ]); + } +}; + +/** + * Changes the saturation. + * + * @method adjustSaturation + * @param {Number} value The saturation value in the range (-255, 255) + */ +ToneFilter.prototype.adjustSaturation = function(value) { + value = (value || 0).clamp(-255, 255) / 255; + + if (value !== 0) { + var a = 1 + value; + var a00 = 0.213 + 0.787 * a; + var a01 = 0.715 - 0.715 * a; + var a02 = 0.072 - 0.072 * a; + var a10 = 0.213 - 0.213 * a; + var a11 = 0.715 + 0.285 * a; + var a12 = 0.072 - 0.072 * a; + var a20 = 0.213 - 0.213 * a; + var a21 = 0.715 - 0.715 * a; + var a22 = 0.072 + 0.928 * a; + this._multiplyMatrix([ + a00, a01, a02, 0, + a10, a11, a12, 0, + a20, a21, a22, 0, + 0, 0, 0, 1 + ]); + } +}; + +/** + * Changes the tone. + * + * @method adjustTone + * @param {Number} r The red strength in the range (-255, 255) + * @param {Number} g The green strength in the range (-255, 255) + * @param {Number} b The blue strength in the range (-255, 255) + */ +ToneFilter.prototype.adjustTone = function(r, g, b) { + r = (r || 0).clamp(-255, 255) / 255; + g = (g || 0).clamp(-255, 255) / 255; + b = (b || 0).clamp(-255, 255) / 255; + + if (r !== 0 || g !== 0 || b !== 0) { + this._multiplyMatrix([ + 1, 0, 0, r, + 0, 1, 0, g, + 0, 0, 1, b, + 0, 0, 0, 1 + ]); + } +}; + +/** + * @method _multiplyMatrix + * @param {Array} matrix + * @private + */ +ToneFilter.prototype._multiplyMatrix = function(matrix) { + var value = this.uniforms.matrix.value; + var temp = []; + + for (var i = 0; i < 4; i++) { + for (var m = 0; m < 4; m++) { + temp[m] = value[i * 4 + m]; + } + for (var j = 0; j < 4; j++) { + var val = 0; + for (var n = 0; n < 4; n++) { + val += matrix[n * 4 + j] * temp[n]; + } + value[i * 4 + j] = val; + } + } +}; + +//----------------------------------------------------------------------------- +/** + * The sprite which changes the screen color in 2D canvas mode. + * + * @class ToneSprite + * @constructor + */ +function ToneSprite() { + this.initialize.apply(this, arguments); +} + +ToneSprite.prototype = Object.create(PIXI.DisplayObject.prototype); +ToneSprite.prototype.constructor = ToneSprite; + +ToneSprite.prototype.initialize = function() { + PIXI.DisplayObject.call(this); + this.clear(); +}; + +/** + * Clears the tone. + * + * @method reset + */ +ToneSprite.prototype.clear = function() { + this._red = 0; + this._green = 0; + this._blue = 0; + this._gray = 0; +}; + +/** + * Sets the tone. + * + * @method setTone + * @param {Number} r The red strength in the range (-255, 255) + * @param {Number} g The green strength in the range (-255, 255) + * @param {Number} b The blue strength in the range (-255, 255) + * @param {Number} gray The grayscale level in the range (0, 255) + */ +ToneSprite.prototype.setTone = function(r, g, b, gray) { + this._red = Math.round(r || 0).clamp(-255, 255); + this._green = Math.round(g || 0).clamp(-255, 255); + this._blue = Math.round(b || 0).clamp(-255, 255); + this._gray = Math.round(gray || 0).clamp(0, 255); +}; + +/** + * @method _renderCanvas + * @param {Object} renderSession + * @private + */ +ToneSprite.prototype._renderCanvas = function(renderSession) { + if (this.visible) { + var context = renderSession.context; + var t = this.worldTransform; + var r = renderSession.resolution; + var width = Graphics.width; + var height = Graphics.height; + context.save(); + context.setTransform(t.a, t.b, t.c, t.d, t.tx * r, t.ty * r); + if (Graphics.canUseSaturationBlend() && this._gray > 0) { + context.globalCompositeOperation = 'saturation'; + context.globalAlpha = this._gray / 255; + context.fillStyle = '#ffffff'; + context.fillRect(0, 0, width, height); + } + context.globalAlpha = 1; + var r1 = Math.max(0, this._red); + var g1 = Math.max(0, this._green); + var b1 = Math.max(0, this._blue); + if (r1 || g1 || b1) { + context.globalCompositeOperation = 'lighter'; + context.fillStyle = Utils.rgbToCssColor(r1, g1, b1); + context.fillRect(0, 0, width, height); + } + if (Graphics.canUseDifferenceBlend()) { + var r2 = Math.max(0, -this._red); + var g2 = Math.max(0, -this._green); + var b2 = Math.max(0, -this._blue); + if (r2 || g2 || b2) { + context.globalCompositeOperation = 'difference'; + context.fillStyle = '#ffffff'; + context.fillRect(0, 0, width, height); + context.globalCompositeOperation = 'lighter'; + context.fillStyle = Utils.rgbToCssColor(r2, g2, b2); + context.fillRect(0, 0, width, height); + context.globalCompositeOperation = 'difference'; + context.fillStyle = '#ffffff'; + context.fillRect(0, 0, width, height); + } + } + context.restore(); + } +}; + +/** + * @method _renderWebGL + * @param {Object} renderSession + * @private + */ +ToneSprite.prototype._renderWebGL = function(renderSession) { + // Not supported +}; + +//----------------------------------------------------------------------------- +/** + * The root object of the display tree. + * + * @class Stage + * @constructor + */ +function Stage() { + this.initialize.apply(this, arguments); +} + +Stage.prototype = Object.create(PIXI.Stage.prototype); +Stage.prototype.constructor = Stage; + +Stage.prototype.initialize = function() { + PIXI.Stage.call(this); + + // The interactive flag causes a memory leak. + this.interactive = false; +}; + +/** + * [read-only] The array of children of the stage. + * + * @property children + * @type Array + */ + +/** + * Adds a child to the container. + * + * @method addChild + * @param {Object} child The child to add + * @return {Object} The child that was added + */ + +/** + * Adds a child to the container at a specified index. + * + * @method addChildAt + * @param {Object} child The child to add + * @param {Number} index The index to place the child in + * @return {Object} The child that was added + */ + +/** + * Removes a child from the container. + * + * @method removeChild + * @param {Object} child The child to remove + * @return {Object} The child that was removed + */ + +/** + * Removes a child from the specified index position. + * + * @method removeChildAt + * @param {Number} index The index to get the child from + * @return {Object} The child that was removed + */ + +//----------------------------------------------------------------------------- +/** + * The audio object of Web Audio API. + * + * @class WebAudio + * @constructor + * @param {String} url The url of the audio file + */ +function WebAudio() { + this.initialize.apply(this, arguments); +} + +WebAudio.prototype.initialize = function(url) { + if (!WebAudio._initialized) { + WebAudio.initialize(); + } + this.clear(); + this._load(url); + this._url = url; +}; + +WebAudio._context = null; +WebAudio._masterGainNode = null; +WebAudio._initialized = false; +WebAudio._unlocked = false; + +/** + * Initializes the audio system. + * + * @static + * @method initialize + * @param {Boolean} noAudio Flag for the no-audio mode + * @return {Boolean} True if the audio system is available + */ +WebAudio.initialize = function(noAudio) { + if (!this._initialized) { + if (!noAudio) { + this._createContext(); + this._detectCodecs(); + this._createMasterGainNode(); + this._setupEventHandlers(); + } + this._initialized = true; + } + return !!this._context; +}; + +/** + * Checks whether the browser can play ogg files. + * + * @static + * @method canPlayOgg + * @return {Boolean} True if the browser can play ogg files + */ +WebAudio.canPlayOgg = function() { + if (!this._initialized) { + this.initialize(); + } + return !!this._canPlayOgg; +}; + +/** + * Checks whether the browser can play m4a files. + * + * @static + * @method canPlayM4a + * @return {Boolean} True if the browser can play m4a files + */ +WebAudio.canPlayM4a = function() { + if (!this._initialized) { + this.initialize(); + } + return !!this._canPlayM4a; +}; + +/** + * @static + * @method _createContext + * @private + */ +WebAudio._createContext = function() { + try { + if (typeof AudioContext !== 'undefined') { + this._context = new AudioContext(); + } else if (typeof webkitAudioContext !== 'undefined') { + this._context = new webkitAudioContext(); + } + } catch (e) { + this._context = null; + } +}; + +/** + * @static + * @method _detectCodecs + * @private + */ +WebAudio._detectCodecs = function() { + var audio = document.createElement('audio'); + if (audio.canPlayType) { + this._canPlayOgg = audio.canPlayType('audio/ogg'); + this._canPlayM4a = audio.canPlayType('audio/mp4'); + } +}; + +/** + * @static + * @method _createMasterGainNode + * @private + */ +WebAudio._createMasterGainNode = function() { + var context = WebAudio._context; + if (context) { + this._masterGainNode = context.createGain(); + this._masterGainNode.gain.value = 1; + this._masterGainNode.connect(context.destination); + } +}; + +/** + * @static + * @method _setupEventHandlers + * @private + */ +WebAudio._setupEventHandlers = function() { + document.addEventListener('touchstart', this._onTouchStart.bind(this)); + document.addEventListener('visibilitychange', this._onVisibilityChange.bind(this)); +}; + +/** + * @static + * @method _onTouchStart + * @private + */ +WebAudio._onTouchStart = function() { + var context = WebAudio._context; + if (context && !this._unlocked) { + // Unlock Web Audio on iOS + var node = context.createBufferSource(); + node.start(0); + this._unlocked = true; + } +}; + +/** + * @static + * @method _onVisibilityChange + * @private + */ +WebAudio._onVisibilityChange = function() { + if (document.visibilityState === 'hidden') { + this._onHide(); + } else { + this._onShow(); + } +}; + +/** + * @static + * @method _onHide + * @private + */ +WebAudio._onHide = function() { + if (this._shouldMuteOnHide()) { + this._fadeOut(1); + } +}; + +/** + * @static + * @method _onShow + * @private + */ +WebAudio._onShow = function() { + if (this._shouldMuteOnHide()) { + this._fadeIn(0.5); + } +}; + +/** + * @static + * @method _shouldMuteOnHide + * @private + */ +WebAudio._shouldMuteOnHide = function() { + return Utils.isMobileDevice(); +}; + +/** + * @static + * @method _fadeIn + * @param {Number} duration + * @private + */ +WebAudio._fadeIn = function(duration) { + if (this._masterGainNode) { + var gain = this._masterGainNode.gain; + var currentTime = WebAudio._context.currentTime; + gain.setValueAtTime(gain.value, currentTime); + gain.linearRampToValueAtTime(1, currentTime + duration); + } +}; + +/** + * @static + * @method _fadeOut + * @param {Number} duration + * @private + */ +WebAudio._fadeOut = function(duration) { + if (this._masterGainNode) { + var gain = this._masterGainNode.gain; + var currentTime = WebAudio._context.currentTime; + gain.setValueAtTime(gain.value, currentTime); + gain.linearRampToValueAtTime(0, currentTime + duration); + } +}; + +/** + * Clears the audio data. + * + * @method clear + */ +WebAudio.prototype.clear = function() { + this.stop(); + this._buffer = null; + this._sourceNode = null; + this._gainNode = null; + this._pannerNode = null; + this._totalTime = 0; + this._sampleRate = 0; + this._loopStart = 0; + this._loopLength = 0; + this._startTime = 0; + this._volume = 1; + this._pitch = 1; + this._pan = 0; + this._endTimer = null; + this._loadListeners = []; + this._stopListeners = []; + this._hasError = false; + this._autoPlay = false; +}; + +/** + * [read-only] The url of the audio file. + * + * @property url + * @type String + */ +Object.defineProperty(WebAudio.prototype, 'url', { + get: function() { + return this._url; + }, + configurable: true +}); + +/** + * The volume of the audio. + * + * @property volume + * @type Number + */ +Object.defineProperty(WebAudio.prototype, 'volume', { + get: function() { + return this._volume; + }, + set: function(value) { + this._volume = value; + if (this._gainNode) { + this._gainNode.gain.value = this._volume; + } + }, + configurable: true +}); + +/** + * The pitch of the audio. + * + * @property pitch + * @type Number + */ +Object.defineProperty(WebAudio.prototype, 'pitch', { + get: function() { + return this._pitch; + }, + set: function(value) { + if (this._pitch !== value) { + this._pitch = value; + if (this.isPlaying()) { + this.play(this._sourceNode.loop, 0); + } + } + }, + configurable: true +}); + +/** + * The pan of the audio. + * + * @property pan + * @type Number + */ +Object.defineProperty(WebAudio.prototype, 'pan', { + get: function() { + return this._pan; + }, + set: function(value) { + this._pan = value; + this._updatePanner(); + }, + configurable: true +}); + +/** + * Checks whether the audio data is ready to play. + * + * @method isReady + * @return {Boolean} True if the audio data is ready to play + */ +WebAudio.prototype.isReady = function() { + return !!this._buffer; +}; + +/** + * Checks whether a loading error has occurred. + * + * @method isError + * @return {Boolean} True if a loading error has occurred + */ +WebAudio.prototype.isError = function() { + return this._hasError; +}; + +/** + * Checks whether the audio is playing. + * + * @method isPlaying + * @return {Boolean} True if the audio is playing + */ +WebAudio.prototype.isPlaying = function() { + return !!this._sourceNode; +}; + +/** + * Plays the audio. + * + * @method play + * @param {Boolean} loop Whether the audio data play in a loop + * @param {Number} offset The start position to play in seconds + */ +WebAudio.prototype.play = function(loop, offset) { + if (this.isReady()) { + offset = offset || 0; + this._startPlaying(loop, offset); + } else if (WebAudio._context) { + this._autoPlay = true; + this.addLoadListener(function() { + if (this._autoPlay) { + this.play(loop, offset); + } + }.bind(this)); + } +}; + +/** + * Stops the audio. + * + * @method stop + */ +WebAudio.prototype.stop = function() { + this._autoPlay = false; + this._removeEndTimer(); + this._removeNodes(); + if (this._stopListeners) { + while (this._stopListeners.length > 0) { + var listner = this._stopListeners.shift(); + listner(); + } + } +}; + +/** + * Performs the audio fade-in. + * + * @method fadeIn + * @param {Number} duration Fade-in time in seconds + */ +WebAudio.prototype.fadeIn = function(duration) { + if (this.isReady()) { + if (this._gainNode) { + var gain = this._gainNode.gain; + var currentTime = WebAudio._context.currentTime; + gain.setValueAtTime(0, currentTime); + gain.linearRampToValueAtTime(this._volume, currentTime + duration); + } + } else if (this._autoPlay) { + this.addLoadListener(function() { + this.fadeIn(duration); + }.bind(this)); + } +}; + +/** + * Performs the audio fade-out. + * + * @method fadeOut + * @param {Number} duration Fade-out time in seconds + */ +WebAudio.prototype.fadeOut = function(duration) { + if (this._gainNode) { + var gain = this._gainNode.gain; + var currentTime = WebAudio._context.currentTime; + gain.setValueAtTime(gain.value, currentTime); + gain.linearRampToValueAtTime(0, currentTime + duration); + } + this._autoPlay = false; +}; + +/** + * Gets the seek position of the audio. + * + * @method seek + */ +WebAudio.prototype.seek = function() { + if (WebAudio._context) { + var pos = (WebAudio._context.currentTime - this._startTime) * this._pitch; + if (this._loopLength > 0) { + while (pos >= this._loopStart + this._loopLength) { + pos -= this._loopLength; + } + } + return pos; + } else { + return 0; + } +}; + +/** + * Add a callback function that will be called when the audio data is loaded. + * + * @method addLoadListener + * @param {Function} listner The callback function + */ +WebAudio.prototype.addLoadListener = function(listner) { + this._loadListeners.push(listner); +}; + +/** + * Add a callback function that will be called when the playback is stopped. + * + * @method addStopListener + * @param {Function} listner The callback function + */ +WebAudio.prototype.addStopListener = function(listner) { + this._stopListeners.push(listner); +}; + +/** + * @method _load + * @param {String} url + * @private + */ +WebAudio.prototype._load = function(url) { + if (WebAudio._context) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.responseType = 'arraybuffer'; + xhr.onload = function() { + if (xhr.status < 400) { + this._onXhrLoad(xhr); + } + }.bind(this); + xhr.onerror = function() { + this._hasError = true; + }.bind(this); + xhr.send(); + } +}; + +/** + * @method _onXhrLoad + * @param {XMLHttpRequest} xhr + * @private + */ +WebAudio.prototype._onXhrLoad = function(xhr) { + var array = new Uint8Array(xhr.response); + this._readLoopComments(array); + WebAudio._context.decodeAudioData(xhr.response, function(buffer) { + this._buffer = buffer; + this._totalTime = buffer.duration; + if (this._loopLength > 0 && this._sampleRate > 0) { + this._loopStart /= this._sampleRate; + this._loopLength /= this._sampleRate; + } else { + this._loopStart = 0; + this._loopLength = this._totalTime; + } + this._onLoad(); + }.bind(this)); +}; + +/** + * @method _startPlaying + * @param {Boolean} loop + * @param {Number} offset + * @private + */ +WebAudio.prototype._startPlaying = function(loop, offset) { + this._removeEndTimer(); + this._removeNodes(); + this._createNodes(); + this._connectNodes(); + this._sourceNode.loop = loop; + this._sourceNode.start(0, offset); + this._startTime = WebAudio._context.currentTime - offset / this._pitch; + this._createEndTimer(); +}; + +/** + * @method _createNodes + * @private + */ +WebAudio.prototype._createNodes = function() { + var context = WebAudio._context; + this._sourceNode = context.createBufferSource(); + this._sourceNode.buffer = this._buffer; + this._sourceNode.loopStart = this._loopStart; + this._sourceNode.loopEnd = this._loopStart + this._loopLength; + this._sourceNode.playbackRate.value = this._pitch; + this._gainNode = context.createGain(); + this._gainNode.gain.value = this._volume; + this._pannerNode = context.createPanner(); + this._pannerNode.panningModel = 'equalpower'; + this._updatePanner(); +}; + +/** + * @method _connectNodes + * @private + */ +WebAudio.prototype._connectNodes = function() { + this._sourceNode.connect(this._gainNode); + this._gainNode.connect(this._pannerNode); + this._pannerNode.connect(WebAudio._masterGainNode); +}; + +/** + * @method _removeNodes + * @private + */ +WebAudio.prototype._removeNodes = function() { + if (this._sourceNode) { + this._sourceNode.stop(0); + this._sourceNode = null; + this._gainNode = null; + this._pannerNode = null; + } +}; + +/** + * @method _createEndTimer + * @private + */ +WebAudio.prototype._createEndTimer = function() { + if (this._sourceNode && !this._sourceNode.loop) { + var endTime = this._startTime + this._totalTime / this._pitch; + var delay = endTime - WebAudio._context.currentTime; + this._endTimer = setTimeout(function() { + this.stop(); + }.bind(this), delay * 1000); + } +}; + +/** + * @method _removeEndTimer + * @private + */ +WebAudio.prototype._removeEndTimer = function() { + if (this._endTimer) { + clearTimeout(this._endTimer); + this._endTimer = null; + } +}; + +/** + * @method _updatePanner + * @private + */ +WebAudio.prototype._updatePanner = function() { + if (this._pannerNode) { + var x = this._pan; + var z = 1 - Math.abs(x); + this._pannerNode.setPosition(x, 0, z); + } +}; + +/** + * @method _onLoad + * @private + */ +WebAudio.prototype._onLoad = function() { + while (this._loadListeners.length > 0) { + var listner = this._loadListeners.shift(); + listner(); + } +}; + +/** + * @method _readLoopComments + * @param {Uint8Array} array + * @private + */ +WebAudio.prototype._readLoopComments = function(array) { + this._readOgg(array); + this._readMp4(array); +}; + +/** + * @method _readOgg + * @param {Uint8Array} array + * @private + */ +WebAudio.prototype._readOgg = function(array) { + var index = 0; + while (index < array.length) { + if (this._readFourCharacters(array, index) === 'OggS') { + index += 26; + var vorbisHeaderFound = false; + var numSegments = array[index++]; + var segments = []; + for (var i = 0; i < numSegments; i++) { + segments.push(array[index++]); + } + for (i = 0; i < numSegments; i++) { + if (this._readFourCharacters(array, index + 1) === 'vorb') { + var headerType = array[index]; + if (headerType === 1) { + this._sampleRate = this._readLittleEndian(array, index + 12); + } else if (headerType === 3) { + this._readMetaData(array, index, segments[i]); + } + vorbisHeaderFound = true; + } + index += segments[i]; + } + if (!vorbisHeaderFound) { + break; + } + } else { + break; + } + } +}; + +/** + * @method _readMp4 + * @param {Uint8Array} array + * @private + */ +WebAudio.prototype._readMp4 = function(array) { + if (this._readFourCharacters(array, 4) === 'ftyp') { + var index = 0; + while (index < array.length) { + var size = this._readBigEndian(array, index); + var name = this._readFourCharacters(array, index + 4); + if (name === 'moov') { + index += 8; + } else { + if (name === 'mvhd') { + this._sampleRate = this._readBigEndian(array, index + 20); + } + if (name === 'udta' || name === 'meta') { + this._readMetaData(array, index, size); + } + index += size; + if (size <= 1) { + break; + } + } + } + } +}; + +/** + * @method _readMetaData + * @param {Uint8Array} array + * @param {Number} index + * @param {Number} size + * @private + */ +WebAudio.prototype._readMetaData = function(array, index, size) { + for (var i = index; i < index + size - 10; i++) { + if (this._readFourCharacters(array, i) === 'LOOP') { + var text = ''; + while (array[i] > 0) { + text += String.fromCharCode(array[i++]); + } + if (text.match(/LOOPSTART=([0-9]+)/)) { + this._loopStart = parseInt(RegExp.$1); + } + if (text.match(/LOOPLENGTH=([0-9]+)/)) { + this._loopLength = parseInt(RegExp.$1); + } + if (text == 'LOOPSTART' || text == 'LOOPLENGTH') { + var text2 = ''; + i += 16; + while (array[i] > 0) { + text2 += String.fromCharCode(array[i++]); + } + if (text == 'LOOPSTART') { + this._loopStart = parseInt(text2); + } else { + this._loopLength = parseInt(text2); + } + } + } + } +}; + +/** + * @method _readLittleEndian + * @param {Uint8Array} array + * @param {Number} index + * @private + */ +WebAudio.prototype._readLittleEndian = function(array, index) { + return (array[index + 3] * 0x1000000 + array[index + 2] * 0x10000 + + array[index + 1] * 0x100 + array[index + 0]); +}; + +/** + * @method _readBigEndian + * @param {Uint8Array} array + * @param {Number} index + * @private + */ +WebAudio.prototype._readBigEndian = function(array, index) { + return (array[index + 0] * 0x1000000 + array[index + 1] * 0x10000 + + array[index + 2] * 0x100 + array[index + 3]); +}; + +/** + * @method _readFourCharacters + * @param {Uint8Array} array + * @param {Number} index + * @private + */ +WebAudio.prototype._readFourCharacters = function(array, index) { + var string = ''; + for (var i = 0; i < 4; i++) { + string += String.fromCharCode(array[index + i]); + } + return string; +}; + +//----------------------------------------------------------------------------- +/** + * The static class that handles HTML5 Audio. + * + * @class Html5Audio + * @constructor + */ +function Html5Audio() { + throw new Error('This is a static class'); +} + +Html5Audio._initialized = false; +Html5Audio._unlocked = false; +Html5Audio._audioElement = null; +Html5Audio._gainTweenInterval = null; +Html5Audio._tweenGain = 0; +Html5Audio._tweenTargetGain = 0; +Html5Audio._tweenGainStep = 0; +Html5Audio._staticSePath = null; + +/** + * Sets up the Html5 Audio. + * + * @static + * @method setup + * @param {String} url The url of the audio file + */ +Html5Audio.setup = function (url) { + if (!this._initialized) { + this.initialize(); + } + this.clear(); + this._url = url; +}; + +/** + * Initializes the audio system. + * + * @static + * @method initialize + * @return {Boolean} True if the audio system is available + */ +Html5Audio.initialize = function () { + if (!this._initialized) { + if (!this._audioElement) { + try { + this._audioElement = new Audio(); + } catch (e) { + this._audioElement = null; + } + } + if (!!this._audioElement) this._setupEventHandlers(); + this._initialized = true; + } + return !!this._audioElement; +}; + +/** + * @static + * @method _setupEventHandlers + * @private + */ +Html5Audio._setupEventHandlers = function () { + document.addEventListener('touchstart', this._onTouchStart.bind(this)); + document.addEventListener('visibilitychange', this._onVisibilityChange.bind(this)); + this._audioElement.addEventListener("loadeddata", this._onLoadedData.bind(this)); + this._audioElement.addEventListener("error", this._onError.bind(this)); + this._audioElement.addEventListener("ended", this._onEnded.bind(this)); +}; + +/** + * @static + * @method _onTouchStart + * @private + */ +Html5Audio._onTouchStart = function () { + if (this._audioElement && !this._unlocked) { + if (this._isLoading) { + this._load(this._url); + this._unlocked = true; + } else { + if (this._staticSePath) { + this._audioElement.src = this._staticSePath; + this._audioElement.volume = 0; + this._audioElement.loop = false; + this._audioElement.play(); + this._unlocked = true; + } + } + } +}; + +/** + * @static + * @method _onVisibilityChange + * @private + */ +Html5Audio._onVisibilityChange = function () { + if (document.visibilityState === 'hidden') { + this._onHide(); + } else { + this._onShow(); + } +}; + +/** + * @static + * @method _onLoadedData + * @private + */ +Html5Audio._onLoadedData = function () { + this._buffered = true; + if (this._unlocked) this._onLoad(); +}; + +/** + * @static + * @method _onError + * @private + */ +Html5Audio._onError = function () { + this._hasError = true; +}; + +/** + * @static + * @method _onEnded + * @private + */ +Html5Audio._onEnded = function () { + if (!this._audioElement.loop) { + this.stop(); + } +}; + +/** + * @static + * @method _onHide + * @private + */ +Html5Audio._onHide = function () { + this._audioElement.volume = 0; + this._tweenGain = 0; +}; + +/** + * @static + * @method _onShow + * @private + */ +Html5Audio._onShow = function () { + this.fadeIn(0.5); +}; + +/** + * Clears the audio data. + * + * @static + * @method clear + */ +Html5Audio.clear = function () { + this.stop(); + this._volume = 1; + this._loadListeners = []; + this._hasError = false; + this._autoPlay = false; + this._isLoading = false; + this._buffered = false; +}; + +/** + * Set the URL of static se. + * + * @static + * @param {String} url + */ +Html5Audio.setStaticSe = function (url) { + if (!this._initialized) { + this.initialize(); + this.clear(); + } + this._staticSePath = url; +}; + +/** + * [read-only] The url of the audio file. + * + * @property url + * @type String + */ +Object.defineProperty(Html5Audio, 'url', { + get: function () { + return Html5Audio._url; + }, + configurable: true +}); + +/** + * The volume of the audio. + * + * @property volume + * @type Number + */ +Object.defineProperty(Html5Audio, 'volume', { + get: function () { + return Html5Audio._volume; + }.bind(this), + set: function (value) { + Html5Audio._volume = value; + if (Html5Audio._audioElement) { + Html5Audio._audioElement.volume = this._volume; + } + }, + configurable: true +}); + +/** + * Checks whether the audio data is ready to play. + * + * @static + * @method isReady + * @return {Boolean} True if the audio data is ready to play + */ +Html5Audio.isReady = function () { + return this._buffered; +}; + +/** + * Checks whether a loading error has occurred. + * + * @static + * @method isError + * @return {Boolean} True if a loading error has occurred + */ +Html5Audio.isError = function () { + return this._hasError; +}; + +/** + * Checks whether the audio is playing. + * + * @static + * @method isPlaying + * @return {Boolean} True if the audio is playing + */ +Html5Audio.isPlaying = function () { + return !this._audioElement.paused; +}; + +/** + * Plays the audio. + * + * @static + * @method play + * @param {Boolean} loop Whether the audio data play in a loop + * @param {Number} offset The start position to play in seconds + */ +Html5Audio.play = function (loop, offset) { + if (this.isReady()) { + offset = offset || 0; + this._startPlaying(loop, offset); + } else if (Html5Audio._audioElement) { + this._autoPlay = true; + this.addLoadListener(function () { + if (this._autoPlay) { + this.play(loop, offset); + if (this._gainTweenInterval) { + clearInterval(this._gainTweenInterval); + this._gainTweenInterval = null; + } + } + }.bind(this)); + if (!this._isLoading) this._load(this._url); + } +}; + +/** + * Stops the audio. + * + * @static + * @method stop + */ +Html5Audio.stop = function () { + if (this._audioElement) this._audioElement.pause(); + this._autoPlay = false; + if (this._tweenInterval) { + clearInterval(this._tweenInterval); + this._tweenInterval = null; + this._audioElement.volume = 0; + } +}; + +/** + * Performs the audio fade-in. + * + * @static + * @method fadeIn + * @param {Number} duration Fade-in time in seconds + */ +Html5Audio.fadeIn = function (duration) { + if (this.isReady()) { + if (this._audioElement) { + this._tweenTargetGain = this._volume; + this._tweenGain = 0; + this._startGainTween(duration); + } + } else if (this._autoPlay) { + this.addLoadListener(function () { + this.fadeIn(duration); + }.bind(this)); + } +}; + +/** + * Performs the audio fade-out. + * + * @static + * @method fadeOut + * @param {Number} duration Fade-out time in seconds + */ +Html5Audio.fadeOut = function (duration) { + if (this._audioElement) { + this._tweenTargetGain = 0; + this._tweenGain = this._volume; + this._startGainTween(duration); + } +}; + +/** + * Gets the seek position of the audio. + * + * @static + * @method seek + */ +Html5Audio.seek = function () { + if (this._audioElement) { + return this._audioElement.currentTime; + } else { + return 0; + } +}; + +/** + * Add a callback function that will be called when the audio data is loaded. + * + * @static + * @method addLoadListener + * @param {Function} listner The callback function + */ +Html5Audio.addLoadListener = function (listner) { + this._loadListeners.push(listner); +}; + +/** + * @static + * @method _load + * @param {String} url + * @private + */ +Html5Audio._load = function (url) { + if (this._audioElement) { + this._isLoading = true; + this._audioElement.src = url; + this._audioElement.load(); + } +}; + +/** + * @static + * @method _startPlaying + * @param {Boolean} loop + * @param {Number} offset + * @private + */ +Html5Audio._startPlaying = function (loop, offset) { + this._audioElement.loop = loop; + if (this._gainTweenInterval) { + clearInterval(this._gainTweenInterval); + this._gainTweenInterval = null; + } + if (this._audioElement) { + this._audioElement.volume = this._volume; + this._audioElement.currentTime = offset; + this._audioElement.play(); + } +}; + +/** + * @static + * @method _onLoad + * @private + */ +Html5Audio._onLoad = function () { + this._isLoading = false; + while (this._loadListeners.length > 0) { + var listener = this._loadListeners.shift(); + listener(); + } +}; + +/** + * @static + * @method _startGainTween + * @params {Number} duration + * @private + */ +Html5Audio._startGainTween = function (duration) { + this._audioElement.volume = this._tweenGain; + if (this._gainTweenInterval) { + clearInterval(this._gainTweenInterval); + this._gainTweenInterval = null; + } + this._tweenGainStep = (this._tweenTargetGain - this._tweenGain) / (60 * duration); + this._gainTweenInterval = setInterval(function () { + Html5Audio._applyTweenValue(Html5Audio._tweenTargetGain); + }, 1000 / 60); +}; + +/** + * @static + * @method _applyTweenValue + * @param {Number} volume + * @private + */ +Html5Audio._applyTweenValue = function (volume) { + Html5Audio._tweenGain += Html5Audio._tweenGainStep; + if (Html5Audio._tweenGain < 0 && Html5Audio._tweenGainStep < 0) { + Html5Audio._tweenGain = 0; + } + else if (Html5Audio._tweenGain > volume && Html5Audio._tweenGainStep > 0) { + Html5Audio._tweenGain = volume; + } + + if (Math.abs(Html5Audio._tweenTargetGain - Html5Audio._tweenGain) < 0.01) { + Html5Audio._tweenGain = Html5Audio._tweenTargetGain; + clearInterval(Html5Audio._gainTweenInterval); + Html5Audio._gainTweenInterval = null; + } + + Html5Audio._audioElement.volume = Html5Audio._tweenGain; +}; + +//----------------------------------------------------------------------------- +/** + * The static class that handles JSON with object information. + * + * @class JsonEx + */ +function JsonEx() { + throw new Error('This is a static class'); +} + +/** + * The maximum depth of objects. + * + * @static + * @property maxDepth + * @type Number + * @default 100 + */ +JsonEx.maxDepth = 100; + +/** + * Converts an object to a JSON string with object information. + * + * @static + * @method stringify + * @param {Object} object The object to be converted + * @return {String} The JSON string + */ +JsonEx.stringify = function(object) { + return JSON.stringify(this._encode(object)); +}; + +/** + * Parses a JSON string and reconstructs the corresponding object. + * + * @static + * @method parse + * @param {String} json The JSON string + * @return {Object} The reconstructed object + */ +JsonEx.parse = function(json) { + return this._decode(JSON.parse(json)); +}; + +/** + * Makes a deep copy of the specified object. + * + * @static + * @method makeDeepCopy + * @param {Object} object The object to be copied + * @return {Object} The copied object + */ +JsonEx.makeDeepCopy = function(object) { + return this.parse(this.stringify(object)); +}; + +/** + * @static + * @method _encode + * @param {Object} value + * @param {Number} depth + * @return {Object} + * @private + */ +JsonEx._encode = function(value, depth) { + depth = depth || 0; + if (++depth >= this.maxDepth) { + throw new Error('Object too deep'); + } + var type = Object.prototype.toString.call(value); + if (type === '[object Object]' || type === '[object Array]') { + var constructorName = this._getConstructorName(value); + if (constructorName !== 'Object' && constructorName !== 'Array') { + value['@'] = constructorName; + } + for (var key in value) { + if (value.hasOwnProperty(key)) { + value[key] = this._encode(value[key], depth + 1); + } + } + } + depth--; + return value; +}; + +/** + * @static + * @method _decode + * @param {Object} value + * @return {Object} + * @private + */ +JsonEx._decode = function(value) { + var type = Object.prototype.toString.call(value); + if (type === '[object Object]' || type === '[object Array]') { + if (value['@']) { + var constructor = window[value['@']]; + if (constructor) { + value = this._resetPrototype(value, constructor.prototype); + } + } + for (var key in value) { + if (value.hasOwnProperty(key)) { + value[key] = this._decode(value[key]); + } + } + } + return value; +}; + +/** + * @static + * @method _getConstructorName + * @param {Object} value + * @return {String} + * @private + */ +JsonEx._getConstructorName = function(value) { + var name = value.constructor.name; + if (name === undefined) { + var func = /^\s*function\s*([A-Za-z0-9_$]*)/; + name = func.exec(value.constructor)[1]; + } + return name; +}; + +/** + * @static + * @method _resetPrototype + * @param {Object} value + * @param {Object} prototype + * @return {Object} + * @private + */ +JsonEx._resetPrototype = function(value, prototype) { + if (Object.setPrototypeOf !== undefined) { + Object.setPrototypeOf(value, prototype); + } else if ('__proto__' in value) { + value.__proto__ = prototype; + } else { + var newValue = Object.create(prototype); + for (var key in value) { + if (value.hasOwnProperty(key)) { + newValue[key] = value[key]; + } + } + value = newValue; + } + return value; +}; diff --git a/js/rpg_managers.js b/js/rpg_managers.js new file mode 100644 index 0000000..dfcb5d0 --- /dev/null +++ b/js/rpg_managers.js @@ -0,0 +1,2584 @@ +//============================================================================= +// rpg_managers.js v1.2.0 +//============================================================================= + +//----------------------------------------------------------------------------- +// DataManager +// +// The static class that manages the database and game objects. + +function DataManager() { + throw new Error('This is a static class'); +} + +var $dataActors = null; +var $dataClasses = null; +var $dataSkills = null; +var $dataItems = null; +var $dataWeapons = null; +var $dataArmors = null; +var $dataEnemies = null; +var $dataTroops = null; +var $dataStates = null; +var $dataAnimations = null; +var $dataTilesets = null; +var $dataCommonEvents = null; +var $dataSystem = null; +var $dataMapInfos = null; +var $dataMap = null; +var $gameTemp = null; +var $gameSystem = null; +var $gameScreen = null; +var $gameTimer = null; +var $gameMessage = null; +var $gameSwitches = null; +var $gameVariables = null; +var $gameSelfSwitches = null; +var $gameActors = null; +var $gameParty = null; +var $gameTroop = null; +var $gameMap = null; +var $gamePlayer = null; +var $testEvent = null; + +DataManager._globalId = 'RPGMV'; +DataManager._lastAccessedId = 1; +DataManager._errorUrl = null; + +DataManager._databaseFiles = [ + { name: '$dataActors', src: 'Actors.json' }, + { name: '$dataClasses', src: 'Classes.json' }, + { name: '$dataSkills', src: 'Skills.json' }, + { name: '$dataItems', src: 'Items.json' }, + { name: '$dataWeapons', src: 'Weapons.json' }, + { name: '$dataArmors', src: 'Armors.json' }, + { name: '$dataEnemies', src: 'Enemies.json' }, + { name: '$dataTroops', src: 'Troops.json' }, + { name: '$dataStates', src: 'States.json' }, + { name: '$dataAnimations', src: 'Animations.json' }, + { name: '$dataTilesets', src: 'Tilesets.json' }, + { name: '$dataCommonEvents', src: 'CommonEvents.json' }, + { name: '$dataSystem', src: 'System.json' }, + { name: '$dataMapInfos', src: 'MapInfos.json' } +]; + +DataManager.loadDatabase = function() { + var test = this.isBattleTest() || this.isEventTest(); + var prefix = test ? 'Test_' : ''; + for (var i = 0; i < this._databaseFiles.length; i++) { + var name = this._databaseFiles[i].name; + var src = this._databaseFiles[i].src; + this.loadDataFile(name, prefix + src); + } + if (this.isEventTest()) { + this.loadDataFile('$testEvent', prefix + 'Event.json'); + } +}; + +DataManager.loadDataFile = function(name, src) { + var xhr = new XMLHttpRequest(); + var url = 'data/' + src; + xhr.open('GET', url); + xhr.overrideMimeType('application/json'); + xhr.onload = function() { + if (xhr.status < 400) { + window[name] = JSON.parse(xhr.responseText); + DataManager.onLoad(window[name]); + } + }; + xhr.onerror = function() { + DataManager._errorUrl = DataManager._errorUrl || url; + }; + window[name] = null; + xhr.send(); +}; + +DataManager.isDatabaseLoaded = function() { + this.checkError(); + for (var i = 0; i < this._databaseFiles.length; i++) { + if (!window[this._databaseFiles[i].name]) { + return false; + } + } + return true; +}; + +DataManager.loadMapData = function(mapId) { + if (mapId > 0) { + var filename = 'Map%1.json'.format(mapId.padZero(3)); + this.loadDataFile('$dataMap', filename); + } else { + this.makeEmptyMap(); + } +}; + +DataManager.makeEmptyMap = function() { + $dataMap = {}; + $dataMap.data = []; + $dataMap.events = []; + $dataMap.width = 100; + $dataMap.height = 100; + $dataMap.scrollType = 3; +}; + +DataManager.isMapLoaded = function() { + this.checkError(); + return !!$dataMap; +}; + +DataManager.onLoad = function(object) { + var array; + if (object === $dataMap) { + this.extractMetadata(object); + array = object.events; + } else { + array = object; + } + if (Array.isArray(array)) { + for (var i = 0; i < array.length; i++) { + var data = array[i]; + if (data && data.note !== undefined) { + this.extractMetadata(data); + } + } + } +}; + +DataManager.extractMetadata = function(data) { + var re = /<([^<>:]+)(:?)([^>]*)>/g; + data.meta = {}; + for (;;) { + var match = re.exec(data.note); + if (match) { + if (match[2] === ':') { + data.meta[match[1]] = match[3]; + } else { + data.meta[match[1]] = true; + } + } else { + break; + } + } +}; + +DataManager.checkError = function() { + if (DataManager._errorUrl) { + throw new Error('Failed to load: ' + DataManager._errorUrl); + } +}; + +DataManager.isBattleTest = function() { + return Utils.isOptionValid('btest'); +}; + +DataManager.isEventTest = function() { + return Utils.isOptionValid('etest'); +}; + +DataManager.isSkill = function(item) { + return item && $dataSkills.contains(item); +}; + +DataManager.isItem = function(item) { + return item && $dataItems.contains(item); +}; + +DataManager.isWeapon = function(item) { + return item && $dataWeapons.contains(item); +}; + +DataManager.isArmor = function(item) { + return item && $dataArmors.contains(item); +}; + +DataManager.createGameObjects = function() { + $gameTemp = new Game_Temp(); + $gameSystem = new Game_System(); + $gameScreen = new Game_Screen(); + $gameTimer = new Game_Timer(); + $gameMessage = new Game_Message(); + $gameSwitches = new Game_Switches(); + $gameVariables = new Game_Variables(); + $gameSelfSwitches = new Game_SelfSwitches(); + $gameActors = new Game_Actors(); + $gameParty = new Game_Party(); + $gameTroop = new Game_Troop(); + $gameMap = new Game_Map(); + $gamePlayer = new Game_Player(); +}; + +DataManager.setupNewGame = function() { + this.createGameObjects(); + this.selectSavefileForNewGame(); + $gameParty.setupStartingMembers(); + $gamePlayer.reserveTransfer($dataSystem.startMapId, + $dataSystem.startX, $dataSystem.startY); + Graphics.frameCount = 0; +}; + +DataManager.setupBattleTest = function() { + this.createGameObjects(); + $gameParty.setupBattleTest(); + BattleManager.setup($dataSystem.testTroopId, true, false); + BattleManager.setBattleTest(true); + BattleManager.playBattleBgm(); +}; + +DataManager.setupEventTest = function() { + this.createGameObjects(); + this.selectSavefileForNewGame(); + $gameParty.setupStartingMembers(); + $gamePlayer.reserveTransfer(-1, 8, 6); + $gamePlayer.setTransparent(false); +}; + +DataManager.loadGlobalInfo = function() { + var json; + try { + json = StorageManager.load(0); + } catch (e) { + console.error(e); + return []; + } + if (json) { + var globalInfo = JSON.parse(json); + for (var i = 1; i <= this.maxSavefiles(); i++) { + if (!StorageManager.exists(i)) { + delete globalInfo[i]; + } + } + return globalInfo; + } else { + return []; + } +}; + +DataManager.saveGlobalInfo = function(info) { + StorageManager.save(0, JSON.stringify(info)); +}; + +DataManager.isThisGameFile = function(savefileId) { + var globalInfo = this.loadGlobalInfo(); + if (globalInfo && globalInfo[savefileId]) { + if (StorageManager.isLocalMode()) { + return true; + } else { + var savefile = globalInfo[savefileId]; + return (savefile.globalId === this._globalId && + savefile.title === $dataSystem.gameTitle); + } + } else { + return false; + } +}; + +DataManager.isAnySavefileExists = function() { + var globalInfo = this.loadGlobalInfo(); + if (globalInfo) { + for (var i = 1; i < globalInfo.length; i++) { + if (this.isThisGameFile(i)) { + return true; + } + } + } + return false; +}; + +DataManager.latestSavefileId = function() { + var globalInfo = this.loadGlobalInfo(); + var savefileId = 1; + var timestamp = 0; + if (globalInfo) { + for (var i = 1; i < globalInfo.length; i++) { + if (this.isThisGameFile(i) && globalInfo[i].timestamp > timestamp) { + timestamp = globalInfo[i].timestamp; + savefileId = i; + } + } + } + return savefileId; +}; + +DataManager.loadAllSavefileImages = function() { + var globalInfo = this.loadGlobalInfo(); + if (globalInfo) { + for (var i = 1; i < globalInfo.length; i++) { + if (this.isThisGameFile(i)) { + var info = globalInfo[i]; + this.loadSavefileImages(info); + } + } + } +}; + +DataManager.loadSavefileImages = function(info) { + if (info.characters) { + for (var i = 0; i < info.characters.length; i++) { + ImageManager.loadCharacter(info.characters[i][0]); + } + } + if (info.faces) { + for (var j = 0; j < info.faces.length; j++) { + ImageManager.loadFace(info.faces[j][0]); + } + } +}; + +DataManager.maxSavefiles = function() { + return 20; +}; + +DataManager.saveGame = function(savefileId) { + try { + StorageManager.backup(savefileId); + return this.saveGameWithoutRescue(savefileId); + } catch (e) { + console.error(e); + try { + StorageManager.remove(savefileId); + StorageManager.restoreBackup(savefileId); + } catch (e2) { + } + return false; + } +}; + +DataManager.loadGame = function(savefileId) { + try { + return this.loadGameWithoutRescue(savefileId); + } catch (e) { + console.error(e); + return false; + } +}; + +DataManager.loadSavefileInfo = function(savefileId) { + var globalInfo = this.loadGlobalInfo(); + return (globalInfo && globalInfo[savefileId]) ? globalInfo[savefileId] : null; +}; + +DataManager.lastAccessedSavefileId = function() { + return this._lastAccessedId; +}; + +DataManager.saveGameWithoutRescue = function(savefileId) { + var json = JsonEx.stringify(this.makeSaveContents()); + if (json.length >= 200000) { + console.warn('Save data too big!'); + } + StorageManager.save(savefileId, json); + this._lastAccessedId = savefileId; + var globalInfo = this.loadGlobalInfo() || []; + globalInfo[savefileId] = this.makeSavefileInfo(); + this.saveGlobalInfo(globalInfo); + return true; +}; + +DataManager.loadGameWithoutRescue = function(savefileId) { + var globalInfo = this.loadGlobalInfo(); + if (this.isThisGameFile(savefileId)) { + var json = StorageManager.load(savefileId); + this.createGameObjects(); + this.extractSaveContents(JsonEx.parse(json)); + this._lastAccessedId = savefileId; + return true; + } else { + return false; + } +}; + +DataManager.selectSavefileForNewGame = function() { + var globalInfo = this.loadGlobalInfo(); + this._lastAccessedId = 1; + if (globalInfo) { + var numSavefiles = Math.max(0, globalInfo.length - 1); + if (numSavefiles < this.maxSavefiles()) { + this._lastAccessedId = numSavefiles + 1; + } else { + var timestamp = Number.MAX_VALUE; + for (var i = 1; i < globalInfo.length; i++) { + if (!globalInfo[i]) { + this._lastAccessedId = i; + break; + } + if (globalInfo[i].timestamp < timestamp) { + timestamp = globalInfo[i].timestamp; + this._lastAccessedId = i; + } + } + } + } +}; + +DataManager.makeSavefileInfo = function() { + var info = {}; + info.globalId = this._globalId; + info.title = $dataSystem.gameTitle; + info.characters = $gameParty.charactersForSavefile(); + info.faces = $gameParty.facesForSavefile(); + info.playtime = $gameSystem.playtimeText(); + info.timestamp = Date.now(); + return info; +}; + +DataManager.makeSaveContents = function() { + // A save data does not contain $gameTemp, $gameMessage, and $gameTroop. + var contents = {}; + contents.system = $gameSystem; + contents.screen = $gameScreen; + contents.timer = $gameTimer; + contents.switches = $gameSwitches; + contents.variables = $gameVariables; + contents.selfSwitches = $gameSelfSwitches; + contents.actors = $gameActors; + contents.party = $gameParty; + contents.map = $gameMap; + contents.player = $gamePlayer; + return contents; +}; + +DataManager.extractSaveContents = function(contents) { + $gameSystem = contents.system; + $gameScreen = contents.screen; + $gameTimer = contents.timer; + $gameSwitches = contents.switches; + $gameVariables = contents.variables; + $gameSelfSwitches = contents.selfSwitches; + $gameActors = contents.actors; + $gameParty = contents.party; + $gameMap = contents.map; + $gamePlayer = contents.player; +}; + +//----------------------------------------------------------------------------- +// ConfigManager +// +// The static class that manages the configuration data. + +function ConfigManager() { + throw new Error('This is a static class'); +} + +ConfigManager.alwaysDash = false; +ConfigManager.commandRemember = false; + +Object.defineProperty(ConfigManager, 'bgmVolume', { + get: function() { + return AudioManager._bgmVolume; + }, + set: function(value) { + AudioManager.bgmVolume = value; + }, + configurable: true +}); + +Object.defineProperty(ConfigManager, 'bgsVolume', { + get: function() { + return AudioManager.bgsVolume; + }, + set: function(value) { + AudioManager.bgsVolume = value; + }, + configurable: true +}); + +Object.defineProperty(ConfigManager, 'meVolume', { + get: function() { + return AudioManager.meVolume; + }, + set: function(value) { + AudioManager.meVolume = value; + }, + configurable: true +}); + +Object.defineProperty(ConfigManager, 'seVolume', { + get: function() { + return AudioManager.seVolume; + }, + set: function(value) { + AudioManager.seVolume = value; + }, + configurable: true +}); + +ConfigManager.load = function() { + var json; + var config = {}; + try { + json = StorageManager.load(-1); + } catch (e) { + console.error(e); + } + if (json) { + config = JSON.parse(json); + } + this.applyData(config); +}; + +ConfigManager.save = function() { + StorageManager.save(-1, JSON.stringify(this.makeData())); +}; + +ConfigManager.makeData = function() { + var config = {}; + config.alwaysDash = this.alwaysDash; + config.commandRemember = this.commandRemember; + config.bgmVolume = this.bgmVolume; + config.bgsVolume = this.bgsVolume; + config.meVolume = this.meVolume; + config.seVolume = this.seVolume; + return config; +}; + +ConfigManager.applyData = function(config) { + this.alwaysDash = this.readFlag(config, 'alwaysDash'); + this.commandRemember = this.readFlag(config, 'commandRemember'); + this.bgmVolume = this.readVolume(config, 'bgmVolume'); + this.bgsVolume = this.readVolume(config, 'bgsVolume'); + this.meVolume = this.readVolume(config, 'meVolume'); + this.seVolume = this.readVolume(config, 'seVolume'); +}; + +ConfigManager.readFlag = function(config, name) { + return !!config[name]; +}; + +ConfigManager.readVolume = function(config, name) { + var value = config[name]; + if (value !== undefined) { + return Number(value).clamp(0, 100); + } else { + return 100; + } +}; + +//----------------------------------------------------------------------------- +// StorageManager +// +// The static class that manages storage for saving game data. + +function StorageManager() { + throw new Error('This is a static class'); +} + +StorageManager.save = function(savefileId, json) { + if (this.isLocalMode()) { + this.saveToLocalFile(savefileId, json); + } else { + this.saveToWebStorage(savefileId, json); + } +}; + +StorageManager.load = function(savefileId) { + if (this.isLocalMode()) { + return this.loadFromLocalFile(savefileId); + } else { + return this.loadFromWebStorage(savefileId); + } +}; + +StorageManager.exists = function(savefileId) { + if (this.isLocalMode()) { + return this.localFileExists(savefileId); + } else { + return this.webStorageExists(savefileId); + } +}; + +StorageManager.remove = function(savefileId) { + if (this.isLocalMode()) { + this.removeLocalFile(savefileId); + } else { + this.removeWebStorage(savefileId); + } +}; + +StorageManager.backup = function(savefileId) { + if (this.exists(savefileId)) { + if (this.isLocalMode()) { + var data = this.loadFromLocalFile(savefileId); + var compressed = LZString.compressToBase64(data); + var fs = require('fs'); + var dirPath = this.localFileDirectoryPath(); + var filePath = this.localFilePath(savefileId) + ".bak"; + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath); + } + fs.writeFileSync(filePath, compressed); + } else { + var data = this.loadFromWebStorage(savefileId); + var compressed = LZString.compressToBase64(data); + var key = this.webStorageKey(savefileId) + "bak"; + localStorage.setItem(key, compressed); + } + } +}; + +StorageManager.backupExists = function(savefileId) { + if (this.isLocalMode()) { + return this.localFileBackupExists(savefileId); + } else { + return this.webStorageBackupExists(savefileId); + } +}; + +StorageManager.cleanBackup = function(savefileId) { + if (this.backupExists(savefileId)) { + if (this.isLocalMode()) { + var fs = require('fs'); + var dirPath = this.localFileDirectoryPath(); + var filePath = this.localFilePath(savefileId); + fs.unlinkSync(filePath + ".bak"); + } else { + var key = this.webStorageKey(savefileId); + localStorage.removeItem(key + "bak"); + } + } +}; + +StorageManager.restoreBackup = function(savefileId) { + if (this.backupExists(savefileId)) { + if (this.isLocalMode()) { + var data = this.loadFromLocalBackupFile(savefileId); + var compressed = LZString.compressToBase64(data); + var fs = require('fs'); + var dirPath = this.localFileDirectoryPath(); + var filePath = this.localFilePath(savefileId); + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath); + } + fs.writeFileSync(filePath, compressed); + fs.unlinkSync(filePath + ".bak"); + } else { + var data = this.loadFromWebStorageBackup(savefileId); + var compressed = LZString.compressToBase64(data); + var key = this.webStorageKey(savefileId); + localStorage.setItem(key, compressed); + localStorage.removeItem(key + "bak",""); + } + } +}; + +StorageManager.isLocalMode = function() { + return Utils.isNwjs(); +}; + +StorageManager.saveToLocalFile = function(savefileId, json) { + var data = LZString.compressToBase64(json); + var fs = require('fs'); + var dirPath = this.localFileDirectoryPath(); + var filePath = this.localFilePath(savefileId); + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath); + } + fs.writeFileSync(filePath, data); +}; + +StorageManager.loadFromLocalFile = function(savefileId) { + var data = null; + var fs = require('fs'); + var filePath = this.localFilePath(savefileId); + if (fs.existsSync(filePath)) { + data = fs.readFileSync(filePath, { encoding: 'utf8' }); + } + return LZString.decompressFromBase64(data); +}; + +StorageManager.loadFromLocalBackupFile = function(savefileId) { + var data = null; + var fs = require('fs'); + var filePath = this.localFilePath(savefileId) + ".bak"; + if (fs.existsSync(filePath)) { + data = fs.readFileSync(filePath, { encoding: 'utf8' }); + } + return LZString.decompressFromBase64(data); +}; + +StorageManager.localFileBackupExists = function(savefileId) { + var fs = require('fs'); + return fs.existsSync(this.localFilePath(savefileId) + ".bak"); +}; + +StorageManager.localFileExists = function(savefileId) { + var fs = require('fs'); + return fs.existsSync(this.localFilePath(savefileId)); +}; + +StorageManager.removeLocalFile = function(savefileId) { + var fs = require('fs'); + var filePath = this.localFilePath(savefileId); + if (fs.existsSync(filePath)) { + fs.unlinkSync(filePath); + } +}; + +StorageManager.saveToWebStorage = function(savefileId, json) { + var key = this.webStorageKey(savefileId); + var data = LZString.compressToBase64(json); + localStorage.setItem(key, data); +}; + +StorageManager.loadFromWebStorage = function(savefileId) { + var key = this.webStorageKey(savefileId); + var data = localStorage.getItem(key); + return LZString.decompressFromBase64(data); +}; + +StorageManager.loadFromWebStorageBackup = function(savefileId) { + var key = this.webStorageKey(savefileId) + "bak"; + var data = localStorage.getItem(key); + return LZString.decompressFromBase64(data); +}; + +StorageManager.webStorageBackupExists = function(savefileId) { + var key = this.webStorageKey(savefileId) + "bak"; + return !!localStorage.getItem(key); +}; + +StorageManager.webStorageExists = function(savefileId) { + var key = this.webStorageKey(savefileId); + return !!localStorage.getItem(key); +}; + +StorageManager.removeWebStorage = function(savefileId) { + var key = this.webStorageKey(savefileId); + localStorage.removeItem(key); +}; + +StorageManager.localFileDirectoryPath = function() { + var path = window.location.pathname.replace(/(\/www|)\/[^\/]*$/, '/save/'); + if (path.match(/^\/([A-Z]\:)/)) { + path = path.slice(1); + } + return decodeURIComponent(path); +}; + +StorageManager.localFilePath = function(savefileId) { + var name; + if (savefileId < 0) { + name = 'config.rpgsave'; + } else if (savefileId === 0) { + name = 'global.rpgsave'; + } else { + name = 'file%1.rpgsave'.format(savefileId); + } + return this.localFileDirectoryPath() + name; +}; + +StorageManager.webStorageKey = function(savefileId) { + if (savefileId < 0) { + return 'RPG Config'; + } else if (savefileId === 0) { + return 'RPG Global'; + } else { + return 'RPG File%1'.format(savefileId); + } +}; + +//----------------------------------------------------------------------------- +// ImageManager +// +// The static class that loads images, creates bitmap objects and retains them. + +function ImageManager() { + throw new Error('This is a static class'); +} + +ImageManager._cache = {}; + +ImageManager.loadAnimation = function(filename, hue) { + return this.loadBitmap('img/animations/', filename, hue, true); +}; + +ImageManager.loadBattleback1 = function(filename, hue) { + return this.loadBitmap('img/battlebacks1/', filename, hue, true); +}; + +ImageManager.loadBattleback2 = function(filename, hue) { + return this.loadBitmap('img/battlebacks2/', filename, hue, true); +}; + +ImageManager.loadEnemy = function(filename, hue) { + return this.loadBitmap('img/enemies/', filename, hue, true); +}; + +ImageManager.loadCharacter = function(filename, hue) { + return this.loadBitmap('img/characters/', filename, hue, false); +}; + +ImageManager.loadFace = function(filename, hue) { + return this.loadBitmap('img/faces/', filename, hue, true); +}; + +ImageManager.loadParallax = function(filename, hue) { + return this.loadBitmap('img/parallaxes/', filename, hue, true); +}; + +ImageManager.loadPicture = function(filename, hue) { + return this.loadBitmap('img/pictures/', filename, hue, true); +}; + +ImageManager.loadSvActor = function(filename, hue) { + return this.loadBitmap('img/sv_actors/', filename, hue, false); +}; + +ImageManager.loadSvEnemy = function(filename, hue) { + return this.loadBitmap('img/sv_enemies/', filename, hue, true); +}; + +ImageManager.loadSystem = function(filename, hue) { + return this.loadBitmap('img/system/', filename, hue, false); +}; + +ImageManager.loadTileset = function(filename, hue) { + return this.loadBitmap('img/tilesets/', filename, hue, false); +}; + +ImageManager.loadTitle1 = function(filename, hue) { + return this.loadBitmap('img/titles1/', filename, hue, true); +}; + +ImageManager.loadTitle2 = function(filename, hue) { + return this.loadBitmap('img/titles2/', filename, hue, true); +}; + +ImageManager.loadBitmap = function(folder, filename, hue, smooth) { + if (filename) { + var path = folder + encodeURIComponent(filename) + '.png'; + var bitmap = this.loadNormalBitmap(path, hue || 0); + bitmap.smooth = smooth; + return bitmap; + } else { + return this.loadEmptyBitmap(); + } +}; + +ImageManager.loadEmptyBitmap = function() { + if (!this._cache[null]) { + this._cache[null] = new Bitmap(); + } + return this._cache[null]; +}; + +ImageManager.loadNormalBitmap = function(path, hue) { + var key = path + ':' + hue; + if (!this._cache[key]) { + var bitmap = Bitmap.load(path); + bitmap.addLoadListener(function() { + bitmap.rotateHue(hue); + }); + this._cache[key] = bitmap; + } + return this._cache[key]; +}; + +ImageManager.clear = function() { + this._cache = {}; +}; + +ImageManager.isReady = function() { + for (var key in this._cache) { + var bitmap = this._cache[key]; + if (bitmap.isError()) { + throw new Error('Failed to load: ' + bitmap.url); + } + if (!bitmap.isReady()) { + return false; + } + } + return true; +}; + +ImageManager.isObjectCharacter = function(filename) { + var sign = filename.match(/^[\!\$]+/); + return sign && sign[0].contains('!'); +}; + +ImageManager.isBigCharacter = function(filename) { + var sign = filename.match(/^[\!\$]+/); + return sign && sign[0].contains('$'); +}; + +ImageManager.isZeroParallax = function(filename) { + return filename.charAt(0) === '!'; +}; + +//----------------------------------------------------------------------------- +// AudioManager +// +// The static class that handles BGM, BGS, ME and SE. + +function AudioManager() { + throw new Error('This is a static class'); +} + +AudioManager._bgmVolume = 100; +AudioManager._bgsVolume = 100; +AudioManager._meVolume = 100; +AudioManager._seVolume = 100; +AudioManager._currentBgm = null; +AudioManager._currentBgs = null; +AudioManager._bgmBuffer = null; +AudioManager._bgsBuffer = null; +AudioManager._meBuffer = null; +AudioManager._seBuffers = []; +AudioManager._staticBuffers = []; +AudioManager._replayFadeTime = 0.5; +AudioManager._path = 'audio/'; + +Object.defineProperty(AudioManager, 'bgmVolume', { + get: function() { + return this._bgmVolume; + }, + set: function(value) { + this._bgmVolume = value; + this.updateBgmParameters(this._currentBgm); + }, + configurable: true +}); + +Object.defineProperty(AudioManager, 'bgsVolume', { + get: function() { + return this._bgsVolume; + }, + set: function(value) { + this._bgsVolume = value; + this.updateBgsParameters(this._currentBgs); + }, + configurable: true +}); + +Object.defineProperty(AudioManager, 'meVolume', { + get: function() { + return this._meVolume; + }, + set: function(value) { + this._meVolume = value; + this.updateMeParameters(this._currentMe); + }, + configurable: true +}); + +Object.defineProperty(AudioManager, 'seVolume', { + get: function() { + return this._seVolume; + }, + set: function(value) { + this._seVolume = value; + }, + configurable: true +}); + +AudioManager.playBgm = function(bgm, pos) { + if (this.isCurrentBgm(bgm)) { + this.updateBgmParameters(bgm); + } else { + this.stopBgm(); + if (bgm.name) { + this._bgmBuffer = this.createBuffer('bgm', bgm.name); + this.updateBgmParameters(bgm); + if (!this._meBuffer) { + this._bgmBuffer.play(true, pos || 0); + } + } + } + this.updateCurrentBgm(bgm, pos); +}; + +AudioManager.replayBgm = function(bgm) { + if (this.isCurrentBgm(bgm)) { + this.updateBgmParameters(bgm); + } else { + this.playBgm(bgm, bgm.pos); + if (this._bgmBuffer) { + this._bgmBuffer.fadeIn(this._replayFadeTime); + } + } +}; + +AudioManager.isCurrentBgm = function(bgm) { + return (this._currentBgm && this._bgmBuffer && + this._currentBgm.name === bgm.name); +}; + +AudioManager.updateBgmParameters = function(bgm) { + this.updateBufferParameters(this._bgmBuffer, this._bgmVolume, bgm); +}; + +AudioManager.updateCurrentBgm = function(bgm, pos) { + this._currentBgm = { + name: bgm.name, + volume: bgm.volume, + pitch: bgm.pitch, + pan: bgm.pan, + pos: pos + }; +}; + +AudioManager.stopBgm = function() { + if (this._bgmBuffer) { + this._bgmBuffer.stop(); + this._bgmBuffer = null; + this._currentBgm = null; + } +}; + +AudioManager.fadeOutBgm = function(duration) { + if (this._bgmBuffer && this._currentBgm) { + this._bgmBuffer.fadeOut(duration); + this._currentBgm = null; + } +}; + +AudioManager.fadeInBgm = function(duration) { + if (this._bgmBuffer && this._currentBgm) { + this._bgmBuffer.fadeIn(duration); + } +}; + +AudioManager.playBgs = function(bgs, pos) { + if (this.isCurrentBgs(bgs)) { + this.updateBgsParameters(bgs); + } else { + this.stopBgs(); + if (bgs.name) { + this._bgsBuffer = this.createBuffer('bgs', bgs.name); + this.updateBgsParameters(bgs); + this._bgsBuffer.play(true, pos || 0); + } + } + this.updateCurrentBgs(bgs, pos); +}; + +AudioManager.replayBgs = function(bgs) { + if (this.isCurrentBgs(bgs)) { + this.updateBgsParameters(bgs); + } else { + this.playBgs(bgs, bgs.pos); + if (this._bgsBuffer) { + this._bgsBuffer.fadeIn(this._replayFadeTime); + } + } +}; + +AudioManager.isCurrentBgs = function(bgs) { + return (this._currentBgs && this._bgsBuffer && + this._currentBgs.name === bgs.name); +}; + +AudioManager.updateBgsParameters = function(bgs) { + this.updateBufferParameters(this._bgsBuffer, this._bgsVolume, bgs); +}; + +AudioManager.updateCurrentBgs = function(bgs, pos) { + this._currentBgs = { + name: bgs.name, + volume: bgs.volume, + pitch: bgs.pitch, + pan: bgs.pan, + pos: pos + }; +}; + +AudioManager.stopBgs = function() { + if (this._bgsBuffer) { + this._bgsBuffer.stop(); + this._bgsBuffer = null; + this._currentBgs = null; + } +}; + +AudioManager.fadeOutBgs = function(duration) { + if (this._bgsBuffer && this._currentBgs) { + this._bgsBuffer.fadeOut(duration); + this._currentBgs = null; + } +}; + +AudioManager.fadeInBgs = function(duration) { + if (this._bgsBuffer && this._currentBgs) { + this._bgsBuffer.fadeIn(duration); + } +}; + +AudioManager.playMe = function(me) { + this.stopMe(); + if (me.name) { + if (this._bgmBuffer && this._currentBgm) { + this._currentBgm.pos = this._bgmBuffer.seek(); + this._bgmBuffer.stop(); + } + this._meBuffer = this.createBuffer('me', me.name); + this.updateMeParameters(me); + this._meBuffer.play(false); + this._meBuffer.addStopListener(this.stopMe.bind(this)); + } +}; + +AudioManager.updateMeParameters = function(me) { + this.updateBufferParameters(this._meBuffer, this._meVolume, me); +}; + +AudioManager.fadeOutMe = function(duration) { + if (this._meBuffer) { + this._meBuffer.fadeOut(duration); + } +}; + +AudioManager.stopMe = function() { + if (this._meBuffer) { + this._meBuffer.stop(); + this._meBuffer = null; + if (this._bgmBuffer && this._currentBgm && !this._bgmBuffer.isPlaying()) { + this._bgmBuffer.play(true, this._currentBgm.pos); + this._bgmBuffer.fadeIn(this._replayFadeTime); + } + } +}; + +AudioManager.playSe = function(se) { + if (se.name) { + this._seBuffers = this._seBuffers.filter(function(audio) { + return audio.isPlaying(); + }); + var buffer = this.createBuffer('se', se.name); + this.updateSeParameters(buffer, se); + buffer.play(false); + this._seBuffers.push(buffer); + } +}; + +AudioManager.updateSeParameters = function(buffer, se) { + this.updateBufferParameters(buffer, this._seVolume, se); +}; + +AudioManager.stopSe = function() { + this._seBuffers.forEach(function(buffer) { + buffer.stop(); + }); + this._seBuffers = []; +}; + +AudioManager.playStaticSe = function(se) { + if (se.name) { + this.loadStaticSe(se); + for (var i = 0; i < this._staticBuffers.length; i++) { + var buffer = this._staticBuffers[i]; + if (buffer._reservedSeName === se.name) { + buffer.stop(); + this.updateSeParameters(buffer, se); + buffer.play(false); + break; + } + } + } +}; + +AudioManager.loadStaticSe = function(se) { + if (se.name && !this.isStaticSe(se)) { + var buffer = this.createBuffer('se', se.name); + buffer._reservedSeName = se.name; + this._staticBuffers.push(buffer); + if (this.shouldUseHtml5Audio()) { + Html5Audio.setStaticSe(buffer._url); + } + } +}; + +AudioManager.isStaticSe = function(se) { + for (var i = 0; i < this._staticBuffers.length; i++) { + var buffer = this._staticBuffers[i]; + if (buffer._reservedSeName === se.name) { + return true; + } + } + return false; +}; + +AudioManager.stopAll = function() { + this.stopMe(); + this.stopBgm(); + this.stopBgs(); + this.stopSe(); +}; + +AudioManager.saveBgm = function() { + if (this._currentBgm) { + var bgm = this._currentBgm; + return { + name: bgm.name, + volume: bgm.volume, + pitch: bgm.pitch, + pan: bgm.pan, + pos: this._bgmBuffer ? this._bgmBuffer.seek() : 0 + }; + } else { + return this.makeEmptyAudioObject(); + } +}; + +AudioManager.saveBgs = function() { + if (this._currentBgs) { + var bgs = this._currentBgs; + return { + name: bgs.name, + volume: bgs.volume, + pitch: bgs.pitch, + pan: bgs.pan, + pos: this._bgsBuffer ? this._bgsBuffer.seek() : 0 + }; + } else { + return this.makeEmptyAudioObject(); + } +}; + +AudioManager.makeEmptyAudioObject = function() { + return { name: '', volume: 0, pitch: 0 }; +}; + +AudioManager.createBuffer = function(folder, name) { + var ext = this.audioFileExt(); + var url = this._path + folder + '/' + encodeURIComponent(name) + ext; + if (this.shouldUseHtml5Audio() && folder === 'bgm') { + Html5Audio.setup(url); + return Html5Audio; + } else { + return new WebAudio(url); + } +}; + +AudioManager.updateBufferParameters = function(buffer, configVolume, audio) { + if (buffer && audio) { + buffer.volume = configVolume * (audio.volume || 0) / 10000; + buffer.pitch = (audio.pitch || 0) / 100; + buffer.pan = (audio.pan || 0) / 100; + } +}; + +AudioManager.audioFileExt = function() { + if (WebAudio.canPlayOgg() && !Utils.isMobileDevice()) { + return '.ogg'; + } else { + return '.m4a'; + } +}; + +AudioManager.shouldUseHtml5Audio = function() { + // We use HTML5 Audio to play BGM instead of Web Audio API + // because decodeAudioData() is very slow on Android Chrome. + return Utils.isAndroidChrome(); +}; + +AudioManager.checkErrors = function() { + this.checkWebAudioError(this._bgmBuffer); + this.checkWebAudioError(this._bgsBuffer); + this.checkWebAudioError(this._meBuffer); + this._seBuffers.forEach(function(buffer) { + this.checkWebAudioError(buffer); + }.bind(this)); + this._staticBuffers.forEach(function(buffer) { + this.checkWebAudioError(buffer); + }.bind(this)); +}; + +AudioManager.checkWebAudioError = function(webAudio) { + if (webAudio && webAudio.isError()) { + throw new Error('Failed to load: ' + webAudio.url); + } +}; + +//----------------------------------------------------------------------------- +// SoundManager +// +// The static class that plays sound effects defined in the database. + +function SoundManager() { + throw new Error('This is a static class'); +} + +SoundManager.preloadImportantSounds = function() { + this.loadSystemSound(0); + this.loadSystemSound(1); + this.loadSystemSound(2); + this.loadSystemSound(3); +}; + +SoundManager.loadSystemSound = function(n) { + if ($dataSystem) { + AudioManager.loadStaticSe($dataSystem.sounds[n]); + } +}; + +SoundManager.playSystemSound = function(n) { + if ($dataSystem) { + AudioManager.playStaticSe($dataSystem.sounds[n]); + } +}; + +SoundManager.playCursor = function() { + this.playSystemSound(0); +}; + +SoundManager.playOk = function() { + this.playSystemSound(1); +}; + +SoundManager.playCancel = function() { + this.playSystemSound(2); +}; + +SoundManager.playBuzzer = function() { + this.playSystemSound(3); +}; + +SoundManager.playEquip = function() { + this.playSystemSound(4); +}; + +SoundManager.playSave = function() { + this.playSystemSound(5); +}; + +SoundManager.playLoad = function() { + this.playSystemSound(6); +}; + +SoundManager.playBattleStart = function() { + this.playSystemSound(7); +}; + +SoundManager.playEscape = function() { + this.playSystemSound(8); +}; + +SoundManager.playEnemyAttack = function() { + this.playSystemSound(9); +}; + +SoundManager.playEnemyDamage = function() { + this.playSystemSound(10); +}; + +SoundManager.playEnemyCollapse = function() { + this.playSystemSound(11); +}; + +SoundManager.playBossCollapse1 = function() { + this.playSystemSound(12); +}; + +SoundManager.playBossCollapse2 = function() { + this.playSystemSound(13); +}; + +SoundManager.playActorDamage = function() { + this.playSystemSound(14); +}; + +SoundManager.playActorCollapse = function() { + this.playSystemSound(15); +}; + +SoundManager.playRecovery = function() { + this.playSystemSound(16); +}; + +SoundManager.playMiss = function() { + this.playSystemSound(17); +}; + +SoundManager.playEvasion = function() { + this.playSystemSound(18); +}; + +SoundManager.playMagicEvasion = function() { + this.playSystemSound(19); +}; + +SoundManager.playReflection = function() { + this.playSystemSound(20); +}; + +SoundManager.playShop = function() { + this.playSystemSound(21); +}; + +SoundManager.playUseItem = function() { + this.playSystemSound(22); +}; + +SoundManager.playUseSkill = function() { + this.playSystemSound(23); +}; + +//----------------------------------------------------------------------------- +// TextManager +// +// The static class that handles terms and messages. + +function TextManager() { + throw new Error('This is a static class'); +} + +TextManager.basic = function(basicId) { + return $dataSystem.terms.basic[basicId] || ''; +}; + +TextManager.param = function(paramId) { + return $dataSystem.terms.params[paramId] || ''; +}; + +TextManager.command = function(commandId) { + return $dataSystem.terms.commands[commandId] || ''; +}; + +TextManager.message = function(messageId) { + return $dataSystem.terms.messages[messageId] || ''; +}; + +TextManager.getter = function(method, param) { + return { + get: function() { + return this[method](param); + }, + configurable: true + }; +}; + +Object.defineProperty(TextManager, 'currencyUnit', { + get: function() { return $dataSystem.currencyUnit; }, + configurable: true +}); + +Object.defineProperties(TextManager, { + level : TextManager.getter('basic', 0), + levelA : TextManager.getter('basic', 1), + hp : TextManager.getter('basic', 2), + hpA : TextManager.getter('basic', 3), + mp : TextManager.getter('basic', 4), + mpA : TextManager.getter('basic', 5), + tp : TextManager.getter('basic', 6), + tpA : TextManager.getter('basic', 7), + exp : TextManager.getter('basic', 8), + expA : TextManager.getter('basic', 9), + fight : TextManager.getter('command', 0), + escape : TextManager.getter('command', 1), + attack : TextManager.getter('command', 2), + guard : TextManager.getter('command', 3), + item : TextManager.getter('command', 4), + skill : TextManager.getter('command', 5), + equip : TextManager.getter('command', 6), + status : TextManager.getter('command', 7), + formation : TextManager.getter('command', 8), + save : TextManager.getter('command', 9), + gameEnd : TextManager.getter('command', 10), + options : TextManager.getter('command', 11), + weapon : TextManager.getter('command', 12), + armor : TextManager.getter('command', 13), + keyItem : TextManager.getter('command', 14), + equip2 : TextManager.getter('command', 15), + optimize : TextManager.getter('command', 16), + clear : TextManager.getter('command', 17), + newGame : TextManager.getter('command', 18), + continue_ : TextManager.getter('command', 19), + toTitle : TextManager.getter('command', 21), + cancel : TextManager.getter('command', 22), + buy : TextManager.getter('command', 24), + sell : TextManager.getter('command', 25), + alwaysDash : TextManager.getter('message', 'alwaysDash'), + commandRemember : TextManager.getter('message', 'commandRemember'), + bgmVolume : TextManager.getter('message', 'bgmVolume'), + bgsVolume : TextManager.getter('message', 'bgsVolume'), + meVolume : TextManager.getter('message', 'meVolume'), + seVolume : TextManager.getter('message', 'seVolume'), + possession : TextManager.getter('message', 'possession'), + expTotal : TextManager.getter('message', 'expTotal'), + expNext : TextManager.getter('message', 'expNext'), + saveMessage : TextManager.getter('message', 'saveMessage'), + loadMessage : TextManager.getter('message', 'loadMessage'), + file : TextManager.getter('message', 'file'), + partyName : TextManager.getter('message', 'partyName'), + emerge : TextManager.getter('message', 'emerge'), + preemptive : TextManager.getter('message', 'preemptive'), + surprise : TextManager.getter('message', 'surprise'), + escapeStart : TextManager.getter('message', 'escapeStart'), + escapeFailure : TextManager.getter('message', 'escapeFailure'), + victory : TextManager.getter('message', 'victory'), + defeat : TextManager.getter('message', 'defeat'), + obtainExp : TextManager.getter('message', 'obtainExp'), + obtainGold : TextManager.getter('message', 'obtainGold'), + obtainItem : TextManager.getter('message', 'obtainItem'), + levelUp : TextManager.getter('message', 'levelUp'), + obtainSkill : TextManager.getter('message', 'obtainSkill'), + useItem : TextManager.getter('message', 'useItem'), + criticalToEnemy : TextManager.getter('message', 'criticalToEnemy'), + criticalToActor : TextManager.getter('message', 'criticalToActor'), + actorDamage : TextManager.getter('message', 'actorDamage'), + actorRecovery : TextManager.getter('message', 'actorRecovery'), + actorGain : TextManager.getter('message', 'actorGain'), + actorLoss : TextManager.getter('message', 'actorLoss'), + actorDrain : TextManager.getter('message', 'actorDrain'), + actorNoDamage : TextManager.getter('message', 'actorNoDamage'), + actorNoHit : TextManager.getter('message', 'actorNoHit'), + enemyDamage : TextManager.getter('message', 'enemyDamage'), + enemyRecovery : TextManager.getter('message', 'enemyRecovery'), + enemyGain : TextManager.getter('message', 'enemyGain'), + enemyLoss : TextManager.getter('message', 'enemyLoss'), + enemyDrain : TextManager.getter('message', 'enemyDrain'), + enemyNoDamage : TextManager.getter('message', 'enemyNoDamage'), + enemyNoHit : TextManager.getter('message', 'enemyNoHit'), + evasion : TextManager.getter('message', 'evasion'), + magicEvasion : TextManager.getter('message', 'magicEvasion'), + magicReflection : TextManager.getter('message', 'magicReflection'), + counterAttack : TextManager.getter('message', 'counterAttack'), + substitute : TextManager.getter('message', 'substitute'), + buffAdd : TextManager.getter('message', 'buffAdd'), + debuffAdd : TextManager.getter('message', 'debuffAdd'), + buffRemove : TextManager.getter('message', 'buffRemove'), + actionFailure : TextManager.getter('message', 'actionFailure'), +}); + +//----------------------------------------------------------------------------- +// SceneManager +// +// The static class that manages scene transitions. + +function SceneManager() { + throw new Error('This is a static class'); +} + +/* + * Gets the current time in ms. + * @private + */ +SceneManager._getTimeInMs = function() { + return performance.now(); +}; + +SceneManager._scene = null; +SceneManager._nextScene = null; +SceneManager._stack = []; +SceneManager._stopped = false; +SceneManager._sceneStarted = false; +SceneManager._exiting = false; +SceneManager._previousClass = null; +SceneManager._backgroundBitmap = null; +SceneManager._screenWidth = 816; +SceneManager._screenHeight = 624; +SceneManager._boxWidth = 816; +SceneManager._boxHeight = 624; +SceneManager._deltaTime = 1.0 / 60.0; +SceneManager._currentTime = SceneManager._getTimeInMs(); +SceneManager._accumulator = 0.0; + +SceneManager.run = function(sceneClass) { + try { + this.initialize(); + this.goto(sceneClass); + this.requestUpdate(); + } catch (e) { + this.catchException(e); + } +}; + +SceneManager.initialize = function() { + this.initGraphics(); + this.checkFileAccess(); + this.initAudio(); + this.initInput(); + this.initNwjs(); + this.checkPluginErrors(); + this.setupErrorHandlers(); +}; + +SceneManager.initGraphics = function() { + var type = this.preferableRendererType(); + Graphics.initialize(this._screenWidth, this._screenHeight, type); + Graphics.boxWidth = this._boxWidth; + Graphics.boxHeight = this._boxHeight; + Graphics.setLoadingImage('img/system/Loading.png'); + if (Utils.isOptionValid('showfps')) { + Graphics.showFps(); + } + if (type === 'webgl') { + this.checkWebGL(); + } +}; + +SceneManager.preferableRendererType = function() { + if (Utils.isOptionValid('canvas')) { + return 'canvas'; + } else if (Utils.isOptionValid('webgl')) { + return 'webgl'; + } else if (this.shouldUseCanvasRenderer()) { + return 'canvas'; + } else { + return 'auto'; + } +}; + +SceneManager.shouldUseCanvasRenderer = function() { + return Utils.isMobileDevice(); +}; + +SceneManager.checkWebGL = function() { + if (!Graphics.hasWebGL()) { + throw new Error('Your browser does not support WebGL.'); + } +}; + +SceneManager.checkFileAccess = function() { + if (!Utils.canReadGameFiles()) { + throw new Error('Your browser does not allow to read local files.'); + } +}; + +SceneManager.initAudio = function() { + var noAudio = Utils.isOptionValid('noaudio'); + if (!WebAudio.initialize(noAudio) && !noAudio) { + throw new Error('Your browser does not support Web Audio API.'); + } +}; + +SceneManager.initInput = function() { + Input.initialize(); + TouchInput.initialize(); +}; + +SceneManager.initNwjs = function() { + if (Utils.isNwjs()) { + var gui = require('nw.gui'); + var win = gui.Window.get(); + if (process.platform === 'darwin' && !win.menu) { + var menubar = new gui.Menu({ type: 'menubar' }); + var option = { hideEdit: true, hideWindow: true }; + menubar.createMacBuiltin('Game', option); + win.menu = menubar; + } + } +}; + +SceneManager.checkPluginErrors = function() { + PluginManager.checkErrors(); +}; + +SceneManager.setupErrorHandlers = function() { + window.addEventListener('error', this.onError.bind(this)); + document.addEventListener('keydown', this.onKeyDown.bind(this)); +}; + +SceneManager.requestUpdate = function() { + if (!this._stopped) { + requestAnimationFrame(this.update.bind(this)); + } +}; + +SceneManager.update = function() { + try { + this.tickStart(); + this.updateMain(); + this.tickEnd(); + } catch (e) { + this.catchException(e); + } +}; + +SceneManager.terminate = function() { + window.close(); +}; + +SceneManager.onError = function(e) { + console.error(e.message); + console.error(e.filename, e.lineno); + try { + this.stop(); + Graphics.printError('Error', e.message); + AudioManager.stopAll(); + } catch (e2) { + } +}; + +SceneManager.onKeyDown = function(event) { + if (!event.ctrlKey && !event.altKey) { + switch (event.keyCode) { + case 116: // F5 + if (Utils.isNwjs()) { + location.reload(); + } + break; + case 119: // F8 + if (Utils.isNwjs() && Utils.isOptionValid('test')) { + require('nw.gui').Window.get().showDevTools(); + } + break; + } + } +}; + +SceneManager.catchException = function(e) { + if (e instanceof Error) { + Graphics.printError(e.name, e.message); + console.error(e.stack); + } else { + Graphics.printError('UnknownError', e); + } + AudioManager.stopAll(); + this.stop(); +}; + +SceneManager.tickStart = function() { + Graphics.tickStart(); +}; + +SceneManager.tickEnd = function() { + Graphics.tickEnd(); +}; + +SceneManager.updateInputData = function() { + Input.update(); + TouchInput.update(); +}; + +SceneManager.updateMain = function() { + + var newTime = this._getTimeInMs(); + var fTime = (newTime - this._currentTime) / 1000; + if (fTime > 0.25) fTime = 0.25; + this._currentTime = newTime; + this._accumulator += fTime; + + while (this._accumulator >= this._deltaTime) { + this.updateInputData(); + this.changeScene(); + this.updateScene(); + this._accumulator -= this._deltaTime; + } + this.renderScene(); + this.requestUpdate(); +}; + +SceneManager.changeScene = function() { + if (this.isSceneChanging() && !this.isCurrentSceneBusy()) { + if (this._scene) { + this._scene.terminate(); + this._previousClass = this._scene.constructor; + } + this._scene = this._nextScene; + if (this._scene) { + this._scene.create(); + this._nextScene = null; + this._sceneStarted = false; + this.onSceneCreate(); + } + if (this._exiting) { + this.terminate(); + } + } +}; + +SceneManager.updateScene = function() { + if (this._scene) { + if (!this._sceneStarted && this._scene.isReady()) { + this._scene.start(); + this._sceneStarted = true; + this.onSceneStart(); + } + if (this.isCurrentSceneStarted()) { + this._scene.update(); + } + } +}; + +SceneManager.renderScene = function() { + if (this.isCurrentSceneStarted()) { + Graphics.render(this._scene); + } else if (this._scene) { + this.onSceneLoading(); + } +}; + +SceneManager.onSceneCreate = function() { + Graphics.startLoading(); +}; + +SceneManager.onSceneStart = function() { + Graphics.endLoading(); +}; + +SceneManager.onSceneLoading = function() { + Graphics.updateLoading(); +}; + +SceneManager.isSceneChanging = function() { + return this._exiting || !!this._nextScene; +}; + +SceneManager.isCurrentSceneBusy = function() { + return this._scene && this._scene.isBusy(); +}; + +SceneManager.isCurrentSceneStarted = function() { + return this._scene && this._sceneStarted; +}; + +SceneManager.isNextScene = function(sceneClass) { + return this._nextScene && this._nextScene.constructor === sceneClass; +}; + +SceneManager.isPreviousScene = function(sceneClass) { + return this._previousClass === sceneClass; +}; + +SceneManager.goto = function(sceneClass) { + if (sceneClass) { + this._nextScene = new sceneClass(); + } + if (this._scene) { + this._scene.stop(); + } +}; + +SceneManager.push = function(sceneClass) { + this._stack.push(this._scene.constructor); + this.goto(sceneClass); +}; + +SceneManager.pop = function() { + if (this._stack.length > 0) { + this.goto(this._stack.pop()); + } else { + this.exit(); + } +}; + +SceneManager.exit = function() { + this.goto(null); + this._exiting = true; +}; + +SceneManager.clearStack = function() { + this._stack = []; +}; + +SceneManager.stop = function() { + this._stopped = true; +}; + +SceneManager.prepareNextScene = function() { + this._nextScene.prepare.apply(this._nextScene, arguments); +}; + +SceneManager.snap = function() { + return Bitmap.snap(this._scene); +}; + +SceneManager.snapForBackground = function() { + this._backgroundBitmap = this.snap(); + this._backgroundBitmap.blur(); +}; + +SceneManager.backgroundBitmap = function() { + return this._backgroundBitmap; +}; + + +//----------------------------------------------------------------------------- +// BattleManager +// +// The static class that manages battle progress. + +function BattleManager() { + throw new Error('This is a static class'); +} + +BattleManager.setup = function(troopId, canEscape, canLose) { + this.initMembers(); + this._canEscape = canEscape; + this._canLose = canLose; + $gameTroop.setup(troopId); + $gameScreen.onBattleStart(); + this.makeEscapeRatio(); +}; + +BattleManager.initMembers = function() { + this._phase = 'init'; + this._canEscape = false; + this._canLose = false; + this._battleTest = false; + this._eventCallback = null; + this._preemptive = false; + this._surprise = false; + this._actorIndex = -1; + this._actionForcedBattler = null; + this._mapBgm = null; + this._mapBgs = null; + this._actionBattlers = []; + this._subject = null; + this._action = null; + this._targets = []; + this._logWindow = null; + this._statusWindow = null; + this._spriteset = null; + this._escapeRatio = 0; + this._escaped = false; + this._rewards = {}; +}; + +BattleManager.isBattleTest = function() { + return this._battleTest; +}; + +BattleManager.setBattleTest = function(battleTest) { + this._battleTest = battleTest; +}; + +BattleManager.setEventCallback = function(callback) { + this._eventCallback = callback; +}; + +BattleManager.setLogWindow = function(logWindow) { + this._logWindow = logWindow; +}; + +BattleManager.setStatusWindow = function(statusWindow) { + this._statusWindow = statusWindow; +}; + +BattleManager.setSpriteset = function(spriteset) { + this._spriteset = spriteset; +}; + +BattleManager.onEncounter = function() { + this._preemptive = (Math.random() < this.ratePreemptive()); + this._surprise = (Math.random() < this.rateSurprise() && !this._preemptive); +}; + +BattleManager.ratePreemptive = function() { + return $gameParty.ratePreemptive($gameTroop.agility()); +}; + +BattleManager.rateSurprise = function() { + return $gameParty.rateSurprise($gameTroop.agility()); +}; + +BattleManager.saveBgmAndBgs = function() { + this._mapBgm = AudioManager.saveBgm(); + this._mapBgs = AudioManager.saveBgs(); +}; + +BattleManager.playBattleBgm = function() { + AudioManager.playBgm($gameSystem.battleBgm()); + AudioManager.stopBgs(); +}; + +BattleManager.playVictoryMe = function() { + AudioManager.playMe($gameSystem.victoryMe()); +}; + +BattleManager.playDefeatMe = function() { + AudioManager.playMe($gameSystem.defeatMe()); +}; + +BattleManager.replayBgmAndBgs = function() { + if (this._mapBgm) { + AudioManager.replayBgm(this._mapBgm); + } else { + AudioManager.stopBgm(); + } + if (this._mapBgs) { + AudioManager.replayBgs(this._mapBgs); + } +}; + +BattleManager.makeEscapeRatio = function() { + this._escapeRatio = 0.5 * $gameParty.agility() / $gameTroop.agility(); +}; + +BattleManager.update = function() { + if (!this.isBusy() && !this.updateEvent()) { + switch (this._phase) { + case 'start': + this.startInput(); + break; + case 'turn': + this.updateTurn(); + break; + case 'action': + this.updateAction(); + break; + case 'turnEnd': + this.updateTurnEnd(); + break; + case 'battleEnd': + this.updateBattleEnd(); + break; + } + } +}; + +BattleManager.updateEvent = function() { + switch (this._phase) { + case 'start': + case 'turn': + case 'turnEnd': + if (this.isActionForced()) { + this.processForcedAction(); + return true; + } else { + return this.updateEventMain(); + } + } + return this.checkAbort(); +}; + +BattleManager.updateEventMain = function() { + $gameTroop.updateInterpreter(); + $gameParty.requestMotionRefresh(); + if ($gameTroop.isEventRunning() || this.checkBattleEnd()) { + return true; + } + $gameTroop.setupBattleEvent(); + if ($gameTroop.isEventRunning() || SceneManager.isSceneChanging()) { + return true; + } + return false; +}; + +BattleManager.isBusy = function() { + return ($gameMessage.isBusy() || this._spriteset.isBusy() || + this._logWindow.isBusy()); +}; + +BattleManager.isInputting = function() { + return this._phase === 'input'; +}; + +BattleManager.isInTurn = function() { + return this._phase === 'turn'; +}; + +BattleManager.isTurnEnd = function() { + return this._phase === 'turnEnd'; +}; + +BattleManager.isAborting = function() { + return this._phase === 'aborting'; +}; + +BattleManager.isBattleEnd = function() { + return this._phase === 'battleEnd'; +}; + +BattleManager.canEscape = function() { + return this._canEscape; +}; + +BattleManager.canLose = function() { + return this._canLose; +}; + +BattleManager.isEscaped = function() { + return this._escaped; +}; + +BattleManager.actor = function() { + return this._actorIndex >= 0 ? $gameParty.members()[this._actorIndex] : null; +}; + +BattleManager.clearActor = function() { + this.changeActor(-1, ''); +}; + +BattleManager.changeActor = function(newActorIndex, lastActorActionState) { + var lastActor = this.actor(); + this._actorIndex = newActorIndex; + var newActor = this.actor(); + if (lastActor) { + lastActor.setActionState(lastActorActionState); + } + if (newActor) { + newActor.setActionState('inputting'); + } +}; + +BattleManager.startBattle = function() { + this._phase = 'start'; + $gameSystem.onBattleStart(); + $gameParty.onBattleStart(); + $gameTroop.onBattleStart(); + this.displayStartMessages(); +}; + +BattleManager.displayStartMessages = function() { + $gameTroop.enemyNames().forEach(function(name) { + $gameMessage.add(TextManager.emerge.format(name)); + }); + if (this._preemptive) { + $gameMessage.add(TextManager.preemptive.format($gameParty.name())); + } else if (this._surprise) { + $gameMessage.add(TextManager.surprise.format($gameParty.name())); + } +}; + +BattleManager.startInput = function() { + this._phase = 'input'; + $gameParty.makeActions(); + $gameTroop.makeActions(); + this.clearActor(); + if (this._surprise || !$gameParty.canInput()) { + this.startTurn(); + } +}; + +BattleManager.inputtingAction = function() { + return this.actor() ? this.actor().inputtingAction() : null; +}; + +BattleManager.selectNextCommand = function() { + do { + if (!this.actor() || !this.actor().selectNextCommand()) { + this.changeActor(this._actorIndex + 1, 'waiting'); + if (this._actorIndex >= $gameParty.size()) { + this.startTurn(); + break; + } + } + } while (!this.actor().canInput()); +}; + +BattleManager.selectPreviousCommand = function() { + do { + if (!this.actor() || !this.actor().selectPreviousCommand()) { + this.changeActor(this._actorIndex - 1, 'undecided'); + if (this._actorIndex < 0) { + return; + } + } + } while (!this.actor().canInput()); +}; + +BattleManager.refreshStatus = function() { + this._statusWindow.refresh(); +}; + +BattleManager.startTurn = function() { + this._phase = 'turn'; + this.clearActor(); + $gameTroop.increaseTurn(); + this.makeActionOrders(); + $gameParty.requestMotionRefresh(); + this._logWindow.startTurn(); +}; + +BattleManager.updateTurn = function() { + $gameParty.requestMotionRefresh(); + if (!this._subject) { + this._subject = this.getNextSubject(); + } + if (this._subject) { + this.processTurn(); + } else { + this.endTurn(); + } +}; + +BattleManager.processTurn = function() { + var subject = this._subject; + var action = subject.currentAction(); + if (action) { + action.prepare(); + if (action.isValid()) { + this.startAction(); + } + subject.removeCurrentAction(); + } else { + subject.onAllActionsEnd(); + this.refreshStatus(); + this._logWindow.displayAutoAffectedStatus(subject); + this._logWindow.displayCurrentState(subject); + this._logWindow.displayRegeneration(subject); + this._subject = this.getNextSubject(); + } +}; + +BattleManager.endTurn = function() { + this._phase = 'turnEnd'; + this._preemptive = false; + this._surprise = false; + this.allBattleMembers().forEach(function(battler) { + battler.onTurnEnd(); + this.refreshStatus(); + this._logWindow.displayAutoAffectedStatus(battler); + this._logWindow.displayRegeneration(battler); + }, this); +}; + +BattleManager.updateTurnEnd = function() { + this.startInput(); +}; + +BattleManager.getNextSubject = function() { + for (;;) { + var battler = this._actionBattlers.shift(); + if (!battler) { + return null; + } + if (battler.isBattleMember() && battler.isAlive()) { + return battler; + } + } +}; + +BattleManager.allBattleMembers = function() { + return $gameParty.members().concat($gameTroop.members()); +}; + +BattleManager.makeActionOrders = function() { + var battlers = []; + if (!this._surprise) { + battlers = battlers.concat($gameParty.members()); + } + if (!this._preemptive) { + battlers = battlers.concat($gameTroop.members()); + } + battlers.forEach(function(battler) { + battler.makeSpeed(); + }); + battlers.sort(function(a, b) { + return b.speed() - a.speed(); + }); + this._actionBattlers = battlers; +}; + +BattleManager.startAction = function() { + var subject = this._subject; + var action = subject.currentAction(); + var targets = action.makeTargets(); + this._phase = 'action'; + this._action = action; + this._targets = targets; + subject.useItem(action.item()); + this._action.applyGlobal(); + this.refreshStatus(); + this._logWindow.startAction(subject, action, targets); +}; + +BattleManager.updateAction = function() { + var target = this._targets.shift(); + if (target) { + this.invokeAction(this._subject, target); + } else { + this.endAction(); + } +}; + +BattleManager.endAction = function() { + this._logWindow.endAction(this._subject); + this._phase = 'turn'; +}; + +BattleManager.invokeAction = function(subject, target) { + this._logWindow.push('pushBaseLine'); + if (Math.random() < this._action.itemCnt(target)) { + this.invokeCounterAttack(subject, target); + } else if (Math.random() < this._action.itemMrf(target)) { + this.invokeMagicReflection(subject, target); + } else { + this.invokeNormalAction(subject, target); + } + subject.setLastTarget(target); + this._logWindow.push('popBaseLine'); + this.refreshStatus(); +}; + +BattleManager.invokeNormalAction = function(subject, target) { + var realTarget = this.applySubstitute(target); + this._action.apply(realTarget); + this._logWindow.displayActionResults(subject, realTarget); +}; + +BattleManager.invokeCounterAttack = function(subject, target) { + var action = new Game_Action(target); + action.setAttack(); + action.apply(subject); + this._logWindow.displayCounter(target); + this._logWindow.displayActionResults(subject, subject); +}; + +BattleManager.invokeMagicReflection = function(subject, target) { + this._logWindow.displayReflection(target); + this._action.apply(subject); + this._logWindow.displayActionResults(subject, subject); +}; + +BattleManager.applySubstitute = function(target) { + if (this.checkSubstitute(target)) { + var substitute = target.friendsUnit().substituteBattler(); + if (substitute && target !== substitute) { + this._logWindow.displaySubstitute(substitute, target); + return substitute; + } + } + return target; +}; + +BattleManager.checkSubstitute = function(target) { + return target.isDying() && !this._action.isCertainHit(); +}; + +BattleManager.isActionForced = function() { + return !!this._actionForcedBattler; +}; + +BattleManager.forceAction = function(battler) { + this._actionForcedBattler = battler; + var index = this._actionBattlers.indexOf(battler); + if (index >= 0) { + this._actionBattlers.splice(index, 1); + } +}; + +BattleManager.processForcedAction = function() { + if (this._actionForcedBattler) { + this._subject = this._actionForcedBattler; + this._actionForcedBattler = null; + this.startAction(); + this._subject.removeCurrentAction(); + } +}; + +BattleManager.abort = function() { + this._phase = 'aborting'; +}; + +BattleManager.checkBattleEnd = function() { + if (this._phase) { + if (this.checkAbort()) { + return true; + } else if ($gameParty.isAllDead()) { + this.processDefeat(); + return true; + } else if ($gameTroop.isAllDead()) { + this.processVictory(); + return true; + } + } + return false; +}; + +BattleManager.checkAbort = function() { + if ($gameParty.isEmpty() || this.isAborting()) { + this.processAbort(); + return true; + } + return false; +}; + +BattleManager.processVictory = function() { + $gameParty.removeBattleStates(); + $gameParty.performVictory(); + this.playVictoryMe(); + this.replayBgmAndBgs(); + this.makeRewards(); + this.displayVictoryMessage(); + this.displayRewards(); + this.gainRewards(); + this.endBattle(0); +}; + +BattleManager.processEscape = function() { + $gameParty.performEscape(); + SoundManager.playEscape(); + var success = this._preemptive ? true : (Math.random() < this._escapeRatio); + if (success) { + this.displayEscapeSuccessMessage(); + this._escaped = true; + this.processAbort(); + } else { + this.displayEscapeFailureMessage(); + this._escapeRatio += 0.1; + $gameParty.clearActions(); + this.startTurn(); + } + return success; +}; + +BattleManager.processAbort = function() { + $gameParty.removeBattleStates(); + this.replayBgmAndBgs(); + this.endBattle(1); +}; + +BattleManager.processDefeat = function() { + this.displayDefeatMessage(); + this.playDefeatMe(); + if (this._canLose) { + this.replayBgmAndBgs(); + } else { + AudioManager.stopBgm(); + } + this.endBattle(2); +}; + +BattleManager.endBattle = function(result) { + this._phase = 'battleEnd'; + if (this._eventCallback) { + this._eventCallback(result); + } + if (result === 0) { + $gameSystem.onBattleWin(); + } else if (this._escaped) { + $gameSystem.onBattleEscape(); + } +}; + +BattleManager.updateBattleEnd = function() { + if (this.isBattleTest()) { + AudioManager.stopBgm(); + SceneManager.exit(); + } else if ($gameParty.isAllDead()) { + if (this._canLose) { + $gameParty.reviveBattleMembers(); + SceneManager.pop(); + } else { + SceneManager.goto(Scene_Gameover); + } + } else { + SceneManager.pop(); + } + this._phase = null; +}; + +BattleManager.makeRewards = function() { + this._rewards = {}; + this._rewards.gold = $gameTroop.goldTotal(); + this._rewards.exp = $gameTroop.expTotal(); + this._rewards.items = $gameTroop.makeDropItems(); +}; + +BattleManager.displayVictoryMessage = function() { + $gameMessage.add(TextManager.victory.format($gameParty.name())); +}; + +BattleManager.displayDefeatMessage = function() { + $gameMessage.add(TextManager.defeat.format($gameParty.name())); +}; + +BattleManager.displayEscapeSuccessMessage = function() { + $gameMessage.add(TextManager.escapeStart.format($gameParty.name())); +}; + +BattleManager.displayEscapeFailureMessage = function() { + $gameMessage.add(TextManager.escapeStart.format($gameParty.name())); + $gameMessage.add('\\.' + TextManager.escapeFailure); +}; + +BattleManager.displayRewards = function() { + this.displayExp(); + this.displayGold(); + this.displayDropItems(); +}; + +BattleManager.displayExp = function() { + var exp = this._rewards.exp; + if (exp > 0) { + var text = TextManager.obtainExp.format(exp, TextManager.exp); + $gameMessage.add('\\.' + text); + } +}; + +BattleManager.displayGold = function() { + var gold = this._rewards.gold; + if (gold > 0) { + $gameMessage.add('\\.' + TextManager.obtainGold.format(gold)); + } +}; + +BattleManager.displayDropItems = function() { + var items = this._rewards.items; + if (items.length > 0) { + $gameMessage.newPage(); + items.forEach(function(item) { + $gameMessage.add(TextManager.obtainItem.format(item.name)); + }); + } +}; + +BattleManager.gainRewards = function() { + this.gainExp(); + this.gainGold(); + this.gainDropItems(); +}; + +BattleManager.gainExp = function() { + var exp = this._rewards.exp; + $gameParty.allMembers().forEach(function(actor) { + actor.gainExp(exp); + }); +}; + +BattleManager.gainGold = function() { + $gameParty.gainGold(this._rewards.gold); +}; + +BattleManager.gainDropItems = function() { + var items = this._rewards.items; + items.forEach(function(item) { + $gameParty.gainItem(item, 1); + }); +}; + +//----------------------------------------------------------------------------- +// PluginManager +// +// The static class that manages the plugins. + +function PluginManager() { + throw new Error('This is a static class'); +} + +PluginManager._path = 'js/plugins/'; +PluginManager._scripts = []; +PluginManager._errorUrls = []; +PluginManager._parameters = {}; + +PluginManager.setup = function(plugins) { + plugins.forEach(function(plugin) { + if (plugin.status && !this._scripts.contains(plugin.name)) { + this.setParameters(plugin.name, plugin.parameters); + this.loadScript(plugin.name + '.js'); + this._scripts.push(plugin.name); + } + }, this); +}; + +PluginManager.checkErrors = function() { + var url = this._errorUrls.shift(); + if (url) { + throw new Error('Failed to load: ' + url); + } +}; + +PluginManager.parameters = function(name) { + return this._parameters[name.toLowerCase()] || {}; +}; + +PluginManager.setParameters = function(name, parameters) { + this._parameters[name.toLowerCase()] = parameters; +}; + +PluginManager.loadScript = function(name) { + var url = this._path + name; + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = url; + script.async = false; + script.onerror = this.onError.bind(this); + script._url = url; + document.body.appendChild(script); +}; + +PluginManager.onError = function(e) { + this._errorUrls.push(e.target._url); +}; diff --git a/js/rpg_objects.js b/js/rpg_objects.js new file mode 100644 index 0000000..0eba1e2 --- /dev/null +++ b/js/rpg_objects.js @@ -0,0 +1,10453 @@ +//============================================================================= +// rpg_objects.js v1.2.0 +//============================================================================= + +//----------------------------------------------------------------------------- +// Game_Temp +// +// The game object class for temporary data that is not included in save data. + +function Game_Temp() { + this.initialize.apply(this, arguments); +} + +Game_Temp.prototype.initialize = function() { + this._isPlaytest = Utils.isOptionValid('test'); + this._commonEventId = 0; + this._destinationX = null; + this._destinationY = null; +}; + +Game_Temp.prototype.isPlaytest = function() { + return this._isPlaytest; +}; + +Game_Temp.prototype.reserveCommonEvent = function(commonEventId) { + this._commonEventId = commonEventId; +}; + +Game_Temp.prototype.clearCommonEvent = function() { + this._commonEventId = 0; +}; + +Game_Temp.prototype.isCommonEventReserved = function() { + return this._commonEventId > 0; +}; + +Game_Temp.prototype.reservedCommonEvent = function() { + return $dataCommonEvents[this._commonEventId]; +}; + +Game_Temp.prototype.setDestination = function(x, y) { + this._destinationX = x; + this._destinationY = y; +}; + +Game_Temp.prototype.clearDestination = function() { + this._destinationX = null; + this._destinationY = null; +}; + +Game_Temp.prototype.isDestinationValid = function() { + return this._destinationX !== null; +}; + +Game_Temp.prototype.destinationX = function() { + return this._destinationX; +}; + +Game_Temp.prototype.destinationY = function() { + return this._destinationY; +}; + +//----------------------------------------------------------------------------- +// Game_System +// +// The game object class for the system data. + +function Game_System() { + this.initialize.apply(this, arguments); +} + +Game_System.prototype.initialize = function() { + this._saveEnabled = true; + this._menuEnabled = true; + this._encounterEnabled = true; + this._formationEnabled = true; + this._battleCount = 0; + this._winCount = 0; + this._escapeCount = 0; + this._saveCount = 0; + this._versionId = 0; + this._framesOnSave = 0; + this._bgmOnSave = null; + this._bgsOnSave = null; + this._windowTone = null; + this._battleBgm = null; + this._victoryMe = null; + this._defeatMe = null; + this._savedBgm = null; + this._walkingBgm = null; +}; + +Game_System.prototype.isJapanese = function() { + return $dataSystem.locale.match(/^ja/); +}; + +Game_System.prototype.isChinese = function() { + return $dataSystem.locale.match(/^zh/); +}; + +Game_System.prototype.isKorean = function() { + return $dataSystem.locale.match(/^ko/); +}; + +Game_System.prototype.isCJK = function() { + return $dataSystem.locale.match(/^(ja|zh|ko)/); +}; + +Game_System.prototype.isRussian = function() { + return $dataSystem.locale.match(/^ru/); +}; + +Game_System.prototype.isSideView = function() { + return $dataSystem.optSideView; +}; + +Game_System.prototype.isSaveEnabled = function() { + return this._saveEnabled; +}; + +Game_System.prototype.disableSave = function() { + this._saveEnabled = false; +}; + +Game_System.prototype.enableSave = function() { + this._saveEnabled = true; +}; + +Game_System.prototype.isMenuEnabled = function() { + return this._menuEnabled; +}; + +Game_System.prototype.disableMenu = function() { + this._menuEnabled = false; +}; + +Game_System.prototype.enableMenu = function() { + this._menuEnabled = true; +}; + +Game_System.prototype.isEncounterEnabled = function() { + return this._encounterEnabled; +}; + +Game_System.prototype.disableEncounter = function() { + this._encounterEnabled = false; +}; + +Game_System.prototype.enableEncounter = function() { + this._encounterEnabled = true; +}; + +Game_System.prototype.isFormationEnabled = function() { + return this._formationEnabled; +}; + +Game_System.prototype.disableFormation = function() { + this._formationEnabled = false; +}; + +Game_System.prototype.enableFormation = function() { + this._formationEnabled = true; +}; + +Game_System.prototype.battleCount = function() { + return this._battleCount; +}; + +Game_System.prototype.winCount = function() { + return this._winCount; +}; + +Game_System.prototype.escapeCount = function() { + return this._escapeCount; +}; + +Game_System.prototype.saveCount = function() { + return this._saveCount; +}; + +Game_System.prototype.versionId = function() { + return this._versionId; +}; + +Game_System.prototype.windowTone = function() { + return this._windowTone || $dataSystem.windowTone; +}; + +Game_System.prototype.setWindowTone = function(value) { + this._windowTone = value; +}; + +Game_System.prototype.battleBgm = function() { + return this._battleBgm || $dataSystem.battleBgm; +}; + +Game_System.prototype.setBattleBgm = function(value) { + this._battleBgm = value; +}; + +Game_System.prototype.victoryMe = function() { + return this._victoryMe || $dataSystem.victoryMe; +}; + +Game_System.prototype.setVictoryMe = function(value) { + this._victoryMe = value; +}; + +Game_System.prototype.defeatMe = function() { + return this._defeatMe || $dataSystem.defeatMe; +}; + +Game_System.prototype.setDefeatMe = function(value) { + this._defeatMe = value; +}; + +Game_System.prototype.onBattleStart = function() { + this._battleCount++; +}; + +Game_System.prototype.onBattleWin = function() { + this._winCount++; +}; + +Game_System.prototype.onBattleEscape = function() { + this._escapeCount++; +}; + +Game_System.prototype.onBeforeSave = function() { + this._saveCount++; + this._versionId = $dataSystem.versionId; + this._framesOnSave = Graphics.frameCount; + this._bgmOnSave = AudioManager.saveBgm(); + this._bgsOnSave = AudioManager.saveBgs(); +}; + +Game_System.prototype.onAfterLoad = function() { + Graphics.frameCount = this._framesOnSave; + AudioManager.playBgm(this._bgmOnSave); + AudioManager.playBgs(this._bgsOnSave); +}; + +Game_System.prototype.playtime = function() { + return Math.floor(Graphics.frameCount / 60); +}; + +Game_System.prototype.playtimeText = function() { + var hour = Math.floor(this.playtime() / 60 / 60); + var min = Math.floor(this.playtime() / 60) % 60; + var sec = this.playtime() % 60; + return hour.padZero(2) + ':' + min.padZero(2) + ':' + sec.padZero(2); +}; + +Game_System.prototype.saveBgm = function() { + this._savedBgm = AudioManager.saveBgm(); +}; + +Game_System.prototype.replayBgm = function() { + if (this._savedBgm) { + AudioManager.replayBgm(this._savedBgm); + } +}; + +Game_System.prototype.saveWalkingBgm = function() { + this._walkingBgm = AudioManager.saveBgm(); +}; + +Game_System.prototype.replayWalkingBgm = function() { + if (this._walkingBgm) { + AudioManager.playBgm(this._walkingBgm); + } +}; + +//----------------------------------------------------------------------------- +// Game_Timer +// +// The game object class for the timer. + +function Game_Timer() { + this.initialize.apply(this, arguments); +} + +Game_Timer.prototype.initialize = function() { + this._frames = 0; + this._working = false; +}; + +Game_Timer.prototype.update = function(sceneActive) { + if (sceneActive && this._working && this._frames > 0) { + this._frames--; + if (this._frames === 0) { + this.onExpire(); + } + } +}; + +Game_Timer.prototype.start = function(count) { + this._frames = count; + this._working = true; +}; + +Game_Timer.prototype.stop = function() { + this._working = false; +}; + +Game_Timer.prototype.isWorking = function() { + return this._working; +}; + +Game_Timer.prototype.seconds = function() { + return Math.floor(this._frames / 60); +}; + +Game_Timer.prototype.onExpire = function() { + BattleManager.abort(); +}; + +//----------------------------------------------------------------------------- +// Game_Message +// +// The game object class for the state of the message window that displays text +// or selections, etc. + +function Game_Message() { + this.initialize.apply(this, arguments); +} + +Game_Message.prototype.initialize = function() { + this.clear(); +}; + +Game_Message.prototype.clear = function() { + this._texts = []; + this._choices = []; + this._faceName = ''; + this._faceIndex = 0; + this._background = 0; + this._positionType = 2; + this._choiceDefaultType = 0; + this._choiceCancelType = 0; + this._choiceBackground = 0; + this._choicePositionType = 2; + this._numInputVariableId = 0; + this._numInputMaxDigits = 0; + this._itemChoiceVariableId = 0; + this._itemChoiceItypeId = 0; + this._scrollMode = false; + this._scrollSpeed = 2; + this._scrollNoFast = false; + this._choiceCallback = null; +}; + +Game_Message.prototype.choices = function() { + return this._choices; +}; + +Game_Message.prototype.faceName = function() { + return this._faceName; +}; + +Game_Message.prototype.faceIndex = function() { + return this._faceIndex; +}; + +Game_Message.prototype.background = function() { + return this._background; +}; + +Game_Message.prototype.positionType = function() { + return this._positionType; +}; + +Game_Message.prototype.choiceDefaultType = function() { + return this._choiceDefaultType; +}; + +Game_Message.prototype.choiceCancelType = function() { + return this._choiceCancelType; +}; + +Game_Message.prototype.choiceBackground = function() { + return this._choiceBackground; +}; + +Game_Message.prototype.choicePositionType = function() { + return this._choicePositionType; +}; + +Game_Message.prototype.numInputVariableId = function() { + return this._numInputVariableId; +}; + +Game_Message.prototype.numInputMaxDigits = function() { + return this._numInputMaxDigits; +}; + +Game_Message.prototype.itemChoiceVariableId = function() { + return this._itemChoiceVariableId; +}; + +Game_Message.prototype.itemChoiceItypeId = function() { + return this._itemChoiceItypeId; +}; + +Game_Message.prototype.scrollMode = function() { + return this._scrollMode; +}; + +Game_Message.prototype.scrollSpeed = function() { + return this._scrollSpeed; +}; + +Game_Message.prototype.scrollNoFast = function() { + return this._scrollNoFast; +}; + +Game_Message.prototype.add = function(text) { + this._texts.push(text); +}; + +Game_Message.prototype.setFaceImage = function(faceName, faceIndex) { + this._faceName = faceName; + this._faceIndex = faceIndex; +}; + +Game_Message.prototype.setBackground = function(background) { + this._background = background; +}; + +Game_Message.prototype.setPositionType = function(positionType) { + this._positionType = positionType; +}; + +Game_Message.prototype.setChoices = function(choices, defaultType, cancelType) { + this._choices = choices; + this._choiceDefaultType = defaultType; + this._choiceCancelType = cancelType; +}; + +Game_Message.prototype.setChoiceBackground = function(background) { + this._choiceBackground = background; +}; + +Game_Message.prototype.setChoicePositionType = function(positionType) { + this._choicePositionType = positionType; +}; + +Game_Message.prototype.setNumberInput = function(variableId, maxDigits) { + this._numInputVariableId = variableId; + this._numInputMaxDigits = maxDigits; +}; + +Game_Message.prototype.setItemChoice = function(variableId, itemType) { + this._itemChoiceVariableId = variableId; + this._itemChoiceItypeId = itemType; +}; + +Game_Message.prototype.setScroll = function(speed, noFast) { + this._scrollMode = true; + this._scrollSpeed = speed; + this._scrollNoFast = noFast; +}; + +Game_Message.prototype.setChoiceCallback = function(callback) { + this._choiceCallback = callback; +}; + +Game_Message.prototype.onChoice = function(n) { + if (this._choiceCallback) { + this._choiceCallback(n); + this._choiceCallback = null; + } +}; + +Game_Message.prototype.hasText = function() { + return this._texts.length > 0; +}; + +Game_Message.prototype.isChoice = function() { + return this._choices.length > 0; +}; + +Game_Message.prototype.isNumberInput = function() { + return this._numInputVariableId > 0; +}; + +Game_Message.prototype.isItemChoice = function() { + return this._itemChoiceVariableId > 0; +}; + +Game_Message.prototype.isBusy = function() { + return (this.hasText() || this.isChoice() || + this.isNumberInput() || this.isItemChoice()); +}; + +Game_Message.prototype.newPage = function() { + if (this._texts.length > 0) { + this._texts[this._texts.length - 1] += '\f'; + } +}; + +Game_Message.prototype.allText = function() { + return this._texts.reduce(function(previousValue, currentValue) { + return previousValue + '\n' + currentValue; + }); +}; + +//----------------------------------------------------------------------------- +// Game_Switches +// +// The game object class for switches. + +function Game_Switches() { + this.initialize.apply(this, arguments); +} + +Game_Switches.prototype.initialize = function() { + this.clear(); +}; + +Game_Switches.prototype.clear = function() { + this._data = []; +}; + +Game_Switches.prototype.value = function(switchId) { + return !!this._data[switchId]; +}; + +Game_Switches.prototype.setValue = function(switchId, value) { + if (switchId > 0 && switchId < $dataSystem.switches.length) { + this._data[switchId] = value; + this.onChange(); + } +}; + +Game_Switches.prototype.onChange = function() { + $gameMap.requestRefresh(); +}; + +//----------------------------------------------------------------------------- +// Game_Variables +// +// The game object class for variables. + +function Game_Variables() { + this.initialize.apply(this, arguments); +} + +Game_Variables.prototype.initialize = function() { + this.clear(); +}; + +Game_Variables.prototype.clear = function() { + this._data = []; +}; + +Game_Variables.prototype.value = function(variableId) { + return this._data[variableId] || 0; +}; + +Game_Variables.prototype.setValue = function(variableId, value) { + if (variableId > 0 && variableId < $dataSystem.variables.length) { + if (typeof value === 'number') { + value = Math.floor(value); + } + this._data[variableId] = value; + this.onChange(); + } +}; + +Game_Variables.prototype.onChange = function() { + $gameMap.requestRefresh(); +}; + +//----------------------------------------------------------------------------- +// Game_SelfSwitches +// +// The game object class for self switches. + +function Game_SelfSwitches() { + this.initialize.apply(this, arguments); +} + +Game_SelfSwitches.prototype.initialize = function() { + this.clear(); +}; + +Game_SelfSwitches.prototype.clear = function() { + this._data = {}; +}; + +Game_SelfSwitches.prototype.value = function(key) { + return !!this._data[key]; +}; + +Game_SelfSwitches.prototype.setValue = function(key, value) { + if (value) { + this._data[key] = true; + } else { + delete this._data[key]; + } + this.onChange(); +}; + +Game_SelfSwitches.prototype.onChange = function() { + $gameMap.requestRefresh(); +}; + +//----------------------------------------------------------------------------- +// Game_Screen +// +// The game object class for screen effect data, such as changes in color tone +// and flashes. + +function Game_Screen() { + this.initialize.apply(this, arguments); +} + +Game_Screen.prototype.initialize = function() { + this.clear(); +}; + +Game_Screen.prototype.clear = function() { + this.clearFade(); + this.clearTone(); + this.clearFlash(); + this.clearShake(); + this.clearZoom(); + this.clearWeather(); + this.clearPictures(); +}; + +Game_Screen.prototype.onBattleStart = function() { + this.clearFade(); + this.clearFlash(); + this.clearShake(); + this.clearZoom(); + this.eraseBattlePictures(); +}; + +Game_Screen.prototype.brightness = function() { + return this._brightness; +}; + +Game_Screen.prototype.tone = function() { + return this._tone; +}; + +Game_Screen.prototype.flashColor = function() { + return this._flashColor; +}; + +Game_Screen.prototype.shake = function() { + return this._shake; +}; + +Game_Screen.prototype.zoomX = function() { + return this._zoomX; +}; + +Game_Screen.prototype.zoomY = function() { + return this._zoomY; +}; + +Game_Screen.prototype.zoomScale = function() { + return this._zoomScale; +}; + +Game_Screen.prototype.weatherType = function() { + return this._weatherType; +}; + +Game_Screen.prototype.weatherPower = function() { + return this._weatherPower; +}; + +Game_Screen.prototype.picture = function(pictureId) { + var realPictureId = this.realPictureId(pictureId); + return this._pictures[realPictureId]; +}; + +Game_Screen.prototype.realPictureId = function(pictureId) { + if ($gameParty.inBattle()) { + return pictureId + this.maxPictures(); + } else { + return pictureId; + } +}; + +Game_Screen.prototype.clearFade = function() { + this._brightness = 255; + this._fadeOutDuration = 0; + this._fadeInDuration = 0; +}; + +Game_Screen.prototype.clearTone = function() { + this._tone = [0, 0, 0, 0]; + this._toneTarget = [0, 0, 0, 0]; + this._toneDuration = 0; +}; + +Game_Screen.prototype.clearFlash = function() { + this._flashColor = [0, 0, 0, 0]; + this._flashDuration = 0; +}; + +Game_Screen.prototype.clearShake = function() { + this._shakePower = 0; + this._shakeSpeed = 0; + this._shakeDuration = 0; + this._shakeDirection = 1; + this._shake = 0; +}; + +Game_Screen.prototype.clearZoom = function() { + this._zoomX = 0; + this._zoomY = 0; + this._zoomScale = 1; + this._zoomScaleTarget = 1; + this._zoomDuration = 0; +}; + +Game_Screen.prototype.clearWeather = function() { + this._weatherType = 'none'; + this._weatherPower = 0; + this._weatherPowerTarget = 0; + this._weatherDuration = 0; +}; + +Game_Screen.prototype.clearPictures = function() { + this._pictures = []; +}; + +Game_Screen.prototype.eraseBattlePictures = function() { + this._pictures = this._pictures.slice(0, this.maxPictures() + 1); +}; + +Game_Screen.prototype.maxPictures = function() { + return 100; +}; + +Game_Screen.prototype.startFadeOut = function(duration) { + this._fadeOutDuration = duration; + this._fadeInDuration = 0; +}; + +Game_Screen.prototype.startFadeIn = function(duration) { + this._fadeInDuration = duration; + this._fadeOutDuration = 0; +}; + +Game_Screen.prototype.startTint = function(tone, duration) { + this._toneTarget = tone.clone(); + this._toneDuration = duration; + if (this._toneDuration === 0) { + this._tone = this._toneTarget.clone(); + } +}; + +Game_Screen.prototype.startFlash = function(color, duration) { + this._flashColor = color.clone(); + this._flashDuration = duration; +}; + +Game_Screen.prototype.startShake = function(power, speed, duration) { + this._shakePower = power; + this._shakeSpeed = speed; + this._shakeDuration = duration; +}; + +Game_Screen.prototype.startZoom = function(x, y, scale, duration) { + this._zoomX = x; + this._zoomY = y; + this._zoomScaleTarget = scale; + this._zoomDuration = duration; +}; + +Game_Screen.prototype.setZoom = function(x, y, scale) { + this._zoomX = x; + this._zoomY = y; + this._zoomScale = scale; +}; + +Game_Screen.prototype.changeWeather = function(type, power, duration) { + if (type !== 'none' || duration === 0) { + this._weatherType = type; + } + this._weatherPowerTarget = type === 'none' ? 0 : power; + this._weatherDuration = duration; + if (duration === 0) { + this._weatherPower = this._weatherPowerTarget; + } +}; + +Game_Screen.prototype.update = function() { + this.updateFadeOut(); + this.updateFadeIn(); + this.updateTone(); + this.updateFlash(); + this.updateShake(); + this.updateZoom(); + this.updateWeather(); + this.updatePictures(); +}; + +Game_Screen.prototype.updateFadeOut = function() { + if (this._fadeOutDuration > 0) { + var d = this._fadeOutDuration; + this._brightness = (this._brightness * (d - 1)) / d; + this._fadeOutDuration--; + } +}; + +Game_Screen.prototype.updateFadeIn = function() { + if (this._fadeInDuration > 0) { + var d = this._fadeInDuration; + this._brightness = (this._brightness * (d - 1) + 255) / d; + this._fadeInDuration--; + } +}; + +Game_Screen.prototype.updateTone = function() { + if (this._toneDuration > 0) { + var d = this._toneDuration; + for (var i = 0; i < 4; i++) { + this._tone[i] = (this._tone[i] * (d - 1) + this._toneTarget[i]) / d; + } + this._toneDuration--; + } +}; + +Game_Screen.prototype.updateFlash = function() { + if (this._flashDuration > 0) { + var d = this._flashDuration; + this._flashColor[3] *= (d - 1) / d; + this._flashDuration--; + } +}; + +Game_Screen.prototype.updateShake = function() { + if (this._shakeDuration > 0 || this._shake !== 0) { + var delta = (this._shakePower * this._shakeSpeed * this._shakeDirection) / 10; + if (this._shakeDuration <= 1 && this._shake * (this._shake + delta) < 0) { + this._shake = 0; + } else { + this._shake += delta; + } + if (this._shake > this._shakePower * 2) { + this._shakeDirection = -1; + } + if (this._shake < - this._shakePower * 2) { + this._shakeDirection = 1; + } + this._shakeDuration--; + } +}; + +Game_Screen.prototype.updateZoom = function() { + if (this._zoomDuration > 0) { + var d = this._zoomDuration; + var t = this._zoomScaleTarget; + this._zoomScale = (this._zoomScale * (d - 1) + t) / d; + this._zoomDuration--; + } +}; + +Game_Screen.prototype.updateWeather = function() { + if (this._weatherDuration > 0) { + var d = this._weatherDuration; + var t = this._weatherPowerTarget; + this._weatherPower = (this._weatherPower * (d - 1) + t) / d; + this._weatherDuration--; + if (this._weatherDuration === 0 && this._weatherPowerTarget === 0) { + this._weatherType = 'none'; + } + } +}; + +Game_Screen.prototype.updatePictures = function() { + this._pictures.forEach(function(picture) { + if (picture) { + picture.update(); + } + }); +}; + +Game_Screen.prototype.startFlashForDamage = function() { + this.startFlash([255, 0, 0, 128], 8); +}; + +Game_Screen.prototype.showPicture = function(pictureId, name, origin, x, y, + scaleX, scaleY, opacity, blendMode) { + var realPictureId = this.realPictureId(pictureId); + var picture = new Game_Picture(); + picture.show(name, origin, x, y, scaleX, scaleY, opacity, blendMode); + this._pictures[realPictureId] = picture; +}; + +Game_Screen.prototype.movePicture = function(pictureId, origin, x, y, scaleX, + scaleY, opacity, blendMode, duration) { + var picture = this.picture(pictureId); + if (picture) { + picture.move(origin, x, y, scaleX, scaleY, opacity, blendMode, duration); + } +}; + +Game_Screen.prototype.rotatePicture = function(pictureId, speed) { + var picture = this.picture(pictureId); + if (picture) { + picture.rotate(speed); + } +}; + +Game_Screen.prototype.tintPicture = function(pictureId, tone, duration) { + var picture = this.picture(pictureId); + if (picture) { + picture.tint(tone, duration); + } +}; + +Game_Screen.prototype.erasePicture = function(pictureId) { + var realPictureId = this.realPictureId(pictureId); + this._pictures[realPictureId] = null; +}; + +//----------------------------------------------------------------------------- +// Game_Picture +// +// The game object class for a picture. + +function Game_Picture() { + this.initialize.apply(this, arguments); +} + +Game_Picture.prototype.initialize = function() { + this.initBasic(); + this.initTarget(); + this.initTone(); + this.initRotation(); +}; + +Game_Picture.prototype.name = function() { + return this._name; +}; + +Game_Picture.prototype.origin = function() { + return this._origin; +}; + +Game_Picture.prototype.x = function() { + return this._x; +}; + +Game_Picture.prototype.y = function() { + return this._y; +}; + +Game_Picture.prototype.scaleX = function() { + return this._scaleX; +}; + +Game_Picture.prototype.scaleY = function() { + return this._scaleY; +}; + +Game_Picture.prototype.opacity = function() { + return this._opacity; +}; + +Game_Picture.prototype.blendMode = function() { + return this._blendMode; +}; + +Game_Picture.prototype.tone = function() { + return this._tone; +}; + +Game_Picture.prototype.angle = function() { + return this._angle; +}; + +Game_Picture.prototype.initBasic = function() { + this._name = ''; + this._origin = 0; + this._x = 0; + this._y = 0; + this._scaleX = 100; + this._scaleY = 100; + this._opacity = 255; + this._blendMode = 0; +}; + +Game_Picture.prototype.initTarget = function() { + this._targetX = this._x; + this._targetY = this._y; + this._targetScaleX = this._scaleX; + this._targetScaleY = this._scaleY; + this._targetOpacity = this._opacity; + this._duration = 0; +}; + +Game_Picture.prototype.initTone = function() { + this._tone = null; + this._toneTarget = null; + this._toneDuration = 0; +}; + +Game_Picture.prototype.initRotation = function() { + this._angle = 0; + this._rotationSpeed = 0; +}; + +Game_Picture.prototype.show = function(name, origin, x, y, scaleX, + scaleY, opacity, blendMode) { + this._name = name; + this._origin = origin; + this._x = x; + this._y = y; + this._scaleX = scaleX; + this._scaleY = scaleY; + this._opacity = opacity; + this._blendMode = blendMode; + this.initTarget(); + this.initTone(); + this.initRotation(); +}; + +Game_Picture.prototype.move = function(origin, x, y, scaleX, scaleY, + opacity, blendMode, duration) { + this._origin = origin; + this._targetX = x; + this._targetY = y; + this._targetScaleX = scaleX; + this._targetScaleY = scaleY; + this._targetOpacity = opacity; + this._blendMode = blendMode; + this._duration = duration; +}; + +Game_Picture.prototype.rotate = function(speed) { + this._rotationSpeed = speed; +}; + +Game_Picture.prototype.tint = function(tone, duration) { + if (!this._tone) { + this._tone = [0, 0, 0, 0]; + } + this._toneTarget = tone.clone(); + this._toneDuration = duration; + if (this._toneDuration === 0) { + this._tone = this._toneTarget.clone(); + } +}; + +Game_Picture.prototype.erase = function() { + this._name = ''; + this._origin = 0; + this.initTarget(); + this.initTone(); + this.initRotation(); +}; + +Game_Picture.prototype.update = function() { + this.updateMove(); + this.updateTone(); + this.updateRotation(); +}; + +Game_Picture.prototype.updateMove = function() { + if (this._duration > 0) { + var d = this._duration; + this._x = (this._x * (d - 1) + this._targetX) / d; + this._y = (this._y * (d - 1) + this._targetY) / d; + this._scaleX = (this._scaleX * (d - 1) + this._targetScaleX) / d; + this._scaleY = (this._scaleY * (d - 1) + this._targetScaleY) / d; + this._opacity = (this._opacity * (d - 1) + this._targetOpacity) / d; + this._duration--; + } +}; + +Game_Picture.prototype.updateTone = function() { + if (this._toneDuration > 0) { + var d = this._toneDuration; + for (var i = 0; i < 4; i++) { + this._tone[i] = (this._tone[i] * (d - 1) + this._toneTarget[i]) / d; + } + this._toneDuration--; + } +}; + +Game_Picture.prototype.updateRotation = function() { + if (this._rotationSpeed !== 0) { + this._angle += this._rotationSpeed / 2; + } +}; + +//----------------------------------------------------------------------------- +// Game_Item +// +// The game object class for handling skills, items, weapons, and armor. It is +// required because save data should not include the database object itself. + +function Game_Item() { + this.initialize.apply(this, arguments); +} + +Game_Item.prototype.initialize = function(item) { + this._dataClass = ''; + this._itemId = 0; + if (item) { + this.setObject(item); + } +}; + +Game_Item.prototype.isSkill = function() { + return this._dataClass === 'skill'; +}; + +Game_Item.prototype.isItem = function() { + return this._dataClass === 'item'; +}; + +Game_Item.prototype.isUsableItem = function() { + return this.isSkill() || this.isItem(); +}; + +Game_Item.prototype.isWeapon = function() { + return this._dataClass === 'weapon'; +}; + +Game_Item.prototype.isArmor = function() { + return this._dataClass === 'armor'; +}; + +Game_Item.prototype.isEquipItem = function() { + return this.isWeapon() || this.isArmor(); +}; + +Game_Item.prototype.isNull = function() { + return this._dataClass === ''; +}; + +Game_Item.prototype.itemId = function() { + return this._itemId; +}; + +Game_Item.prototype.object = function() { + if (this.isSkill()) { + return $dataSkills[this._itemId]; + } else if (this.isItem()) { + return $dataItems[this._itemId]; + } else if (this.isWeapon()) { + return $dataWeapons[this._itemId]; + } else if (this.isArmor()) { + return $dataArmors[this._itemId]; + } else { + return null; + } +}; + +Game_Item.prototype.setObject = function(item) { + if (DataManager.isSkill(item)) { + this._dataClass = 'skill'; + } else if (DataManager.isItem(item)) { + this._dataClass = 'item'; + } else if (DataManager.isWeapon(item)) { + this._dataClass = 'weapon'; + } else if (DataManager.isArmor(item)) { + this._dataClass = 'armor'; + } else { + this._dataClass = ''; + } + this._itemId = item ? item.id : 0; +}; + +Game_Item.prototype.setEquip = function(isWeapon, itemId) { + this._dataClass = isWeapon ? 'weapon' : 'armor'; + this._itemId = itemId; +}; + +//----------------------------------------------------------------------------- +// Game_Action +// +// The game object class for a battle action. + +function Game_Action() { + this.initialize.apply(this, arguments); +} + +Game_Action.EFFECT_RECOVER_HP = 11; +Game_Action.EFFECT_RECOVER_MP = 12; +Game_Action.EFFECT_GAIN_TP = 13; +Game_Action.EFFECT_ADD_STATE = 21; +Game_Action.EFFECT_REMOVE_STATE = 22; +Game_Action.EFFECT_ADD_BUFF = 31; +Game_Action.EFFECT_ADD_DEBUFF = 32; +Game_Action.EFFECT_REMOVE_BUFF = 33; +Game_Action.EFFECT_REMOVE_DEBUFF = 34; +Game_Action.EFFECT_SPECIAL = 41; +Game_Action.EFFECT_GROW = 42; +Game_Action.EFFECT_LEARN_SKILL = 43; +Game_Action.EFFECT_COMMON_EVENT = 44; +Game_Action.SPECIAL_EFFECT_ESCAPE = 0; +Game_Action.HITTYPE_CERTAIN = 0; +Game_Action.HITTYPE_PHYSICAL = 1; +Game_Action.HITTYPE_MAGICAL = 2; + +Game_Action.prototype.initialize = function(subject, forcing) { + this._subjectActorId = 0; + this._subjectEnemyIndex = -1; + this._forcing = forcing || false; + this.setSubject(subject); + this.clear(); +}; + +Game_Action.prototype.clear = function() { + this._item = new Game_Item(); + this._targetIndex = -1; +}; + +Game_Action.prototype.setSubject = function(subject) { + if (subject.isActor()) { + this._subjectActorId = subject.actorId(); + this._subjectEnemyIndex = -1; + } else { + this._subjectEnemyIndex = subject.index(); + this._subjectActorId = 0; + } +}; + +Game_Action.prototype.subject = function() { + if (this._subjectActorId > 0) { + return $gameActors.actor(this._subjectActorId); + } else { + return $gameTroop.members()[this._subjectEnemyIndex]; + } +}; + +Game_Action.prototype.friendsUnit = function() { + return this.subject().friendsUnit(); +}; + +Game_Action.prototype.opponentsUnit = function() { + return this.subject().opponentsUnit(); +}; + +Game_Action.prototype.setEnemyAction = function(action) { + if (action) { + this.setSkill(action.skillId); + } else { + this.clear(); + } +}; + +Game_Action.prototype.setAttack = function() { + this.setSkill(this.subject().attackSkillId()); +}; + +Game_Action.prototype.setGuard = function() { + this.setSkill(this.subject().guardSkillId()); +}; + +Game_Action.prototype.setSkill = function(skillId) { + this._item.setObject($dataSkills[skillId]); +}; + +Game_Action.prototype.setItem = function(itemId) { + this._item.setObject($dataItems[itemId]); +}; + +Game_Action.prototype.setItemObject = function(object) { + this._item.setObject(object); +}; + +Game_Action.prototype.setTarget = function(targetIndex) { + this._targetIndex = targetIndex; +}; + +Game_Action.prototype.item = function() { + return this._item.object(); +}; + +Game_Action.prototype.isSkill = function() { + return this._item.isSkill(); +}; + +Game_Action.prototype.isItem = function() { + return this._item.isItem(); +}; + +Game_Action.prototype.numRepeats = function() { + var repeats = this.item().repeats; + if (this.isAttack()) { + repeats += this.subject().attackTimesAdd(); + } + return Math.floor(repeats); +}; + +Game_Action.prototype.checkItemScope = function(list) { + return list.contains(this.item().scope); +}; + +Game_Action.prototype.isForOpponent = function() { + return this.checkItemScope([1, 2, 3, 4, 5, 6]); +}; + +Game_Action.prototype.isForFriend = function() { + return this.checkItemScope([7, 8, 9, 10, 11]); +}; + +Game_Action.prototype.isForDeadFriend = function() { + return this.checkItemScope([9, 10]); +}; + +Game_Action.prototype.isForUser = function() { + return this.checkItemScope([11]); +}; + +Game_Action.prototype.isForOne = function() { + return this.checkItemScope([1, 3, 7, 9, 11]); +}; + +Game_Action.prototype.isForRandom = function() { + return this.checkItemScope([3, 4, 5, 6]); +}; + +Game_Action.prototype.isForAll = function() { + return this.checkItemScope([2, 8, 10]); +}; + +Game_Action.prototype.needsSelection = function() { + return this.checkItemScope([1, 7, 9]); +}; + +Game_Action.prototype.numTargets = function() { + return this.isForRandom() ? this.item().scope - 2 : 0; +}; + +Game_Action.prototype.checkDamageType = function(list) { + return list.contains(this.item().damage.type); +}; + +Game_Action.prototype.isHpEffect = function() { + return this.checkDamageType([1, 3, 5]); +}; + +Game_Action.prototype.isMpEffect = function() { + return this.checkDamageType([2, 4, 6]); +}; + +Game_Action.prototype.isDamage = function() { + return this.checkDamageType([1, 2]); +}; + +Game_Action.prototype.isRecover = function() { + return this.checkDamageType([3, 4]); +}; + +Game_Action.prototype.isDrain = function() { + return this.checkDamageType([5, 6]); +}; + +Game_Action.prototype.isHpRecover = function() { + return this.checkDamageType([3]); +}; + +Game_Action.prototype.isMpRecover = function() { + return this.checkDamageType([4]); +}; + +Game_Action.prototype.isCertainHit = function() { + return this.item().hitType === Game_Action.HITTYPE_CERTAIN; +}; + +Game_Action.prototype.isPhysical = function() { + return this.item().hitType === Game_Action.HITTYPE_PHYSICAL; +}; + +Game_Action.prototype.isMagical = function() { + return this.item().hitType === Game_Action.HITTYPE_MAGICAL; +}; + +Game_Action.prototype.isAttack = function() { + return this.item() === $dataSkills[this.subject().attackSkillId()]; +}; + +Game_Action.prototype.isGuard = function() { + return this.item() === $dataSkills[this.subject().guardSkillId()]; +}; + +Game_Action.prototype.isMagicSkill = function() { + if (this.isSkill()) { + return $dataSystem.magicSkills.contains(this.item().stypeId); + } else { + return false; + } +}; + +Game_Action.prototype.decideRandomTarget = function() { + var target; + if (this.isForDeadFriend()) { + target = this.friendsUnit().randomDeadTarget(); + } else if (this.isForFriend()) { + target = this.friendsUnit().randomTarget(); + } else { + target = this.opponentsUnit().randomTarget(); + } + if (target) { + this._targetIndex = target.index(); + } else { + this.clear(); + } +}; + +Game_Action.prototype.setConfusion = function() { + this.setAttack(); +}; + +Game_Action.prototype.prepare = function() { + if (this.subject().isConfused() && !this._forcing) { + this.setConfusion(); + } +}; + +Game_Action.prototype.isValid = function() { + return (this._forcing && this.item()) || this.subject().canUse(this.item()); +}; + +Game_Action.prototype.speed = function() { + var agi = this.subject().agi; + var speed = agi + Math.randomInt(Math.floor(5 + agi / 4)); + if (this.item()) { + speed += this.item().speed; + } + if (this.isAttack()) { + speed += this.subject().attackSpeed(); + } + return speed; +}; + +Game_Action.prototype.makeTargets = function() { + var targets = []; + if (!this._forcing && this.subject().isConfused()) { + targets = [this.confusionTarget()]; + } else if (this.isForOpponent()) { + targets = this.targetsForOpponents(); + } else if (this.isForFriend()) { + targets = this.targetsForFriends(); + } + return this.repeatTargets(targets); +}; + +Game_Action.prototype.repeatTargets = function(targets) { + var repeatedTargets = []; + var repeats = this.numRepeats(); + for (var i = 0; i < targets.length; i++) { + var target = targets[i]; + if (target) { + for (var j = 0; j < repeats; j++) { + repeatedTargets.push(target); + } + } + } + return repeatedTargets; +}; + +Game_Action.prototype.confusionTarget = function() { + switch (this.subject().confusionLevel()) { + case 1: + return this.opponentsUnit().randomTarget(); + case 2: + if (Math.randomInt(2) === 0) { + return this.opponentsUnit().randomTarget(); + } + return this.friendsUnit().randomTarget(); + default: + return this.friendsUnit().randomTarget(); + } +}; + +Game_Action.prototype.targetsForOpponents = function() { + var targets = []; + var unit = this.opponentsUnit(); + if (this.isForRandom()) { + for (var i = 0; i < this.numTargets(); i++) { + targets.push(unit.randomTarget()); + } + } else if (this.isForOne()) { + if (this._targetIndex < 0) { + targets.push(unit.randomTarget()); + } else { + targets.push(unit.smoothTarget(this._targetIndex)); + } + } else { + targets = unit.aliveMembers(); + } + return targets; +}; + +Game_Action.prototype.targetsForFriends = function() { + var targets = []; + var unit = this.friendsUnit(); + if (this.isForUser()) { + return [this.subject()]; + } else if (this.isForDeadFriend()) { + if (this.isForOne()) { + targets.push(unit.smoothDeadTarget(this._targetIndex)); + } else { + targets = unit.deadMembers(); + } + } else if (this.isForOne()) { + if (this._targetIndex < 0) { + targets.push(unit.randomTarget()); + } else { + targets.push(unit.smoothTarget(this._targetIndex)); + } + } else { + targets = unit.aliveMembers(); + } + return targets; +}; + +Game_Action.prototype.evaluate = function() { + var value = 0; + this.itemTargetCandidates().forEach(function(target) { + var targetValue = this.evaluateWithTarget(target); + if (this.isForAll()) { + value += targetValue; + } else if (targetValue > value) { + value = targetValue; + this._targetIndex = target.index(); + } + }, this); + value *= this.numRepeats(); + if (value > 0) { + value += Math.random(); + } + return value; +}; + +Game_Action.prototype.itemTargetCandidates = function() { + if (!this.isValid()) { + return []; + } else if (this.isForOpponent()) { + return this.opponentsUnit().aliveMembers(); + } else if (this.isForUser()) { + return [this.subject()]; + } else if (this.isForDeadFriend()) { + return this.friendsUnit().deadMembers(); + } else { + return this.friendsUnit().aliveMembers(); + } +}; + +Game_Action.prototype.evaluateWithTarget = function(target) { + if (this.isHpEffect()) { + var value = this.makeDamageValue(target, false); + if (this.isForOpponent()) { + return value / Math.max(target.hp, 1); + } else { + var recovery = Math.min(-value, target.mhp - target.hp); + return recovery / target.mhp; + } + } +}; + +Game_Action.prototype.testApply = function(target) { + return (this.isForDeadFriend() === target.isDead() && + ($gameParty.inBattle() || this.isForOpponent() || + (this.isHpRecover() && target.hp < target.mhp) || + (this.isMpRecover() && target.mp < target.mmp) || + (this.hasItemAnyValidEffects(target)))); +}; + +Game_Action.prototype.hasItemAnyValidEffects = function(target) { + return this.item().effects.some(function(effect) { + return this.testItemEffect(target, effect); + }, this); +}; + +Game_Action.prototype.testItemEffect = function(target, effect) { + switch (effect.code) { + case Game_Action.EFFECT_RECOVER_HP: + return target.hp < target.mhp || effect.value1 < 0 || effect.value2 < 0; + case Game_Action.EFFECT_RECOVER_MP: + return target.mp < target.mmp || effect.value1 < 0 || effect.value2 < 0; + case Game_Action.EFFECT_ADD_STATE: + return !target.isStateAffected(effect.dataId); + case Game_Action.EFFECT_REMOVE_STATE: + return target.isStateAffected(effect.dataId); + case Game_Action.EFFECT_ADD_BUFF: + return !target.isMaxBuffAffected(effect.dataId); + case Game_Action.EFFECT_ADD_DEBUFF: + return !target.isMaxDebuffAffected(effect.dataId); + case Game_Action.EFFECT_REMOVE_BUFF: + return target.isBuffAffected(effect.dataId); + case Game_Action.EFFECT_REMOVE_DEBUFF: + return target.isDebuffAffected(effect.dataId); + case Game_Action.EFFECT_LEARN_SKILL: + return target.isActor() && !target.isLearnedSkill(effect.dataId); + default: + return true; + } +}; + +Game_Action.prototype.itemCnt = function(target) { + if (this.isPhysical() && target.canMove()) { + return target.cnt; + } else { + return 0; + } +}; + +Game_Action.prototype.itemMrf = function(target) { + if (this.isMagical()) { + return target.mrf; + } else { + return 0; + } +}; + +Game_Action.prototype.itemHit = function(target) { + if (this.isPhysical()) { + return this.item().successRate * 0.01 * this.subject().hit; + } else { + return this.item().successRate * 0.01; + } +}; + +Game_Action.prototype.itemEva = function(target) { + if (this.isPhysical()) { + return target.eva; + } else if (this.isMagical()) { + return target.mev; + } else { + return 0; + } +}; + +Game_Action.prototype.itemCri = function(target) { + return this.item().damage.critical ? this.subject().cri * (1 - target.cev) : 0; +}; + +Game_Action.prototype.apply = function(target) { + var result = target.result(); + this.subject().clearResult(); + result.clear(); + result.used = this.testApply(target); + result.missed = (result.used && Math.random() >= this.itemHit(target)); + result.evaded = (!result.missed && Math.random() < this.itemEva(target)); + result.physical = this.isPhysical(); + result.drain = this.isDrain(); + if (result.isHit()) { + if (this.item().damage.type > 0) { + result.critical = (Math.random() < this.itemCri(target)); + var value = this.makeDamageValue(target, result.critical); + this.executeDamage(target, value); + } + this.item().effects.forEach(function(effect) { + this.applyItemEffect(target, effect); + }, this); + this.applyItemUserEffect(target); + } +}; + +Game_Action.prototype.makeDamageValue = function(target, critical) { + var item = this.item(); + var baseValue = this.evalDamageFormula(target); + var value = baseValue * this.calcElementRate(target); + if (this.isPhysical()) { + value *= target.pdr; + } + if (this.isMagical()) { + value *= target.mdr; + } + if (baseValue < 0) { + value *= target.rec; + } + if (critical) { + value = this.applyCritical(value); + } + value = this.applyVariance(value, item.damage.variance); + value = this.applyGuard(value, target); + value = Math.round(value); + return value; +}; + +Game_Action.prototype.evalDamageFormula = function(target) { + try { + var item = this.item(); + var a = this.subject(); + var b = target; + var v = $gameVariables._data; + var sign = ([3, 4].contains(item.damage.type) ? -1 : 1); + var value = Math.max(eval(item.damage.formula), 0) * sign; + if (isNaN(value)) value = 0; + return value; + } catch (e) { + return 0; + } +}; + +Game_Action.prototype.calcElementRate = function(target) { + if (this.item().damage.elementId < 0) { + return this.elementsMaxRate(target, this.subject().attackElements()); + } else { + return target.elementRate(this.item().damage.elementId); + } +}; + +Game_Action.prototype.elementsMaxRate = function(target, elements) { + if (elements.length > 0) { + return Math.max.apply(null, elements.map(function(elementId) { + return target.elementRate(elementId); + }, this)); + } else { + return 1; + } +}; + +Game_Action.prototype.applyCritical = function(damage) { + return damage * 3; +}; + +Game_Action.prototype.applyVariance = function(damage, variance) { + var amp = Math.floor(Math.max(Math.abs(damage) * variance / 100, 0)); + var v = Math.randomInt(amp + 1) + Math.randomInt(amp + 1) - amp; + return damage >= 0 ? damage + v : damage - v; +}; + +Game_Action.prototype.applyGuard = function(damage, target) { + return damage / (damage > 0 && target.isGuard() ? 2 * target.grd : 1); +}; + +Game_Action.prototype.executeDamage = function(target, value) { + var result = target.result(); + if (value === 0) { + result.critical = false; + } + if (this.isHpEffect()) { + this.executeHpDamage(target, value); + } + if (this.isMpEffect()) { + this.executeMpDamage(target, value); + } +}; + +Game_Action.prototype.executeHpDamage = function(target, value) { + if (this.isDrain()) { + value = Math.min(target.hp, value); + } + this.makeSuccess(target); + target.gainHp(-value); + if (value > 0) { + target.onDamage(value); + } + this.gainDrainedHp(value); +}; + +Game_Action.prototype.executeMpDamage = function(target, value) { + if (!this.isMpRecover()) { + value = Math.min(target.mp, value); + } + if (value !== 0) { + this.makeSuccess(target); + } + target.gainMp(-value); + this.gainDrainedMp(value); +}; + +Game_Action.prototype.gainDrainedHp = function(value) { + if (this.isDrain()) { + this.subject().gainHp(value); + } +}; + +Game_Action.prototype.gainDrainedMp = function(value) { + if (this.isDrain()) { + this.subject().gainMp(value); + } +}; + +Game_Action.prototype.applyItemEffect = function(target, effect) { + switch (effect.code) { + case Game_Action.EFFECT_RECOVER_HP: + this.itemEffectRecoverHp(target, effect); + break; + case Game_Action.EFFECT_RECOVER_MP: + this.itemEffectRecoverMp(target, effect); + break; + case Game_Action.EFFECT_GAIN_TP: + this.itemEffectGainTp(target, effect); + break; + case Game_Action.EFFECT_ADD_STATE: + this.itemEffectAddState(target, effect); + break; + case Game_Action.EFFECT_REMOVE_STATE: + this.itemEffectRemoveState(target, effect); + break; + case Game_Action.EFFECT_ADD_BUFF: + this.itemEffectAddBuff(target, effect); + break; + case Game_Action.EFFECT_ADD_DEBUFF: + this.itemEffectAddDebuff(target, effect); + break; + case Game_Action.EFFECT_REMOVE_BUFF: + this.itemEffectRemoveBuff(target, effect); + break; + case Game_Action.EFFECT_REMOVE_DEBUFF: + this.itemEffectRemoveDebuff(target, effect); + break; + case Game_Action.EFFECT_SPECIAL: + this.itemEffectSpecial(target, effect); + break; + case Game_Action.EFFECT_GROW: + this.itemEffectGrow(target, effect); + break; + case Game_Action.EFFECT_LEARN_SKILL: + this.itemEffectLearnSkill(target, effect); + break; + case Game_Action.EFFECT_COMMON_EVENT: + this.itemEffectCommonEvent(target, effect); + break; + } +}; + +Game_Action.prototype.itemEffectRecoverHp = function(target, effect) { + var value = (target.mhp * effect.value1 + effect.value2) * target.rec; + if (this.isItem()) { + value *= this.subject().pha; + } + value = Math.floor(value); + if (value !== 0) { + target.gainHp(value); + this.makeSuccess(target); + } +}; + +Game_Action.prototype.itemEffectRecoverMp = function(target, effect) { + var value = (target.mmp * effect.value1 + effect.value2) * target.rec; + if (this.isItem()) { + value *= this.subject().pha; + } + value = Math.floor(value); + if (value !== 0) { + target.gainMp(value); + this.makeSuccess(target); + } +}; + +Game_Action.prototype.itemEffectGainTp = function(target, effect) { + var value = Math.floor(effect.value1); + if (value !== 0) { + target.gainTp(value); + this.makeSuccess(target); + } +}; + +Game_Action.prototype.itemEffectAddState = function(target, effect) { + if (effect.dataId === 0) { + this.itemEffectAddAttackState(target, effect); + } else { + this.itemEffectAddNormalState(target, effect); + } +}; + +Game_Action.prototype.itemEffectAddAttackState = function(target, effect) { + this.subject().attackStates().forEach(function(stateId) { + var chance = effect.value1; + chance *= target.stateRate(stateId); + chance *= this.subject().attackStatesRate(stateId); + chance *= this.lukEffectRate(target); + if (Math.random() < chance) { + target.addState(stateId); + this.makeSuccess(target); + } + }.bind(this), target); +}; + +Game_Action.prototype.itemEffectAddNormalState = function(target, effect) { + var chance = effect.value1; + if (!this.isCertainHit()) { + chance *= target.stateRate(effect.dataId); + chance *= this.lukEffectRate(target); + } + if (Math.random() < chance) { + target.addState(effect.dataId); + this.makeSuccess(target); + } +}; + +Game_Action.prototype.itemEffectRemoveState = function(target, effect) { + var chance = effect.value1; + if (Math.random() < chance) { + target.removeState(effect.dataId); + this.makeSuccess(target); + } +}; + +Game_Action.prototype.itemEffectAddBuff = function(target, effect) { + target.addBuff(effect.dataId, effect.value1); + this.makeSuccess(target); +}; + +Game_Action.prototype.itemEffectAddDebuff = function(target, effect) { + var chance = target.debuffRate(effect.dataId) * this.lukEffectRate(target); + if (Math.random() < chance) { + target.addDebuff(effect.dataId, effect.value1); + this.makeSuccess(target); + } +}; + +Game_Action.prototype.itemEffectRemoveBuff = function(target, effect) { + if (target.isBuffAffected(effect.dataId)) { + target.removeBuff(effect.dataId); + this.makeSuccess(target); + } +}; + +Game_Action.prototype.itemEffectRemoveDebuff = function(target, effect) { + if (target.isDebuffAffected(effect.dataId)) { + target.removeBuff(effect.dataId); + this.makeSuccess(target); + } +}; + +Game_Action.prototype.itemEffectSpecial = function(target, effect) { + if (effect.dataId === Game_Action.SPECIAL_EFFECT_ESCAPE) { + target.escape(); + this.makeSuccess(target); + } +}; + +Game_Action.prototype.itemEffectGrow = function(target, effect) { + target.addParam(effect.dataId, Math.floor(effect.value1)); + this.makeSuccess(target); +}; + +Game_Action.prototype.itemEffectLearnSkill = function(target, effect) { + if (target.isActor()) { + target.learnSkill(effect.dataId); + this.makeSuccess(target); + } +}; + +Game_Action.prototype.itemEffectCommonEvent = function(target, effect) { +}; + +Game_Action.prototype.makeSuccess = function(target) { + target.result().success = true; +}; + +Game_Action.prototype.applyItemUserEffect = function(target) { + var value = Math.floor(this.item().tpGain * this.subject().tcr); + this.subject().gainSilentTp(value); +}; + +Game_Action.prototype.lukEffectRate = function(target) { + return Math.max(1.0 + (this.subject().luk - target.luk) * 0.001, 0.0); +}; + +Game_Action.prototype.applyGlobal = function() { + this.item().effects.forEach(function(effect) { + if (effect.code === Game_Action.EFFECT_COMMON_EVENT) { + $gameTemp.reserveCommonEvent(effect.dataId); + } + }, this); +}; + +//----------------------------------------------------------------------------- +// Game_ActionResult +// +// The game object class for a result of a battle action. For convinience, all +// member variables in this class are public. + +function Game_ActionResult() { + this.initialize.apply(this, arguments); +} + +Game_ActionResult.prototype.initialize = function() { + this.clear(); +}; + +Game_ActionResult.prototype.clear = function() { + this.used = false; + this.missed = false; + this.evaded = false; + this.physical = false; + this.drain = false; + this.critical = false; + this.success = false; + this.hpAffected = false; + this.hpDamage = 0; + this.mpDamage = 0; + this.tpDamage = 0; + this.addedStates = []; + this.removedStates = []; + this.addedBuffs = []; + this.addedDebuffs = []; + this.removedBuffs = []; +}; + +Game_ActionResult.prototype.addedStateObjects = function() { + return this.addedStates.map(function(id) { + return $dataStates[id]; + }); +}; + +Game_ActionResult.prototype.removedStateObjects = function() { + return this.removedStates.map(function(id) { + return $dataStates[id]; + }); +}; + +Game_ActionResult.prototype.isStatusAffected = function() { + return (this.addedStates.length > 0 || this.removedStates.length > 0 || + this.addedBuffs.length > 0 || this.addedDebuffs.length > 0 || + this.removedBuffs.length > 0); +}; + +Game_ActionResult.prototype.isHit = function() { + return this.used && !this.missed && !this.evaded; +}; + +Game_ActionResult.prototype.isStateAdded = function(stateId) { + return this.addedStates.contains(stateId); +}; + +Game_ActionResult.prototype.pushAddedState = function(stateId) { + if (!this.isStateAdded(stateId)) { + this.addedStates.push(stateId); + } +}; + +Game_ActionResult.prototype.isStateRemoved = function(stateId) { + return this.removedStates.contains(stateId); +}; + +Game_ActionResult.prototype.pushRemovedState = function(stateId) { + if (!this.isStateRemoved(stateId)) { + this.removedStates.push(stateId); + } +}; + +Game_ActionResult.prototype.isBuffAdded = function(paramId) { + return this.addedBuffs.contains(paramId); +}; + +Game_ActionResult.prototype.pushAddedBuff = function(paramId) { + if (!this.isBuffAdded(paramId)) { + this.addedBuffs.push(paramId); + } +}; + +Game_ActionResult.prototype.isDebuffAdded = function(paramId) { + return this.addedDebuffs.contains(paramId); +}; + +Game_ActionResult.prototype.pushAddedDebuff = function(paramId) { + if (!this.isDebuffAdded(paramId)) { + this.addedDebuffs.push(paramId); + } +}; + +Game_ActionResult.prototype.isBuffRemoved = function(paramId) { + return this.removedBuffs.contains(paramId); +}; + +Game_ActionResult.prototype.pushRemovedBuff = function(paramId) { + if (!this.isBuffRemoved(paramId)) { + this.removedBuffs.push(paramId); + } +}; + +//----------------------------------------------------------------------------- +// Game_BattlerBase +// +// The superclass of Game_Battler. It mainly contains parameters calculation. + +function Game_BattlerBase() { + this.initialize.apply(this, arguments); +} + +Game_BattlerBase.TRAIT_ELEMENT_RATE = 11; +Game_BattlerBase.TRAIT_DEBUFF_RATE = 12; +Game_BattlerBase.TRAIT_STATE_RATE = 13; +Game_BattlerBase.TRAIT_STATE_RESIST = 14; +Game_BattlerBase.TRAIT_PARAM = 21; +Game_BattlerBase.TRAIT_XPARAM = 22; +Game_BattlerBase.TRAIT_SPARAM = 23; +Game_BattlerBase.TRAIT_ATTACK_ELEMENT = 31; +Game_BattlerBase.TRAIT_ATTACK_STATE = 32; +Game_BattlerBase.TRAIT_ATTACK_SPEED = 33; +Game_BattlerBase.TRAIT_ATTACK_TIMES = 34; +Game_BattlerBase.TRAIT_STYPE_ADD = 41; +Game_BattlerBase.TRAIT_STYPE_SEAL = 42; +Game_BattlerBase.TRAIT_SKILL_ADD = 43; +Game_BattlerBase.TRAIT_SKILL_SEAL = 44; +Game_BattlerBase.TRAIT_EQUIP_WTYPE = 51; +Game_BattlerBase.TRAIT_EQUIP_ATYPE = 52; +Game_BattlerBase.TRAIT_EQUIP_LOCK = 53; +Game_BattlerBase.TRAIT_EQUIP_SEAL = 54; +Game_BattlerBase.TRAIT_SLOT_TYPE = 55; +Game_BattlerBase.TRAIT_ACTION_PLUS = 61; +Game_BattlerBase.TRAIT_SPECIAL_FLAG = 62; +Game_BattlerBase.TRAIT_COLLAPSE_TYPE = 63; +Game_BattlerBase.TRAIT_PARTY_ABILITY = 64; +Game_BattlerBase.FLAG_ID_AUTO_BATTLE = 0; +Game_BattlerBase.FLAG_ID_GUARD = 1; +Game_BattlerBase.FLAG_ID_SUBSTITUTE = 2; +Game_BattlerBase.FLAG_ID_PRESERVE_TP = 3; +Game_BattlerBase.ICON_BUFF_START = 32; +Game_BattlerBase.ICON_DEBUFF_START = 48; + +Object.defineProperties(Game_BattlerBase.prototype, { + // Hit Points + hp: { get: function() { return this._hp; }, configurable: true }, + // Magic Points + mp: { get: function() { return this._mp; }, configurable: true }, + // Tactical Points + tp: { get: function() { return this._tp; }, configurable: true }, + // Maximum Hit Points + mhp: { get: function() { return this.param(0); }, configurable: true }, + // Maximum Magic Points + mmp: { get: function() { return this.param(1); }, configurable: true }, + // ATtacK power + atk: { get: function() { return this.param(2); }, configurable: true }, + // DEFense power + def: { get: function() { return this.param(3); }, configurable: true }, + // Magic ATtack power + mat: { get: function() { return this.param(4); }, configurable: true }, + // Magic DeFense power + mdf: { get: function() { return this.param(5); }, configurable: true }, + // AGIlity + agi: { get: function() { return this.param(6); }, configurable: true }, + // LUcK + luk: { get: function() { return this.param(7); }, configurable: true }, + // HIT rate + hit: { get: function() { return this.xparam(0); }, configurable: true }, + // EVAsion rate + eva: { get: function() { return this.xparam(1); }, configurable: true }, + // CRItical rate + cri: { get: function() { return this.xparam(2); }, configurable: true }, + // Critical EVasion rate + cev: { get: function() { return this.xparam(3); }, configurable: true }, + // Magic EVasion rate + mev: { get: function() { return this.xparam(4); }, configurable: true }, + // Magic ReFlection rate + mrf: { get: function() { return this.xparam(5); }, configurable: true }, + // CouNTer attack rate + cnt: { get: function() { return this.xparam(6); }, configurable: true }, + // Hp ReGeneration rate + hrg: { get: function() { return this.xparam(7); }, configurable: true }, + // Mp ReGeneration rate + mrg: { get: function() { return this.xparam(8); }, configurable: true }, + // Tp ReGeneration rate + trg: { get: function() { return this.xparam(9); }, configurable: true }, + // TarGet Rate + tgr: { get: function() { return this.sparam(0); }, configurable: true }, + // GuaRD effect rate + grd: { get: function() { return this.sparam(1); }, configurable: true }, + // RECovery effect rate + rec: { get: function() { return this.sparam(2); }, configurable: true }, + // PHArmacology + pha: { get: function() { return this.sparam(3); }, configurable: true }, + // Mp Cost Rate + mcr: { get: function() { return this.sparam(4); }, configurable: true }, + // Tp Charge Rate + tcr: { get: function() { return this.sparam(5); }, configurable: true }, + // Physical Damage Rate + pdr: { get: function() { return this.sparam(6); }, configurable: true }, + // Magical Damage Rate + mdr: { get: function() { return this.sparam(7); }, configurable: true }, + // Floor Damage Rate + fdr: { get: function() { return this.sparam(8); }, configurable: true }, + // EXperience Rate + exr: { get: function() { return this.sparam(9); }, configurable: true } +}); + +Game_BattlerBase.prototype.initialize = function() { + this.initMembers(); +}; + +Game_BattlerBase.prototype.initMembers = function() { + this._hp = 1; + this._mp = 0; + this._tp = 0; + this._hidden = false; + this.clearParamPlus(); + this.clearStates(); + this.clearBuffs(); +}; + +Game_BattlerBase.prototype.clearParamPlus = function() { + this._paramPlus = [0,0,0,0,0,0,0,0]; +}; + +Game_BattlerBase.prototype.clearStates = function() { + this._states = []; + this._stateTurns = {}; +}; + +Game_BattlerBase.prototype.eraseState = function(stateId) { + var index = this._states.indexOf(stateId); + if (index >= 0) { + this._states.splice(index, 1); + } + delete this._stateTurns[stateId]; +}; + +Game_BattlerBase.prototype.isStateAffected = function(stateId) { + return this._states.contains(stateId); +}; + +Game_BattlerBase.prototype.isDeathStateAffected = function() { + return this.isStateAffected(this.deathStateId()); +}; + +Game_BattlerBase.prototype.deathStateId = function() { + return 1; +}; + +Game_BattlerBase.prototype.resetStateCounts = function(stateId) { + var state = $dataStates[stateId]; + var variance = 1 + Math.max(state.maxTurns - state.minTurns, 0); + this._stateTurns[stateId] = state.minTurns + Math.randomInt(variance); +}; + +Game_BattlerBase.prototype.isStateExpired = function(stateId) { + return this._stateTurns[stateId] === 0; +}; + +Game_BattlerBase.prototype.updateStateTurns = function() { + this._states.forEach(function(stateId) { + if (this._stateTurns[stateId] > 0) { + this._stateTurns[stateId]--; + } + }, this); +}; + +Game_BattlerBase.prototype.clearBuffs = function() { + this._buffs = [0,0,0,0,0,0,0,0]; + this._buffTurns = [0,0,0,0,0,0,0,0]; +}; + +Game_BattlerBase.prototype.eraseBuff = function(paramId) { + this._buffs[paramId] = 0; + this._buffTurns[paramId] = 0; +}; + +Game_BattlerBase.prototype.buffLength = function() { + return this._buffs.length; +}; + +Game_BattlerBase.prototype.buff = function(paramId) { + return this._buffs[paramId]; +}; + +Game_BattlerBase.prototype.isBuffAffected = function(paramId) { + return this._buffs[paramId] > 0; +}; + +Game_BattlerBase.prototype.isDebuffAffected = function(paramId) { + return this._buffs[paramId] < 0; +}; + +Game_BattlerBase.prototype.isBuffOrDebuffAffected = function(paramId) { + return this._buffs[paramId] !== 0; +}; + +Game_BattlerBase.prototype.isMaxBuffAffected = function(paramId) { + return this._buffs[paramId] === 2; +}; + +Game_BattlerBase.prototype.isMaxDebuffAffected = function(paramId) { + return this._buffs[paramId] === -2; +}; + +Game_BattlerBase.prototype.increaseBuff = function(paramId) { + if (!this.isMaxBuffAffected(paramId)) { + this._buffs[paramId]++; + } +}; + +Game_BattlerBase.prototype.decreaseBuff = function(paramId) { + if (!this.isMaxDebuffAffected(paramId)) { + this._buffs[paramId]--; + } +}; + +Game_BattlerBase.prototype.overwriteBuffTurns = function(paramId, turns) { + if (this._buffTurns[paramId] < turns) { + this._buffTurns[paramId] = turns; + } +}; + +Game_BattlerBase.prototype.isBuffExpired = function(paramId) { + return this._buffTurns[paramId] === 0; +}; + +Game_BattlerBase.prototype.updateBuffTurns = function() { + for (var i = 0; i < this._buffTurns.length; i++) { + if (this._buffTurns[i] > 0) { + this._buffTurns[i]--; + } + } +}; + +Game_BattlerBase.prototype.die = function() { + this._hp = 0; + this.clearStates(); + this.clearBuffs(); +}; + +Game_BattlerBase.prototype.revive = function() { + if (this._hp === 0) { + this._hp = 1; + } +}; + +Game_BattlerBase.prototype.states = function() { + return this._states.map(function(id) { + return $dataStates[id]; + }); +}; + +Game_BattlerBase.prototype.stateIcons = function() { + return this.states().map(function(state) { + return state.iconIndex; + }).filter(function(iconIndex) { + return iconIndex > 0; + }); +}; + +Game_BattlerBase.prototype.buffIcons = function() { + var icons = []; + for (var i = 0; i < this._buffs.length; i++) { + if (this._buffs[i] !== 0) { + icons.push(this.buffIconIndex(this._buffs[i], i)); + } + } + return icons; +}; + +Game_BattlerBase.prototype.buffIconIndex = function(buffLevel, paramId) { + if (buffLevel > 0) { + return Game_BattlerBase.ICON_BUFF_START + (buffLevel - 1) * 8 + paramId; + } else if (buffLevel < 0) { + return Game_BattlerBase.ICON_DEBUFF_START + (-buffLevel - 1) * 8 + paramId; + } else { + return 0; + } +}; + +Game_BattlerBase.prototype.allIcons = function() { + return this.stateIcons().concat(this.buffIcons()); +}; + +Game_BattlerBase.prototype.traitObjects = function() { + // Returns an array of the all objects having traits. States only here. + return this.states(); +}; + +Game_BattlerBase.prototype.allTraits = function() { + return this.traitObjects().reduce(function(r, obj) { + return r.concat(obj.traits); + }, []); +}; + +Game_BattlerBase.prototype.traits = function(code) { + return this.allTraits().filter(function(trait) { + return trait.code === code; + }); +}; + +Game_BattlerBase.prototype.traitsWithId = function(code, id) { + return this.allTraits().filter(function(trait) { + return trait.code === code && trait.dataId === id; + }); +}; + +Game_BattlerBase.prototype.traitsPi = function(code, id) { + return this.traitsWithId(code, id).reduce(function(r, trait) { + return r * trait.value; + }, 1); +}; + +Game_BattlerBase.prototype.traitsSum = function(code, id) { + return this.traitsWithId(code, id).reduce(function(r, trait) { + return r + trait.value; + }, 0); +}; + +Game_BattlerBase.prototype.traitsSumAll = function(code) { + return this.traits(code).reduce(function(r, trait) { + return r + trait.value; + }, 0); +}; + +Game_BattlerBase.prototype.traitsSet = function(code) { + return this.traits(code).reduce(function(r, trait) { + return r.concat(trait.dataId); + }, []); +}; + +Game_BattlerBase.prototype.paramBase = function(paramId) { + return 0; +}; + +Game_BattlerBase.prototype.paramPlus = function(paramId) { + return this._paramPlus[paramId]; +}; + +Game_BattlerBase.prototype.paramMin = function(paramId) { + if (paramId === 1) { + return 0; // MMP + } else { + return 1; + } +}; + +Game_BattlerBase.prototype.paramMax = function(paramId) { + if (paramId === 0) { + return 999999; // MHP + } else if (paramId === 1) { + return 9999; // MMP + } else { + return 999; + } +}; + +Game_BattlerBase.prototype.paramRate = function(paramId) { + return this.traitsPi(Game_BattlerBase.TRAIT_PARAM, paramId); +}; + +Game_BattlerBase.prototype.paramBuffRate = function(paramId) { + return this._buffs[paramId] * 0.25 + 1.0; +}; + +Game_BattlerBase.prototype.param = function(paramId) { + var value = this.paramBase(paramId) + this.paramPlus(paramId); + value *= this.paramRate(paramId) * this.paramBuffRate(paramId); + var maxValue = this.paramMax(paramId); + var minValue = this.paramMin(paramId); + return Math.round(value.clamp(minValue, maxValue)); +}; + +Game_BattlerBase.prototype.xparam = function(xparamId) { + return this.traitsSum(Game_BattlerBase.TRAIT_XPARAM, xparamId); +}; + +Game_BattlerBase.prototype.sparam = function(sparamId) { + return this.traitsPi(Game_BattlerBase.TRAIT_SPARAM, sparamId); +}; + +Game_BattlerBase.prototype.elementRate = function(elementId) { + return this.traitsPi(Game_BattlerBase.TRAIT_ELEMENT_RATE, elementId); +}; + +Game_BattlerBase.prototype.debuffRate = function(paramId) { + return this.traitsPi(Game_BattlerBase.TRAIT_DEBUFF_RATE, paramId); +}; + +Game_BattlerBase.prototype.stateRate = function(stateId) { + return this.traitsPi(Game_BattlerBase.TRAIT_STATE_RATE, stateId); +}; + +Game_BattlerBase.prototype.stateResistSet = function() { + return this.traitsSet(Game_BattlerBase.TRAIT_STATE_RESIST); +}; + +Game_BattlerBase.prototype.isStateResist = function(stateId) { + return this.stateResistSet().contains(stateId); +}; + +Game_BattlerBase.prototype.attackElements = function() { + return this.traitsSet(Game_BattlerBase.TRAIT_ATTACK_ELEMENT); +}; + +Game_BattlerBase.prototype.attackStates = function() { + return this.traitsSet(Game_BattlerBase.TRAIT_ATTACK_STATE); +}; + +Game_BattlerBase.prototype.attackStatesRate = function(stateId) { + return this.traitsSum(Game_BattlerBase.TRAIT_ATTACK_STATE, stateId); +}; + +Game_BattlerBase.prototype.attackSpeed = function() { + return this.traitsSumAll(Game_BattlerBase.TRAIT_ATTACK_SPEED); +}; + +Game_BattlerBase.prototype.attackTimesAdd = function() { + return Math.max(this.traitsSumAll(Game_BattlerBase.TRAIT_ATTACK_TIMES), 0); +}; + +Game_BattlerBase.prototype.addedSkillTypes = function() { + return this.traitsSet(Game_BattlerBase.TRAIT_STYPE_ADD); +}; + +Game_BattlerBase.prototype.isSkillTypeSealed = function(stypeId) { + return this.traitsSet(Game_BattlerBase.TRAIT_STYPE_SEAL).contains(stypeId); +}; + +Game_BattlerBase.prototype.addedSkills = function() { + return this.traitsSet(Game_BattlerBase.TRAIT_SKILL_ADD); +}; + +Game_BattlerBase.prototype.isSkillSealed = function(skillId) { + return this.traitsSet(Game_BattlerBase.TRAIT_SKILL_SEAL).contains(skillId); +}; + +Game_BattlerBase.prototype.isEquipWtypeOk = function(wtypeId) { + return this.traitsSet(Game_BattlerBase.TRAIT_EQUIP_WTYPE).contains(wtypeId); +}; + +Game_BattlerBase.prototype.isEquipAtypeOk = function(atypeId) { + return this.traitsSet(Game_BattlerBase.TRAIT_EQUIP_ATYPE).contains(atypeId); +}; + +Game_BattlerBase.prototype.isEquipTypeLocked = function(etypeId) { + return this.traitsSet(Game_BattlerBase.TRAIT_EQUIP_LOCK).contains(etypeId); +}; + +Game_BattlerBase.prototype.isEquipTypeSealed = function(etypeId) { + return this.traitsSet(Game_BattlerBase.TRAIT_EQUIP_SEAL).contains(etypeId); +}; + +Game_BattlerBase.prototype.slotType = function() { + var set = this.traitsSet(Game_BattlerBase.TRAIT_SLOT_TYPE); + return set.length > 0 ? Math.max.apply(null, set) : 0; +}; + +Game_BattlerBase.prototype.isDualWield = function() { + return this.slotType() === 1; +}; + +Game_BattlerBase.prototype.actionPlusSet = function() { + return this.traits(Game_BattlerBase.TRAIT_ACTION_PLUS).map(function(trait) { + return trait.value; + }); +}; + +Game_BattlerBase.prototype.specialFlag = function(flagId) { + return this.traits(Game_BattlerBase.TRAIT_SPECIAL_FLAG).some(function(trait) { + return trait.dataId === flagId; + }); +}; + +Game_BattlerBase.prototype.collapseType = function() { + var set = this.traitsSet(Game_BattlerBase.TRAIT_COLLAPSE_TYPE); + return set.length > 0 ? Math.max.apply(null, set) : 0; +}; + +Game_BattlerBase.prototype.partyAbility = function(abilityId) { + return this.traits(Game_BattlerBase.TRAIT_PARTY_ABILITY).some(function(trait) { + return trait.dataId === abilityId; + }); +}; + +Game_BattlerBase.prototype.isAutoBattle = function() { + return this.specialFlag(Game_BattlerBase.FLAG_ID_AUTO_BATTLE); +}; + +Game_BattlerBase.prototype.isGuard = function() { + return this.specialFlag(Game_BattlerBase.FLAG_ID_GUARD) && this.canMove(); +}; + +Game_BattlerBase.prototype.isSubstitute = function() { + return this.specialFlag(Game_BattlerBase.FLAG_ID_SUBSTITUTE) && this.canMove(); +}; + +Game_BattlerBase.prototype.isPreserveTp = function() { + return this.specialFlag(Game_BattlerBase.FLAG_ID_PRESERVE_TP); +}; + +Game_BattlerBase.prototype.addParam = function(paramId, value) { + this._paramPlus[paramId] += value; + this.refresh(); +}; + +Game_BattlerBase.prototype.setHp = function(hp) { + this._hp = hp; + this.refresh(); +}; + +Game_BattlerBase.prototype.setMp = function(mp) { + this._mp = mp; + this.refresh(); +}; + +Game_BattlerBase.prototype.setTp = function(tp) { + this._tp = tp; + this.refresh(); +}; + +Game_BattlerBase.prototype.maxTp = function() { + return 100; +}; + +Game_BattlerBase.prototype.refresh = function() { + this.stateResistSet().forEach(function(stateId) { + this.eraseState(stateId); + }, this); + this._hp = this._hp.clamp(0, this.mhp); + this._mp = this._mp.clamp(0, this.mmp); + this._tp = this._tp.clamp(0, this.maxTp()); +}; + +Game_BattlerBase.prototype.recoverAll = function() { + this.clearStates(); + this._hp = this.mhp; + this._mp = this.mmp; +}; + +Game_BattlerBase.prototype.hpRate = function() { + return this.hp / this.mhp; +}; + +Game_BattlerBase.prototype.mpRate = function() { + return this.mmp > 0 ? this.mp / this.mmp : 0; +}; + +Game_BattlerBase.prototype.tpRate = function() { + return this.tp / 100; +}; + +Game_BattlerBase.prototype.hide = function() { + this._hidden = true; +}; + +Game_BattlerBase.prototype.appear = function() { + this._hidden = false; +}; + +Game_BattlerBase.prototype.isHidden = function() { + return this._hidden; +}; + +Game_BattlerBase.prototype.isAppeared = function() { + return !this.isHidden(); +}; + +Game_BattlerBase.prototype.isDead = function() { + return this.isAppeared() && this.isDeathStateAffected(); +}; + +Game_BattlerBase.prototype.isAlive = function() { + return this.isAppeared() && !this.isDeathStateAffected(); +}; + +Game_BattlerBase.prototype.isDying = function() { + return this.isAlive() && this._hp < this.mhp / 4; +}; + +Game_BattlerBase.prototype.isRestricted = function() { + return this.isAppeared() && this.restriction() > 0; +}; + +Game_BattlerBase.prototype.canInput = function() { + return this.isAppeared() && !this.isRestricted() && !this.isAutoBattle(); +}; + +Game_BattlerBase.prototype.canMove = function() { + return this.isAppeared() && this.restriction() < 4; +}; + +Game_BattlerBase.prototype.isConfused = function() { + return this.isAppeared() && this.restriction() >= 1 && this.restriction() <= 3; +}; + +Game_BattlerBase.prototype.confusionLevel = function() { + return this.isConfused() ? this.restriction() : 0; +}; + +Game_BattlerBase.prototype.isActor = function() { + return false; +}; + +Game_BattlerBase.prototype.isEnemy = function() { + return false; +}; + +Game_BattlerBase.prototype.sortStates = function() { + this._states.sort(function(a, b) { + var p1 = $dataStates[a].priority; + var p2 = $dataStates[b].priority; + if (p1 !== p2) { + return p2 - p1; + } + return a - b; + }); +}; + +Game_BattlerBase.prototype.restriction = function() { + return Math.max.apply(null, this.states().map(function(state) { + return state.restriction; + }).concat(0)); +}; + +Game_BattlerBase.prototype.addNewState = function(stateId) { + if (stateId === this.deathStateId()) { + this.die(); + } + var restricted = this.isRestricted(); + this._states.push(stateId); + this.sortStates(); + if (!restricted && this.isRestricted()) { + this.onRestrict(); + } +}; + +Game_BattlerBase.prototype.onRestrict = function() { +}; + +Game_BattlerBase.prototype.mostImportantStateText = function() { + var states = this.states(); + for (var i = 0; i < states.length; i++) { + if (states[i].message3) { + return states[i].message3; + } + } + return ''; +}; + +Game_BattlerBase.prototype.stateMotionIndex = function() { + var states = this.states(); + if (states.length > 0) { + return states[0].motion; + } else { + return 0; + } +}; + +Game_BattlerBase.prototype.stateOverlayIndex = function() { + var states = this.states(); + if (states.length > 0) { + return states[0].overlay; + } else { + return 0; + } +}; + +Game_BattlerBase.prototype.isSkillWtypeOk = function(skill) { + return true; +}; + +Game_BattlerBase.prototype.skillMpCost = function(skill) { + return Math.floor(skill.mpCost * this.mcr); +}; + +Game_BattlerBase.prototype.skillTpCost = function(skill) { + return skill.tpCost; +}; + +Game_BattlerBase.prototype.canPaySkillCost = function(skill) { + return this._tp >= this.skillTpCost(skill) && this._mp >= this.skillMpCost(skill); +}; + +Game_BattlerBase.prototype.paySkillCost = function(skill) { + this._mp -= this.skillMpCost(skill); + this._tp -= this.skillTpCost(skill); +}; + +Game_BattlerBase.prototype.isOccasionOk = function(item) { + if ($gameParty.inBattle()) { + return item.occasion === 0 || item.occasion === 1; + } else { + return item.occasion === 0 || item.occasion === 2; + } +}; + +Game_BattlerBase.prototype.meetsUsableItemConditions = function(item) { + return this.canMove() && this.isOccasionOk(item); +}; + +Game_BattlerBase.prototype.meetsSkillConditions = function(skill) { + return (this.meetsUsableItemConditions(skill) && + this.isSkillWtypeOk(skill) && this.canPaySkillCost(skill) && + !this.isSkillSealed(skill.id) && !this.isSkillTypeSealed(skill.stypeId)); +}; + +Game_BattlerBase.prototype.meetsItemConditions = function(item) { + return this.meetsUsableItemConditions(item) && $gameParty.hasItem(item); +}; + +Game_BattlerBase.prototype.canUse = function(item) { + if (!item) { + return false; + } else if (DataManager.isSkill(item)) { + return this.meetsSkillConditions(item); + } else if (DataManager.isItem(item)) { + return this.meetsItemConditions(item); + } else { + return false; + } +}; + +Game_BattlerBase.prototype.canEquip = function(item) { + if (!item) { + return false; + } else if (DataManager.isWeapon(item)) { + return this.canEquipWeapon(item); + } else if (DataManager.isArmor(item)) { + return this.canEquipArmor(item); + } else { + return false; + } +}; + +Game_BattlerBase.prototype.canEquipWeapon = function(item) { + return this.isEquipWtypeOk(item.wtypeId) && !this.isEquipTypeSealed(item.etypeId); +}; + +Game_BattlerBase.prototype.canEquipArmor = function(item) { + return this.isEquipAtypeOk(item.atypeId) && !this.isEquipTypeSealed(item.etypeId); +}; + +Game_BattlerBase.prototype.attackSkillId = function() { + return 1; +}; + +Game_BattlerBase.prototype.guardSkillId = function() { + return 2; +}; + +Game_BattlerBase.prototype.canAttack = function() { + return this.canUse($dataSkills[this.attackSkillId()]); +}; + +Game_BattlerBase.prototype.canGuard = function() { + return this.canUse($dataSkills[this.guardSkillId()]); +}; + +//----------------------------------------------------------------------------- +// Game_Battler +// +// The superclass of Game_Actor and Game_Enemy. It contains methods for sprites +// and actions. + +function Game_Battler() { + this.initialize.apply(this, arguments); +} + +Game_Battler.prototype = Object.create(Game_BattlerBase.prototype); +Game_Battler.prototype.constructor = Game_Battler; + +Game_Battler.prototype.initialize = function() { + Game_BattlerBase.prototype.initialize.call(this); +}; + +Game_Battler.prototype.initMembers = function() { + Game_BattlerBase.prototype.initMembers.call(this); + this._actions = []; + this._speed = 0; + this._result = new Game_ActionResult(); + this._actionState = ''; + this._lastTargetIndex = 0; + this._animations = []; + this._damagePopup = false; + this._effectType = null; + this._motionType = null; + this._weaponImageId = 0; + this._motionRefresh = false; + this._selected = false; +}; + +Game_Battler.prototype.clearAnimations = function() { + this._animations = []; +}; + +Game_Battler.prototype.clearDamagePopup = function() { + this._damagePopup = false; +}; + +Game_Battler.prototype.clearWeaponAnimation = function() { + this._weaponImageId = 0; +}; + +Game_Battler.prototype.clearEffect = function() { + this._effectType = null; +}; + +Game_Battler.prototype.clearMotion = function() { + this._motionType = null; + this._motionRefresh = false; +}; + +Game_Battler.prototype.requestEffect = function(effectType) { + this._effectType = effectType; +}; + +Game_Battler.prototype.requestMotion = function(motionType) { + this._motionType = motionType; +}; + +Game_Battler.prototype.requestMotionRefresh = function() { + this._motionRefresh = true; +}; + +Game_Battler.prototype.select = function() { + this._selected = true; +}; + +Game_Battler.prototype.deselect = function() { + this._selected = false; +}; + +Game_Battler.prototype.isAnimationRequested = function() { + return this._animations.length > 0; +}; + +Game_Battler.prototype.isDamagePopupRequested = function() { + return this._damagePopup; +}; + +Game_Battler.prototype.isEffectRequested = function() { + return !!this._effectType; +}; + +Game_Battler.prototype.isMotionRequested = function() { + return !!this._motionType; +}; + +Game_Battler.prototype.isWeaponAnimationRequested = function() { + return this._weaponImageId > 0; +}; + +Game_Battler.prototype.isMotionRefreshRequested = function() { + return this._motionRefresh; +}; + +Game_Battler.prototype.isSelected = function() { + return this._selected; +}; + +Game_Battler.prototype.effectType = function() { + return this._effectType; +}; + +Game_Battler.prototype.motionType = function() { + return this._motionType; +}; + +Game_Battler.prototype.weaponImageId = function() { + return this._weaponImageId; +}; + +Game_Battler.prototype.shiftAnimation = function() { + return this._animations.shift(); +}; + +Game_Battler.prototype.startAnimation = function(animationId, mirror, delay) { + var data = { animationId: animationId, mirror: mirror, delay: delay }; + this._animations.push(data); +}; + +Game_Battler.prototype.startDamagePopup = function() { + this._damagePopup = true; +}; + +Game_Battler.prototype.startWeaponAnimation = function(weaponImageId) { + this._weaponImageId = weaponImageId; +}; + +Game_Battler.prototype.action = function(index) { + return this._actions[index]; +}; + +Game_Battler.prototype.setAction = function(index, action) { + this._actions[index] = action; +}; + +Game_Battler.prototype.numActions = function() { + return this._actions.length; +}; + +Game_Battler.prototype.clearActions = function() { + this._actions = []; +}; + +Game_Battler.prototype.result = function() { + return this._result; +}; + +Game_Battler.prototype.clearResult = function() { + this._result.clear(); +}; + +Game_Battler.prototype.refresh = function() { + Game_BattlerBase.prototype.refresh.call(this); + if (this.hp === 0) { + this.addState(this.deathStateId()); + } else { + this.removeState(this.deathStateId()); + } +}; + +Game_Battler.prototype.addState = function(stateId) { + if (this.isStateAddable(stateId)) { + if (!this.isStateAffected(stateId)) { + this.addNewState(stateId); + this.refresh(); + } + this.resetStateCounts(stateId); + this._result.pushAddedState(stateId); + } +}; + +Game_Battler.prototype.isStateAddable = function(stateId) { + return (this.isAlive() && $dataStates[stateId] && + !this.isStateResist(stateId) && + !this._result.isStateRemoved(stateId) && + !this.isStateRestrict(stateId)); +}; + +Game_Battler.prototype.isStateRestrict = function(stateId) { + return $dataStates[stateId].removeByRestriction && this.isRestricted(); +}; + +Game_Battler.prototype.onRestrict = function() { + Game_BattlerBase.prototype.onRestrict.call(this); + this.clearActions(); + this.states().forEach(function(state) { + if (state.removeByRestriction) { + this.removeState(state.id); + } + }, this); +}; + +Game_Battler.prototype.removeState = function(stateId) { + if (this.isStateAffected(stateId)) { + if (stateId === this.deathStateId()) { + this.revive(); + } + this.eraseState(stateId); + this.refresh(); + this._result.pushRemovedState(stateId); + } +}; + +Game_Battler.prototype.escape = function() { + if ($gameParty.inBattle()) { + this.hide(); + } + this.clearActions(); + this.clearStates(); + SoundManager.playEscape(); +}; + +Game_Battler.prototype.addBuff = function(paramId, turns) { + if (this.isAlive()) { + this.increaseBuff(paramId); + if (this.isBuffAffected(paramId)) { + this.overwriteBuffTurns(paramId, turns); + } + this._result.pushAddedBuff(paramId); + this.refresh(); + } +}; + +Game_Battler.prototype.addDebuff = function(paramId, turns) { + if (this.isAlive()) { + this.decreaseBuff(paramId); + if (this.isDebuffAffected(paramId)) { + this.overwriteBuffTurns(paramId, turns); + } + this._result.pushAddedDebuff(paramId); + this.refresh(); + } +}; + +Game_Battler.prototype.removeBuff = function(paramId) { + if (this.isAlive() && this.isBuffOrDebuffAffected(paramId)) { + this.eraseBuff(paramId); + this._result.pushRemovedBuff(paramId); + this.refresh(); + } +}; + +Game_Battler.prototype.removeBattleStates = function() { + this.states().forEach(function(state) { + if (state.removeAtBattleEnd) { + this.removeState(state.id); + } + }, this); +}; + +Game_Battler.prototype.removeAllBuffs = function() { + for (var i = 0; i < this.buffLength(); i++) { + this.removeBuff(i); + } +}; + +Game_Battler.prototype.removeStatesAuto = function(timing) { + this.states().forEach(function(state) { + if (this.isStateExpired(state.id) && state.autoRemovalTiming === timing) { + this.removeState(state.id); + } + }, this); +}; + +Game_Battler.prototype.removeBuffsAuto = function() { + for (var i = 0; i < this.buffLength(); i++) { + if (this.isBuffExpired(i)) { + this.removeBuff(i); + } + } +}; + +Game_Battler.prototype.removeStatesByDamage = function() { + this.states().forEach(function(state) { + if (state.removeByDamage && Math.randomInt(100) < state.chanceByDamage) { + this.removeState(state.id); + } + }, this); +}; + +Game_Battler.prototype.makeActionTimes = function() { + return this.actionPlusSet().reduce(function(r, p) { + return Math.random() < p ? r + 1 : r; + }, 1); +}; + +Game_Battler.prototype.makeActions = function() { + this.clearActions(); + if (this.canMove()) { + var actionTimes = this.makeActionTimes(); + this._actions = []; + for (var i = 0; i < actionTimes; i++) { + this._actions.push(new Game_Action(this)); + } + } +}; + +Game_Battler.prototype.speed = function() { + return this._speed; +}; + +Game_Battler.prototype.makeSpeed = function() { + this._speed = Math.min.apply(null, this._actions.map(function(action) { + return action.speed(); + })) || 0; +}; + +Game_Battler.prototype.currentAction = function() { + return this._actions[0]; +}; + +Game_Battler.prototype.removeCurrentAction = function() { + this._actions.shift(); +}; + +Game_Battler.prototype.setLastTarget = function(target) { + if (target) { + this._lastTargetIndex = target.index(); + } else { + this._lastTargetIndex = 0; + } +}; + +Game_Battler.prototype.forceAction = function(skillId, targetIndex) { + this.clearActions(); + var action = new Game_Action(this, true); + action.setSkill(skillId); + if (targetIndex === -2) { + action.setTarget(this._lastTargetIndex); + } else if (targetIndex === -1) { + action.decideRandomTarget(); + } else { + action.setTarget(targetIndex); + } + this._actions.push(action); +}; + +Game_Battler.prototype.useItem = function(item) { + if (DataManager.isSkill(item)) { + this.paySkillCost(item); + } else if (DataManager.isItem(item)) { + this.consumeItem(item); + } +}; + +Game_Battler.prototype.consumeItem = function(item) { + $gameParty.consumeItem(item); +}; + +Game_Battler.prototype.gainHp = function(value) { + this._result.hpDamage = -value; + this._result.hpAffected = true; + this.setHp(this.hp + value); +}; + +Game_Battler.prototype.gainMp = function(value) { + this._result.mpDamage = -value; + this.setMp(this.mp + value); +}; + +Game_Battler.prototype.gainTp = function(value) { + this._result.tpDamage = -value; + this.setTp(this.tp + value); +}; + +Game_Battler.prototype.gainSilentTp = function(value) { + this.setTp(this.tp + value); +}; + +Game_Battler.prototype.initTp = function() { + this.setTp(Math.randomInt(25)); +}; + +Game_Battler.prototype.clearTp = function() { + this.setTp(0); +}; + +Game_Battler.prototype.chargeTpByDamage = function(damageRate) { + var value = Math.floor(50 * damageRate * this.tcr); + this.gainSilentTp(value); +}; + +Game_Battler.prototype.regenerateHp = function() { + var value = Math.floor(this.mhp * this.hrg); + value = Math.max(value, -this.maxSlipDamage()); + if (value !== 0) { + this.gainHp(value); + } +}; + +Game_Battler.prototype.maxSlipDamage = function() { + return $dataSystem.optSlipDeath ? this.hp : Math.max(this.hp - 1, 0); +}; + +Game_Battler.prototype.regenerateMp = function() { + var value = Math.floor(this.mmp * this.mrg); + if (value !== 0) { + this.gainMp(value); + } +}; + +Game_Battler.prototype.regenerateTp = function() { + var value = Math.floor(100 * this.trg); + this.gainSilentTp(value); +}; + +Game_Battler.prototype.regenerateAll = function() { + if (this.isAlive()) { + this.regenerateHp(); + this.regenerateMp(); + this.regenerateTp(); + } +}; + +Game_Battler.prototype.onBattleStart = function() { + this.setActionState('undecided'); + this.clearMotion(); + if (!this.isPreserveTp()) { + this.initTp(); + } +}; + +Game_Battler.prototype.onAllActionsEnd = function() { + this.clearResult(); + this.removeStatesAuto(1); + this.removeBuffsAuto(); +}; + +Game_Battler.prototype.onTurnEnd = function() { + this.clearResult(); + this.regenerateAll(); + this.updateStateTurns(); + this.updateBuffTurns(); + this.removeStatesAuto(2); +}; + +Game_Battler.prototype.onBattleEnd = function() { + this.clearResult(); + this.removeBattleStates(); + this.removeAllBuffs(); + this.clearActions(); + if (!this.isPreserveTp()) { + this.clearTp(); + } + this.appear(); +}; + +Game_Battler.prototype.onDamage = function(value) { + this.removeStatesByDamage(); + this.chargeTpByDamage(value / this.mhp); +}; + +Game_Battler.prototype.setActionState = function(actionState) { + this._actionState = actionState; + this.requestMotionRefresh(); +}; + +Game_Battler.prototype.isUndecided = function() { + return this._actionState === 'undecided'; +}; + +Game_Battler.prototype.isInputting = function() { + return this._actionState === 'inputting'; +}; + +Game_Battler.prototype.isWaiting = function() { + return this._actionState === 'waiting'; +}; + +Game_Battler.prototype.isActing = function() { + return this._actionState === 'acting'; +}; + +Game_Battler.prototype.isChanting = function() { + if (this.isWaiting()) { + return this._actions.some(function(action) { + return action.isMagicSkill(); + }); + } + return false; +}; + +Game_Battler.prototype.isGuardWaiting = function() { + if (this.isWaiting()) { + return this._actions.some(function(action) { + return action.isGuard(); + }); + } + return false; +}; + +Game_Battler.prototype.performActionStart = function(action) { + if (!action.isGuard()) { + this.setActionState('acting'); + } +}; + +Game_Battler.prototype.performAction = function(action) { +}; + +Game_Battler.prototype.performActionEnd = function() { + this.setActionState('done'); +}; + +Game_Battler.prototype.performDamage = function() { +}; + +Game_Battler.prototype.performMiss = function() { + SoundManager.playMiss(); +}; + +Game_Battler.prototype.performRecovery = function() { + SoundManager.playRecovery(); +}; + +Game_Battler.prototype.performEvasion = function() { + SoundManager.playEvasion(); +}; + +Game_Battler.prototype.performMagicEvasion = function() { + SoundManager.playMagicEvasion(); +}; + +Game_Battler.prototype.performCounter = function() { + SoundManager.playEvasion(); +}; + +Game_Battler.prototype.performReflection = function() { + SoundManager.playReflection(); +}; + +Game_Battler.prototype.performSubstitute = function(target) { +}; + +Game_Battler.prototype.performCollapse = function() { +}; + +//----------------------------------------------------------------------------- +// Game_Actor +// +// The game object class for an actor. + +function Game_Actor() { + this.initialize.apply(this, arguments); +} + +Game_Actor.prototype = Object.create(Game_Battler.prototype); +Game_Actor.prototype.constructor = Game_Actor; + +Object.defineProperty(Game_Actor.prototype, 'level', { + get: function() { + return this._level; + }, + configurable: true +}); + +Game_Actor.prototype.initialize = function(actorId) { + Game_Battler.prototype.initialize.call(this); + this.setup(actorId); +}; + +Game_Actor.prototype.initMembers = function() { + Game_Battler.prototype.initMembers.call(this); + this._actorId = 0; + this._name = ''; + this._nickname = ''; + this._classId = 0; + this._level = 0; + this._characterName = ''; + this._characterIndex = 0; + this._faceName = ''; + this._faceIndex = 0; + this._battlerName = ''; + this._exp = {}; + this._skills = []; + this._equips = []; + this._actionInputIndex = 0; + this._lastMenuSkill = new Game_Item(); + this._lastBattleSkill = new Game_Item(); + this._lastCommandSymbol = ''; +}; + +Game_Actor.prototype.setup = function(actorId) { + var actor = $dataActors[actorId]; + this._actorId = actorId; + this._name = actor.name; + this._nickname = actor.nickname; + this._profile = actor.profile; + this._classId = actor.classId; + this._level = actor.initialLevel; + this.initImages(); + this.initExp(); + this.initSkills(); + this.initEquips(actor.equips); + this.clearParamPlus(); + this.recoverAll(); +}; + +Game_Actor.prototype.actorId = function() { + return this._actorId; +}; + +Game_Actor.prototype.actor = function() { + return $dataActors[this._actorId]; +}; + +Game_Actor.prototype.name = function() { + return this._name; +}; + +Game_Actor.prototype.setName = function(name) { + this._name = name; +}; + +Game_Actor.prototype.nickname = function() { + return this._nickname; +}; + +Game_Actor.prototype.setNickname = function(nickname) { + this._nickname = nickname; +}; + +Game_Actor.prototype.profile = function() { + return this._profile; +}; + +Game_Actor.prototype.setProfile = function(profile) { + this._profile = profile; +}; + +Game_Actor.prototype.characterName = function() { + return this._characterName; +}; + +Game_Actor.prototype.characterIndex = function() { + return this._characterIndex; +}; + +Game_Actor.prototype.faceName = function() { + return this._faceName; +}; + +Game_Actor.prototype.faceIndex = function() { + return this._faceIndex; +}; + +Game_Actor.prototype.battlerName = function() { + return this._battlerName; +}; + +Game_Actor.prototype.clearStates = function() { + Game_Battler.prototype.clearStates.call(this); + this._stateSteps = {}; +}; + +Game_Actor.prototype.eraseState = function(stateId) { + Game_Battler.prototype.eraseState.call(this, stateId); + delete this._stateSteps[stateId]; +}; + +Game_Actor.prototype.resetStateCounts = function(stateId) { + Game_Battler.prototype.resetStateCounts.call(this, stateId); + this._stateSteps[stateId] = $dataStates[stateId].stepsToRemove; +}; + +Game_Actor.prototype.initImages = function() { + var actor = this.actor(); + this._characterName = actor.characterName; + this._characterIndex = actor.characterIndex; + this._faceName = actor.faceName; + this._faceIndex = actor.faceIndex; + this._battlerName = actor.battlerName; +}; + +Game_Actor.prototype.expForLevel = function(level) { + var c = this.currentClass(); + var basis = c.expParams[0]; + var extra = c.expParams[1]; + var acc_a = c.expParams[2]; + var acc_b = c.expParams[3]; + return Math.round(basis*(Math.pow(level-1, 0.9+acc_a/250))*level* + (level+1)/(6+Math.pow(level,2)/50/acc_b)+(level-1)*extra); +}; + +Game_Actor.prototype.initExp = function() { + this._exp[this._classId] = this.currentLevelExp(); +}; + +Game_Actor.prototype.currentExp = function() { + return this._exp[this._classId]; +}; + +Game_Actor.prototype.currentLevelExp = function() { + return this.expForLevel(this._level); +}; + +Game_Actor.prototype.nextLevelExp = function() { + return this.expForLevel(this._level + 1); +}; + +Game_Actor.prototype.nextRequiredExp = function() { + return this.nextLevelExp() - this.currentExp(); +}; + +Game_Actor.prototype.maxLevel = function() { + return this.actor().maxLevel; +}; + +Game_Actor.prototype.isMaxLevel = function() { + return this._level >= this.maxLevel(); +}; + +Game_Actor.prototype.initSkills = function() { + this._skills = []; + this.currentClass().learnings.forEach(function(learning) { + if (learning.level <= this._level) { + this.learnSkill(learning.skillId); + } + }, this); +}; + +Game_Actor.prototype.initEquips = function(equips) { + var slots = this.equipSlots(); + var maxSlots = slots.length; + this._equips = []; + for (var i = 0; i < maxSlots; i++) { + this._equips[i] = new Game_Item(); + } + for (var j = 0; j < equips.length; j++) { + if (j < maxSlots) { + this._equips[j].setEquip(slots[j] === 1, equips[j]); + } + } + this.releaseUnequippableItems(true); + this.refresh(); +}; + +Game_Actor.prototype.equipSlots = function() { + var slots = []; + for (var i = 1; i < $dataSystem.equipTypes.length; i++) { + slots.push(i); + } + if (slots.length >= 2 && this.isDualWield()) { + slots[1] = 1; + } + return slots; +}; + +Game_Actor.prototype.equips = function() { + return this._equips.map(function(item) { + return item.object(); + }); +}; + +Game_Actor.prototype.weapons = function() { + return this.equips().filter(function(item) { + return item && DataManager.isWeapon(item); + }); +}; + +Game_Actor.prototype.armors = function() { + return this.equips().filter(function(item) { + return item && DataManager.isArmor(item); + }); +}; + +Game_Actor.prototype.hasWeapon = function(weapon) { + return this.weapons().contains(weapon); +}; + +Game_Actor.prototype.hasArmor = function(armor) { + return this.armors().contains(armor); +}; + +Game_Actor.prototype.isEquipChangeOk = function(slotId) { + return (!this.isEquipTypeLocked(this.equipSlots()[slotId]) && + !this.isEquipTypeSealed(this.equipSlots()[slotId])); +}; + +Game_Actor.prototype.changeEquip = function(slotId, item) { + if (this.tradeItemWithParty(item, this.equips()[slotId]) && + (!item || this.equipSlots()[slotId] === item.etypeId)) { + this._equips[slotId].setObject(item); + this.refresh(); + } +}; + +Game_Actor.prototype.forceChangeEquip = function(slotId, item) { + this._equips[slotId].setObject(item); + this.releaseUnequippableItems(true); + this.refresh(); +}; + +Game_Actor.prototype.tradeItemWithParty = function(newItem, oldItem) { + if (newItem && !$gameParty.hasItem(newItem)) { + return false; + } else { + $gameParty.gainItem(oldItem, 1); + $gameParty.loseItem(newItem, 1); + return true; + } +}; + +Game_Actor.prototype.changeEquipById = function(etypeId, itemId) { + var slotId = etypeId - 1; + if (this.equipSlots()[slotId] === 1) { + this.changeEquip(slotId, $dataWeapons[itemId]); + } else { + this.changeEquip(slotId, $dataArmors[itemId]); + } +}; + +Game_Actor.prototype.isEquipped = function(item) { + return this.equips().contains(item); +}; + +Game_Actor.prototype.discardEquip = function(item) { + var slotId = this.equips().indexOf(item); + if (slotId >= 0) { + this._equips[slotId].setObject(null); + } +}; + +Game_Actor.prototype.releaseUnequippableItems = function(forcing) { + for (;;) { + var slots = this.equipSlots(); + var equips = this.equips(); + var changed = false; + for (var i = 0; i < equips.length; i++) { + var item = equips[i]; + if (item && (!this.canEquip(item) || item.etypeId !== slots[i])) { + if (!forcing) { + this.tradeItemWithParty(null, item); + } + this._equips[i].setObject(null); + changed = true; + } + } + if (!changed) { + break; + } + } +}; + +Game_Actor.prototype.clearEquipments = function() { + var maxSlots = this.equipSlots().length; + for (var i = 0; i < maxSlots; i++) { + if (this.isEquipChangeOk(i)) { + this.changeEquip(i, null); + } + } +}; + +Game_Actor.prototype.optimizeEquipments = function() { + var maxSlots = this.equipSlots().length; + this.clearEquipments(); + for (var i = 0; i < maxSlots; i++) { + if (this.isEquipChangeOk(i)) { + this.changeEquip(i, this.bestEquipItem(i)); + } + } +}; + +Game_Actor.prototype.bestEquipItem = function(slotId) { + var etypeId = this.equipSlots()[slotId]; + var items = $gameParty.equipItems().filter(function(item) { + return item.etypeId === etypeId && this.canEquip(item); + }, this); + var bestItem = null; + var bestPerformance = -1000; + for (var i = 0; i < items.length; i++) { + var performance = this.calcEquipItemPerformance(items[i]); + if (performance > bestPerformance) { + bestPerformance = performance; + bestItem = items[i]; + } + } + return bestItem; +}; + +Game_Actor.prototype.calcEquipItemPerformance = function(item) { + return item.params.reduce(function(a, b) { + return a + b; + }); +}; + +Game_Actor.prototype.isSkillWtypeOk = function(skill) { + var wtypeId1 = skill.requiredWtypeId1; + var wtypeId2 = skill.requiredWtypeId2; + if ((wtypeId1 === 0 && wtypeId2 === 0) || + (wtypeId1 > 0 && this.isWtypeEquipped(wtypeId1)) || + (wtypeId2 > 0 && this.isWtypeEquipped(wtypeId2))) { + return true; + } else { + return false; + } +}; + +Game_Actor.prototype.isWtypeEquipped = function(wtypeId) { + return this.weapons().some(function(weapon) { + return weapon.wtypeId === wtypeId; + }); +}; + +Game_Actor.prototype.refresh = function() { + this.releaseUnequippableItems(false); + Game_Battler.prototype.refresh.call(this); +}; + +Game_Actor.prototype.isActor = function() { + return true; +}; + +Game_Actor.prototype.friendsUnit = function() { + return $gameParty; +}; + +Game_Actor.prototype.opponentsUnit = function() { + return $gameTroop; +}; + +Game_Actor.prototype.index = function() { + return $gameParty.members().indexOf(this); +}; + +Game_Actor.prototype.isBattleMember = function() { + return $gameParty.battleMembers().contains(this); +}; + +Game_Actor.prototype.isFormationChangeOk = function() { + return true; +}; + +Game_Actor.prototype.currentClass = function() { + return $dataClasses[this._classId]; +}; + +Game_Actor.prototype.isClass = function(gameClass) { + return gameClass && this._classId === gameClass.id; +}; + +Game_Actor.prototype.skills = function() { + var list = []; + this._skills.concat(this.addedSkills()).forEach(function(id) { + if (!list.contains($dataSkills[id])) { + list.push($dataSkills[id]); + } + }); + return list; +}; + +Game_Actor.prototype.usableSkills = function() { + return this.skills().filter(function(skill) { + return this.canUse(skill); + }, this); +}; + +Game_Actor.prototype.traitObjects = function() { + var objects = Game_Battler.prototype.traitObjects.call(this); + objects = objects.concat([this.actor(), this.currentClass()]); + var equips = this.equips(); + for (var i = 0; i < equips.length; i++) { + var item = equips[i]; + if (item) { + objects.push(item); + } + } + return objects; +}; + +Game_Actor.prototype.attackElements = function() { + var set = Game_Battler.prototype.attackElements.call(this); + if (this.hasNoWeapons() && !set.contains(this.bareHandsElementId())) { + set.push(this.bareHandsElementId()); + } + return set; +}; + +Game_Actor.prototype.hasNoWeapons = function() { + return this.weapons().length === 0; +}; + +Game_Actor.prototype.bareHandsElementId = function() { + return 1; +}; + +Game_Actor.prototype.paramMax = function(paramId) { + if (paramId === 0) { + return 9999; // MHP + } + return Game_Battler.prototype.paramMax.call(this, paramId); +}; + +Game_Actor.prototype.paramBase = function(paramId) { + return this.currentClass().params[paramId][this._level]; +}; + +Game_Actor.prototype.paramPlus = function(paramId) { + var value = Game_Battler.prototype.paramPlus.call(this, paramId); + var equips = this.equips(); + for (var i = 0; i < equips.length; i++) { + var item = equips[i]; + if (item) { + value += item.params[paramId]; + } + } + return value; +}; + +Game_Actor.prototype.attackAnimationId1 = function() { + if (this.hasNoWeapons()) { + return this.bareHandsAnimationId(); + } else { + var weapons = this.weapons(); + return weapons[0] ? weapons[0].animationId : 0; + } +}; + +Game_Actor.prototype.attackAnimationId2 = function() { + var weapons = this.weapons(); + return weapons[1] ? weapons[1].animationId : 0; +}; + +Game_Actor.prototype.bareHandsAnimationId = function() { + return 1; +}; + +Game_Actor.prototype.changeExp = function(exp, show) { + this._exp[this._classId] = Math.max(exp, 0); + var lastLevel = this._level; + var lastSkills = this.skills(); + while (!this.isMaxLevel() && this.currentExp() >= this.nextLevelExp()) { + this.levelUp(); + } + while (this.currentExp() < this.currentLevelExp()) { + this.levelDown(); + } + if (show && this._level > lastLevel) { + this.displayLevelUp(this.findNewSkills(lastSkills)); + } + this.refresh(); +}; + +Game_Actor.prototype.levelUp = function() { + this._level++; + this.currentClass().learnings.forEach(function(learning) { + if (learning.level === this._level) { + this.learnSkill(learning.skillId); + } + }, this); +}; + +Game_Actor.prototype.levelDown = function() { + this._level--; +}; + +Game_Actor.prototype.findNewSkills = function(lastSkills) { + var newSkills = this.skills(); + for (var i = 0; i < lastSkills.length; i++) { + var index = newSkills.indexOf(lastSkills[i]); + if (index >= 0) { + newSkills.splice(index, 1); + } + } + return newSkills; +}; + +Game_Actor.prototype.displayLevelUp = function(newSkills) { + var text = TextManager.levelUp.format(this._name, TextManager.level, this._level); + $gameMessage.newPage(); + $gameMessage.add(text); + newSkills.forEach(function(skill) { + $gameMessage.add(TextManager.obtainSkill.format(skill.name)); + }); +}; + +Game_Actor.prototype.gainExp = function(exp) { + var newExp = this.currentExp() + Math.round(exp * this.finalExpRate()); + this.changeExp(newExp, this.shouldDisplayLevelUp()); +}; + +Game_Actor.prototype.finalExpRate = function() { + return this.exr * (this.isBattleMember() ? 1 : this.benchMembersExpRate()); +}; + +Game_Actor.prototype.benchMembersExpRate = function() { + return $dataSystem.optExtraExp ? 1 : 0; +}; + +Game_Actor.prototype.shouldDisplayLevelUp = function() { + return true; +}; + +Game_Actor.prototype.changeLevel = function(level, show) { + level = level.clamp(1, this.maxLevel()); + this.changeExp(this.expForLevel(level), show); +}; + +Game_Actor.prototype.learnSkill = function(skillId) { + if (!this.isLearnedSkill(skillId)) { + this._skills.push(skillId); + this._skills.sort(function(a, b) { + return a - b; + }); + } +}; + +Game_Actor.prototype.forgetSkill = function(skillId) { + var index = this._skills.indexOf(skillId); + if (index >= 0) { + this._skills.splice(index, 1); + } +}; + +Game_Actor.prototype.isLearnedSkill = function(skillId) { + return this._skills.contains(skillId); +}; + +Game_Actor.prototype.changeClass = function(classId, keepExp) { + if (keepExp) { + this._exp[classId] = this.currentExp(); + } + this._classId = classId; + this.changeExp(this._exp[this._classId] || 0, false); + this.refresh(); +}; + +Game_Actor.prototype.setCharacterImage = function(characterName, characterIndex) { + this._characterName = characterName; + this._characterIndex = characterIndex; +}; + +Game_Actor.prototype.setFaceImage = function(faceName, faceIndex) { + this._faceName = faceName; + this._faceIndex = faceIndex; +}; + +Game_Actor.prototype.setBattlerImage = function(battlerName) { + this._battlerName = battlerName; +}; + +Game_Actor.prototype.isSpriteVisible = function() { + return $gameSystem.isSideView(); +}; + +Game_Actor.prototype.startAnimation = function(animationId, mirror, delay) { + mirror = !mirror; + Game_Battler.prototype.startAnimation.call(this, animationId, mirror, delay); +}; + +Game_Actor.prototype.performActionStart = function(action) { + Game_Battler.prototype.performActionStart.call(this, action); +}; + +Game_Actor.prototype.performAction = function(action) { + Game_Battler.prototype.performAction.call(this, action); + if (action.isAttack()) { + this.performAttack(); + } else if (action.isGuard()) { + this.requestMotion('guard'); + } else if (action.isMagicSkill()) { + this.requestMotion('spell'); + } else if (action.isSkill()) { + this.requestMotion('skill'); + } else if (action.isItem()) { + this.requestMotion('item'); + } +}; + +Game_Actor.prototype.performActionEnd = function() { + Game_Battler.prototype.performActionEnd.call(this); +}; + +Game_Actor.prototype.performAttack = function() { + var weapons = this.weapons(); + var wtypeId = weapons[0] ? weapons[0].wtypeId : 0; + var attackMotion = $dataSystem.attackMotions[wtypeId]; + if (attackMotion) { + if (attackMotion.type === 0) { + this.requestMotion('thrust'); + } else if (attackMotion.type === 1) { + this.requestMotion('swing'); + } else if (attackMotion.type === 2) { + this.requestMotion('missile'); + } + this.startWeaponAnimation(attackMotion.weaponImageId); + } +}; + +Game_Actor.prototype.performDamage = function() { + Game_Battler.prototype.performDamage.call(this); + if (this.isSpriteVisible()) { + this.requestMotion('damage'); + } else { + $gameScreen.startShake(5, 5, 10); + } + SoundManager.playActorDamage(); +}; + +Game_Actor.prototype.performEvasion = function() { + Game_Battler.prototype.performEvasion.call(this); + this.requestMotion('evade'); +}; + +Game_Actor.prototype.performMagicEvasion = function() { + Game_Battler.prototype.performMagicEvasion.call(this); + this.requestMotion('evade'); +}; + +Game_Actor.prototype.performCounter = function() { + Game_Battler.prototype.performCounter.call(this); + this.performAttack(); +}; + +Game_Actor.prototype.performCollapse = function() { + Game_Battler.prototype.performCollapse.call(this); + if ($gameParty.inBattle()) { + SoundManager.playActorCollapse(); + } +}; + +Game_Actor.prototype.performVictory = function() { + if (this.canMove()) { + this.requestMotion('victory'); + } +}; + +Game_Actor.prototype.performEscape = function() { + if (this.canMove()) { + this.requestMotion('escape'); + } +}; + +Game_Actor.prototype.makeActionList = function() { + var list = []; + var action = new Game_Action(this); + action.setAttack(); + list.push(action); + this.usableSkills().forEach(function(skill) { + action = new Game_Action(this); + action.setSkill(skill.id); + list.push(action); + }, this); + return list; +}; + +Game_Actor.prototype.makeAutoBattleActions = function() { + for (var i = 0; i < this.numActions(); i++) { + var list = this.makeActionList(); + var maxValue = Number.MIN_VALUE; + for (var j = 0; j < list.length; j++) { + var value = list[j].evaluate(); + if (value > maxValue) { + maxValue = value; + this.setAction(i, list[j]); + } + } + } + this.setActionState('waiting'); +}; + +Game_Actor.prototype.makeConfusionActions = function() { + for (var i = 0; i < this.numActions(); i++) { + this.action(i).setConfusion(); + } + this.setActionState('waiting'); +}; + +Game_Actor.prototype.makeActions = function() { + Game_Battler.prototype.makeActions.call(this); + if (this.numActions() > 0) { + this.setActionState('undecided'); + } else { + this.setActionState('waiting'); + } + if (this.isAutoBattle()) { + this.makeAutoBattleActions(); + } else if (this.isConfused()) { + this.makeConfusionActions(); + } +}; + +Game_Actor.prototype.onPlayerWalk = function() { + this.clearResult(); + this.checkFloorEffect(); + if ($gamePlayer.isNormal()) { + this.turnEndOnMap(); + this.states().forEach(function(state) { + this.updateStateSteps(state); + }, this); + this.showAddedStates(); + this.showRemovedStates(); + } +}; + +Game_Actor.prototype.updateStateSteps = function(state) { + if (state.removeByWalking) { + if (this._stateSteps[state.id] > 0) { + if (--this._stateSteps[state.id] === 0) { + this.removeState(state.id); + } + } + } +}; + +Game_Actor.prototype.showAddedStates = function() { + this.result().addedStateObjects().forEach(function(state) { + if (state.message1) { + $gameMessage.add(this._name + state.message1); + } + }, this); +}; + +Game_Actor.prototype.showRemovedStates = function() { + this.result().removedStateObjects().forEach(function(state) { + if (state.message4) { + $gameMessage.add(this._name + state.message4); + } + }, this); +}; + +Game_Actor.prototype.stepsForTurn = function() { + return 20; +}; + +Game_Actor.prototype.turnEndOnMap = function() { + if ($gameParty.steps() % this.stepsForTurn() === 0) { + this.onTurnEnd(); + if (this.result().hpDamage > 0) { + this.performMapDamage(); + } + } +}; + +Game_Actor.prototype.checkFloorEffect = function() { + if ($gamePlayer.isOnDamageFloor()) { + this.executeFloorDamage(); + } +}; + +Game_Actor.prototype.executeFloorDamage = function() { + var damage = Math.floor(this.basicFloorDamage() * this.fdr); + damage = Math.min(damage, this.maxFloorDamage()); + this.gainHp(-damage); + if (damage > 0) { + this.performMapDamage(); + } +}; + +Game_Actor.prototype.basicFloorDamage = function() { + return 10; +}; + +Game_Actor.prototype.maxFloorDamage = function() { + return $dataSystem.optFloorDeath ? this.hp : Math.max(this.hp - 1, 0); +}; + +Game_Actor.prototype.performMapDamage = function() { + if (!$gameParty.inBattle()) { + $gameScreen.startFlashForDamage(); + } +}; + +Game_Actor.prototype.clearActions = function() { + Game_Battler.prototype.clearActions.call(this); + this._actionInputIndex = 0; +}; + +Game_Actor.prototype.inputtingAction = function() { + return this.action(this._actionInputIndex); +}; + +Game_Actor.prototype.selectNextCommand = function() { + if (this._actionInputIndex < this.numActions() - 1) { + this._actionInputIndex++; + return true; + } else { + return false; + } +}; + +Game_Actor.prototype.selectPreviousCommand = function() { + if (this._actionInputIndex > 0) { + this._actionInputIndex--; + return true; + } else { + return false; + } +}; + +Game_Actor.prototype.lastMenuSkill = function() { + return this._lastMenuSkill.object(); +}; + +Game_Actor.prototype.setLastMenuSkill = function(skill) { + this._lastMenuSkill.setObject(skill); +}; + +Game_Actor.prototype.lastBattleSkill = function() { + return this._lastBattleSkill.object(); +}; + +Game_Actor.prototype.setLastBattleSkill = function(skill) { + this._lastBattleSkill.setObject(skill); +}; + +Game_Actor.prototype.lastCommandSymbol = function() { + return this._lastCommandSymbol; +}; + +Game_Actor.prototype.setLastCommandSymbol = function(symbol) { + this._lastCommandSymbol = symbol; +}; + +//----------------------------------------------------------------------------- +// Game_Enemy +// +// The game object class for an enemy. + +function Game_Enemy() { + this.initialize.apply(this, arguments); +} + +Game_Enemy.prototype = Object.create(Game_Battler.prototype); +Game_Enemy.prototype.constructor = Game_Enemy; + +Game_Enemy.prototype.initialize = function(enemyId, x, y) { + Game_Battler.prototype.initialize.call(this); + this.setup(enemyId, x, y); +}; + +Game_Enemy.prototype.initMembers = function() { + Game_Battler.prototype.initMembers.call(this); + this._enemyId = 0; + this._letter = ''; + this._plural = false; + this._screenX = 0; + this._screenY = 0; +}; + +Game_Enemy.prototype.setup = function(enemyId, x, y) { + this._enemyId = enemyId; + this._screenX = x; + this._screenY = y; + this.recoverAll(); +}; + +Game_Enemy.prototype.isEnemy = function() { + return true; +}; + +Game_Enemy.prototype.friendsUnit = function() { + return $gameTroop; +}; + +Game_Enemy.prototype.opponentsUnit = function() { + return $gameParty; +}; + +Game_Enemy.prototype.index = function() { + return $gameTroop.members().indexOf(this); +}; + +Game_Enemy.prototype.isBattleMember = function() { + return this.index() >= 0; +}; + +Game_Enemy.prototype.enemyId = function() { + return this._enemyId; +}; + +Game_Enemy.prototype.enemy = function() { + return $dataEnemies[this._enemyId]; +}; + +Game_Enemy.prototype.traitObjects = function() { + return Game_Battler.prototype.traitObjects.call(this).concat(this.enemy()); +}; + +Game_Enemy.prototype.paramBase = function(paramId) { + return this.enemy().params[paramId]; +}; + +Game_Enemy.prototype.exp = function() { + return this.enemy().exp; +}; + +Game_Enemy.prototype.gold = function() { + return this.enemy().gold; +}; + +Game_Enemy.prototype.makeDropItems = function() { + return this.enemy().dropItems.reduce(function(r, di) { + if (di.kind > 0 && Math.random() * di.denominator < this.dropItemRate()) { + return r.concat(this.itemObject(di.kind, di.dataId)); + } else { + return r; + } + }.bind(this), []); +}; + +Game_Enemy.prototype.dropItemRate = function() { + return $gameParty.hasDropItemDouble() ? 2 : 1; +}; + +Game_Enemy.prototype.itemObject = function(kind, dataId) { + if (kind === 1) { + return $dataItems[dataId]; + } else if (kind === 2) { + return $dataWeapons[dataId]; + } else if (kind === 3) { + return $dataArmors[dataId]; + } else { + return null; + } +}; + +Game_Enemy.prototype.isSpriteVisible = function() { + return true; +}; + +Game_Enemy.prototype.screenX = function() { + return this._screenX; +}; + +Game_Enemy.prototype.screenY = function() { + return this._screenY; +}; + +Game_Enemy.prototype.battlerName = function() { + return this.enemy().battlerName; +}; + +Game_Enemy.prototype.battlerHue = function() { + return this.enemy().battlerHue; +}; + +Game_Enemy.prototype.originalName = function() { + return this.enemy().name; +}; + +Game_Enemy.prototype.name = function() { + return this.originalName() + (this._plural ? this._letter : ''); +}; + +Game_Enemy.prototype.isLetterEmpty = function() { + return this._letter === ''; +}; + +Game_Enemy.prototype.setLetter = function(letter) { + this._letter = letter; +}; + +Game_Enemy.prototype.setPlural = function(plural) { + this._plural = plural; +}; + +Game_Enemy.prototype.performActionStart = function(action) { + Game_Battler.prototype.performActionStart.call(this, action); + this.requestEffect('whiten'); +}; + +Game_Enemy.prototype.performAction = function(action) { + Game_Battler.prototype.performAction.call(this, action); +}; + +Game_Enemy.prototype.performActionEnd = function() { + Game_Battler.prototype.performActionEnd.call(this); +}; + +Game_Enemy.prototype.performDamage = function() { + Game_Battler.prototype.performDamage.call(this); + SoundManager.playEnemyDamage(); + this.requestEffect('blink'); +}; + +Game_Enemy.prototype.performCollapse = function() { + Game_Battler.prototype.performCollapse.call(this); + switch (this.collapseType()) { + case 0: + this.requestEffect('collapse'); + SoundManager.playEnemyCollapse(); + break; + case 1: + this.requestEffect('bossCollapse'); + SoundManager.playBossCollapse1(); + break; + case 2: + this.requestEffect('instantCollapse'); + break; + } +}; + +Game_Enemy.prototype.transform = function(enemyId) { + var name = this.originalName(); + this._enemyId = enemyId; + if (this.originalName() !== name) { + this._letter = ''; + this._plural = false; + } + this.refresh(); + if (this.numActions() > 0) { + this.makeActions(); + } +}; + +Game_Enemy.prototype.meetsCondition = function(action) { + var param1 = action.conditionParam1; + var param2 = action.conditionParam2; + switch (action.conditionType) { + case 1: + return this.meetsTurnCondition(param1, param2); + case 2: + return this.meetsHpCondition(param1, param2); + case 3: + return this.meetsMpCondition(param1, param2); + case 4: + return this.meetsStateCondition(param1); + case 5: + return this.meetsPartyLevelCondition(param1); + case 6: + return this.meetsSwitchCondition(param1); + default: + return true; + } +}; + +Game_Enemy.prototype.meetsTurnCondition = function(param1, param2) { + var n = $gameTroop.turnCount(); + if (param2 === 0) { + return n === param1; + } else { + return n > 0 && n >= param1 && n % param2 === param1 % param2; + } +}; + +Game_Enemy.prototype.meetsHpCondition = function(param1, param2) { + return this.hpRate() >= param1 && this.hpRate() <= param2; +}; + +Game_Enemy.prototype.meetsMpCondition = function(param1, param2) { + return this.mpRate() >= param1 && this.mpRate() <= param2; +}; + +Game_Enemy.prototype.meetsStateCondition = function(param) { + return this.isStateAffected(param); +}; + +Game_Enemy.prototype.meetsPartyLevelCondition = function(param) { + return $gameParty.highestLevel() >= param; +}; + +Game_Enemy.prototype.meetsSwitchCondition = function(param) { + return $gameSwitches.value(param); +}; + +Game_Enemy.prototype.isActionValid = function(action) { + return this.meetsCondition(action) && this.canUse($dataSkills[action.skillId]); +}; + +Game_Enemy.prototype.selectAction = function(actionList, ratingZero) { + var sum = actionList.reduce(function(r, a) { + return r + a.rating - ratingZero; + }, 0); + if (sum > 0) { + var value = Math.randomInt(sum); + for (var i = 0; i < actionList.length; i++) { + var action = actionList[i]; + value -= action.rating - ratingZero; + if (value < 0) { + return action; + } + } + } else { + return null; + } +}; + +Game_Enemy.prototype.selectAllActions = function(actionList) { + var ratingMax = Math.max.apply(null, actionList.map(function(a) { + return a.rating; + })); + var ratingZero = ratingMax - 3; + actionList = actionList.filter(function(a) { + return a.rating > ratingZero; + }); + for (var i = 0; i < this.numActions(); i++) { + this.action(i).setEnemyAction(this.selectAction(actionList, ratingZero)); + } +}; + +Game_Enemy.prototype.makeActions = function() { + Game_Battler.prototype.makeActions.call(this); + if (this.numActions() > 0) { + var actionList = this.enemy().actions.filter(function(a) { + return this.isActionValid(a); + }, this); + if (actionList.length > 0) { + this.selectAllActions(actionList); + } + } + this.setActionState('waiting'); +}; + +//----------------------------------------------------------------------------- +// Game_Actors +// +// The wrapper class for an actor array. + +function Game_Actors() { + this.initialize.apply(this, arguments); +} + +Game_Actors.prototype.initialize = function() { + this._data = []; +}; + +Game_Actors.prototype.actor = function(actorId) { + if ($dataActors[actorId]) { + if (!this._data[actorId]) { + this._data[actorId] = new Game_Actor(actorId); + } + return this._data[actorId]; + } + return null; +}; + +//----------------------------------------------------------------------------- +// Game_Unit +// +// The superclass of Game_Party and Game_Troop. + +function Game_Unit() { + this.initialize.apply(this, arguments); +} + +Game_Unit.prototype.initialize = function() { + this._inBattle = false; +}; + +Game_Unit.prototype.inBattle = function() { + return this._inBattle; +}; + +Game_Unit.prototype.members = function() { + return []; +}; + +Game_Unit.prototype.aliveMembers = function() { + return this.members().filter(function(member) { + return member.isAlive(); + }); +}; + +Game_Unit.prototype.deadMembers = function() { + return this.members().filter(function(member) { + return member.isDead(); + }); +}; + +Game_Unit.prototype.movableMembers = function() { + return this.members().filter(function(member) { + return member.canMove(); + }); +}; + +Game_Unit.prototype.clearActions = function() { + return this.members().forEach(function(member) { + return member.clearActions(); + }); +}; + +Game_Unit.prototype.agility = function() { + var members = this.members(); + if (members.length === 0) { + return 1; + } + var sum = members.reduce(function(r, member) { + return r + member.agi; + }, 0); + return sum / members.length; +}; + +Game_Unit.prototype.tgrSum = function() { + return this.aliveMembers().reduce(function(r, member) { + return r + member.tgr; + }, 0); +}; + +Game_Unit.prototype.randomTarget = function() { + var tgrRand = Math.random() * this.tgrSum(); + var target = null; + this.aliveMembers().forEach(function(member) { + tgrRand -= member.tgr; + if (tgrRand <= 0 && !target) { + target = member; + } + }); + return target; +}; + +Game_Unit.prototype.randomDeadTarget = function() { + var members = this.deadMembers(); + if (members.length === 0) { + return null; + } + return members[Math.floor(Math.random() * members.length)]; +}; + +Game_Unit.prototype.smoothTarget = function(index) { + if (index < 0) { + index = 0; + } + var member = this.members()[index]; + return (member && member.isAlive()) ? member : this.aliveMembers()[0]; +}; + +Game_Unit.prototype.smoothDeadTarget = function(index) { + if (index < 0) { + index = 0; + } + var member = this.members()[index]; + return (member && member.isDead()) ? member : this.deadMembers()[0]; +}; + +Game_Unit.prototype.clearResults = function() { + this.members().forEach(function(member) { + member.clearResult(); + }); +}; + +Game_Unit.prototype.onBattleStart = function() { + this.members().forEach(function(member) { + member.onBattleStart(); + }); + this._inBattle = true; +}; + +Game_Unit.prototype.onBattleEnd = function() { + this._inBattle = false; + this.members().forEach(function(member) { + member.onBattleEnd(); + }); +}; + +Game_Unit.prototype.makeActions = function() { + this.members().forEach(function(member) { + member.makeActions(); + }); +}; + +Game_Unit.prototype.select = function(activeMember) { + this.members().forEach(function(member) { + if (member === activeMember) { + member.select(); + } else { + member.deselect(); + } + }); +}; + +Game_Unit.prototype.isAllDead = function() { + return this.aliveMembers().length === 0; +}; + +Game_Unit.prototype.substituteBattler = function() { + var members = this.members(); + for (var i = 0; i < members.length; i++) { + if (members[i].isSubstitute()) { + return members[i]; + } + } +}; + +//----------------------------------------------------------------------------- +// Game_Party +// +// The game object class for the party. Information such as gold and items is +// included. + +function Game_Party() { + this.initialize.apply(this, arguments); +} + +Game_Party.prototype = Object.create(Game_Unit.prototype); +Game_Party.prototype.constructor = Game_Party; + +Game_Party.ABILITY_ENCOUNTER_HALF = 0; +Game_Party.ABILITY_ENCOUNTER_NONE = 1; +Game_Party.ABILITY_CANCEL_SURPRISE = 2; +Game_Party.ABILITY_RAISE_PREEMPTIVE = 3; +Game_Party.ABILITY_GOLD_DOUBLE = 4; +Game_Party.ABILITY_DROP_ITEM_DOUBLE = 5; + +Game_Party.prototype.initialize = function() { + Game_Unit.prototype.initialize.call(this); + this._gold = 0; + this._steps = 0; + this._lastItem = new Game_Item(); + this._menuActorId = 0; + this._targetActorId = 0; + this._actors = []; + this.initAllItems(); +}; + +Game_Party.prototype.initAllItems = function() { + this._items = {}; + this._weapons = {}; + this._armors = {}; +}; + +Game_Party.prototype.exists = function() { + return this._actors.length > 0; +}; + +Game_Party.prototype.size = function() { + return this.members().length; +}; + +Game_Party.prototype.isEmpty = function() { + return this.size() === 0; +}; + +Game_Party.prototype.members = function() { + return this.inBattle() ? this.battleMembers() : this.allMembers(); +}; + +Game_Party.prototype.allMembers = function() { + return this._actors.map(function(id) { + return $gameActors.actor(id); + }); +}; + +Game_Party.prototype.battleMembers = function() { + return this.allMembers().slice(0, this.maxBattleMembers()).filter(function(actor) { + return actor.isAppeared(); + }); +}; + +Game_Party.prototype.maxBattleMembers = function() { + return 4; +}; + +Game_Party.prototype.leader = function() { + return this.battleMembers()[0]; +}; + +Game_Party.prototype.reviveBattleMembers = function() { + this.battleMembers().forEach(function(actor) { + if (actor.isDead()) { + actor.setHp(1); + } + }); +}; + +Game_Party.prototype.items = function() { + var list = []; + for (var id in this._items) { + list.push($dataItems[id]); + } + return list; +}; + +Game_Party.prototype.weapons = function() { + var list = []; + for (var id in this._weapons) { + list.push($dataWeapons[id]); + } + return list; +}; + +Game_Party.prototype.armors = function() { + var list = []; + for (var id in this._armors) { + list.push($dataArmors[id]); + } + return list; +}; + +Game_Party.prototype.equipItems = function() { + return this.weapons().concat(this.armors()); +}; + +Game_Party.prototype.allItems = function() { + return this.items().concat(this.equipItems()); +}; + +Game_Party.prototype.itemContainer = function(item) { + if (!item) { + return null; + } else if (DataManager.isItem(item)) { + return this._items; + } else if (DataManager.isWeapon(item)) { + return this._weapons; + } else if (DataManager.isArmor(item)) { + return this._armors; + } else { + return null; + } +}; + +Game_Party.prototype.setupStartingMembers = function() { + this._actors = []; + $dataSystem.partyMembers.forEach(function(actorId) { + if ($gameActors.actor(actorId)) { + this._actors.push(actorId); + } + }, this); +}; + +Game_Party.prototype.name = function() { + var numBattleMembers = this.battleMembers().length; + if (numBattleMembers === 0) { + return ''; + } else if (numBattleMembers === 1) { + return this.leader().name(); + } else { + return TextManager.partyName.format(this.leader().name()); + } +}; + +Game_Party.prototype.setupBattleTest = function() { + this.setupBattleTestMembers(); + this.setupBattleTestItems(); +}; + +Game_Party.prototype.setupBattleTestMembers = function() { + $dataSystem.testBattlers.forEach(function(battler) { + var actor = $gameActors.actor(battler.actorId); + if (actor) { + actor.changeLevel(battler.level, false); + actor.initEquips(battler.equips); + actor.recoverAll(); + this.addActor(battler.actorId); + } + }, this); +}; + +Game_Party.prototype.setupBattleTestItems = function() { + $dataItems.forEach(function(item) { + if (item && item.name.length > 0) { + this.gainItem(item, this.maxItems(item)); + } + }, this); +}; + +Game_Party.prototype.highestLevel = function() { + return Math.max.apply(null, this.members().map(function(actor) { + return actor.level; + })); +}; + +Game_Party.prototype.addActor = function(actorId) { + if (!this._actors.contains(actorId)) { + this._actors.push(actorId); + $gamePlayer.refresh(); + $gameMap.requestRefresh(); + } +}; + +Game_Party.prototype.removeActor = function(actorId) { + if (this._actors.contains(actorId)) { + this._actors.splice(this._actors.indexOf(actorId), 1); + $gamePlayer.refresh(); + $gameMap.requestRefresh(); + } +}; + +Game_Party.prototype.gold = function() { + return this._gold; +}; + +Game_Party.prototype.gainGold = function(amount) { + this._gold = (this._gold + amount).clamp(0, this.maxGold()); +}; + +Game_Party.prototype.loseGold = function(amount) { + this.gainGold(-amount); +}; + +Game_Party.prototype.maxGold = function() { + return 99999999; +}; + +Game_Party.prototype.steps = function() { + return this._steps; +}; + +Game_Party.prototype.increaseSteps = function() { + this._steps++; +}; + +Game_Party.prototype.numItems = function(item) { + var container = this.itemContainer(item); + return container ? container[item.id] || 0 : 0; +}; + +Game_Party.prototype.maxItems = function(item) { + return 99; +}; + +Game_Party.prototype.hasMaxItems = function(item) { + return this.numItems(item) >= this.maxItems(item); +}; + +Game_Party.prototype.hasItem = function(item, includeEquip) { + if (includeEquip === undefined) { + includeEquip = false; + } + if (this.numItems(item) > 0) { + return true; + } else if (includeEquip && this.isAnyMemberEquipped(item)) { + return true; + } else { + return false; + } +}; + +Game_Party.prototype.isAnyMemberEquipped = function(item) { + return this.members().some(function(actor) { + return actor.equips().contains(item); + }); +}; + +Game_Party.prototype.gainItem = function(item, amount, includeEquip) { + var container = this.itemContainer(item); + if (container) { + var lastNumber = this.numItems(item); + var newNumber = lastNumber + amount; + container[item.id] = newNumber.clamp(0, this.maxItems(item)); + if (container[item.id] === 0) { + delete container[item.id]; + } + if (includeEquip && newNumber < 0) { + this.discardMembersEquip(item, -newNumber); + } + $gameMap.requestRefresh(); + } +}; + +Game_Party.prototype.discardMembersEquip = function(item, amount) { + var n = amount; + this.members().forEach(function(actor) { + while (n > 0 && actor.isEquipped(item)) { + actor.discardEquip(item); + n--; + } + }); +}; + +Game_Party.prototype.loseItem = function(item, amount, includeEquip) { + this.gainItem(item, -amount, includeEquip); +}; + +Game_Party.prototype.consumeItem = function(item) { + if (DataManager.isItem(item) && item.consumable) { + this.loseItem(item, 1); + } +}; + +Game_Party.prototype.canUse = function(item) { + return this.members().some(function(actor) { + return actor.canUse(item); + }); +}; + +Game_Party.prototype.canInput = function() { + return this.members().some(function(actor) { + return actor.canInput(); + }); +}; + +Game_Party.prototype.isAllDead = function() { + if (Game_Unit.prototype.isAllDead.call(this)) { + return this.inBattle() || !this.isEmpty(); + } else { + return false; + } +}; + +Game_Party.prototype.onPlayerWalk = function() { + this.members().forEach(function(actor) { + return actor.onPlayerWalk(); + }); +}; + +Game_Party.prototype.menuActor = function() { + var actor = $gameActors.actor(this._menuActorId); + if (!this.members().contains(actor)) { + actor = this.members()[0]; + } + return actor; +}; + +Game_Party.prototype.setMenuActor = function(actor) { + this._menuActorId = actor.actorId(); +}; + +Game_Party.prototype.makeMenuActorNext = function() { + var index = this.members().indexOf(this.menuActor()); + if (index >= 0) { + index = (index + 1) % this.members().length; + this.setMenuActor(this.members()[index]); + } else { + this.setMenuActor(this.members()[0]); + } +}; + +Game_Party.prototype.makeMenuActorPrevious = function() { + var index = this.members().indexOf(this.menuActor()); + if (index >= 0) { + index = (index + this.members().length - 1) % this.members().length; + this.setMenuActor(this.members()[index]); + } else { + this.setMenuActor(this.members()[0]); + } +}; + +Game_Party.prototype.targetActor = function() { + var actor = $gameActors.actor(this._targetActorId); + if (!this.members().contains(actor)) { + actor = this.members()[0]; + } + return actor; +}; + +Game_Party.prototype.setTargetActor = function(actor) { + this._targetActorId = actor.actorId(); +}; + +Game_Party.prototype.lastItem = function() { + return this._lastItem.object(); +}; + +Game_Party.prototype.setLastItem = function(item) { + this._lastItem.setObject(item); +}; + +Game_Party.prototype.swapOrder = function(index1, index2) { + var temp = this._actors[index1]; + this._actors[index1] = this._actors[index2]; + this._actors[index2] = temp; + $gamePlayer.refresh(); +}; + +Game_Party.prototype.charactersForSavefile = function() { + return this.battleMembers().map(function(actor) { + return [actor.characterName(), actor.characterIndex()]; + }); +}; + +Game_Party.prototype.facesForSavefile = function() { + return this.battleMembers().map(function(actor) { + return [actor.faceName(), actor.faceIndex()]; + }); +}; + +Game_Party.prototype.partyAbility = function(abilityId) { + return this.battleMembers().some(function(actor) { + return actor.partyAbility(abilityId); + }); +}; + +Game_Party.prototype.hasEncounterHalf = function() { + return this.partyAbility(Game_Party.ABILITY_ENCOUNTER_HALF); +}; + +Game_Party.prototype.hasEncounterNone = function() { + return this.partyAbility(Game_Party.ABILITY_ENCOUNTER_NONE); +}; + +Game_Party.prototype.hasCancelSurprise = function() { + return this.partyAbility(Game_Party.ABILITY_CANCEL_SURPRISE); +}; + +Game_Party.prototype.hasRaisePreemptive = function() { + return this.partyAbility(Game_Party.ABILITY_RAISE_PREEMPTIVE); +}; + +Game_Party.prototype.hasGoldDouble = function() { + return this.partyAbility(Game_Party.ABILITY_GOLD_DOUBLE); +}; + +Game_Party.prototype.hasDropItemDouble = function() { + return this.partyAbility(Game_Party.ABILITY_DROP_ITEM_DOUBLE); +}; + +Game_Party.prototype.ratePreemptive = function(troopAgi) { + var rate = this.agility() >= troopAgi ? 0.05 : 0.03; + if (this.hasRaisePreemptive()) { + rate *= 4; + } + return rate; +}; + +Game_Party.prototype.rateSurprise = function(troopAgi) { + var rate = this.agility() >= troopAgi ? 0.03 : 0.05; + if (this.hasCancelSurprise()) { + rate = 0; + } + return rate; +}; + +Game_Party.prototype.performVictory = function() { + this.members().forEach(function(actor) { + actor.performVictory(); + }); +}; + +Game_Party.prototype.performEscape = function() { + this.members().forEach(function(actor) { + actor.performEscape(); + }); +}; + +Game_Party.prototype.removeBattleStates = function() { + this.members().forEach(function(actor) { + actor.removeBattleStates(); + }); +}; + +Game_Party.prototype.requestMotionRefresh = function() { + this.members().forEach(function(actor) { + actor.requestMotionRefresh(); + }); +}; + +//----------------------------------------------------------------------------- +// Game_Troop +// +// The game object class for a troop and the battle-related data. + +function Game_Troop() { + this.initialize.apply(this, arguments); +} + +Game_Troop.prototype = Object.create(Game_Unit.prototype); +Game_Troop.prototype.constructor = Game_Troop; + +Game_Troop.LETTER_TABLE_HALF = [ + ' A',' B',' C',' D',' E',' F',' G',' H',' I',' J',' K',' L',' M', + ' N',' O',' P',' Q',' R',' S',' T',' U',' V',' W',' X',' Y',' Z' +]; +Game_Troop.LETTER_TABLE_FULL = [ + 'A','B','C','D','E','F','G','H','I','J','K','L','M', + 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z' +]; + +Game_Troop.prototype.initialize = function() { + Game_Unit.prototype.initialize.call(this); + this._interpreter = new Game_Interpreter(); + this.clear(); +}; + +Game_Troop.prototype.isEventRunning = function() { + return this._interpreter.isRunning(); +}; + +Game_Troop.prototype.updateInterpreter = function() { + this._interpreter.update(); +}; + +Game_Troop.prototype.turnCount = function() { + return this._turnCount; +}; + +Game_Troop.prototype.members = function() { + return this._enemies; +}; + +Game_Troop.prototype.clear = function() { + this._interpreter.clear(); + this._troopId = 0; + this._eventFlags = {}; + this._enemies = []; + this._turnCount = 0; + this._namesCount = {}; +}; + +Game_Troop.prototype.troop = function() { + return $dataTroops[this._troopId]; +}; + +Game_Troop.prototype.setup = function(troopId) { + this.clear(); + this._troopId = troopId; + this._enemies = []; + this.troop().members.forEach(function(member) { + if ($dataEnemies[member.enemyId]) { + var enemyId = member.enemyId; + var x = member.x; + var y = member.y; + var enemy = new Game_Enemy(enemyId, x, y); + if (member.hidden) { + enemy.hide(); + } + this._enemies.push(enemy); + } + }, this); + this.makeUniqueNames(); +}; + +Game_Troop.prototype.makeUniqueNames = function() { + var table = this.letterTable(); + this.members().forEach(function(enemy) { + if (enemy.isAlive() && enemy.isLetterEmpty()) { + var name = enemy.originalName(); + var n = this._namesCount[name] || 0; + enemy.setLetter(table[n % table.length]); + this._namesCount[name] = n + 1; + } + }, this); + this.members().forEach(function(enemy) { + var name = enemy.originalName(); + if (this._namesCount[name] >= 2) { + enemy.setPlural(true); + } + }, this); +}; + +Game_Troop.prototype.letterTable = function() { + return $gameSystem.isCJK() ? Game_Troop.LETTER_TABLE_FULL : + Game_Troop.LETTER_TABLE_HALF; +}; + +Game_Troop.prototype.enemyNames = function() { + var names = []; + this.members().forEach(function(enemy) { + var name = enemy.originalName(); + if (enemy.isAlive() && !names.contains(name)) { + names.push(name); + } + }); + return names; +}; + +Game_Troop.prototype.meetsConditions = function(page) { + var c = page.conditions; + if (!c.turnEnding && !c.turnValid && !c.enemyValid && + !c.actorValid && !c.switchValid) { + return false; // Conditions not set + } + if (c.turnEnding) { + if (!BattleManager.isTurnEnd()) { + return false; + } + } + if (c.turnValid) { + var n = this._turnCount; + var a = c.turnA; + var b = c.turnB; + if ((b === 0 && n !== a)) { + return false; + } + if ((b > 0 && (n < 1 || n < a || n % b !== a % b))) { + return false; + } + } + if (c.enemyValid) { + var enemy = $gameTroop.members()[c.enemyIndex]; + if (!enemy || enemy.hpRate() * 100 > c.enemyHp) { + return false; + } + } + if (c.actorValid) { + var actor = $gameActors.actor(c.actorId); + if (!actor || actor.hpRate() * 100 > c.actorHp) { + return false; + } + } + if (c.switchValid) { + if (!$gameSwitches.value(c.switchId)) { + return false; + } + } + return true; +}; + +Game_Troop.prototype.setupBattleEvent = function() { + if (!this._interpreter.isRunning()) { + if (this._interpreter.setupReservedCommonEvent()) { + return; + } + var pages = this.troop().pages; + for (var i = 0; i < pages.length; i++) { + var page = pages[i]; + if (this.meetsConditions(page) && !this._eventFlags[i]) { + this._interpreter.setup(page.list); + if (page.span <= 1) { + this._eventFlags[i] = true; + } + break; + } + } + } +}; + +Game_Troop.prototype.increaseTurn = function() { + var pages = this.troop().pages; + for (var i = 0; i < pages.length; i++) { + var page = pages[i]; + if (page.span === 1) { + this._eventFlags[i] = false; + } + } + this._turnCount++; +}; + +Game_Troop.prototype.expTotal = function() { + return this.deadMembers().reduce(function(r, enemy) { + return r + enemy.exp(); + }, 0); +}; + +Game_Troop.prototype.goldTotal = function() { + return this.deadMembers().reduce(function(r, enemy) { + return r + enemy.gold(); + }, 0) * this.goldRate(); +}; + +Game_Troop.prototype.goldRate = function() { + return $gameParty.hasGoldDouble() ? 2 : 1; +}; + +Game_Troop.prototype.makeDropItems = function() { + return this.deadMembers().reduce(function(r, enemy) { + return r.concat(enemy.makeDropItems()); + }, []); +}; + +//----------------------------------------------------------------------------- +// Game_Map +// +// The game object class for a map. It contains scrolling and passage +// determination functions. + +function Game_Map() { + this.initialize.apply(this, arguments); +} + +Game_Map.prototype.initialize = function() { + this._interpreter = new Game_Interpreter(); + this._mapId = 0; + this._tilesetId = 0; + this._events = []; + this._commonEvents = []; + this._vehicles = []; + this._displayX = 0; + this._displayY = 0; + this._nameDisplay = true; + this._scrollDirection = 2; + this._scrollRest = 0; + this._scrollSpeed = 4; + this._parallaxName = ''; + this._parallaxZero = false; + this._parallaxLoopX = false; + this._parallaxLoopY = false; + this._parallaxSx = 0; + this._parallaxSy = 0; + this._parallaxX = 0; + this._parallaxY = 0; + this._battleback1Name = null; + this._battleback2Name = null; + this.createVehicles(); +}; + +Game_Map.prototype.setup = function(mapId) { + if (!$dataMap) { + throw new Error('The map data is not available'); + } + this._mapId = mapId; + this._tilesetId = $dataMap.tilesetId; + this._displayX = 0; + this._displayY = 0; + this.refereshVehicles(); + this.setupEvents(); + this.setupScroll(); + this.setupParallax(); + this.setupBattleback(); + this._needsRefresh = false; +}; + +Game_Map.prototype.isEventRunning = function() { + return this._interpreter.isRunning() || this.isAnyEventStarting(); +}; + +Game_Map.prototype.tileWidth = function() { + return 48; +}; + +Game_Map.prototype.tileHeight = function() { + return 48; +}; + +Game_Map.prototype.mapId = function() { + return this._mapId; +}; + +Game_Map.prototype.tilesetId = function() { + return this._tilesetId; +}; + +Game_Map.prototype.displayX = function() { + return this._displayX; +}; + +Game_Map.prototype.displayY = function() { + return this._displayY; +}; + +Game_Map.prototype.parallaxName = function() { + return this._parallaxName; +}; + +Game_Map.prototype.battleback1Name = function() { + return this._battleback1Name; +}; + +Game_Map.prototype.battleback2Name = function() { + return this._battleback2Name; +}; + +Game_Map.prototype.requestRefresh = function(mapId) { + this._needsRefresh = true; +}; + +Game_Map.prototype.isNameDisplayEnabled = function() { + return this._nameDisplay; +}; + +Game_Map.prototype.disableNameDisplay = function() { + this._nameDisplay = false; +}; + +Game_Map.prototype.enableNameDisplay = function() { + this._nameDisplay = true; +}; + +Game_Map.prototype.createVehicles = function() { + this._vehicles = []; + this._vehicles[0] = new Game_Vehicle('boat'); + this._vehicles[1] = new Game_Vehicle('ship'); + this._vehicles[2] = new Game_Vehicle('airship'); +}; + +Game_Map.prototype.refereshVehicles = function() { + this._vehicles.forEach(function(vehicle) { + vehicle.refresh(); + }); +}; + +Game_Map.prototype.vehicles = function() { + return this._vehicles; +}; + +Game_Map.prototype.vehicle = function(type) { + if (type === 0 || type === 'boat') { + return this.boat(); + } else if (type === 1 || type === 'ship') { + return this.ship(); + } else if (type === 2 || type === 'airship') { + return this.airship(); + } else { + return null; + } +}; + +Game_Map.prototype.boat = function() { + return this._vehicles[0]; +}; + +Game_Map.prototype.ship = function() { + return this._vehicles[1]; +}; + +Game_Map.prototype.airship = function() { + return this._vehicles[2]; +}; + +Game_Map.prototype.setupEvents = function() { + this._events = []; + for (var i = 0; i < $dataMap.events.length; i++) { + if ($dataMap.events[i]) { + this._events[i] = new Game_Event(this._mapId, i); + } + } + this._commonEvents = this.parallelCommonEvents().map(function(commonEvent) { + return new Game_CommonEvent(commonEvent.id); + }); + this.refreshTileEvents(); +}; + +Game_Map.prototype.events = function() { + return this._events.filter(function(event) { + return !!event; + }); +}; + +Game_Map.prototype.event = function(eventId) { + return this._events[eventId]; +}; + +Game_Map.prototype.eraseEvent = function(eventId) { + this._events[eventId].erase(); +}; + +Game_Map.prototype.parallelCommonEvents = function() { + return $dataCommonEvents.filter(function(commonEvent) { + return commonEvent && commonEvent.trigger === 2; + }); +}; + +Game_Map.prototype.setupScroll = function() { + this._scrollDirection = 2; + this._scrollRest = 0; + this._scrollSpeed = 4; +}; + +Game_Map.prototype.setupParallax = function() { + this._parallaxName = $dataMap.parallaxName || ''; + this._parallaxZero = ImageManager.isZeroParallax(this._parallaxName); + this._parallaxLoopX = $dataMap.parallaxLoopX; + this._parallaxLoopY = $dataMap.parallaxLoopY; + this._parallaxSx = $dataMap.parallaxSx; + this._parallaxSy = $dataMap.parallaxSy; + this._parallaxX = 0; + this._parallaxY = 0; +}; + +Game_Map.prototype.setupBattleback = function() { + if ($dataMap.specifyBattleback) { + this._battleback1Name = $dataMap.battleback1Name; + this._battleback2Name = $dataMap.battleback2Name; + } else { + this._battleback1Name = null; + this._battleback2Name = null; + } +}; + +Game_Map.prototype.setDisplayPos = function(x, y) { + if (this.isLoopHorizontal()) { + this._displayX = x.mod(this.width()); + this._parallaxX = x; + } else { + var endX = this.width() - this.screenTileX(); + this._displayX = endX < 0 ? endX / 2 : x.clamp(0, endX); + this._parallaxX = this._displayX; + } + if (this.isLoopVertical()) { + this._displayY = y.mod(this.height()); + this._parallaxY = y; + } else { + var endY = this.height() - this.screenTileY(); + this._displayY = endY < 0 ? endY / 2 : y.clamp(0, endY); + this._parallaxY = this._displayY; + } +}; + +Game_Map.prototype.parallaxOx = function() { + if (this._parallaxZero) { + return this._parallaxX * this.tileWidth(); + } else if (this._parallaxLoopX) { + return this._parallaxX * this.tileWidth() / 2; + } else { + return 0; + } +}; + +Game_Map.prototype.parallaxOy = function() { + if (this._parallaxZero) { + return this._parallaxY * this.tileHeight(); + } else if (this._parallaxLoopY) { + return this._parallaxY * this.tileHeight() / 2; + } else { + return 0; + } +}; + +Game_Map.prototype.tileset = function() { + return $dataTilesets[this._tilesetId]; +}; + +Game_Map.prototype.tilesetFlags = function() { + var tileset = this.tileset(); + if (tileset) { + return tileset.flags; + } else { + return []; + } +}; + +Game_Map.prototype.displayName = function() { + return $dataMap.displayName; +}; + +Game_Map.prototype.width = function() { + return $dataMap.width; +}; + +Game_Map.prototype.height = function() { + return $dataMap.height; +}; + +Game_Map.prototype.data = function() { + return $dataMap.data; +}; + +Game_Map.prototype.isLoopHorizontal = function() { + return $dataMap.scrollType === 2 || $dataMap.scrollType === 3; +}; + +Game_Map.prototype.isLoopVertical = function() { + return $dataMap.scrollType === 1 || $dataMap.scrollType === 3; +}; + +Game_Map.prototype.isDashDisabled = function() { + return $dataMap.disableDashing; +}; + +Game_Map.prototype.encounterList = function() { + return $dataMap.encounterList; +}; + +Game_Map.prototype.encounterStep = function() { + return $dataMap.encounterStep; +}; + +Game_Map.prototype.isOverworld = function() { + return this.tileset() && this.tileset().mode === 0; +}; + +Game_Map.prototype.screenTileX = function() { + return Graphics.width / this.tileWidth(); +}; + +Game_Map.prototype.screenTileY = function() { + return Graphics.height / this.tileHeight(); +}; + +Game_Map.prototype.adjustX = function(x) { + if (this.isLoopHorizontal() && x < this._displayX - + (this.width() - this.screenTileX()) / 2) { + return x - this._displayX + $dataMap.width; + } else { + return x - this._displayX; + } +}; + +Game_Map.prototype.adjustY = function(y) { + if (this.isLoopVertical() && y < this._displayY - + (this.height() - this.screenTileY()) / 2) { + return y - this._displayY + $dataMap.height; + } else { + return y - this._displayY; + } +}; + +Game_Map.prototype.roundX = function(x) { + return this.isLoopHorizontal() ? x.mod(this.width()) : x; +}; + +Game_Map.prototype.roundY = function(y) { + return this.isLoopVertical() ? y.mod(this.height()) : y; +}; + +Game_Map.prototype.xWithDirection = function(x, d) { + return x + (d === 6 ? 1 : d === 4 ? -1 : 0); +}; + +Game_Map.prototype.yWithDirection = function(y, d) { + return y + (d === 2 ? 1 : d === 8 ? -1 : 0); +}; + +Game_Map.prototype.roundXWithDirection = function(x, d) { + return this.roundX(x + (d === 6 ? 1 : d === 4 ? -1 : 0)); +}; + +Game_Map.prototype.roundYWithDirection = function(y, d) { + return this.roundY(y + (d === 2 ? 1 : d === 8 ? -1 : 0)); +}; + +Game_Map.prototype.deltaX = function(x1, x2) { + var result = x1 - x2; + if (this.isLoopHorizontal() && Math.abs(result) > this.width() / 2) { + if (result < 0) { + result += this.width(); + } else { + result -= this.width(); + } + } + return result; +}; + +Game_Map.prototype.deltaY = function(y1, y2) { + var result = y1 - y2; + if (this.isLoopVertical() && Math.abs(result) > this.height() / 2) { + if (result < 0) { + result += this.height(); + } else { + result -= this.height(); + } + } + return result; +}; + +Game_Map.prototype.distance = function(x1, y1, x2, y2) { + return Math.abs(this.deltaX(x1, x2)) + Math.abs(this.deltaY(y1, y2)); +}; + +Game_Map.prototype.canvasToMapX = function(x) { + var tileWidth = this.tileWidth(); + var originX = this._displayX * tileWidth; + var mapX = Math.floor((originX + x) / tileWidth); + return this.roundX(mapX); +}; + +Game_Map.prototype.canvasToMapY = function(y) { + var tileHeight = this.tileHeight(); + var originY = this._displayY * tileHeight; + var mapY = Math.floor((originY + y) / tileHeight); + return this.roundY(mapY); +}; + +Game_Map.prototype.autoplay = function() { + if ($dataMap.autoplayBgm) { + AudioManager.playBgm($dataMap.bgm); + } + if ($dataMap.autoplayBgs) { + AudioManager.playBgs($dataMap.bgs); + } +}; + +Game_Map.prototype.refreshIfNeeded = function() { + if (this._needsRefresh) { + this.refresh(); + } +}; + +Game_Map.prototype.refresh = function() { + this.events().forEach(function(event) { + event.refresh(); + }); + this._commonEvents.forEach(function(event) { + event.refresh(); + }); + this.refreshTileEvents(); + this._needsRefresh = false; +}; + +Game_Map.prototype.refreshTileEvents = function() { + this.tileEvents = this.events().filter(function(event) { + return event.isTile(); + }); +}; + +Game_Map.prototype.eventsXy = function(x, y) { + return this.events().filter(function(event) { + return event.pos(x, y); + }); +}; + +Game_Map.prototype.eventsXyNt = function(x, y) { + return this.events().filter(function(event) { + return event.posNt(x, y); + }); +}; + +Game_Map.prototype.tileEventsXy = function(x, y) { + return this.tileEvents.filter(function(event) { + return event.posNt(x, y); + }); +}; + +Game_Map.prototype.eventIdXy = function(x, y) { + var list = this.eventsXy(x, y); + return list.length === 0 ? 0 : list[0].eventId(); +}; + +Game_Map.prototype.scrollDown = function(distance) { + if (this.isLoopVertical()) { + this._displayY += distance; + this._displayY %= $dataMap.height; + if (this._parallaxLoopY) { + this._parallaxY += distance; + } + } else if (this.height() >= this.screenTileY()) { + var lastY = this._displayY; + this._displayY = Math.min(this._displayY + distance, + this.height() - this.screenTileY()); + this._parallaxY += this._displayY - lastY; + } +}; + +Game_Map.prototype.scrollLeft = function(distance) { + if (this.isLoopHorizontal()) { + this._displayX += $dataMap.width - distance; + this._displayX %= $dataMap.width; + if (this._parallaxLoopX) { + this._parallaxX -= distance; + } + } else if (this.width() >= this.screenTileX()) { + var lastX = this._displayX; + this._displayX = Math.max(this._displayX - distance, 0); + this._parallaxX += this._displayX - lastX; + } +}; + +Game_Map.prototype.scrollRight = function(distance) { + if (this.isLoopHorizontal()) { + this._displayX += distance; + this._displayX %= $dataMap.width; + if (this._parallaxLoopX) { + this._parallaxX += distance; + } + } else if (this.width() >= this.screenTileX()) { + var lastX = this._displayX; + this._displayX = Math.min(this._displayX + distance, + this.width() - this.screenTileX()); + this._parallaxX += this._displayX - lastX; + } +}; + +Game_Map.prototype.scrollUp = function(distance) { + if (this.isLoopVertical()) { + this._displayY += $dataMap.height - distance; + this._displayY %= $dataMap.height; + if (this._parallaxLoopY) { + this._parallaxY -= distance; + } + } else if (this.height() >= this.screenTileY()) { + var lastY = this._displayY; + this._displayY = Math.max(this._displayY - distance, 0); + this._parallaxY += this._displayY - lastY; + } +}; + +Game_Map.prototype.isValid = function(x, y) { + return x >= 0 && x < this.width() && y >= 0 && y < this.height(); +}; + +Game_Map.prototype.checkPassage = function(x, y, bit) { + var flags = this.tilesetFlags(); + var tiles = this.allTiles(x, y); + for (var i = 0; i < tiles.length; i++) { + var flag = flags[tiles[i]]; + if ((flag & 0x10) !== 0) // [*] No effect on passage + continue; + if ((flag & bit) === 0) // [o] Passable + return true; + if ((flag & bit) === bit) // [x] Impassable + return false; + } + return false; +}; + +Game_Map.prototype.tileId = function(x, y, z) { + var width = $dataMap.width; + var height = $dataMap.height; + return $dataMap.data[(z * height + y) * width + x] || 0; +}; + +Game_Map.prototype.layeredTiles = function(x, y) { + var tiles = []; + for (var i = 0; i < 4; i++) { + tiles.push(this.tileId(x, y, 3 - i)); + } + return tiles; +}; + +Game_Map.prototype.allTiles = function(x, y) { + var tiles = this.tileEventsXy(x, y).map(function(event) { + return event.tileId(); + }); + return tiles.concat(this.layeredTiles(x, y)); +}; + +Game_Map.prototype.autotileType = function(x, y, z) { + var tileId = this.tileId(x, y, z); + return tileId >= 2048 ? Math.floor((tileId - 2048) / 48) : -1; +}; + +Game_Map.prototype.isPassable = function(x, y, d) { + return this.checkPassage(x, y, (1 << (d / 2 - 1)) & 0x0f); +}; + +Game_Map.prototype.isBoatPassable = function(x, y) { + return this.checkPassage(x, y, 0x0200); +}; + +Game_Map.prototype.isShipPassable = function(x, y) { + return this.checkPassage(x, y, 0x0400); +}; + +Game_Map.prototype.isAirshipLandOk = function(x, y) { + return this.checkPassage(x, y, 0x0800) && this.checkPassage(x, y, 0x0f); +}; + +Game_Map.prototype.checkLayeredTilesFlags = function(x, y, bit) { + var flags = this.tilesetFlags(); + return this.layeredTiles(x, y).some(function(tileId) { + return (flags[tileId] & bit) !== 0; + }); +}; + +Game_Map.prototype.isLadder = function(x, y) { + return this.isValid(x, y) && this.checkLayeredTilesFlags(x, y, 0x20); +}; + +Game_Map.prototype.isBush = function(x, y) { + return this.isValid(x, y) && this.checkLayeredTilesFlags(x, y, 0x40); +}; + +Game_Map.prototype.isCounter = function(x, y) { + return this.isValid(x, y) && this.checkLayeredTilesFlags(x, y, 0x80); +}; + +Game_Map.prototype.isDamageFloor = function(x, y) { + return this.isValid(x, y) && this.checkLayeredTilesFlags(x, y, 0x100); +}; + +Game_Map.prototype.terrainTag = function(x, y) { + if (this.isValid(x, y)) { + var flags = this.tilesetFlags(); + var tiles = this.layeredTiles(x, y); + for (var i = 0; i < tiles.length; i++) { + var tag = flags[tiles[i]] >> 12; + if (tag > 0) { + return tag; + } + } + } + return 0; +}; + +Game_Map.prototype.regionId = function(x, y) { + return this.isValid(x, y) ? this.tileId(x, y, 5) : 0; +}; + +Game_Map.prototype.startScroll = function(direction, distance, speed) { + this._scrollDirection = direction; + this._scrollRest = distance; + this._scrollSpeed = speed; +}; + +Game_Map.prototype.isScrolling = function() { + return this._scrollRest > 0; +}; + +Game_Map.prototype.update = function(sceneActive) { + this.refreshIfNeeded(); + if (sceneActive) { + this.updateInterpreter(); + } + this.updateScroll(); + this.updateEvents(); + this.updateVehicles(); + this.updateParallax(); +}; + +Game_Map.prototype.updateScroll = function() { + if (this.isScrolling()) { + var lastX = this._displayX; + var lastY = this._displayY; + this.doScroll(this._scrollDirection, this.scrollDistance()); + if (this._displayX === lastX && this._displayY === lastY) { + this._scrollRest = 0; + } else { + this._scrollRest -= this.scrollDistance(); + } + } +}; + +Game_Map.prototype.scrollDistance = function() { + return Math.pow(2, this._scrollSpeed) / 256; +}; + +Game_Map.prototype.doScroll = function(direction, distance) { + switch (direction) { + case 2: + this.scrollDown(distance); + break; + case 4: + this.scrollLeft(distance); + break; + case 6: + this.scrollRight(distance); + break; + case 8: + this.scrollUp(distance); + break; + } +}; + +Game_Map.prototype.updateEvents = function() { + this.events().forEach(function(event) { + event.update(); + }); + this._commonEvents.forEach(function(event) { + event.update(); + }); +}; + +Game_Map.prototype.updateVehicles = function() { + this._vehicles.forEach(function(vehicle) { + vehicle.update(); + }); +}; + +Game_Map.prototype.updateParallax = function() { + if (this._parallaxLoopX) { + this._parallaxX += this._parallaxSx / this.tileWidth() / 2; + } + if (this._parallaxLoopY) { + this._parallaxY += this._parallaxSy / this.tileHeight() / 2; + } +}; + +Game_Map.prototype.changeTileset = function(tilesetId) { + this._tilesetId = tilesetId; + this.refresh(); +}; + +Game_Map.prototype.changeBattleback = function(battleback1Name, battleback2Name) { + this._battleback1Name = battleback1Name; + this._battleback2Name = battleback2Name; +}; + +Game_Map.prototype.changeParallax = function(name, loopX, loopY, sx, sy) { + this._parallaxName = name; + this._parallaxZero = ImageManager.isZeroParallax(this._parallaxName); + if (this._parallaxLoopX && !loopX) { + this._parallaxX = 0; + } + if (this._parallaxLoopY && !loopY) { + this._parallaxY = 0; + } + this._parallaxLoopX = loopX; + this._parallaxLoopY = loopY; + this._parallaxSx = sx; + this._parallaxSy = sy; +}; + +Game_Map.prototype.updateInterpreter = function() { + for (;;) { + this._interpreter.update(); + if (this._interpreter.isRunning()) { + return; + } + if (this._interpreter.eventId() > 0) { + this.unlockEvent(this._interpreter.eventId()); + this._interpreter.clear(); + } + if (!this.setupStartingEvent()) { + return; + } + } +}; + +Game_Map.prototype.unlockEvent = function(eventId) { + if (this._events[eventId]) { + this._events[eventId].unlock(); + } +}; + +Game_Map.prototype.setupStartingEvent = function() { + this.refreshIfNeeded(); + if (this._interpreter.setupReservedCommonEvent()) { + return true; + } + if (this.setupTestEvent()) { + return true; + } + if (this.setupStartingMapEvent()) { + return true; + } + if (this.setupAutorunCommonEvent()) { + return true; + } + return false; +}; + +Game_Map.prototype.setupTestEvent = function() { + if ($testEvent) { + this._interpreter.setup($testEvent, 0); + $testEvent = null; + return true; + } + return false; +}; + +Game_Map.prototype.setupStartingMapEvent = function() { + var events = this.events(); + for (var i = 0; i < events.length; i++) { + var event = events[i]; + if (event.isStarting()) { + event.clearStartingFlag(); + this._interpreter.setup(event.list(), event.eventId()); + return true; + } + } + return false; +}; + +Game_Map.prototype.setupAutorunCommonEvent = function() { + for (var i = 0; i < $dataCommonEvents.length; i++) { + var event = $dataCommonEvents[i]; + if (event && event.trigger === 1 && $gameSwitches.value(event.switchId)) { + this._interpreter.setup(event.list); + return true; + } + } + return false; +}; + +Game_Map.prototype.isAnyEventStarting = function() { + return this.events().some(function(event) { + return event.isStarting(); + }); +}; + +//----------------------------------------------------------------------------- +// Game_CommonEvent +// +// The game object class for a common event. It contains functionality for +// running parallel process events. + +function Game_CommonEvent() { + this.initialize.apply(this, arguments); +} + +Game_CommonEvent.prototype.initialize = function(commonEventId) { + this._commonEventId = commonEventId; + this.refresh(); +}; + +Game_CommonEvent.prototype.event = function() { + return $dataCommonEvents[this._commonEventId]; +}; + +Game_CommonEvent.prototype.list = function() { + return this.event().list; +}; + +Game_CommonEvent.prototype.refresh = function() { + if (this.isActive()) { + if (!this._interpreter) { + this._interpreter = new Game_Interpreter(); + } + } else { + this._interpreter = null; + } +}; + +Game_CommonEvent.prototype.isActive = function() { + var event = this.event(); + return event.trigger === 2 && $gameSwitches.value(event.switchId); +}; + +Game_CommonEvent.prototype.update = function() { + if (this._interpreter) { + if (!this._interpreter.isRunning()) { + this._interpreter.setup(this.list()); + } + this._interpreter.update(); + } +}; + +//----------------------------------------------------------------------------- +// Game_CharacterBase +// +// The superclass of Game_Character. It handles basic information, such as +// coordinates and images, shared by all characters. + +function Game_CharacterBase() { + this.initialize.apply(this, arguments); +} + +Object.defineProperties(Game_CharacterBase.prototype, { + x: { get: function() { return this._x; }, configurable: true }, + y: { get: function() { return this._y; }, configurable: true } +}); + +Game_CharacterBase.prototype.initialize = function() { + this.initMembers(); +}; + +Game_CharacterBase.prototype.initMembers = function() { + this._x = 0; + this._y = 0; + this._realX = 0; + this._realY = 0; + this._moveSpeed = 4; + this._moveFrequency = 6; + this._opacity = 255; + this._blendMode = 0; + this._direction = 2; + this._pattern = 1; + this._priorityType = 1; + this._tileId = 0; + this._characterName = ''; + this._characterIndex = 0; + this._isObjectCharacter = false; + this._walkAnime = true; + this._stepAnime = false; + this._directionFix = false; + this._through = false; + this._transparent = false; + this._bushDepth = 0; + this._animationId = 0; + this._balloonId = 0; + this._animationPlaying = false; + this._balloonPlaying = false; + this._animationCount = 0; + this._stopCount = 0; + this._jumpCount = 0; + this._jumpPeak = 0; + this._movementSuccess = true; +}; + +Game_CharacterBase.prototype.pos = function(x, y) { + return this._x === x && this._y === y; +}; + +Game_CharacterBase.prototype.posNt = function(x, y) { + // No through + return this.pos(x, y) && !this.isThrough(); +}; + +Game_CharacterBase.prototype.moveSpeed = function() { + return this._moveSpeed; +}; + +Game_CharacterBase.prototype.setMoveSpeed = function(moveSpeed) { + this._moveSpeed = moveSpeed; +}; + +Game_CharacterBase.prototype.moveFrequency = function() { + return this._moveFrequency; +}; + +Game_CharacterBase.prototype.setMoveFrequency = function(moveFrequency) { + this._moveFrequency = moveFrequency; +}; + +Game_CharacterBase.prototype.opacity = function() { + return this._opacity; +}; + +Game_CharacterBase.prototype.setOpacity = function(opacity) { + this._opacity = opacity; +}; + +Game_CharacterBase.prototype.blendMode = function() { + return this._blendMode; +}; + +Game_CharacterBase.prototype.setBlendMode = function(blendMode) { + this._blendMode = blendMode; +}; + +Game_CharacterBase.prototype.isNormalPriority = function() { + return this._priorityType === 1; +}; + +Game_CharacterBase.prototype.setPriorityType = function(priorityType) { + this._priorityType = priorityType; +}; + +Game_CharacterBase.prototype.isMoving = function() { + return this._realX !== this._x || this._realY !== this._y; +}; + +Game_CharacterBase.prototype.isJumping = function() { + return this._jumpCount > 0; +}; + +Game_CharacterBase.prototype.jumpHeight = function() { + return (this._jumpPeak * this._jumpPeak - + Math.pow(Math.abs(this._jumpCount - this._jumpPeak), 2)) / 2; +}; + +Game_CharacterBase.prototype.isStopping = function() { + return !this.isMoving() && !this.isJumping(); +}; + +Game_CharacterBase.prototype.checkStop = function(threshold) { + return this._stopCount > threshold; +}; + +Game_CharacterBase.prototype.resetStopCount = function() { + this._stopCount = 0; +}; + +Game_CharacterBase.prototype.realMoveSpeed = function() { + return this._moveSpeed + (this.isDashing() ? 1 : 0); +}; + +Game_CharacterBase.prototype.distancePerFrame = function() { + return Math.pow(2, this.realMoveSpeed()) / 256; +}; + +Game_CharacterBase.prototype.isDashing = function() { + return false; +}; + +Game_CharacterBase.prototype.isDebugThrough = function() { + return false; +}; + +Game_CharacterBase.prototype.straighten = function() { + if (this.hasWalkAnime() || this.hasStepAnime()) { + this._pattern = 1; + } + this._animationCount = 0; +}; + +Game_CharacterBase.prototype.reverseDir = function(d) { + return 10 - d; +}; + +Game_CharacterBase.prototype.canPass = function(x, y, d) { + var x2 = $gameMap.roundXWithDirection(x, d); + var y2 = $gameMap.roundYWithDirection(y, d); + if (!$gameMap.isValid(x2, y2)) { + return false; + } + if (this.isThrough() || this.isDebugThrough()) { + return true; + } + if (!this.isMapPassable(x, y, d)) { + return false; + } + if (this.isCollidedWithCharacters(x2, y2)) { + return false; + } + return true; +}; + +Game_CharacterBase.prototype.canPassDiagonally = function(x, y, horz, vert) { + var x2 = $gameMap.roundXWithDirection(x, horz); + var y2 = $gameMap.roundYWithDirection(y, vert); + if (this.canPass(x, y, vert) && this.canPass(x, y2, horz)) { + return true; + } + if (this.canPass(x, y, horz) && this.canPass(x2, y, vert)) { + return true; + } + return false; +}; + +Game_CharacterBase.prototype.isMapPassable = function(x, y, d) { + var x2 = $gameMap.roundXWithDirection(x, d); + var y2 = $gameMap.roundYWithDirection(y, d); + var d2 = this.reverseDir(d); + return $gameMap.isPassable(x, y, d) && $gameMap.isPassable(x2, y2, d2); +}; + +Game_CharacterBase.prototype.isCollidedWithCharacters = function(x, y) { + return this.isCollidedWithEvents(x, y) || this.isCollidedWithVehicles(x, y); +}; + +Game_CharacterBase.prototype.isCollidedWithEvents = function(x, y) { + var events = $gameMap.eventsXyNt(x, y); + return events.some(function(event) { + return event.isNormalPriority(); + }); +}; + +Game_CharacterBase.prototype.isCollidedWithVehicles = function(x, y) { + return $gameMap.boat().posNt(x, y) || $gameMap.ship().posNt(x, y); +}; + +Game_CharacterBase.prototype.setPosition = function(x, y) { + this._x = Math.round(x); + this._y = Math.round(y); + this._realX = x; + this._realY = y; +}; + +Game_CharacterBase.prototype.copyPosition = function(character) { + this._x = character._x; + this._y = character._y; + this._realX = character._realX; + this._realY = character._realY; + this._direction = character._direction; +}; + +Game_CharacterBase.prototype.locate = function(x, y) { + this.setPosition(x, y); + this.straighten(); + this.refreshBushDepth(); +}; + +Game_CharacterBase.prototype.direction = function() { + return this._direction; +}; + +Game_CharacterBase.prototype.setDirection = function(d) { + if (!this.isDirectionFixed() && d) { + this._direction = d; + } + this.resetStopCount(); +}; + +Game_CharacterBase.prototype.isTile = function() { + return this._tileId > 0 && this._priorityType === 0; +}; + +Game_CharacterBase.prototype.isObjectCharacter = function() { + return this._isObjectCharacter; +}; + +Game_CharacterBase.prototype.shiftY = function() { + return this.isObjectCharacter() ? 0 : 6; +}; + +Game_CharacterBase.prototype.scrolledX = function() { + return $gameMap.adjustX(this._realX); +}; + +Game_CharacterBase.prototype.scrolledY = function() { + return $gameMap.adjustY(this._realY); +}; + +Game_CharacterBase.prototype.screenX = function() { + var tw = $gameMap.tileWidth(); + return Math.round(this.scrolledX() * tw + tw / 2); +}; + +Game_CharacterBase.prototype.screenY = function() { + var th = $gameMap.tileHeight(); + return Math.round(this.scrolledY() * th + th - + this.shiftY() - this.jumpHeight()); +}; + +Game_CharacterBase.prototype.screenZ = function() { + return this._priorityType * 2 + 1; +}; + +Game_CharacterBase.prototype.isNearTheScreen = function() { + var gw = Graphics.width; + var gh = Graphics.height; + var tw = $gameMap.tileWidth(); + var th = $gameMap.tileHeight(); + var px = this.scrolledX() * tw + tw / 2 - gw / 2; + var py = this.scrolledY() * th + th / 2 - gh / 2; + return px >= -gw && px <= gw && py >= -gh && py <= gh; +}; + +Game_CharacterBase.prototype.update = function() { + if (this.isStopping()) { + this.updateStop(); + } + if (this.isJumping()) { + this.updateJump(); + } else if (this.isMoving()) { + this.updateMove(); + } + this.updateAnimation(); +}; + +Game_CharacterBase.prototype.updateStop = function() { + this._stopCount++; +}; + +Game_CharacterBase.prototype.updateJump = function() { + this._jumpCount--; + this._realX = (this._realX * this._jumpCount + this._x) / (this._jumpCount + 1.0); + this._realY = (this._realY * this._jumpCount + this._y) / (this._jumpCount + 1.0); + this.refreshBushDepth(); + if (this._jumpCount === 0) { + this._realX = this._x = $gameMap.roundX(this._x); + this._realY = this._y = $gameMap.roundY(this._y); + } +}; + +Game_CharacterBase.prototype.updateMove = function() { + if (this._x < this._realX) { + this._realX = Math.max(this._realX - this.distancePerFrame(), this._x); + } + if (this._x > this._realX) { + this._realX = Math.min(this._realX + this.distancePerFrame(), this._x); + } + if (this._y < this._realY) { + this._realY = Math.max(this._realY - this.distancePerFrame(), this._y); + } + if (this._y > this._realY) { + this._realY = Math.min(this._realY + this.distancePerFrame(), this._y); + } + if (!this.isMoving()) { + this.refreshBushDepth(); + } +}; + +Game_CharacterBase.prototype.updateAnimation = function() { + this.updateAnimationCount(); + if (this._animationCount >= this.animationWait()) { + this.updatePattern(); + this._animationCount = 0; + } +}; + +Game_CharacterBase.prototype.animationWait = function() { + return (9 - this.realMoveSpeed()) * 3; +}; + +Game_CharacterBase.prototype.updateAnimationCount = function() { + if (this.isMoving() && this.hasWalkAnime()) { + this._animationCount += 1.5; + } else if (this.hasStepAnime() || !this.isOriginalPattern()) { + this._animationCount++; + } +}; + +Game_CharacterBase.prototype.updatePattern = function() { + if (!this.hasStepAnime() && this._stopCount > 0) { + this.resetPattern(); + } else { + this._pattern = (this._pattern + 1) % this.maxPattern(); + } +}; + +Game_CharacterBase.prototype.maxPattern = function() { + return 4; +}; + +Game_CharacterBase.prototype.pattern = function() { + return this._pattern < 3 ? this._pattern : 1; +}; + +Game_CharacterBase.prototype.setPattern = function(pattern) { + this._pattern = pattern; +}; + +Game_CharacterBase.prototype.isOriginalPattern = function() { + return this.pattern() === 1; +}; + +Game_CharacterBase.prototype.resetPattern = function() { + this.setPattern(1); +}; + +Game_CharacterBase.prototype.refreshBushDepth = function() { + if (this.isNormalPriority() && !this.isObjectCharacter() && + this.isOnBush() && !this.isJumping()) { + if (!this.isMoving()) { + this._bushDepth = 12; + } + } else { + this._bushDepth = 0; + } +}; + +Game_CharacterBase.prototype.isOnLadder = function() { + return $gameMap.isLadder(this._x, this._y); +}; + +Game_CharacterBase.prototype.isOnBush = function() { + return $gameMap.isBush(this._x, this._y); +}; + +Game_CharacterBase.prototype.terrainTag = function() { + return $gameMap.terrainTag(this._x, this._y); +}; + +Game_CharacterBase.prototype.regionId = function() { + return $gameMap.regionId(this._x, this._y); +}; + +Game_CharacterBase.prototype.increaseSteps = function() { + if (this.isOnLadder()) { + this.setDirection(8); + } + this.resetStopCount(); + this.refreshBushDepth(); +}; + +Game_CharacterBase.prototype.tileId = function() { + return this._tileId; +}; + +Game_CharacterBase.prototype.characterName = function() { + return this._characterName; +}; + +Game_CharacterBase.prototype.characterIndex = function() { + return this._characterIndex; +}; + +Game_CharacterBase.prototype.setImage = function(characterName, characterIndex) { + this._tileId = 0; + this._characterName = characterName; + this._characterIndex = characterIndex; + this._isObjectCharacter = ImageManager.isObjectCharacter(characterName); +}; + +Game_CharacterBase.prototype.setTileImage = function(tileId) { + this._tileId = tileId; + this._characterName = ''; + this._characterIndex = 0; + this._isObjectCharacter = true; +}; + +Game_CharacterBase.prototype.checkEventTriggerTouchFront = function(d) { + var x2 = $gameMap.roundXWithDirection(this._x, d); + var y2 = $gameMap.roundYWithDirection(this._y, d); + this.checkEventTriggerTouch(x2, y2); +}; + +Game_CharacterBase.prototype.checkEventTriggerTouch = function(x, y) { + return false; +}; + +Game_CharacterBase.prototype.isMovementSucceeded = function(x, y) { + return this._movementSuccess; +}; + +Game_CharacterBase.prototype.setMovementSuccess = function(success) { + this._movementSuccess = success; +}; + +Game_CharacterBase.prototype.moveStraight = function(d) { + this.setMovementSuccess(this.canPass(this._x, this._y, d)); + if (this.isMovementSucceeded()) { + this.setDirection(d); + this._x = $gameMap.roundXWithDirection(this._x, d); + this._y = $gameMap.roundYWithDirection(this._y, d); + this._realX = $gameMap.xWithDirection(this._x, this.reverseDir(d)); + this._realY = $gameMap.yWithDirection(this._y, this.reverseDir(d)); + this.increaseSteps(); + } else { + this.setDirection(d); + this.checkEventTriggerTouchFront(d); + } +}; + +Game_CharacterBase.prototype.moveDiagonally = function(horz, vert) { + this.setMovementSuccess(this.canPassDiagonally(this._x, this._y, horz, vert)); + if (this.isMovementSucceeded()) { + this._x = $gameMap.roundXWithDirection(this._x, horz); + this._y = $gameMap.roundYWithDirection(this._y, vert); + this._realX = $gameMap.xWithDirection(this._x, this.reverseDir(horz)); + this._realY = $gameMap.yWithDirection(this._y, this.reverseDir(vert)); + this.increaseSteps(); + } + if (this._direction === this.reverseDir(horz)) { + this.setDirection(horz); + } + if (this._direction === this.reverseDir(vert)) { + this.setDirection(vert); + } +}; + +Game_CharacterBase.prototype.jump = function(xPlus, yPlus) { + if (Math.abs(xPlus) > Math.abs(yPlus)) { + if (xPlus !== 0) { + this.setDirection(xPlus < 0 ? 4 : 6); + } + } else { + if (yPlus !== 0) { + this.setDirection(yPlus < 0 ? 8 : 2); + } + } + this._x += xPlus; + this._y += yPlus; + var distance = Math.round(Math.sqrt(xPlus * xPlus + yPlus * yPlus)); + this._jumpPeak = 10 + distance - this._moveSpeed; + this._jumpCount = this._jumpPeak * 2; + this.resetStopCount(); + this.straighten(); +}; + +Game_CharacterBase.prototype.hasWalkAnime = function() { + return this._walkAnime; +}; + +Game_CharacterBase.prototype.setWalkAnime = function(walkAnime) { + this._walkAnime = walkAnime; +}; + +Game_CharacterBase.prototype.hasStepAnime = function() { + return this._stepAnime; +}; + +Game_CharacterBase.prototype.setStepAnime = function(stepAnime) { + this._stepAnime = stepAnime; +}; + +Game_CharacterBase.prototype.isDirectionFixed = function() { + return this._directionFix; +}; + +Game_CharacterBase.prototype.setDirectionFix = function(directionFix) { + this._directionFix = directionFix; +}; + +Game_CharacterBase.prototype.isThrough = function() { + return this._through; +}; + +Game_CharacterBase.prototype.setThrough = function(through) { + this._through = through; +}; + +Game_CharacterBase.prototype.isTransparent = function() { + return this._transparent; +}; + +Game_CharacterBase.prototype.bushDepth = function() { + return this._bushDepth; +}; + +Game_CharacterBase.prototype.setTransparent = function(transparent) { + this._transparent = transparent; +}; + +Game_CharacterBase.prototype.requestAnimation = function(animationId) { + this._animationId = animationId; +}; + +Game_CharacterBase.prototype.requestBalloon = function(balloonId) { + this._balloonId = balloonId; +}; + +Game_CharacterBase.prototype.animationId = function() { + return this._animationId; +}; + +Game_CharacterBase.prototype.balloonId = function() { + return this._balloonId; +}; + +Game_CharacterBase.prototype.startAnimation = function() { + this._animationId = 0; + this._animationPlaying = true; +}; + +Game_CharacterBase.prototype.startBalloon = function() { + this._balloonId = 0; + this._balloonPlaying = true; +}; + +Game_CharacterBase.prototype.isAnimationPlaying = function() { + return this._animationId > 0 || this._animationPlaying; +}; + +Game_CharacterBase.prototype.isBalloonPlaying = function() { + return this._balloonId > 0 || this._balloonPlaying; +}; + +Game_CharacterBase.prototype.endAnimation = function() { + this._animationPlaying = false; +}; + +Game_CharacterBase.prototype.endBalloon = function() { + this._balloonPlaying = false; +}; + +//----------------------------------------------------------------------------- +// Game_Character +// +// The superclass of Game_Player, Game_Follower, GameVehicle, and Game_Event. + +function Game_Character() { + this.initialize.apply(this, arguments); +} + +Game_Character.prototype = Object.create(Game_CharacterBase.prototype); +Game_Character.prototype.constructor = Game_Character; + +Game_Character.ROUTE_END = 0; +Game_Character.ROUTE_MOVE_DOWN = 1; +Game_Character.ROUTE_MOVE_LEFT = 2; +Game_Character.ROUTE_MOVE_RIGHT = 3; +Game_Character.ROUTE_MOVE_UP = 4; +Game_Character.ROUTE_MOVE_LOWER_L = 5; +Game_Character.ROUTE_MOVE_LOWER_R = 6; +Game_Character.ROUTE_MOVE_UPPER_L = 7; +Game_Character.ROUTE_MOVE_UPPER_R = 8; +Game_Character.ROUTE_MOVE_RANDOM = 9; +Game_Character.ROUTE_MOVE_TOWARD = 10; +Game_Character.ROUTE_MOVE_AWAY = 11; +Game_Character.ROUTE_MOVE_FORWARD = 12; +Game_Character.ROUTE_MOVE_BACKWARD = 13; +Game_Character.ROUTE_JUMP = 14; +Game_Character.ROUTE_WAIT = 15; +Game_Character.ROUTE_TURN_DOWN = 16; +Game_Character.ROUTE_TURN_LEFT = 17; +Game_Character.ROUTE_TURN_RIGHT = 18; +Game_Character.ROUTE_TURN_UP = 19; +Game_Character.ROUTE_TURN_90D_R = 20; +Game_Character.ROUTE_TURN_90D_L = 21; +Game_Character.ROUTE_TURN_180D = 22; +Game_Character.ROUTE_TURN_90D_R_L = 23; +Game_Character.ROUTE_TURN_RANDOM = 24; +Game_Character.ROUTE_TURN_TOWARD = 25; +Game_Character.ROUTE_TURN_AWAY = 26; +Game_Character.ROUTE_SWITCH_ON = 27; +Game_Character.ROUTE_SWITCH_OFF = 28; +Game_Character.ROUTE_CHANGE_SPEED = 29; +Game_Character.ROUTE_CHANGE_FREQ = 30; +Game_Character.ROUTE_WALK_ANIME_ON = 31; +Game_Character.ROUTE_WALK_ANIME_OFF = 32; +Game_Character.ROUTE_STEP_ANIME_ON = 33; +Game_Character.ROUTE_STEP_ANIME_OFF = 34; +Game_Character.ROUTE_DIR_FIX_ON = 35; +Game_Character.ROUTE_DIR_FIX_OFF = 36; +Game_Character.ROUTE_THROUGH_ON = 37; +Game_Character.ROUTE_THROUGH_OFF = 38; +Game_Character.ROUTE_TRANSPARENT_ON = 39; +Game_Character.ROUTE_TRANSPARENT_OFF = 40; +Game_Character.ROUTE_CHANGE_IMAGE = 41; +Game_Character.ROUTE_CHANGE_OPACITY = 42; +Game_Character.ROUTE_CHANGE_BLEND_MODE = 43; +Game_Character.ROUTE_PLAY_SE = 44; +Game_Character.ROUTE_SCRIPT = 45; + +Game_Character.prototype.initialize = function() { + Game_CharacterBase.prototype.initialize.call(this); +}; + +Game_Character.prototype.initMembers = function() { + Game_CharacterBase.prototype.initMembers.call(this); + this._moveRouteForcing = false; + this._moveRoute = null; + this._moveRouteIndex = 0; + this._originalMoveRoute = null; + this._originalMoveRouteIndex = 0; + this._waitCount = 0; +}; + +Game_Character.prototype.memorizeMoveRoute = function() { + this._originalMoveRoute = this._moveRoute; + this._originalMoveRouteIndex = this._moveRouteIndex; +}; + +Game_Character.prototype.restoreMoveRoute = function() { + this._moveRoute = this._originalMoveRoute; + this._moveRouteIndex = this._originalMoveRouteIndex; + this._originalMoveRoute = null; +}; + +Game_Character.prototype.isMoveRouteForcing = function() { + return this._moveRouteForcing; +}; + +Game_Character.prototype.setMoveRoute = function(moveRoute) { + this._moveRoute = moveRoute; + this._moveRouteIndex = 0; + this._moveRouteForcing = false; +}; + +Game_Character.prototype.forceMoveRoute = function(moveRoute) { + if (!this._originalMoveRoute) { + this.memorizeMoveRoute(); + } + this._moveRoute = moveRoute; + this._moveRouteIndex = 0; + this._moveRouteForcing = true; + this._waitCount = 0; +}; + +Game_Character.prototype.updateStop = function() { + Game_CharacterBase.prototype.updateStop.call(this); + if (this._moveRouteForcing) { + this.updateRoutineMove(); + } +}; + +Game_Character.prototype.updateRoutineMove = function() { + if (this._waitCount > 0) { + this._waitCount--; + } else { + this.setMovementSuccess(true); + var command = this._moveRoute.list[this._moveRouteIndex]; + if (command) { + this.processMoveCommand(command); + this.advanceMoveRouteIndex(); + } + } +}; + +Game_Character.prototype.processMoveCommand = function(command) { + var gc = Game_Character; + var params = command.parameters; + switch (command.code) { + case gc.ROUTE_END: + this.processRouteEnd(); + break; + case gc.ROUTE_MOVE_DOWN: + this.moveStraight(2); + break; + case gc.ROUTE_MOVE_LEFT: + this.moveStraight(4); + break; + case gc.ROUTE_MOVE_RIGHT: + this.moveStraight(6); + break; + case gc.ROUTE_MOVE_UP: + this.moveStraight(8); + break; + case gc.ROUTE_MOVE_LOWER_L: + this.moveDiagonally(4, 2); + break; + case gc.ROUTE_MOVE_LOWER_R: + this.moveDiagonally(6, 2); + break; + case gc.ROUTE_MOVE_UPPER_L: + this.moveDiagonally(4, 8); + break; + case gc.ROUTE_MOVE_UPPER_R: + this.moveDiagonally(6, 8); + break; + case gc.ROUTE_MOVE_RANDOM: + this.moveRandom(); + break; + case gc.ROUTE_MOVE_TOWARD: + this.moveTowardPlayer(); + break; + case gc.ROUTE_MOVE_AWAY: + this.moveAwayFromPlayer(); + break; + case gc.ROUTE_MOVE_FORWARD: + this.moveForward(); + break; + case gc.ROUTE_MOVE_BACKWARD: + this.moveBackward(); + break; + case gc.ROUTE_JUMP: + this.jump(params[0], params[1]); + break; + case gc.ROUTE_WAIT: + this._waitCount = params[0] - 1; + break; + case gc.ROUTE_TURN_DOWN: + this.setDirection(2); + break; + case gc.ROUTE_TURN_LEFT: + this.setDirection(4); + break; + case gc.ROUTE_TURN_RIGHT: + this.setDirection(6); + break; + case gc.ROUTE_TURN_UP: + this.setDirection(8); + break; + case gc.ROUTE_TURN_90D_R: + this.turnRight90(); + break; + case gc.ROUTE_TURN_90D_L: + this.turnLeft90(); + break; + case gc.ROUTE_TURN_180D: + this.turn180(); + break; + case gc.ROUTE_TURN_90D_R_L: + this.turnRightOrLeft90(); + break; + case gc.ROUTE_TURN_RANDOM: + this.turnRandom(); + break; + case gc.ROUTE_TURN_TOWARD: + this.turnTowardPlayer(); + break; + case gc.ROUTE_TURN_AWAY: + this.turnAwayFromPlayer(); + break; + case gc.ROUTE_SWITCH_ON: + $gameSwitches.setValue(params[0], true); + break; + case gc.ROUTE_SWITCH_OFF: + $gameSwitches.setValue(params[0], false); + break; + case gc.ROUTE_CHANGE_SPEED: + this.setMoveSpeed(params[0]); + break; + case gc.ROUTE_CHANGE_FREQ: + this.setMoveFrequency(params[0]); + break; + case gc.ROUTE_WALK_ANIME_ON: + this.setWalkAnime(true); + break; + case gc.ROUTE_WALK_ANIME_OFF: + this.setWalkAnime(false); + break; + case gc.ROUTE_STEP_ANIME_ON: + this.setStepAnime(true); + break; + case gc.ROUTE_STEP_ANIME_OFF: + this.setStepAnime(false); + break; + case gc.ROUTE_DIR_FIX_ON: + this.setDirectionFix(true); + break; + case gc.ROUTE_DIR_FIX_OFF: + this.setDirectionFix(false); + break; + case gc.ROUTE_THROUGH_ON: + this.setThrough(true); + break; + case gc.ROUTE_THROUGH_OFF: + this.setThrough(false); + break; + case gc.ROUTE_TRANSPARENT_ON: + this.setTransparent(true); + break; + case gc.ROUTE_TRANSPARENT_OFF: + this.setTransparent(false); + break; + case gc.ROUTE_CHANGE_IMAGE: + this.setImage(params[0], params[1]); + break; + case gc.ROUTE_CHANGE_OPACITY: + this.setOpacity(params[0]); + break; + case gc.ROUTE_CHANGE_BLEND_MODE: + this.setBlendMode(params[0]); + break; + case gc.ROUTE_PLAY_SE: + AudioManager.playSe(params[0]); + break; + case gc.ROUTE_SCRIPT: + eval(params[0]); + break; + } +}; + +Game_Character.prototype.deltaXFrom = function(x) { + return $gameMap.deltaX(this.x, x); +}; + +Game_Character.prototype.deltaYFrom = function(y) { + return $gameMap.deltaY(this.y, y); +}; + +Game_Character.prototype.moveRandom = function() { + var d = 2 + Math.randomInt(4) * 2; + if (this.canPass(this.x, this.y, d)) { + this.moveStraight(d); + } +}; + +Game_Character.prototype.moveTowardCharacter = function(character) { + var sx = this.deltaXFrom(character.x); + var sy = this.deltaYFrom(character.y); + if (Math.abs(sx) > Math.abs(sy)) { + this.moveStraight(sx > 0 ? 4 : 6); + if (!this.isMovementSucceeded() && sy !== 0) { + this.moveStraight(sy > 0 ? 8 : 2); + } + } else if (sy !== 0) { + this.moveStraight(sy > 0 ? 8 : 2); + if (!this.isMovementSucceeded() && sx !== 0) { + this.moveStraight(sx > 0 ? 4 : 6); + } + } +}; + +Game_Character.prototype.moveAwayFromCharacter = function(character) { + var sx = this.deltaXFrom(character.x); + var sy = this.deltaYFrom(character.y); + if (Math.abs(sx) > Math.abs(sy)) { + this.moveStraight(sx > 0 ? 6 : 4); + if (!this.isMovementSucceeded() && sy !== 0) { + this.moveStraight(sy > 0 ? 2 : 8); + } + } else if (sy !== 0) { + this.moveStraight(sy > 0 ? 2 : 8); + if (!this.isMovementSucceeded() && sx !== 0) { + this.moveStraight(sx > 0 ? 6 : 4); + } + } +}; + +Game_Character.prototype.turnTowardCharacter = function(character) { + var sx = this.deltaXFrom(character.x); + var sy = this.deltaYFrom(character.y); + if (Math.abs(sx) > Math.abs(sy)) { + this.setDirection(sx > 0 ? 4 : 6); + } else if (sy !== 0) { + this.setDirection(sy > 0 ? 8 : 2); + } +}; + +Game_Character.prototype.turnAwayFromCharacter = function(character) { + var sx = this.deltaXFrom(character.x); + var sy = this.deltaYFrom(character.y); + if (Math.abs(sx) > Math.abs(sy)) { + this.setDirection(sx > 0 ? 6 : 4); + } else if (sy !== 0) { + this.setDirection(sy > 0 ? 2 : 8); + } +}; + +Game_Character.prototype.turnTowardPlayer = function() { + this.turnTowardCharacter($gamePlayer); +}; + +Game_Character.prototype.turnAwayFromPlayer = function() { + this.turnAwayFromCharacter($gamePlayer); +}; + +Game_Character.prototype.moveTowardPlayer = function() { + this.moveTowardCharacter($gamePlayer); +}; + +Game_Character.prototype.moveAwayFromPlayer = function() { + this.moveAwayFromCharacter($gamePlayer); +}; + +Game_Character.prototype.moveForward = function() { + this.moveStraight(this.direction()); +}; + +Game_Character.prototype.moveBackward = function() { + var lastDirectionFix = this.isDirectionFixed(); + this.setDirectionFix(true); + this.moveStraight(this.reverseDir(this.direction())); + this.setDirectionFix(lastDirectionFix); +}; + +Game_Character.prototype.processRouteEnd = function() { + if (this._moveRoute.repeat) { + this._moveRouteIndex = -1; + } else if (this._moveRouteForcing) { + this._moveRouteForcing = false; + this.restoreMoveRoute(); + } +}; + +Game_Character.prototype.advanceMoveRouteIndex = function() { + var moveRoute = this._moveRoute; + if (moveRoute && (this.isMovementSucceeded() || moveRoute.skippable)) { + var numCommands = moveRoute.list.length - 1; + this._moveRouteIndex++; + if (moveRoute.repeat && this._moveRouteIndex >= numCommands) { + this._moveRouteIndex = 0; + } + } +}; + +Game_Character.prototype.turnRight90 = function() { + switch (this.direction()) { + case 2: + this.setDirection(4); + break; + case 4: + this.setDirection(8); + break; + case 6: + this.setDirection(2); + break; + case 8: + this.setDirection(6); + break; + } +}; + +Game_Character.prototype.turnLeft90 = function() { + switch (this.direction()) { + case 2: + this.setDirection(6); + break; + case 4: + this.setDirection(2); + break; + case 6: + this.setDirection(8); + break; + case 8: + this.setDirection(4); + break; + } +}; + +Game_Character.prototype.turn180 = function() { + this.setDirection(this.reverseDir(this.direction())); +}; + +Game_Character.prototype.turnRightOrLeft90 = function() { + switch (Math.randomInt(2)) { + case 0: + this.turnRight90(); + break; + case 1: + this.turnLeft90(); + break; + } +}; + +Game_Character.prototype.turnRandom = function() { + this.setDirection(2 + Math.randomInt(4) * 2); +}; + +Game_Character.prototype.swap = function(character) { + var newX = character.x; + var newY = character.y; + character.locate(this.x, this.y); + this.locate(newX, newY); +}; + +Game_Character.prototype.findDirectionTo = function(goalX, goalY) { + var searchLimit = this.searchLimit(); + var mapWidth = $gameMap.width(); + var nodeList = []; + var openList = []; + var closedList = []; + var start = {}; + var best = start; + + if (this.x === goalX && this.y === goalY) { + return 0; + } + + start.parent = null; + start.x = this.x; + start.y = this.y; + start.g = 0; + start.f = $gameMap.distance(start.x, start.y, goalX, goalY); + nodeList.push(start); + openList.push(start.y * mapWidth + start.x); + + while (nodeList.length > 0) { + var bestIndex = 0; + for (var i = 0; i < nodeList.length; i++) { + if (nodeList[i].f < nodeList[bestIndex].f) { + bestIndex = i; + } + } + + var current = nodeList[bestIndex]; + var x1 = current.x; + var y1 = current.y; + var pos1 = y1 * mapWidth + x1; + var g1 = current.g; + + nodeList.splice(bestIndex, 1); + openList.splice(openList.indexOf(pos1), 1); + closedList.push(pos1); + + if (current.x === goalX && current.y === goalY) { + best = current; + goaled = true; + break; + } + + if (g1 >= searchLimit) { + continue; + } + + for (var j = 0; j < 4; j++) { + var direction = 2 + j * 2; + var x2 = $gameMap.roundXWithDirection(x1, direction); + var y2 = $gameMap.roundYWithDirection(y1, direction); + var pos2 = y2 * mapWidth + x2; + + if (closedList.contains(pos2)) { + continue; + } + if (!this.canPass(x1, y1, direction)) { + continue; + } + + var g2 = g1 + 1; + var index2 = openList.indexOf(pos2); + + if (index2 < 0 || g2 < nodeList[index2].g) { + var neighbor; + if (index2 >= 0) { + neighbor = nodeList[index2]; + } else { + neighbor = {}; + nodeList.push(neighbor); + openList.push(pos2); + } + neighbor.parent = current; + neighbor.x = x2; + neighbor.y = y2; + neighbor.g = g2; + neighbor.f = g2 + $gameMap.distance(x2, y2, goalX, goalY); + if (!best || neighbor.f - neighbor.g < best.f - best.g) { + best = neighbor; + } + } + } + } + + var node = best; + while (node.parent && node.parent !== start) { + node = node.parent; + } + + var deltaX1 = $gameMap.deltaX(node.x, start.x); + var deltaY1 = $gameMap.deltaY(node.y, start.y); + if (deltaY1 > 0) { + return 2; + } else if (deltaX1 < 0) { + return 4; + } else if (deltaX1 > 0) { + return 6; + } else if (deltaY1 < 0) { + return 8; + } + + var deltaX2 = this.deltaXFrom(goalX); + var deltaY2 = this.deltaYFrom(goalY); + if (Math.abs(deltaX2) > Math.abs(deltaY2)) { + return deltaX2 > 0 ? 4 : 6; + } else if (deltaY2 !== 0) { + return deltaY2 > 0 ? 8 : 2; + } + + return 0; +}; + +Game_Character.prototype.searchLimit = function() { + return 12; +}; + +//----------------------------------------------------------------------------- +// Game_Player +// +// The game object class for the player. It contains event starting +// determinants and map scrolling functions. + +function Game_Player() { + this.initialize.apply(this, arguments); +} + +Game_Player.prototype = Object.create(Game_Character.prototype); +Game_Player.prototype.constructor = Game_Player; + +Game_Player.prototype.initialize = function() { + Game_Character.prototype.initialize.call(this); + this.setTransparent($dataSystem.optTransparent); +}; + +Game_Player.prototype.initMembers = function() { + Game_Character.prototype.initMembers.call(this); + this._vehicleType = 'walk'; + this._vehicleGettingOn = false; + this._vehicleGettingOff = false; + this._dashing = false; + this._needsMapReload = false; + this._transferring = false; + this._newMapId = 0; + this._newX = 0; + this._newY = 0; + this._newDirection = 0; + this._fadeType = 0; + this._followers = new Game_Followers(); + this._encounterCount = 0; +}; + +Game_Player.prototype.clearTransferInfo = function() { + this._transferring = false; + this._newMapId = 0; + this._newX = 0; + this._newY = 0; + this._newDirection = 0; +}; + +Game_Player.prototype.followers = function() { + return this._followers; +}; + +Game_Player.prototype.refresh = function() { + var actor = $gameParty.leader(); + var characterName = actor ? actor.characterName() : ''; + var characterIndex = actor ? actor.characterIndex() : 0; + this.setImage(characterName, characterIndex); + this._followers.refresh(); +}; + +Game_Player.prototype.isStopping = function() { + if (this._vehicleGettingOn || this._vehicleGettingOff) { + return false; + } + return Game_Character.prototype.isStopping.call(this); +}; + +Game_Player.prototype.reserveTransfer = function(mapId, x, y, d, fadeType) { + this._transferring = true; + this._newMapId = mapId; + this._newX = x; + this._newY = y; + this._newDirection = d; + this._fadeType = fadeType; +}; + +Game_Player.prototype.requestMapReload = function() { + this._needsMapReload = true; +}; + +Game_Player.prototype.isTransferring = function() { + return this._transferring; +}; + +Game_Player.prototype.newMapId = function() { + return this._newMapId; +}; + +Game_Player.prototype.fadeType = function() { + return this._fadeType; +}; + +Game_Player.prototype.performTransfer = function() { + if (this.isTransferring()) { + this.setDirection(this._newDirection); + if (this._newMapId !== $gameMap.mapId() || this._needsMapReload) { + $gameMap.setup(this._newMapId); + this._needsMapReload = false; + } + this.locate(this._newX, this._newY); + this.refresh(); + this.clearTransferInfo(); + } +}; + +Game_Player.prototype.isMapPassable = function(x, y, d) { + var vehicle = this.vehicle(); + if (vehicle) { + return vehicle.isMapPassable(x, y, d); + } else { + return Game_Character.prototype.isMapPassable.call(this, x, y, d); + } +}; + +Game_Player.prototype.vehicle = function() { + return $gameMap.vehicle(this._vehicleType); +}; + +Game_Player.prototype.isInBoat = function() { + return this._vehicleType === 'boat'; +}; + +Game_Player.prototype.isInShip = function() { + return this._vehicleType === 'ship'; +}; + +Game_Player.prototype.isInAirship = function() { + return this._vehicleType === 'airship'; +}; + +Game_Player.prototype.isInVehicle = function() { + return this.isInBoat() || this.isInShip() || this.isInAirship(); +}; + +Game_Player.prototype.isNormal = function() { + return this._vehicleType === 'walk' && !this.isMoveRouteForcing(); +}; + +Game_Player.prototype.isDashing = function() { + return this._dashing; +}; + +Game_Player.prototype.isDebugThrough = function() { + return Input.isPressed('control') && $gameTemp.isPlaytest(); +}; + +Game_Player.prototype.isCollided = function(x, y) { + if (this.isThrough()) { + return false; + } else { + return this.pos(x, y) || this._followers.isSomeoneCollided(x, y); + } +}; + +Game_Player.prototype.centerX = function() { + return (Graphics.width / $gameMap.tileWidth() - 1) / 2.0; +}; + +Game_Player.prototype.centerY = function() { + return (Graphics.height / $gameMap.tileHeight() - 1) / 2.0; +}; + +Game_Player.prototype.center = function(x, y) { + return $gameMap.setDisplayPos(x - this.centerX(), y - this.centerY()); +}; + +Game_Player.prototype.locate = function(x, y) { + Game_Character.prototype.locate.call(this, x, y); + this.center(x, y); + this.makeEncounterCount(); + if (this.isInVehicle()) { + this.vehicle().refresh(); + } + this._followers.synchronize(x, y, this.direction()); +}; + +Game_Player.prototype.increaseSteps = function() { + Game_Character.prototype.increaseSteps.call(this); + if (this.isNormal()) { + $gameParty.increaseSteps(); + } +}; + +Game_Player.prototype.makeEncounterCount = function() { + var n = $gameMap.encounterStep(); + this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1; +}; + +Game_Player.prototype.makeEncounterTroopId = function() { + var encounterList = []; + var weightSum = 0; + $gameMap.encounterList().forEach(function(encounter) { + if (this.meetsEncounterConditions(encounter)) { + encounterList.push(encounter); + weightSum += encounter.weight; + } + }, this); + if (weightSum > 0) { + var value = Math.randomInt(weightSum); + for (var i = 0; i < encounterList.length; i++) { + value -= encounterList[i].weight; + if (value < 0) { + return encounterList[i].troopId; + } + } + } + return 0; +}; + +Game_Player.prototype.meetsEncounterConditions = function(encounter) { + return (encounter.regionSet.length === 0 || + encounter.regionSet.contains(this.regionId())); +}; + +Game_Player.prototype.executeEncounter = function() { + if (!$gameMap.isEventRunning() && this._encounterCount <= 0) { + this.makeEncounterCount(); + var troopId = this.makeEncounterTroopId(); + if ($dataTroops[troopId]) { + BattleManager.setup(troopId, true, false); + BattleManager.onEncounter(); + return true; + } else { + return false; + } + } else { + return false; + } +}; + +Game_Player.prototype.startMapEvent = function(x, y, triggers, normal) { + if (!$gameMap.isEventRunning()) { + $gameMap.eventsXy(x, y).forEach(function(event) { + if (event.isTriggerIn(triggers) && event.isNormalPriority() === normal) { + event.start(); + } + }); + } +}; + +Game_Player.prototype.moveByInput = function() { + if (!this.isMoving() && this.canMove()) { + var direction = this.getInputDirection(); + if (direction > 0) { + $gameTemp.clearDestination(); + } else if ($gameTemp.isDestinationValid()){ + var x = $gameTemp.destinationX(); + var y = $gameTemp.destinationY(); + direction = this.findDirectionTo(x, y); + } + if (direction > 0) { + this.executeMove(direction); + } + } +}; + +Game_Player.prototype.canMove = function() { + if ($gameMap.isEventRunning() || $gameMessage.isBusy()) { + return false; + } + if (this.isMoveRouteForcing() || this.areFollowersGathering()) { + return false; + } + if (this._vehicleGettingOn || this._vehicleGettingOff) { + return false; + } + if (this.isInVehicle() && !this.vehicle().canMove()) { + return false; + } + return true; +}; + +Game_Player.prototype.getInputDirection = function() { + return Input.dir4; +}; + +Game_Player.prototype.executeMove = function(direction) { + this.moveStraight(direction); +}; + +Game_Player.prototype.update = function(sceneActive) { + var lastScrolledX = this.scrolledX(); + var lastScrolledY = this.scrolledY(); + var wasMoving = this.isMoving(); + this.updateDashing(); + if (sceneActive) { + this.moveByInput(); + } + Game_Character.prototype.update.call(this); + this.updateScroll(lastScrolledX, lastScrolledY); + this.updateVehicle(); + if (!this.isMoving()) { + this.updateNonmoving(wasMoving); + } + this._followers.update(); +}; + +Game_Player.prototype.updateDashing = function() { + if (this.isMoving()) { + return; + } + if (this.canMove() && !this.isInVehicle() && !$gameMap.isDashDisabled()) { + this._dashing = this.isDashButtonPressed() || $gameTemp.isDestinationValid(); + } else { + this._dashing = false; + } +}; + +Game_Player.prototype.isDashButtonPressed = function() { + var shift = Input.isPressed('shift'); + if (ConfigManager.alwaysDash) { + return !shift; + } else { + return shift; + } +}; + +Game_Player.prototype.updateScroll = function(lastScrolledX, lastScrolledY) { + var x1 = lastScrolledX; + var y1 = lastScrolledY; + var x2 = this.scrolledX(); + var y2 = this.scrolledY(); + if (y2 > y1 && y2 > this.centerY()) { + $gameMap.scrollDown(y2 - y1); + } + if (x2 < x1 && x2 < this.centerX()) { + $gameMap.scrollLeft(x1 - x2); + } + if (x2 > x1 && x2 > this.centerX()) { + $gameMap.scrollRight(x2 - x1); + } + if (y2 < y1 && y2 < this.centerY()) { + $gameMap.scrollUp(y1 - y2); + } +}; + +Game_Player.prototype.updateVehicle = function() { + if (this.isInVehicle() && !this.areFollowersGathering()) { + if (this._vehicleGettingOn) { + this.updateVehicleGetOn(); + } else if (this._vehicleGettingOff) { + this.updateVehicleGetOff(); + } else { + this.vehicle().syncWithPlayer(); + } + } +}; + +Game_Player.prototype.updateVehicleGetOn = function() { + if (!this.areFollowersGathering() && !this.isMoving()) { + this.setDirection(this.vehicle().direction()); + this.setMoveSpeed(this.vehicle().moveSpeed()); + this._vehicleGettingOn = false; + this.setTransparent(true); + if (this.isInAirship()) { + this.setThrough(true); + } + this.vehicle().getOn(); + } +}; + +Game_Player.prototype.updateVehicleGetOff = function() { + if (!this.areFollowersGathering() && this.vehicle().isLowest()) { + this._vehicleGettingOff = false; + this._vehicleType = 'walk'; + this.setTransparent(false); + } +}; + +Game_Player.prototype.updateNonmoving = function(wasMoving) { + if (!$gameMap.isEventRunning()) { + if (wasMoving) { + $gameParty.onPlayerWalk(); + this.checkEventTriggerHere([1,2]); + if ($gameMap.setupStartingEvent()) { + return; + } + } + if (this.triggerAction()) { + return; + } + if (wasMoving) { + this.updateEncounterCount(); + } else { + $gameTemp.clearDestination(); + } + } +}; + +Game_Player.prototype.triggerAction = function() { + if (this.canMove()) { + if (this.triggerButtonAction()) { + return true; + } + if (this.triggerTouchAction()) { + return true; + } + } + return false; +}; + +Game_Player.prototype.triggerButtonAction = function() { + if (Input.isTriggered('ok')) { + if (this.getOnOffVehicle()) { + return true; + } + this.checkEventTriggerHere([0]); + if ($gameMap.setupStartingEvent()) { + return true; + } + this.checkEventTriggerThere([0,1,2]); + if ($gameMap.setupStartingEvent()) { + return true; + } + } + return false; +}; + +Game_Player.prototype.triggerTouchAction = function() { + if ($gameTemp.isDestinationValid()){ + var direction = this.direction(); + var x1 = this.x; + var y1 = this.y; + var x2 = $gameMap.roundXWithDirection(x1, direction); + var y2 = $gameMap.roundYWithDirection(y1, direction); + var x3 = $gameMap.roundXWithDirection(x2, direction); + var y3 = $gameMap.roundYWithDirection(y2, direction); + var destX = $gameTemp.destinationX(); + var destY = $gameTemp.destinationY(); + if (destX === x1 && destY === y1) { + return this.triggerTouchActionD1(x1, y1); + } else if (destX === x2 && destY === y2) { + return this.triggerTouchActionD2(x2, y2); + } else if (destX === x3 && destY === y3) { + return this.triggerTouchActionD3(x2, y2); + } + } + return false; +}; + +Game_Player.prototype.triggerTouchActionD1 = function(x1, y1) { + if ($gameMap.airship().pos(x1, y1)) { + if (TouchInput.isTriggered() && this.getOnOffVehicle()) { + return true; + } + } + this.checkEventTriggerHere([0]); + return $gameMap.setupStartingEvent(); +}; + +Game_Player.prototype.triggerTouchActionD2 = function(x2, y2) { + if ($gameMap.boat().pos(x2, y2) || $gameMap.ship().pos(x2, y2)) { + if (TouchInput.isTriggered() && this.getOnVehicle()) { + return true; + } + } + if (this.isInBoat() || this.isInShip()) { + if (TouchInput.isTriggered() && this.getOffVehicle()) { + return true; + } + } + this.checkEventTriggerThere([0,1,2]); + return $gameMap.setupStartingEvent(); +}; + +Game_Player.prototype.triggerTouchActionD3 = function(x2, y2) { + if ($gameMap.isCounter(x2, y2)) { + this.checkEventTriggerThere([0,1,2]); + } + return $gameMap.setupStartingEvent(); +}; + +Game_Player.prototype.updateEncounterCount = function() { + if (this.canEncounter()) { + this._encounterCount -= this.encounterProgressValue(); + } +}; + +Game_Player.prototype.canEncounter = function() { + return (!$gameParty.hasEncounterNone() && $gameSystem.isEncounterEnabled() && + !this.isInAirship() && !this.isMoveRouteForcing() && !this.isDebugThrough()); +}; + +Game_Player.prototype.encounterProgressValue = function() { + var value = $gameMap.isBush(this.x, this.y) ? 2 : 1; + if ($gameParty.hasEncounterHalf()) { + value *= 0.5; + } + if (this.isInShip()) { + value *= 0.5; + } + return value; +}; + +Game_Player.prototype.checkEventTriggerHere = function(triggers) { + if (this.canStartLocalEvents()) { + this.startMapEvent(this.x, this.y, triggers, false); + } +}; + +Game_Player.prototype.checkEventTriggerThere = function(triggers) { + if (this.canStartLocalEvents()) { + var direction = this.direction(); + var x1 = this.x; + var y1 = this.y; + var x2 = $gameMap.roundXWithDirection(x1, direction); + var y2 = $gameMap.roundYWithDirection(y1, direction); + this.startMapEvent(x2, y2, triggers, true); + if (!$gameMap.isAnyEventStarting() && $gameMap.isCounter(x2, y2)) { + var x3 = $gameMap.roundXWithDirection(x2, direction); + var y3 = $gameMap.roundYWithDirection(y2, direction); + this.startMapEvent(x3, y3, triggers, true); + } + } +}; + +Game_Player.prototype.checkEventTriggerTouch = function(x, y) { + if (this.canStartLocalEvents()) { + this.startMapEvent(x, y, [1,2], true); + } +}; + +Game_Player.prototype.canStartLocalEvents = function() { + return !this.isInAirship(); +}; + +Game_Player.prototype.getOnOffVehicle = function() { + if (this.isInVehicle()) { + return this.getOffVehicle(); + } else { + return this.getOnVehicle(); + } +}; + +Game_Player.prototype.getOnVehicle = function() { + var direction = this.direction(); + var x1 = this.x; + var y1 = this.y; + var x2 = $gameMap.roundXWithDirection(x1, direction); + var y2 = $gameMap.roundYWithDirection(y1, direction); + if ($gameMap.airship().pos(x1, y1)) { + this._vehicleType = 'airship'; + } else if ($gameMap.ship().pos(x2, y2)) { + this._vehicleType = 'ship'; + } else if ($gameMap.boat().pos(x2, y2)) { + this._vehicleType = 'boat'; + } + if (this.isInVehicle()) { + this._vehicleGettingOn = true; + if (!this.isInAirship()) { + this.forceMoveForward(); + } + this.gatherFollowers(); + } + return this._vehicleGettingOn; +}; + +Game_Player.prototype.getOffVehicle = function() { + if (this.vehicle().isLandOk(this.x, this.y, this.direction())) { + if (this.isInAirship()) { + this.setDirection(2); + } + this._followers.synchronize(this.x, this.y, this.direction()); + this.vehicle().getOff(); + if (!this.isInAirship()) { + this.forceMoveForward(); + this.setTransparent(false); + } + this._vehicleGettingOff = true; + this.setMoveSpeed(4); + this.setThrough(false); + this.makeEncounterCount(); + this.gatherFollowers(); + } + return this._vehicleGettingOff; +}; + +Game_Player.prototype.forceMoveForward = function() { + this.setThrough(true); + this.moveForward(); + this.setThrough(false); +}; + +Game_Player.prototype.isOnDamageFloor = function() { + return $gameMap.isDamageFloor(this.x, this.y) && !this.isInAirship(); +}; + +Game_Player.prototype.moveStraight = function(d) { + if (this.canPass(this.x, this.y, d)) { + this._followers.updateMove(); + } + Game_Character.prototype.moveStraight.call(this, d); +}; + +Game_Player.prototype.moveDiagonally = function(horz, vert) { + if (this.canPassDiagonally(this.x, this.y, horz, vert)) { + this._followers.updateMove(); + } + Game_Character.prototype.moveDiagonally.call(this, horz, vert); +}; + +Game_Player.prototype.jump = function(xPlus, yPlus) { + Game_Character.prototype.jump.call(this, xPlus, yPlus); + this._followers.jumpAll(); +}; + +Game_Player.prototype.showFollowers = function() { + this._followers.show(); +}; + +Game_Player.prototype.hideFollowers = function() { + this._followers.hide(); +}; + +Game_Player.prototype.gatherFollowers = function() { + this._followers.gather(); +}; + +Game_Player.prototype.areFollowersGathering = function() { + return this._followers.areGathering(); +}; + +Game_Player.prototype.areFollowersGathered = function() { + return this._followers.areGathered(); +}; + +//----------------------------------------------------------------------------- +// Game_Follower +// +// The game object class for a follower. A follower is an allied character, +// other than the front character, displayed in the party. + +function Game_Follower() { + this.initialize.apply(this, arguments); +} + +Game_Follower.prototype = Object.create(Game_Character.prototype); +Game_Follower.prototype.constructor = Game_Follower; + +Game_Follower.prototype.initialize = function(memberIndex) { + Game_Character.prototype.initialize.call(this); + this._memberIndex = memberIndex; + this.setTransparent($dataSystem.optTransparent); + this.setThrough(true); +}; + +Game_Follower.prototype.refresh = function() { + var characterName = this.isVisible() ? this.actor().characterName() : ''; + var characterIndex = this.isVisible() ? this.actor().characterIndex() : 0; + this.setImage(characterName, characterIndex); +}; + +Game_Follower.prototype.actor = function() { + return $gameParty.battleMembers()[this._memberIndex]; +}; + +Game_Follower.prototype.isVisible = function() { + return this.actor() && $gamePlayer.followers().isVisible(); +}; + +Game_Follower.prototype.update = function() { + Game_Character.prototype.update.call(this); + this.setMoveSpeed($gamePlayer.realMoveSpeed()); + this.setOpacity($gamePlayer.opacity()); + this.setBlendMode($gamePlayer.blendMode()); + this.setWalkAnime($gamePlayer.hasWalkAnime()); + this.setStepAnime($gamePlayer.hasStepAnime()); + this.setDirectionFix($gamePlayer.isDirectionFixed()); + this.setTransparent($gamePlayer.isTransparent()); +}; + +Game_Follower.prototype.chaseCharacter = function(character) { + var sx = this.deltaXFrom(character.x); + var sy = this.deltaYFrom(character.y); + if (sx !== 0 && sy !== 0) { + this.moveDiagonally(sx > 0 ? 4 : 6, sy > 0 ? 8 : 2); + } else if (sx !== 0) { + this.moveStraight(sx > 0 ? 4 : 6); + } else if (sy !== 0) { + this.moveStraight(sy > 0 ? 8 : 2); + } + this.setMoveSpeed($gamePlayer.realMoveSpeed()); +}; + +//----------------------------------------------------------------------------- +// Game_Followers +// +// The wrapper class for a follower array. + +function Game_Followers() { + this.initialize.apply(this, arguments); +} + +Game_Followers.prototype.initialize = function() { + this._visible = $dataSystem.optFollowers; + this._gathering = false; + this._data = []; + for (var i = 1; i < $gameParty.maxBattleMembers(); i++) { + this._data.push(new Game_Follower(i)); + } +}; + +Game_Followers.prototype.isVisible = function() { + return this._visible; +}; + +Game_Followers.prototype.show = function() { + this._visible = true; +}; + +Game_Followers.prototype.hide = function() { + this._visible = false; +}; + +Game_Followers.prototype.follower = function(index) { + return this._data[index]; +}; + +Game_Followers.prototype.forEach = function(callback, thisObject) { + this._data.forEach(callback, thisObject); +}; + +Game_Followers.prototype.reverseEach = function(callback, thisObject) { + this._data.reverse(); + this._data.forEach(callback, thisObject); + this._data.reverse(); +}; + +Game_Followers.prototype.refresh = function() { + this.forEach(function(follower) { + return follower.refresh(); + }, this); +}; + +Game_Followers.prototype.update = function() { + if (this.areGathering()) { + if (!this.areMoving()) { + this.updateMove(); + } + if (this.areGathered()) { + this._gathering = false; + } + } + this.forEach(function(follower) { + follower.update(); + }, this); +}; + +Game_Followers.prototype.updateMove = function() { + for (var i = this._data.length - 1; i >= 0; i--) { + var precedingCharacter = (i > 0 ? this._data[i - 1] : $gamePlayer); + this._data[i].chaseCharacter(precedingCharacter); + } +}; + +Game_Followers.prototype.jumpAll = function() { + if ($gamePlayer.isJumping()) { + for (var i = 0; i < this._data.length; i++) { + var follower = this._data[i]; + var sx = $gamePlayer.deltaXFrom(follower.x); + var sy = $gamePlayer.deltaYFrom(follower.y); + follower.jump(sx, sy); + } + } +}; + +Game_Followers.prototype.synchronize = function(x, y, d) { + this.forEach(function(follower) { + follower.locate(x, y); + follower.setDirection(d); + }, this); +}; + +Game_Followers.prototype.gather = function() { + this._gathering = true; +}; + +Game_Followers.prototype.areGathering = function() { + return this._gathering; +}; + +Game_Followers.prototype.visibleFollowers = function() { + return this._data.filter(function(follower) { + return follower.isVisible(); + }, this); +}; + +Game_Followers.prototype.areMoving = function() { + return this.visibleFollowers().some(function(follower) { + return follower.isMoving(); + }, this); +}; + +Game_Followers.prototype.areGathered = function() { + return this.visibleFollowers().every(function(follower) { + return !follower.isMoving() && follower.pos($gamePlayer.x, $gamePlayer.y); + }, this); +}; + +Game_Followers.prototype.isSomeoneCollided = function(x, y) { + return this.visibleFollowers().some(function(follower) { + return follower.pos(x, y); + }, this); +}; + +//----------------------------------------------------------------------------- +// Game_Vehicle +// +// The game object class for a vehicle. + +function Game_Vehicle() { + this.initialize.apply(this, arguments); +} + +Game_Vehicle.prototype = Object.create(Game_Character.prototype); +Game_Vehicle.prototype.constructor = Game_Vehicle; + +Game_Vehicle.prototype.initialize = function(type) { + Game_Character.prototype.initialize.call(this); + this._type = type; + this.resetDirection(); + this.initMoveSpeed(); + this.loadSystemSettings(); +}; + +Game_Vehicle.prototype.initMembers = function() { + Game_Character.prototype.initMembers.call(this); + this._type = ''; + this._mapId = 0; + this._altitude = 0; + this._driving = false; + this._bgm = null; +}; + +Game_Vehicle.prototype.isBoat = function() { + return this._type === 'boat'; +}; + +Game_Vehicle.prototype.isShip = function() { + return this._type === 'ship'; +}; + +Game_Vehicle.prototype.isAirship = function() { + return this._type === 'airship'; +}; + +Game_Vehicle.prototype.resetDirection = function() { + this.setDirection(4); +}; + +Game_Vehicle.prototype.initMoveSpeed = function() { + if (this.isBoat()) { + this.setMoveSpeed(4); + } else if (this.isShip()) { + this.setMoveSpeed(5); + } else if (this.isAirship()) { + this.setMoveSpeed(6); + } +}; + +Game_Vehicle.prototype.vehicle = function() { + if (this.isBoat()) { + return $dataSystem.boat; + } else if (this.isShip()) { + return $dataSystem.ship; + } else if (this.isAirship()) { + return $dataSystem.airship; + } else { + return null; + } +}; + +Game_Vehicle.prototype.loadSystemSettings = function() { + var vehicle = this.vehicle(); + this._mapId = vehicle.startMapId; + this.setPosition(vehicle.startX, vehicle.startY); + this.setImage(vehicle.characterName, vehicle.characterIndex); +}; + +Game_Vehicle.prototype.refresh = function() { + if (this._driving) { + this._mapId = $gameMap.mapId(); + this.syncWithPlayer(); + } else if (this._mapId === $gameMap.mapId()) { + this.locate(this.x, this.y); + } + if (this.isAirship()) { + this.setPriorityType(this._driving ? 2 : 0); + } else { + this.setPriorityType(1); + } + this.setWalkAnime(this._driving); + this.setStepAnime(this._driving); + this.setTransparent(this._mapId !== $gameMap.mapId()); +}; + +Game_Vehicle.prototype.setLocation = function(mapId, x, y) { + this._mapId = mapId; + this.setPosition(x, y); + this.refresh(); +}; + +Game_Vehicle.prototype.pos = function(x, y) { + if (this._mapId === $gameMap.mapId()) { + return Game_Character.prototype.pos.call(this, x, y); + } else { + return false; + } +}; + +Game_Vehicle.prototype.isMapPassable = function(x, y, d) { + var x2 = $gameMap.roundXWithDirection(x, d); + var y2 = $gameMap.roundYWithDirection(y, d); + if (this.isBoat()) { + return $gameMap.isBoatPassable(x2, y2); + } else if (this.isShip()) { + return $gameMap.isShipPassable(x2, y2); + } else if (this.isAirship()) { + return true; + } else { + return false; + } +}; + +Game_Vehicle.prototype.getOn = function() { + this._driving = true; + this.setWalkAnime(true); + this.setStepAnime(true); + $gameSystem.saveWalkingBgm(); + this.playBgm(); +}; + +Game_Vehicle.prototype.getOff = function() { + this._driving = false; + this.setWalkAnime(false); + this.setStepAnime(false); + this.resetDirection(); + $gameSystem.replayWalkingBgm(); +}; + +Game_Vehicle.prototype.setBgm = function(bgm) { + this._bgm = bgm; +}; + +Game_Vehicle.prototype.playBgm = function() { + AudioManager.playBgm(this._bgm || this.vehicle().bgm); +}; + +Game_Vehicle.prototype.syncWithPlayer = function() { + this.copyPosition($gamePlayer); + this.refreshBushDepth(); +}; + +Game_Vehicle.prototype.screenY = function() { + return Game_Character.prototype.screenY.call(this) - this._altitude; +}; + +Game_Vehicle.prototype.shadowX = function() { + return this.screenX(); +}; + +Game_Vehicle.prototype.shadowY = function() { + return this.screenY() + this._altitude; +}; + +Game_Vehicle.prototype.shadowOpacity = function() { + return 255 * this._altitude / this.maxAltitude(); +}; + +Game_Vehicle.prototype.canMove = function() { + if (this.isAirship()) { + return this.isHighest(); + } else { + return true; + } +}; + +Game_Vehicle.prototype.update = function() { + Game_Character.prototype.update.call(this); + if (this.isAirship()) { + this.updateAirship(); + } +}; + +Game_Vehicle.prototype.updateAirship = function() { + this.updateAirshipAltitude(); + this.setStepAnime(this.isHighest()); + this.setPriorityType(this.isLowest() ? 0 : 2); +}; + +Game_Vehicle.prototype.updateAirshipAltitude = function() { + if (this._driving && !this.isHighest()) { + this._altitude++; + } + if (!this._driving && !this.isLowest()) { + this._altitude--; + } +}; + +Game_Vehicle.prototype.maxAltitude = function() { + return 48; +}; + +Game_Vehicle.prototype.isLowest = function() { + return this._altitude <= 0; +}; + +Game_Vehicle.prototype.isHighest = function() { + return this._altitude >= this.maxAltitude(); +}; + +Game_Vehicle.prototype.isTakeoffOk = function() { + return $gamePlayer.areFollowersGathered(); +}; + +Game_Vehicle.prototype.isLandOk = function(x, y, d) { + if (this.isAirship()) { + if (!$gameMap.isAirshipLandOk(x, y)) { + return false; + } + if ($gameMap.eventsXy(x, y).length > 0) { + return false; + } + } else { + var x2 = $gameMap.roundXWithDirection(x, d); + var y2 = $gameMap.roundYWithDirection(y, d); + if (!$gameMap.isValid(x2, y2)) { + return false; + } + if (!$gameMap.isPassable(x2, y2, this.reverseDir(d))) { + return false; + } + if (this.isCollidedWithCharacters(x2, y2)) { + return false; + } + } + return true; +}; + +//----------------------------------------------------------------------------- +// Game_Event +// +// The game object class for an event. It contains functionality for event page +// switching and running parallel process events. + +function Game_Event() { + this.initialize.apply(this, arguments); +} + +Game_Event.prototype = Object.create(Game_Character.prototype); +Game_Event.prototype.constructor = Game_Event; + +Game_Event.prototype.initialize = function(mapId, eventId) { + Game_Character.prototype.initialize.call(this); + this._mapId = mapId; + this._eventId = eventId; + this.locate(this.event().x, this.event().y); + this.refresh(); +}; + +Game_Event.prototype.initMembers = function() { + Game_Character.prototype.initMembers.call(this); + this._moveType = 0; + this._trigger = 0; + this._starting = false; + this._erased = false; + this._pageIndex = -2; + this._originalPattern = 1; + this._originalDirection = 2; + this._prelockDirection = 0; + this._locked = false; +}; + +Game_Event.prototype.eventId = function() { + return this._eventId; +}; + +Game_Event.prototype.event = function() { + return $dataMap.events[this._eventId]; +}; + +Game_Event.prototype.page = function() { + return this.event().pages[this._pageIndex]; +}; + +Game_Event.prototype.list = function() { + return this.page().list; +}; + +Game_Event.prototype.isCollidedWithCharacters = function(x, y) { + return (Game_Character.prototype.isCollidedWithCharacters.call(this, x, y) || + this.isCollidedWithPlayerCharacters(x, y)); +}; + +Game_Event.prototype.isCollidedWithEvents = function(x, y) { + var events = $gameMap.eventsXyNt(x, y); + return events.length > 0; +}; + +Game_Event.prototype.isCollidedWithPlayerCharacters = function(x, y) { + return this.isNormalPriority() && $gamePlayer.isCollided(x, y); +}; + +Game_Event.prototype.lock = function() { + if (!this._locked) { + this._prelockDirection = this.direction(); + this.turnTowardPlayer(); + this._locked = true; + } +}; + +Game_Event.prototype.unlock = function() { + if (this._locked) { + this._locked = false; + this.setDirection(this._prelockDirection); + } +}; + +Game_Event.prototype.updateStop = function() { + if (this._locked) { + this.resetStopCount(); + } + Game_Character.prototype.updateStop.call(this); + if (!this.isMoveRouteForcing()) { + this.updateSelfMovement(); + } +}; + +Game_Event.prototype.updateSelfMovement = function() { + if (!this._locked && this.isNearTheScreen() && + this.checkStop(this.stopCountThreshold())) { + switch (this._moveType) { + case 1: + this.moveTypeRandom(); + break; + case 2: + this.moveTypeTowardPlayer(); + break; + case 3: + this.moveTypeCustom(); + break; + } + } +}; + +Game_Event.prototype.stopCountThreshold = function() { + return 30 * (5 - this.moveFrequency()); +}; + +Game_Event.prototype.moveTypeRandom = function() { + switch (Math.randomInt(6)) { + case 0: case 1: + this.moveRandom(); + break; + case 2: case 3: case 4: + this.moveForward(); + break; + case 5: + this.resetStopCount(); + break; + } +}; + +Game_Event.prototype.moveTypeTowardPlayer = function() { + if (this.isNearThePlayer()) { + switch (Math.randomInt(6)) { + case 0: case 1: case 2: case 3: + this.moveTowardPlayer(); + break; + case 4: + this.moveRandom(); + break; + case 5: + this.moveForward(); + break; + } + } else { + this.moveRandom(); + } +}; + +Game_Event.prototype.isNearThePlayer = function() { + var sx = Math.abs(this.deltaXFrom($gamePlayer.x)); + var sy = Math.abs(this.deltaYFrom($gamePlayer.y)); + return sx + sy < 20; +}; + +Game_Event.prototype.moveTypeCustom = function() { + this.updateRoutineMove(); +}; + +Game_Event.prototype.isStarting = function() { + return this._starting; +}; + +Game_Event.prototype.clearStartingFlag = function() { + this._starting = false; +}; + +Game_Event.prototype.isTriggerIn = function(triggers) { + return triggers.contains(this._trigger); +}; + +Game_Event.prototype.start = function() { + var list = this.list(); + if (list && list.length > 1) { + this._starting = true; + if (this.isTriggerIn([0,1,2])) { + this.lock(); + } + } +}; + +Game_Event.prototype.erase = function() { + this._erased = true; + this.refresh(); +}; + +Game_Event.prototype.refresh = function() { + var newPageIndex = this._erased ? -1 : this.findProperPageIndex(); + if (this._pageIndex !== newPageIndex) { + this._pageIndex = newPageIndex; + this.setupPage(); + } +}; + +Game_Event.prototype.findProperPageIndex = function() { + var pages = this.event().pages; + for (var i = pages.length - 1; i >= 0; i--) { + var page = pages[i]; + if (this.meetsConditions(page)) { + return i; + } + } + return -1; +}; + +Game_Event.prototype.meetsConditions = function(page) { + var c = page.conditions; + if (c.switch1Valid) { + if (!$gameSwitches.value(c.switch1Id)) { + return false; + } + } + if (c.switch2Valid) { + if (!$gameSwitches.value(c.switch2Id)) { + return false; + } + } + if (c.variableValid) { + if ($gameVariables.value(c.variableId) < c.variableValue) { + return false; + } + } + if (c.selfSwitchValid) { + var key = [this._mapId, this._eventId, c.selfSwitchCh]; + if ($gameSelfSwitches.value(key) !== true) { + return false; + } + } + if (c.itemValid) { + var item = $dataItems[c.itemId]; + if (!$gameParty.hasItem(item)) { + return false; + } + } + if (c.actorValid) { + var actor = $gameActors.actor(c.actorId); + if (!$gameParty.members().contains(actor)) { + return false; + } + } + return true; +}; + +Game_Event.prototype.setupPage = function() { + if (this._pageIndex >= 0) { + this.setupPageSettings(); + } else { + this.clearPageSettings(); + } + this.refreshBushDepth(); + this.clearStartingFlag(); + this.checkEventTriggerAuto(); +}; + +Game_Event.prototype.clearPageSettings = function() { + this.setImage('', 0); + this._moveType = 0; + this._trigger = null; + this._interpreter = null; + this.setThrough(true); +}; + +Game_Event.prototype.setupPageSettings = function() { + var page = this.page(); + var image = page.image; + if (image.tileId > 0) { + this.setTileImage(image.tileId); + } else { + this.setImage(image.characterName, image.characterIndex); + } + if (this._originalDirection !== image.direction) { + this._originalDirection = image.direction; + this._prelockDirection = 0; + this.setDirectionFix(false); + this.setDirection(image.direction); + } + if (this._originalPattern !== image.pattern) { + this._originalPattern = image.pattern; + this.setPattern(image.pattern); + } + this.setMoveSpeed(page.moveSpeed); + this.setMoveFrequency(page.moveFrequency); + this.setPriorityType(page.priorityType); + this.setWalkAnime(page.walkAnime); + this.setStepAnime(page.stepAnime); + this.setDirectionFix(page.directionFix); + this.setThrough(page.through); + this.setMoveRoute(page.moveRoute); + this._moveType = page.moveType; + this._trigger = page.trigger; + if (this._trigger === 4) { + this._interpreter = new Game_Interpreter(); + } else { + this._interpreter = null; + } +}; + +Game_Event.prototype.isOriginalPattern = function() { + return this.pattern() === this._originalPattern; +}; + +Game_Event.prototype.resetPattern = function() { + this.setPattern(this._originalPattern); +}; + +Game_Event.prototype.checkEventTriggerTouch = function(x, y) { + if (!$gameMap.isEventRunning()) { + if (this._trigger === 2 && $gamePlayer.pos(x, y)) { + if (!this.isJumping() && this.isNormalPriority()) { + this.start(); + } + } + } +}; + +Game_Event.prototype.checkEventTriggerAuto = function() { + if (this._trigger === 3) { + this.start(); + } +}; + +Game_Event.prototype.update = function() { + Game_Character.prototype.update.call(this); + this.checkEventTriggerAuto(); + this.updateParallel(); +}; + +Game_Event.prototype.updateParallel = function() { + if (this._interpreter) { + if (!this._interpreter.isRunning()) { + this._interpreter.setup(this.list(), this._eventId); + } + this._interpreter.update(); + } +}; + +Game_Event.prototype.locate = function(x, y) { + Game_Character.prototype.locate.call(this, x, y); + this._prelockDirection = 0; +}; + +Game_Event.prototype.forceMoveRoute = function(moveRoute) { + Game_Character.prototype.forceMoveRoute.call(this, moveRoute); + this._prelockDirection = 0; +}; + +//----------------------------------------------------------------------------- +// Game_Interpreter +// +// The interpreter for running event commands. + +function Game_Interpreter() { + this.initialize.apply(this, arguments); +} + +Game_Interpreter.prototype.initialize = function(depth) { + this._depth = depth || 0; + this.checkOverflow(); + this.clear(); + this._branch = {}; + this._params = []; + this._indent = 0; + this._frameCount = 0; + this._freezeChecker = 0; +}; + +Game_Interpreter.prototype.checkOverflow = function() { + if (this._depth >= 100) { + throw new Error('Common event calls exceeded the limit'); + } +}; + +Game_Interpreter.prototype.clear = function() { + this._mapId = 0; + this._eventId = 0; + this._list = null; + this._index = 0; + this._waitCount = 0; + this._waitMode = ''; + this._comments = ''; + this._character = null; + this._childInterpreter = null; +}; + +Game_Interpreter.prototype.setup = function(list, eventId) { + this.clear(); + this._mapId = $gameMap.mapId(); + this._eventId = eventId || 0; + this._list = list; +}; + +Game_Interpreter.prototype.eventId = function() { + return this._eventId; +}; + +Game_Interpreter.prototype.isOnCurrentMap = function() { + return this._mapId === $gameMap.mapId(); +}; + +Game_Interpreter.prototype.setupReservedCommonEvent = function() { + if ($gameTemp.isCommonEventReserved()) { + this.setup($gameTemp.reservedCommonEvent().list); + $gameTemp.clearCommonEvent(); + return true; + } else { + return false; + } +}; + +Game_Interpreter.prototype.isRunning = function() { + return !!this._list; +}; + +Game_Interpreter.prototype.update = function() { + while (this.isRunning()) { + if (this.updateChild() || this.updateWait()) { + break; + } + if (SceneManager.isSceneChanging()) { + break; + } + if (!this.executeCommand()) { + break; + } + if (this.checkFreeze()) { + break; + } + } +}; + +Game_Interpreter.prototype.updateChild = function() { + if (this._childInterpreter) { + this._childInterpreter.update(); + if (this._childInterpreter.isRunning()) { + return true; + } else { + this._childInterpreter = null; + } + } + return false; +}; + +Game_Interpreter.prototype.updateWait = function() { + return this.updateWaitCount() || this.updateWaitMode(); +}; + +Game_Interpreter.prototype.updateWaitCount = function() { + if (this._waitCount > 0) { + this._waitCount--; + return true; + } + return false; +}; + +Game_Interpreter.prototype.updateWaitMode = function() { + var waiting = false; + switch (this._waitMode) { + case 'message': + waiting = $gameMessage.isBusy(); + break; + case 'transfer': + waiting = $gamePlayer.isTransferring(); + break; + case 'scroll': + waiting = $gameMap.isScrolling(); + break; + case 'route': + waiting = this._character.isMoveRouteForcing(); + break; + case 'animation': + waiting = this._character.isAnimationPlaying(); + break; + case 'balloon': + waiting = this._character.isBalloonPlaying(); + break; + case 'gather': + waiting = $gamePlayer.areFollowersGathering(); + break; + case 'action': + waiting = BattleManager.isActionForced(); + break; + case 'video': + waiting = Graphics.isVideoPlaying(); + break; + case 'image': + waiting = !ImageManager.isReady(); + break; + } + if (!waiting) { + this._waitMode = ''; + } + return waiting; +}; + +Game_Interpreter.prototype.setWaitMode = function(waitMode) { + this._waitMode = waitMode; +}; + +Game_Interpreter.prototype.wait = function(duration) { + this._waitCount = duration; +}; + +Game_Interpreter.prototype.fadeSpeed = function() { + return 24; +}; + +Game_Interpreter.prototype.executeCommand = function() { + var command = this.currentCommand(); + if (command) { + this._params = command.parameters; + this._indent = command.indent; + var methodName = 'command' + command.code; + if (typeof this[methodName] === 'function') { + if (!this[methodName]()) { + return false; + } + } + this._index++; + } else { + this.terminate(); + } + return true; +}; + +Game_Interpreter.prototype.checkFreeze = function() { + if (this._frameCount !== Graphics.frameCount) { + this._frameCount = Graphics.frameCount; + this._freezeChecker = 0; + } + if (this._freezeChecker++ >= 100000) { + return true; + } else { + return false; + } +}; + +Game_Interpreter.prototype.terminate = function() { + this._list = null; + this._comments = ''; +}; + +Game_Interpreter.prototype.skipBranch = function() { + while (this._list[this._index + 1].indent > this._indent) { + this._index++; + } +}; + +Game_Interpreter.prototype.currentCommand = function() { + return this._list[this._index]; +}; + +Game_Interpreter.prototype.nextEventCode = function() { + var command = this._list[this._index + 1]; + if (command) { + return command.code; + } else { + return 0; + } +}; + +Game_Interpreter.prototype.iterateActorId = function(param, callback) { + if (param === 0) { + $gameParty.members().forEach(callback); + } else { + var actor = $gameActors.actor(param); + if (actor) { + callback(actor); + } + } +}; + +Game_Interpreter.prototype.iterateActorEx = function(param1, param2, callback) { + if (param1 === 0) { + this.iterateActorId(param2, callback); + } else { + this.iterateActorId($gameVariables.value(param2), callback); + } +}; + +Game_Interpreter.prototype.iterateActorIndex = function(param, callback) { + if (param < 0) { + $gameParty.members().forEach(callback); + } else { + var actor = $gameParty.members()[param]; + if (actor) { + callback(actor); + } + } +}; + +Game_Interpreter.prototype.iterateEnemyIndex = function(param, callback) { + if (param < 0) { + $gameTroop.members().forEach(callback); + } else { + var enemy = $gameTroop.members()[param]; + if (enemy) { + callback(enemy); + } + } +}; + +Game_Interpreter.prototype.iterateBattler = function(param1, param2, callback) { + if ($gameParty.inBattle()) { + if (param1 === 0) { + this.iterateEnemyIndex(param2, callback); + } else { + this.iterateActorId(param2, callback); + } + } +}; + +Game_Interpreter.prototype.character = function(param) { + if ($gameParty.inBattle()) { + return null; + } else if (param < 0) { + return $gamePlayer; + } else if (this.isOnCurrentMap()) { + return $gameMap.event(param > 0 ? param : this._eventId); + } else { + return null; + } +}; + +Game_Interpreter.prototype.operateValue = function(operation, operandType, operand) { + var value = operandType === 0 ? operand : $gameVariables.value(operand); + return operation === 0 ? value : -value; +}; + +Game_Interpreter.prototype.changeHp = function(target, value, allowDeath) { + if (target.isAlive()) { + if (!allowDeath && target.hp <= -value) { + value = 1 - target.hp; + } + target.gainHp(value); + if (target.isDead()) { + target.performCollapse(); + } + } +}; + +// Show Text +Game_Interpreter.prototype.command101 = function() { + if (!$gameMessage.isBusy()) { + $gameMessage.setFaceImage(this._params[0], this._params[1]); + $gameMessage.setBackground(this._params[2]); + $gameMessage.setPositionType(this._params[3]); + while (this.nextEventCode() === 401) { // Text data + this._index++; + $gameMessage.add(this.currentCommand().parameters[0]); + } + switch (this.nextEventCode()) { + case 102: // Show Choices + this._index++; + this.setupChoices(this.currentCommand().parameters); + break; + case 103: // Input Number + this._index++; + this.setupNumInput(this.currentCommand().parameters); + break; + case 104: // Select Item + this._index++; + this.setupItemChoice(this.currentCommand().parameters); + break; + } + this._index++; + this.setWaitMode('message'); + } + return false; +}; + +// Show Choices +Game_Interpreter.prototype.command102 = function() { + if (!$gameMessage.isBusy()) { + this.setupChoices(this._params); + this._index++; + this.setWaitMode('message'); + } + return false; +}; + +Game_Interpreter.prototype.setupChoices = function(params) { + var choices = params[0].clone(); + var cancelType = params[1]; + var defaultType = params.length > 2 ? params[2] : 0; + var positionType = params.length > 3 ? params[3] : 2; + var background = params.length > 4 ? params[4] : 0; + if (cancelType >= choices.length) { + cancelType = -2; + } + $gameMessage.setChoices(choices, defaultType, cancelType); + $gameMessage.setChoiceBackground(background); + $gameMessage.setChoicePositionType(positionType); + $gameMessage.setChoiceCallback(function(n) { + this._branch[this._indent] = n; + }.bind(this)); +}; + +// When [**] +Game_Interpreter.prototype.command402 = function() { + if (this._branch[this._indent] !== this._params[0]) { + this.skipBranch(); + } + return true; +}; + +// When Cancel +Game_Interpreter.prototype.command403 = function() { + if (this._branch[this._indent] >= 0) { + this.skipBranch(); + } + return true; +}; + +// Input Number +Game_Interpreter.prototype.command103 = function() { + if (!$gameMessage.isBusy()) { + this.setupNumInput(this._params); + this._index++; + this.setWaitMode('message'); + } + return false; +}; + +Game_Interpreter.prototype.setupNumInput = function(params) { + $gameMessage.setNumberInput(params[0], params[1]); +}; + +// Select Item +Game_Interpreter.prototype.command104 = function() { + if (!$gameMessage.isBusy()) { + this.setupItemChoice(this._params); + this._index++; + this.setWaitMode('message'); + } + return false; +}; + +Game_Interpreter.prototype.setupItemChoice = function(params) { + $gameMessage.setItemChoice(params[0], params[1] || 2); +}; + +// Show Scrolling Text +Game_Interpreter.prototype.command105 = function() { + if (!$gameMessage.isBusy()) { + $gameMessage.setScroll(this._params[0], this._params[1]); + while (this.nextEventCode() === 405) { + this._index++; + $gameMessage.add(this.currentCommand().parameters[0]); + } + this._index++; + this.setWaitMode('message'); + } + return false; +}; + +// Comment +Game_Interpreter.prototype.command108 = function() { + this._comments = [this._params[0]]; + while (this.nextEventCode() === 408) { + this._index++; + this._comments.push(this.currentCommand().parameters[0]); + } + return true; +}; + +// Conditional Branch +Game_Interpreter.prototype.command111 = function() { + var result = false; + switch (this._params[0]) { + case 0: // Switch + result = ($gameSwitches.value(this._params[1]) === (this._params[2] === 0)); + break; + case 1: // Variable + var value1 = $gameVariables.value(this._params[1]); + var value2; + if (this._params[2] === 0) { + value2 = this._params[3]; + } else { + value2 = $gameVariables.value(this._params[3]); + } + switch (this._params[4]) { + case 0: // Equal to + result = (value1 === value2); + break; + case 1: // Greater than or Equal to + result = (value1 >= value2); + break; + case 2: // Less than or Equal to + result = (value1 <= value2); + break; + case 3: // Greater than + result = (value1 > value2); + break; + case 4: // Less than + result = (value1 < value2); + break; + case 5: // Not Equal to + result = (value1 !== value2); + break; + } + break; + case 2: // Self Switch + if (this._eventId > 0) { + var key = [this._mapId, this._eventId, this._params[1]]; + result = ($gameSelfSwitches.value(key) === (this._params[2] === 0)); + } + break; + case 3: // Timer + if ($gameTimer.isWorking()) { + if (this._params[2] === 0) { + result = ($gameTimer.seconds() >= this._params[1]); + } else { + result = ($gameTimer.seconds() <= this._params[1]); + } + } + break; + case 4: // Actor + var actor = $gameActors.actor(this._params[1]); + if (actor) { + var n = this._params[3]; + switch (this._params[2]) { + case 0: // In the Party + result = $gameParty.members().contains(actor); + break; + case 1: // Name + result = (actor.name() === n); + break; + case 2: // Class + result = actor.isClass($dataClasses[n]); + break; + case 3: // Skill + result = actor.isLearnedSkill(n); + break; + case 4: // Weapon + result = actor.hasWeapon($dataWeapons[n]); + break; + case 5: // Armor + result = actor.hasArmor($dataArmors[n]); + break; + case 6: // State + result = actor.isStateAffected(n); + break; + } + } + break; + case 5: // Enemy + var enemy = $gameTroop.members()[this._params[1]]; + if (enemy) { + switch (this._params[2]) { + case 0: // Appeared + result = enemy.isAlive(); + break; + case 1: // State + result = enemy.isStateAffected(this._params[3]); + break; + } + } + break; + case 6: // Character + var character = this.character(this._params[1]); + if (character) { + result = (character.direction() === this._params[2]); + } + break; + case 7: // Gold + switch (this._params[2]) { + case 0: // Greater than or equal to + result = ($gameParty.gold() >= this._params[1]); + break; + case 1: // Less than or equal to + result = ($gameParty.gold() <= this._params[1]); + break; + case 2: // Less than + result = ($gameParty.gold() < this._params[1]); + break; + } + break; + case 8: // Item + result = $gameParty.hasItem($dataItems[this._params[1]]); + break; + case 9: // Weapon + result = $gameParty.hasItem($dataWeapons[this._params[1]], this._params[2]); + break; + case 10: // Armor + result = $gameParty.hasItem($dataArmors[this._params[1]], this._params[2]); + break; + case 11: // Button + result = Input.isPressed(this._params[1]); + break; + case 12: // Script + result = !!eval(this._params[1]); + break; + case 13: // Vehicle + result = ($gamePlayer.vehicle() === $gameMap.vehicle(this._params[1])); + break; + } + this._branch[this._indent] = result; + if (this._branch[this._indent] === false) { + this.skipBranch(); + } + return true; +}; + +// Else +Game_Interpreter.prototype.command411 = function() { + if (this._branch[this._indent] !== false) { + this.skipBranch(); + } + return true; +}; + +// Loop +Game_Interpreter.prototype.command112 = function() { + return true; +}; + +// Repeat Above +Game_Interpreter.prototype.command413 = function() { + do { + this._index--; + } while (this.currentCommand().indent !== this._indent); + return true; +}; + +// Break Loop +Game_Interpreter.prototype.command113 = function() { + while (this._index < this._list.length - 1) { + this._index++; + var command = this.currentCommand(); + if (command.code === 413 && command.indent < this._indent) { + break; + } + } + return true; +}; + +// Exit Event Processing +Game_Interpreter.prototype.command115 = function() { + this._index = this._list.length; + return true; +}; + +// Common Event +Game_Interpreter.prototype.command117 = function() { + var commonEvent = $dataCommonEvents[this._params[0]]; + if (commonEvent) { + var eventId = this.isOnCurrentMap() ? this._eventId : 0; + this.setupChild(commonEvent.list, eventId); + } + return true; +}; + +Game_Interpreter.prototype.setupChild = function(list, eventId) { + this._childInterpreter = new Game_Interpreter(this._depth + 1); + this._childInterpreter.setup(list, eventId); +}; + +// Label +Game_Interpreter.prototype.command118 = function() { + return true; +}; + +// Jump to Label +Game_Interpreter.prototype.command119 = function() { + var labelName = this._params[0]; + for (var i = 0; i < this._list.length; i++) { + var command = this._list[i]; + if (command.code === 118 && command.parameters[0] === labelName) { + this.jumpTo(i); + return; + } + } + return true; +}; + +Game_Interpreter.prototype.jumpTo = function(index) { + var lastIndex = this._index; + var startIndex = Math.min(index, lastIndex); + var endIndex = Math.max(index, lastIndex); + var indent = this._indent; + for (var i = startIndex; i <= endIndex; i++) { + var newIndent = this._list[i].indent; + if (newIndent !== indent) { + this._branch[indent] = null; + indent = newIndent; + } + } + this._index = index; +}; + +// Control Switches +Game_Interpreter.prototype.command121 = function() { + for (var i = this._params[0]; i <= this._params[1]; i++) { + $gameSwitches.setValue(i, this._params[2] === 0); + } + return true; +}; + +// Control Variables +Game_Interpreter.prototype.command122 = function() { + var value = 0; + switch (this._params[3]) { // Operand + case 0: // Constant + value = this._params[4]; + break; + case 1: // Variable + value = $gameVariables.value(this._params[4]); + break; + case 2: // Random + value = this._params[4] + Math.randomInt(this._params[5] - this._params[4] + 1); + break; + case 3: // Game Data + value = this.gameDataOperand(this._params[4], this._params[5], this._params[6]); + break; + case 4: // Script + value = eval(this._params[4]); + break; + } + for (var i = this._params[0]; i <= this._params[1]; i++) { + this.operateVariable(i, this._params[2], value); + } + return true; +}; + +Game_Interpreter.prototype.gameDataOperand = function(type, param1, param2) { + switch (type) { + case 0: // Item + return $gameParty.numItems($dataItems[param1]); + case 1: // Weapon + return $gameParty.numItems($dataWeapons[param1]); + case 2: // Armor + return $gameParty.numItems($dataArmors[param1]); + case 3: // Actor + var actor = $gameActors.actor(param1); + if (actor) { + switch (param2) { + case 0: // Level + return actor.level; + case 1: // EXP + return actor.currentExp(); + case 2: // HP + return actor.hp; + case 3: // MP + return actor.mp; + default: // Parameter + if (param2 >= 4 && param2 <= 11) { + return actor.param(param2 - 4); + } + } + } + break; + case 4: // Enemy + var enemy = $gameTroop.members()[param1]; + if (enemy) { + switch (param2) { + case 0: // HP + return enemy.hp; + case 1: // MP + return enemy.mp; + default: // Parameter + if (param2 >= 2 && param2 <= 9) { + return enemy.param(param2 - 2); + } + } + } + break; + case 5: // Character + var character = this.character(param1); + if (character) { + switch (param2) { + case 0: // Map X + return character.x; + case 1: // Map Y + return character.y; + case 2: // Direction + return character.direction(); + case 3: // Screen X + return character.screenX(); + case 4: // Screen Y + return character.screenY(); + } + } + break; + case 6: // Party + actor = $gameParty.members()[param1]; + return actor ? actor.actorId() : 0; + case 7: // Other + switch (param1) { + case 0: // Map ID + return $gameMap.mapId(); + case 1: // Party Members + return $gameParty.size(); + case 2: // Gold + return $gameParty.gold(); + case 3: // Steps + return $gameParty.steps(); + case 4: // Play Time + return $gameSystem.playtime(); + case 5: // Timer + return $gameTimer.seconds(); + case 6: // Save Count + return $gameSystem.saveCount(); + case 7: // Battle Count + return $gameSystem.battleCount(); + case 8: // Win Count + return $gameSystem.winCount(); + case 9: // Escape Count + return $gameSystem.escapeCount(); + } + break; + } + return 0; +}; + +Game_Interpreter.prototype.operateVariable = function(variableId, operationType, value) { + try { + var oldValue = $gameVariables.value(variableId); + switch (operationType) { + case 0: // Set + $gameVariables.setValue(variableId, oldValue = value); + break; + case 1: // Add + $gameVariables.setValue(variableId, oldValue + value); + break; + case 2: // Sub + $gameVariables.setValue(variableId, oldValue - value); + break; + case 3: // Mul + $gameVariables.setValue(variableId, oldValue * value); + break; + case 4: // Div + $gameVariables.setValue(variableId, oldValue / value); + break; + case 5: // Mod + $gameVariables.setValue(variableId, oldValue % value); + break; + } + } catch (e) { + $gameVariables.setValue(variableId, 0); + } +}; + +// Control Self Switch +Game_Interpreter.prototype.command123 = function() { + if (this._eventId > 0) { + var key = [this._mapId, this._eventId, this._params[0]]; + $gameSelfSwitches.setValue(key, this._params[1] === 0); + } + return true; +}; + +// Control Timer +Game_Interpreter.prototype.command124 = function() { + if (this._params[0] === 0) { // Start + $gameTimer.start(this._params[1] * 60); + } else { // Stop + $gameTimer.stop(); + } + return true; +}; + +// Change Gold +Game_Interpreter.prototype.command125 = function() { + var value = this.operateValue(this._params[0], this._params[1], this._params[2]); + $gameParty.gainGold(value); + return true; +}; + +// Change Items +Game_Interpreter.prototype.command126 = function() { + var value = this.operateValue(this._params[1], this._params[2], this._params[3]); + $gameParty.gainItem($dataItems[this._params[0]], value); + return true; +}; + +// Change Weapons +Game_Interpreter.prototype.command127 = function() { + var value = this.operateValue(this._params[1], this._params[2], this._params[3]); + $gameParty.gainItem($dataWeapons[this._params[0]], value, this._params[4]); + return true; +}; + +// Change Armors +Game_Interpreter.prototype.command128 = function() { + var value = this.operateValue(this._params[1], this._params[2], this._params[3]); + $gameParty.gainItem($dataArmors[this._params[0]], value, this._params[4]); + return true; +}; + +// Change Party Member +Game_Interpreter.prototype.command129 = function() { + var actor = $gameActors.actor(this._params[0]); + if (actor) { + if (this._params[1] === 0) { // Add + if (this._params[2]) { // Initialize + $gameActors.actor(this._params[0]).setup(this._params[0]); + } + $gameParty.addActor(this._params[0]); + } else { // Remove + $gameParty.removeActor(this._params[0]); + } + } + return true; +}; + +// Change Battle BGM +Game_Interpreter.prototype.command132 = function() { + $gameSystem.setBattleBgm(this._params[0]); + return true; +}; + +// Change Victory ME +Game_Interpreter.prototype.command133 = function() { + $gameSystem.setVictoryMe(this._params[0]); + return true; +}; + +// Change Save Access +Game_Interpreter.prototype.command134 = function() { + if (this._params[0] === 0) { + $gameSystem.disableSave(); + } else { + $gameSystem.enableSave(); + } + return true; +}; + +// Change Menu Access +Game_Interpreter.prototype.command135 = function() { + if (this._params[0] === 0) { + $gameSystem.disableMenu(); + } else { + $gameSystem.enableMenu(); + } + return true; +}; + +// Change Encounter Disable +Game_Interpreter.prototype.command136 = function() { + if (this._params[0] === 0) { + $gameSystem.disableEncounter(); + } else { + $gameSystem.enableEncounter(); + } + $gamePlayer.makeEncounterCount(); + return true; +}; + +// Change Formation Access +Game_Interpreter.prototype.command137 = function() { + if (this._params[0] === 0) { + $gameSystem.disableFormation(); + } else { + $gameSystem.enableFormation(); + } + return true; +}; + +// Change Window Color +Game_Interpreter.prototype.command138 = function() { + $gameSystem.setWindowTone(this._params[0]); + return true; +}; + +// Change Defeat ME +Game_Interpreter.prototype.command139 = function() { + $gameSystem.setDefeatMe(this._params[0]); + return true; +}; + +// Change Vehicle BGM +Game_Interpreter.prototype.command140 = function() { + var vehicle = $gameMap.vehicle(this._params[0]); + if (vehicle) { + vehicle.setBgm(this._params[1]); + } + return true; +}; + +// Transfer Player +Game_Interpreter.prototype.command201 = function() { + if (!$gameParty.inBattle() && !$gameMessage.isBusy()) { + var mapId, x, y; + if (this._params[0] === 0) { // Direct designation + mapId = this._params[1]; + x = this._params[2]; + y = this._params[3]; + } else { // Designation with variables + mapId = $gameVariables.value(this._params[1]); + x = $gameVariables.value(this._params[2]); + y = $gameVariables.value(this._params[3]); + } + $gamePlayer.reserveTransfer(mapId, x, y, this._params[4], this._params[5]); + this.setWaitMode('transfer'); + this._index++; + } + return false; +}; + +// Set Vehicle Location +Game_Interpreter.prototype.command202 = function() { + var mapId, x, y; + if (this._params[1] === 0) { // Direct designation + mapId = this._params[2]; + x = this._params[3]; + y = this._params[4]; + } else { // Designation with variables + mapId = $gameVariables.value(this._params[2]); + x = $gameVariables.value(this._params[3]); + y = $gameVariables.value(this._params[4]); + } + var vehicle = $gameMap.vehicle(this._params[0]); + if (vehicle) { + vehicle.setLocation(mapId, x, y); + } + return true; +}; + +// Set Event Location +Game_Interpreter.prototype.command203 = function() { + var character = this.character(this._params[0]); + if (character) { + if (this._params[1] === 0) { // Direct designation + character.locate(this._params[2], this._params[3]); + } else if (this._params[1] === 1) { // Designation with variables + var x = $gameVariables.value(this._params[2]); + var y = $gameVariables.value(this._params[3]); + character.locate(x, y); + } else { // Exchange with another event + var character2 = this.character(this._params[2]); + if (character2) { + character.swap(character2); + } + } + if (this._params[4] > 0) { + character.setDirection(this._params[4]); + } + } + return true; +}; + +// Scroll Map +Game_Interpreter.prototype.command204 = function() { + if (!$gameParty.inBattle()) { + if ($gameMap.isScrolling()) { + this.setWaitMode('scroll'); + return false; + } + $gameMap.startScroll(this._params[0], this._params[1], this._params[2]); + } + return true; +}; + +// Set Movement Route +Game_Interpreter.prototype.command205 = function() { + $gameMap.refreshIfNeeded(); + this._character = this.character(this._params[0]); + if (this._character) { + this._character.forceMoveRoute(this._params[1]); + if (this._params[1].wait) { + this.setWaitMode('route'); + } + } + return true; +}; + +// Getting On and Off Vehicles +Game_Interpreter.prototype.command206 = function() { + $gamePlayer.getOnOffVehicle(); + return true; +}; + +// Change Transparency +Game_Interpreter.prototype.command211 = function() { + $gamePlayer.setTransparent(this._params[0] === 0); + return true; +}; + +// Show Animation +Game_Interpreter.prototype.command212 = function() { + this._character = this.character(this._params[0]); + if (this._character) { + this._character.requestAnimation(this._params[1]); + if (this._params[2]) { + this.setWaitMode('animation'); + } + } + return true; +}; + +// Show Balloon Icon +Game_Interpreter.prototype.command213 = function() { + this._character = this.character(this._params[0]); + if (this._character) { + this._character.requestBalloon(this._params[1]); + if (this._params[2]) { + this.setWaitMode('balloon'); + } + } + return true; +}; + +// Erase Event +Game_Interpreter.prototype.command214 = function() { + if (this.isOnCurrentMap() && this._eventId > 0) { + $gameMap.eraseEvent(this._eventId); + } + return true; +}; + +// Change Player Followers +Game_Interpreter.prototype.command216 = function() { + if (this._params[0] === 0) { + $gamePlayer.showFollowers(); + } else { + $gamePlayer.hideFollowers(); + } + $gamePlayer.refresh(); + return true; +}; + +// Gather Followers +Game_Interpreter.prototype.command217 = function() { + if (!$gameParty.inBattle()) { + $gamePlayer.gatherFollowers(); + this.setWaitMode('gather'); + } + return true; +}; + +// Fadeout Screen +Game_Interpreter.prototype.command221 = function() { + if (!$gameMessage.isBusy()) { + $gameScreen.startFadeOut(this.fadeSpeed()); + this.wait(this.fadeSpeed()); + this._index++; + } + return false; +}; + +// Fadein Screen +Game_Interpreter.prototype.command222 = function() { + if (!$gameMessage.isBusy()) { + $gameScreen.startFadeIn(this.fadeSpeed()); + this.wait(this.fadeSpeed()); + this._index++; + } + return false; +}; + +// Tint Screen +Game_Interpreter.prototype.command223 = function() { + $gameScreen.startTint(this._params[0], this._params[1]); + if (this._params[2]) { + this.wait(this._params[1]); + } + return true; +}; + +// Flash Screen +Game_Interpreter.prototype.command224 = function() { + $gameScreen.startFlash(this._params[0], this._params[1]); + if (this._params[2]) { + this.wait(this._params[1]); + } + return true; +}; + +// Shake Screen +Game_Interpreter.prototype.command225 = function() { + $gameScreen.startShake(this._params[0], this._params[1], this._params[2]); + if (this._params[3]) { + this.wait(this._params[2]); + } + return true; +}; + +// Wait +Game_Interpreter.prototype.command230 = function() { + this.wait(this._params[0]); + return true; +}; + +// Show Picture +Game_Interpreter.prototype.command231 = function() { + var x, y; + if (this._params[3] === 0) { // Direct designation + x = this._params[4]; + y = this._params[5]; + } else { // Designation with variables + x = $gameVariables.value(this._params[4]); + y = $gameVariables.value(this._params[5]); + } + $gameScreen.showPicture(this._params[0], this._params[1], this._params[2], + x, y, this._params[6], this._params[7], this._params[8], this._params[9]); + return true; +}; + +// Move Picture +Game_Interpreter.prototype.command232 = function() { + var x, y; + if (this._params[3] === 0) { // Direct designation + x = this._params[4]; + y = this._params[5]; + } else { // Designation with variables + x = $gameVariables.value(this._params[4]); + y = $gameVariables.value(this._params[5]); + } + $gameScreen.movePicture(this._params[0], this._params[2], x, y, this._params[6], + this._params[7], this._params[8], this._params[9], this._params[10]); + if (this._params[11]) { + this.wait(this._params[10]); + } + return true; +}; + +// Rotate Picture +Game_Interpreter.prototype.command233 = function() { + $gameScreen.rotatePicture(this._params[0], this._params[1]); + return true; +}; + +// Tint Picture +Game_Interpreter.prototype.command234 = function() { + $gameScreen.tintPicture(this._params[0], this._params[1], this._params[2]); + if (this._params[3]) { + this.wait(this._params[2]); + } + return true; +}; + +// Erase Picture +Game_Interpreter.prototype.command235 = function() { + $gameScreen.erasePicture(this._params[0]); + return true; +}; + +// Set Weather Effect +Game_Interpreter.prototype.command236 = function() { + if (!$gameParty.inBattle()) { + $gameScreen.changeWeather(this._params[0], this._params[1], this._params[2]); + if (this._params[3]) { + this.wait(this._params[2]); + } + } + return true; +}; + +// Play BGM +Game_Interpreter.prototype.command241 = function() { + AudioManager.playBgm(this._params[0]); + return true; +}; + +// Fadeout BGM +Game_Interpreter.prototype.command242 = function() { + AudioManager.fadeOutBgm(this._params[0]); + return true; +}; + +// Save BGM +Game_Interpreter.prototype.command243 = function() { + $gameSystem.saveBgm(); + return true; +}; + +// Resume BGM +Game_Interpreter.prototype.command244 = function() { + $gameSystem.replayBgm(); + return true; +}; + +// Play BGS +Game_Interpreter.prototype.command245 = function() { + AudioManager.playBgs(this._params[0]); + return true; +}; + +// Fadeout BGS +Game_Interpreter.prototype.command246 = function() { + AudioManager.fadeOutBgs(this._params[0]); + return true; +}; + +// Play ME +Game_Interpreter.prototype.command249 = function() { + AudioManager.playMe(this._params[0]); + return true; +}; + +// Play SE +Game_Interpreter.prototype.command250 = function() { + AudioManager.playSe(this._params[0]); + return true; +}; + +// Stop SE +Game_Interpreter.prototype.command251 = function() { + AudioManager.stopSe(); + return true; +}; + +// Play Movie +Game_Interpreter.prototype.command261 = function() { + if (!$gameMessage.isBusy()) { + var name = this._params[0]; + if (name.length > 0) { + var ext = this.videoFileExt(); + Graphics.playVideo('movies/' + name + ext); + this.setWaitMode('video'); + } + this._index++; + } + return false; +}; + +Game_Interpreter.prototype.videoFileExt = function() { + if (Graphics.canPlayVideoType('video/webm') && !Utils.isMobileDevice()) { + return '.webm'; + } else { + return '.mp4'; + } +}; + +// Change Map Name Display +Game_Interpreter.prototype.command281 = function() { + if (this._params[0] === 0) { + $gameMap.enableNameDisplay(); + } else { + $gameMap.disableNameDisplay(); + } + return true; +}; + +// Change Tileset +Game_Interpreter.prototype.command282 = function() { + var tileset = $dataTilesets[this._params[0]]; + for (var i = 0; i < tileset.tilesetNames.length; i++) { + ImageManager.loadTileset(tileset.tilesetNames[i]); + } + if (ImageManager.isReady()) { + $gameMap.changeTileset(this._params[0]); + return true; + } else { + return false; + } +}; + +// Change Battle Back +Game_Interpreter.prototype.command283 = function() { + $gameMap.changeBattleback(this._params[0], this._params[1]); + return true; +}; + +// Change Parallax +Game_Interpreter.prototype.command284 = function() { + $gameMap.changeParallax(this._params[0], this._params[1], + this._params[2], this._params[3], this._params[4]); + return true; +}; + +// Get Location Info +Game_Interpreter.prototype.command285 = function() { + var x, y, value; + if (this._params[2] === 0) { // Direct designation + x = this._params[3]; + y = this._params[4]; + } else { // Designation with variables + x = $gameVariables.value(this._params[3]); + y = $gameVariables.value(this._params[4]); + } + switch (this._params[1]) { + case 0: // Terrain Tag + value = $gameMap.terrainTag(x, y); + break; + case 1: // Event ID + value = $gameMap.eventIdXy(x, y); + break; + case 2: // Tile ID (Layer 1) + case 3: // Tile ID (Layer 2) + case 4: // Tile ID (Layer 3) + case 5: // Tile ID (Layer 4) + value = $gameMap.tileId(x, y, this._params[1] - 2); + break; + default: // Region ID + value = $gameMap.regionId(x, y); + break; + } + $gameVariables.setValue(this._params[0], value); + return true; +}; + +// Battle Processing +Game_Interpreter.prototype.command301 = function() { + if (!$gameParty.inBattle()) { + var troopId; + if (this._params[0] === 0) { // Direct designation + troopId = this._params[1]; + } else if (this._params[0] === 1) { // Designation with a variable + troopId = $gameVariables.value(this._params[1]); + } else { // Same as Random Encounter + troopId = $gamePlayer.makeEncounterTroopId(); + } + if ($dataTroops[troopId]) { + BattleManager.setup(troopId, this._params[2], this._params[3]); + BattleManager.setEventCallback(function(n) { + this._branch[this._indent] = n; + }.bind(this)); + $gamePlayer.makeEncounterCount(); + SceneManager.push(Scene_Battle); + } + } + return true; +}; + +// If Win +Game_Interpreter.prototype.command601 = function() { + if (this._branch[this._indent] !== 0) { + this.skipBranch(); + } + return true; +}; + +// If Escape +Game_Interpreter.prototype.command602 = function() { + if (this._branch[this._indent] !== 1) { + this.skipBranch(); + } + return true; +}; + +// If Lose +Game_Interpreter.prototype.command603 = function() { + if (this._branch[this._indent] !== 2) { + this.skipBranch(); + } + return true; +}; + +// Shop Processing +Game_Interpreter.prototype.command302 = function() { + if (!$gameParty.inBattle()) { + var goods = [this._params]; + while (this.nextEventCode() === 605) { + this._index++; + goods.push(this.currentCommand().parameters); + } + SceneManager.push(Scene_Shop); + SceneManager.prepareNextScene(goods, this._params[4]); + } + return true; +}; + +// Name Input Processing +Game_Interpreter.prototype.command303 = function() { + if (!$gameParty.inBattle()) { + if ($dataActors[this._params[0]]) { + SceneManager.push(Scene_Name); + SceneManager.prepareNextScene(this._params[0], this._params[1]); + } + } + return true; +}; + +// Change HP +Game_Interpreter.prototype.command311 = function() { + var value = this.operateValue(this._params[2], this._params[3], this._params[4]); + this.iterateActorEx(this._params[0], this._params[1], function(actor) { + this.changeHp(actor, value, this._params[5]); + }.bind(this)); + return true; +}; + +// Change MP +Game_Interpreter.prototype.command312 = function() { + var value = this.operateValue(this._params[2], this._params[3], this._params[4]); + this.iterateActorEx(this._params[0], this._params[1], function(actor) { + actor.gainMp(value); + }.bind(this)); + return true; +}; + +// Change TP +Game_Interpreter.prototype.command326 = function() { + var value = this.operateValue(this._params[2], this._params[3], this._params[4]); + this.iterateActorEx(this._params[0], this._params[1], function(actor) { + actor.gainTp(value); + }.bind(this)); + return true; +}; + +// Change State +Game_Interpreter.prototype.command313 = function() { + this.iterateActorEx(this._params[0], this._params[1], function(actor) { + var alreadyDead = actor.isDead(); + if (this._params[2] === 0) { + actor.addState(this._params[3]); + } else { + actor.removeState(this._params[3]); + } + if (actor.isDead() && !alreadyDead) { + actor.performCollapse(); + } + actor.clearResult(); + }.bind(this)); + return true; +}; + +// Recover All +Game_Interpreter.prototype.command314 = function() { + this.iterateActorEx(this._params[0], this._params[1], function(actor) { + actor.recoverAll(); + }.bind(this)); + return true; +}; + +// Change EXP +Game_Interpreter.prototype.command315 = function() { + var value = this.operateValue(this._params[2], this._params[3], this._params[4]); + this.iterateActorEx(this._params[0], this._params[1], function(actor) { + actor.changeExp(actor.currentExp() + value, this._params[5]); + }.bind(this)); + return true; +}; + +// Change Level +Game_Interpreter.prototype.command316 = function() { + var value = this.operateValue(this._params[2], this._params[3], this._params[4]); + this.iterateActorEx(this._params[0], this._params[1], function(actor) { + actor.changeLevel(actor.level + value, this._params[5]); + }.bind(this)); + return true; +}; + +// Change Parameter +Game_Interpreter.prototype.command317 = function() { + var value = this.operateValue(this._params[3], this._params[4], this._params[5]); + this.iterateActorEx(this._params[0], this._params[1], function(actor) { + actor.addParam(this._params[2], value); + }.bind(this)); + return true; +}; + +// Change Skill +Game_Interpreter.prototype.command318 = function() { + this.iterateActorEx(this._params[0], this._params[1], function(actor) { + if (this._params[2] === 0) { + actor.learnSkill(this._params[3]); + } else { + actor.forgetSkill(this._params[3]); + } + }.bind(this)); + return true; +}; + +// Change Equipment +Game_Interpreter.prototype.command319 = function() { + var actor = $gameActors.actor(this._params[0]); + if (actor) { + actor.changeEquipById(this._params[1], this._params[2]); + } + return true; +}; + +// Change Name +Game_Interpreter.prototype.command320 = function() { + var actor = $gameActors.actor(this._params[0]); + if (actor) { + actor.setName(this._params[1]); + } + return true; +}; + +// Change Class +Game_Interpreter.prototype.command321 = function() { + var actor = $gameActors.actor(this._params[0]); + if (actor && $dataClasses[this._params[1]]) { + actor.changeClass(this._params[1], this._params[2]); + } + return true; +}; + +// Change Actor Images +Game_Interpreter.prototype.command322 = function() { + var actor = $gameActors.actor(this._params[0]); + if (actor) { + actor.setCharacterImage(this._params[1], this._params[2]); + actor.setFaceImage(this._params[3], this._params[4]); + actor.setBattlerImage(this._params[5]); + } + $gamePlayer.refresh(); + return true; +}; + +// Change Vehicle Image +Game_Interpreter.prototype.command323 = function() { + var vehicle = $gameMap.vehicle(this._params[0]); + if (vehicle) { + vehicle.setImage(this._params[1], this._params[2]); + } + return true; +}; + +// Change Nickname +Game_Interpreter.prototype.command324 = function() { + var actor = $gameActors.actor(this._params[0]); + if (actor) { + actor.setNickname(this._params[1]); + } + return true; +}; + +// Change Profile +Game_Interpreter.prototype.command325 = function() { + var actor = $gameActors.actor(this._params[0]); + if (actor) { + actor.setProfile(this._params[1]); + } + return true; +}; + +// Change Enemy HP +Game_Interpreter.prototype.command331 = function() { + var value = this.operateValue(this._params[1], this._params[2], this._params[3]); + this.iterateEnemyIndex(this._params[0], function(enemy) { + this.changeHp(enemy, value, this._params[4]); + }.bind(this)); + return true; +}; + +// Change Enemy MP +Game_Interpreter.prototype.command332 = function() { + var value = this.operateValue(this._params[1], this._params[2], this._params[3]); + this.iterateEnemyIndex(this._params[0], function(enemy) { + enemy.gainMp(value); + }.bind(this)); + return true; +}; + +// Change Enemy TP +Game_Interpreter.prototype.command342 = function() { + var value = this.operateValue(this._params[1], this._params[2], this._params[3]); + this.iterateEnemyIndex(this._params[0], function(enemy) { + enemy.gainTp(value); + }.bind(this)); + return true; +}; + +// Change Enemy State +Game_Interpreter.prototype.command333 = function() { + this.iterateEnemyIndex(this._params[0], function(enemy) { + var alreadyDead = enemy.isDead(); + if (this._params[1] === 0) { + enemy.addState(this._params[2]); + } else { + enemy.removeState(this._params[2]); + } + if (enemy.isDead() && !alreadyDead) { + enemy.performCollapse(); + } + enemy.clearResult(); + }.bind(this)); + return true; +}; + +// Enemy Recover All +Game_Interpreter.prototype.command334 = function() { + this.iterateEnemyIndex(this._params[0], function(enemy) { + enemy.recoverAll(); + }.bind(this)); + return true; +}; + +// Enemy Appear +Game_Interpreter.prototype.command335 = function() { + this.iterateEnemyIndex(this._params[0], function(enemy) { + enemy.appear(); + $gameTroop.makeUniqueNames(); + }.bind(this)); + return true; +}; + +// Enemy Transform +Game_Interpreter.prototype.command336 = function() { + this.iterateEnemyIndex(this._params[0], function(enemy) { + enemy.transform(this._params[1]); + $gameTroop.makeUniqueNames(); + }.bind(this)); + return true; +}; + +// Show Battle Animation +Game_Interpreter.prototype.command337 = function() { + this.iterateEnemyIndex(this._params[0], function(enemy) { + if (enemy.isAlive()) { + enemy.startAnimation(this._params[1], false, 0); + } + }.bind(this)); + return true; +}; + +// Force Action +Game_Interpreter.prototype.command339 = function() { + this.iterateBattler(this._params[0], this._params[1], function(battler) { + if (!battler.isDeathStateAffected()) { + battler.forceAction(this._params[2], this._params[3]); + BattleManager.forceAction(battler); + this.setWaitMode('action'); + } + }.bind(this)); + return true; +}; + +// Abort Battle +Game_Interpreter.prototype.command340 = function() { + BattleManager.abort(); + return true; +}; + +// Open Menu Screen +Game_Interpreter.prototype.command351 = function() { + if (!$gameParty.inBattle()) { + SceneManager.push(Scene_Menu); + Window_MenuCommand.initCommandPosition(); + } + return true; +}; + +// Open Save Screen +Game_Interpreter.prototype.command352 = function() { + if (!$gameParty.inBattle()) { + SceneManager.push(Scene_Save); + } + return true; +}; + +// Game Over +Game_Interpreter.prototype.command353 = function() { + SceneManager.goto(Scene_Gameover); + return true; +}; + +// Return to Title Screen +Game_Interpreter.prototype.command354 = function() { + SceneManager.goto(Scene_Title); + return true; +}; + +// Script +Game_Interpreter.prototype.command355 = function() { + var script = this.currentCommand().parameters[0] + '\n'; + while (this.nextEventCode() === 655) { + this._index++; + script += this.currentCommand().parameters[0] + '\n'; + } + eval(script); + return true; +}; + +// Plugin Command +Game_Interpreter.prototype.command356 = function() { + var args = this._params[0].split(" "); + var command = args.shift(); + this.pluginCommand(command, args); + return true; +}; + +Game_Interpreter.prototype.pluginCommand = function(command, args) { + // to be overridden by plugins +}; diff --git a/js/rpg_scenes.js b/js/rpg_scenes.js new file mode 100644 index 0000000..009e340 --- /dev/null +++ b/js/rpg_scenes.js @@ -0,0 +1,2473 @@ +//============================================================================= +// rpg_scenes.js v1.2.0 +//============================================================================= + +//----------------------------------------------------------------------------- +// Scene_Base +// +// The superclass of all scenes within the game. + +function Scene_Base() { + this.initialize.apply(this, arguments); +} + +Scene_Base.prototype = Object.create(Stage.prototype); +Scene_Base.prototype.constructor = Scene_Base; + +Scene_Base.prototype.initialize = function() { + Stage.prototype.initialize.call(this); + this._active = false; + this._fadeSign = 0; + this._fadeDuration = 0; + this._fadeSprite = null; +}; + +Scene_Base.prototype.create = function() { +}; + +Scene_Base.prototype.isActive = function() { + return this._active; +}; + +Scene_Base.prototype.isReady = function() { + return ImageManager.isReady(); +}; + +Scene_Base.prototype.start = function() { + this._active = true; +}; + +Scene_Base.prototype.update = function() { + this.updateFade(); + this.updateChildren(); + AudioManager.checkErrors(); +}; + +Scene_Base.prototype.stop = function() { + this._active = false; +}; + +Scene_Base.prototype.isBusy = function() { + return this._fadeDuration > 0; +}; + +Scene_Base.prototype.terminate = function() { +}; + +Scene_Base.prototype.createWindowLayer = function() { + var width = Graphics.boxWidth; + var height = Graphics.boxHeight; + var x = (Graphics.width - width) / 2; + var y = (Graphics.height - height) / 2; + this._windowLayer = new WindowLayer(); + this._windowLayer.move(x, y, width, height); + this.addChild(this._windowLayer); +}; + +Scene_Base.prototype.addWindow = function(window) { + this._windowLayer.addChild(window); +}; + +Scene_Base.prototype.startFadeIn = function(duration, white) { + this.createFadeSprite(white); + this._fadeSign = 1; + this._fadeDuration = duration || 30; + this._fadeSprite.opacity = 255; +}; + +Scene_Base.prototype.startFadeOut = function(duration, white) { + this.createFadeSprite(white); + this._fadeSign = -1; + this._fadeDuration = duration || 30; + this._fadeSprite.opacity = 0; +}; + +Scene_Base.prototype.createFadeSprite = function(white) { + if (!this._fadeSprite) { + this._fadeSprite = new ScreenSprite(); + this.addChild(this._fadeSprite); + } + if (white) { + this._fadeSprite.setWhite(); + } else { + this._fadeSprite.setBlack(); + } +}; + +Scene_Base.prototype.updateFade = function() { + if (this._fadeDuration > 0) { + var d = this._fadeDuration; + if (this._fadeSign > 0) { + this._fadeSprite.opacity -= this._fadeSprite.opacity / d; + } else { + this._fadeSprite.opacity += (255 - this._fadeSprite.opacity) / d; + } + this._fadeDuration--; + } +}; + +Scene_Base.prototype.updateChildren = function() { + this.children.forEach(function(child) { + if (child.update) { + child.update(); + } + }); +}; + +Scene_Base.prototype.popScene = function() { + SceneManager.pop(); +}; + +Scene_Base.prototype.checkGameover = function() { + if ($gameParty.isAllDead()) { + SceneManager.goto(Scene_Gameover); + } +}; + +Scene_Base.prototype.fadeOutAll = function() { + var time = this.slowFadeSpeed() / 60; + AudioManager.fadeOutBgm(time); + AudioManager.fadeOutBgs(time); + AudioManager.fadeOutMe(time); + this.startFadeOut(this.slowFadeSpeed()); +}; + +Scene_Base.prototype.fadeSpeed = function() { + return 24; +}; + +Scene_Base.prototype.slowFadeSpeed = function() { + return this.fadeSpeed() * 2; +}; + +//----------------------------------------------------------------------------- +// Scene_Boot +// +// The scene class for initializing the entire game. + +function Scene_Boot() { + this.initialize.apply(this, arguments); +} + +Scene_Boot.prototype = Object.create(Scene_Base.prototype); +Scene_Boot.prototype.constructor = Scene_Boot; + +Scene_Boot.prototype.initialize = function() { + Scene_Base.prototype.initialize.call(this); + this._startDate = Date.now(); +}; + +Scene_Boot.prototype.create = function() { + Scene_Base.prototype.create.call(this); + DataManager.loadDatabase(); + ConfigManager.load(); + this.loadSystemImages(); +}; + +Scene_Boot.prototype.loadSystemImages = function() { + ImageManager.loadSystem('Window'); + ImageManager.loadSystem('IconSet'); + ImageManager.loadSystem('Balloon'); + ImageManager.loadSystem('Shadow1'); + ImageManager.loadSystem('Shadow2'); + ImageManager.loadSystem('Damage'); + ImageManager.loadSystem('States'); + ImageManager.loadSystem('Weapons1'); + ImageManager.loadSystem('Weapons2'); + ImageManager.loadSystem('Weapons3'); + ImageManager.loadSystem('ButtonSet'); +}; + +Scene_Boot.prototype.isReady = function() { + if (Scene_Base.prototype.isReady.call(this)) { + return DataManager.isDatabaseLoaded() && this.isGameFontLoaded(); + } else { + return false; + } +}; + +Scene_Boot.prototype.isGameFontLoaded = function() { + if (Graphics.isFontLoaded('GameFont')) { + return true; + } else { + var elapsed = Date.now() - this._startDate; + if (elapsed >= 20000) { + throw new Error('Failed to load GameFont'); + } + } +}; + +Scene_Boot.prototype.start = function() { + Scene_Base.prototype.start.call(this); + SoundManager.preloadImportantSounds(); + if (DataManager.isBattleTest()) { + DataManager.setupBattleTest(); + SceneManager.goto(Scene_Battle); + } else if (DataManager.isEventTest()) { + DataManager.setupEventTest(); + SceneManager.goto(Scene_Map); + } else { + this.checkPlayerLocation(); + DataManager.setupNewGame(); + SceneManager.goto(Scene_Title); + Window_TitleCommand.initCommandPosition(); + } + this.updateDocumentTitle(); +}; + +Scene_Boot.prototype.updateDocumentTitle = function() { + document.title = $dataSystem.gameTitle; +}; + +Scene_Boot.prototype.checkPlayerLocation = function() { + if ($dataSystem.startMapId === 0) { + throw new Error('Player\'s starting position is not set'); + } +}; + +//----------------------------------------------------------------------------- +// Scene_Title +// +// The scene class of the title screen. + +function Scene_Title() { + this.initialize.apply(this, arguments); +} + +Scene_Title.prototype = Object.create(Scene_Base.prototype); +Scene_Title.prototype.constructor = Scene_Title; + +Scene_Title.prototype.initialize = function() { + Scene_Base.prototype.initialize.call(this); +}; + +Scene_Title.prototype.create = function() { + Scene_Base.prototype.create.call(this); + this.createBackground(); + this.createForeground(); + this.createWindowLayer(); + this.createCommandWindow(); +}; + +Scene_Title.prototype.start = function() { + Scene_Base.prototype.start.call(this); + SceneManager.clearStack(); + this.centerSprite(this._backSprite1); + this.centerSprite(this._backSprite2); + this.playTitleMusic(); + this.startFadeIn(this.fadeSpeed(), false); +}; + +Scene_Title.prototype.update = function() { + if (!this.isBusy()) { + this._commandWindow.open(); + } + Scene_Base.prototype.update.call(this); +}; + +Scene_Title.prototype.isBusy = function() { + return this._commandWindow.isClosing() || Scene_Base.prototype.isBusy.call(this); +}; + +Scene_Title.prototype.terminate = function() { + Scene_Base.prototype.terminate.call(this); + SceneManager.snapForBackground(); +}; + +Scene_Title.prototype.createBackground = function() { + this._backSprite1 = new Sprite(ImageManager.loadTitle1($dataSystem.title1Name)); + this._backSprite2 = new Sprite(ImageManager.loadTitle2($dataSystem.title2Name)); + this.addChild(this._backSprite1); + this.addChild(this._backSprite2); +}; + +Scene_Title.prototype.createForeground = function() { + this._gameTitleSprite = new Sprite(new Bitmap(Graphics.width, Graphics.height)); + this.addChild(this._gameTitleSprite); + if ($dataSystem.optDrawTitle) { + this.drawGameTitle(); + } +}; + +Scene_Title.prototype.drawGameTitle = function() { + var x = 20; + var y = Graphics.height / 4; + var maxWidth = Graphics.width - x * 2; + var text = $dataSystem.gameTitle; + this._gameTitleSprite.bitmap.outlineColor = 'black'; + this._gameTitleSprite.bitmap.outlineWidth = 8; + this._gameTitleSprite.bitmap.fontSize = 72; + this._gameTitleSprite.bitmap.drawText(text, x, y, maxWidth, 48, 'center'); +}; + +Scene_Title.prototype.centerSprite = function(sprite) { + sprite.x = Graphics.width / 2; + sprite.y = Graphics.height / 2; + sprite.anchor.x = 0.5; + sprite.anchor.y = 0.5; +}; + +Scene_Title.prototype.createCommandWindow = function() { + this._commandWindow = new Window_TitleCommand(); + this._commandWindow.setHandler('newGame', this.commandNewGame.bind(this)); + this._commandWindow.setHandler('continue', this.commandContinue.bind(this)); + this._commandWindow.setHandler('options', this.commandOptions.bind(this)); + this.addWindow(this._commandWindow); +}; + +Scene_Title.prototype.commandNewGame = function() { + DataManager.setupNewGame(); + this._commandWindow.close(); + this.fadeOutAll(); + SceneManager.goto(Scene_Map); +}; + +Scene_Title.prototype.commandContinue = function() { + this._commandWindow.close(); + SceneManager.push(Scene_Load); +}; + +Scene_Title.prototype.commandOptions = function() { + this._commandWindow.close(); + SceneManager.push(Scene_Options); +}; + +Scene_Title.prototype.playTitleMusic = function() { + AudioManager.playBgm($dataSystem.titleBgm); + AudioManager.stopBgs(); + AudioManager.stopMe(); +}; + +//----------------------------------------------------------------------------- +// Scene_Map +// +// The scene class of the map screen. + +function Scene_Map() { + this.initialize.apply(this, arguments); +} + +Scene_Map.prototype = Object.create(Scene_Base.prototype); +Scene_Map.prototype.constructor = Scene_Map; + +Scene_Map.prototype.initialize = function() { + Scene_Base.prototype.initialize.call(this); + this._waitCount = 0; + this._encounterEffectDuration = 0; + this._mapLoaded = false; + this._touchCount = 0; +}; + +Scene_Map.prototype.create = function() { + Scene_Base.prototype.create.call(this); + this._transfer = $gamePlayer.isTransferring(); + var mapId = this._transfer ? $gamePlayer.newMapId() : $gameMap.mapId(); + DataManager.loadMapData(mapId); +}; + +Scene_Map.prototype.isReady = function() { + if (!this._mapLoaded && DataManager.isMapLoaded()) { + this.onMapLoaded(); + this._mapLoaded = true; + } + return this._mapLoaded && Scene_Base.prototype.isReady.call(this); +}; + +Scene_Map.prototype.onMapLoaded = function() { + if (this._transfer) { + $gamePlayer.performTransfer(); + } + this.createDisplayObjects(); +}; + +Scene_Map.prototype.start = function() { + Scene_Base.prototype.start.call(this); + SceneManager.clearStack(); + if (this._transfer) { + this.fadeInForTransfer(); + this._mapNameWindow.open(); + $gameMap.autoplay(); + } else if (this.needsFadeIn()) { + this.startFadeIn(this.fadeSpeed(), false); + } + this.menuCalling = false; +}; + +Scene_Map.prototype.update = function() { + this.updateDestination(); + this.updateMainMultiply(); + if (this.isSceneChangeOk()) { + this.updateScene(); + } else if (SceneManager.isNextScene(Scene_Battle)) { + this.updateEncounterEffect(); + } + this.updateWaitCount(); + Scene_Base.prototype.update.call(this); +}; + +Scene_Map.prototype.updateMainMultiply = function() { + this.updateMain(); + if (this.isFastForward()) { + this.updateMain(); + } +}; + +Scene_Map.prototype.updateMain = function() { + var active = this.isActive(); + $gameMap.update(active); + $gamePlayer.update(active); + $gameTimer.update(active); + $gameScreen.update(); +}; + +Scene_Map.prototype.isFastForward = function() { + return ($gameMap.isEventRunning() && !SceneManager.isSceneChanging() && + (Input.isLongPressed('ok') || TouchInput.isLongPressed())); +}; + +Scene_Map.prototype.stop = function() { + Scene_Base.prototype.stop.call(this); + $gamePlayer.straighten(); + this._mapNameWindow.close(); + if (this.needsSlowFadeOut()) { + this.startFadeOut(this.slowFadeSpeed(), false); + } else if (SceneManager.isNextScene(Scene_Map)) { + this.fadeOutForTransfer(); + } else if (SceneManager.isNextScene(Scene_Battle)) { + this.launchBattle(); + } +}; + +Scene_Map.prototype.isBusy = function() { + return ((this._messageWindow && this._messageWindow.isClosing()) || + this._waitCount > 0 || this._encounterEffectDuration > 0 || + Scene_Base.prototype.isBusy.call(this)); +}; + +Scene_Map.prototype.terminate = function() { + Scene_Base.prototype.terminate.call(this); + if (!SceneManager.isNextScene(Scene_Battle)) { + this._spriteset.update(); + this._mapNameWindow.hide(); + SceneManager.snapForBackground(); + } + $gameScreen.clearZoom(); +}; + +Scene_Map.prototype.needsFadeIn = function() { + return (SceneManager.isPreviousScene(Scene_Battle) || + SceneManager.isPreviousScene(Scene_Load)); +}; + +Scene_Map.prototype.needsSlowFadeOut = function() { + return (SceneManager.isNextScene(Scene_Title) || + SceneManager.isNextScene(Scene_Gameover)); +}; + +Scene_Map.prototype.updateWaitCount = function() { + if (this._waitCount > 0) { + this._waitCount--; + return true; + } + return false; +}; + +Scene_Map.prototype.updateDestination = function() { + if (this.isMapTouchOk()) { + this.processMapTouch(); + } else { + $gameTemp.clearDestination(); + this._touchCount = 0; + } +}; + +Scene_Map.prototype.isMapTouchOk = function() { + return this.isActive() && $gamePlayer.canMove(); +}; + +Scene_Map.prototype.processMapTouch = function() { + if (TouchInput.isTriggered() || this._touchCount > 0) { + if (TouchInput.isPressed()) { + if (this._touchCount === 0 || this._touchCount >= 15) { + var x = $gameMap.canvasToMapX(TouchInput.x); + var y = $gameMap.canvasToMapY(TouchInput.y); + $gameTemp.setDestination(x, y); + } + this._touchCount++; + } else { + this._touchCount = 0; + } + } +}; + +Scene_Map.prototype.isSceneChangeOk = function() { + return this.isActive() && !$gameMessage.isBusy(); +}; + +Scene_Map.prototype.updateScene = function() { + this.checkGameover(); + if (!SceneManager.isSceneChanging()) { + this.updateTransferPlayer(); + } + if (!SceneManager.isSceneChanging()) { + this.updateEncounter(); + } + if (!SceneManager.isSceneChanging()) { + this.updateCallMenu(); + } + if (!SceneManager.isSceneChanging()) { + this.updateCallDebug(); + } +}; + +Scene_Map.prototype.createDisplayObjects = function() { + this.createSpriteset(); + this.createMapNameWindow(); + this.createWindowLayer(); + this.createAllWindows(); +}; + +Scene_Map.prototype.createSpriteset = function() { + this._spriteset = new Spriteset_Map(); + this.addChild(this._spriteset); +}; + +Scene_Map.prototype.createAllWindows = function() { + this.createMessageWindow(); + this.createScrollTextWindow(); +}; + +Scene_Map.prototype.createMapNameWindow = function() { + this._mapNameWindow = new Window_MapName(); + this.addChild(this._mapNameWindow); +}; + +Scene_Map.prototype.createMessageWindow = function() { + this._messageWindow = new Window_Message(); + this.addWindow(this._messageWindow); + this._messageWindow.subWindows().forEach(function(window) { + this.addWindow(window); + }, this); +}; + +Scene_Map.prototype.createScrollTextWindow = function() { + this._scrollTextWindow = new Window_ScrollText(); + this.addWindow(this._scrollTextWindow); +}; + +Scene_Map.prototype.updateTransferPlayer = function() { + if ($gamePlayer.isTransferring()) { + SceneManager.goto(Scene_Map); + } +}; + +Scene_Map.prototype.updateEncounter = function() { + if ($gamePlayer.executeEncounter()) { + SceneManager.push(Scene_Battle); + } +}; + +Scene_Map.prototype.updateCallMenu = function() { + if (this.isMenuEnabled()) { + if (this.isMenuCalled()) { + this.menuCalling = true; + } + if (this.menuCalling && !$gamePlayer.isMoving()) { + this.callMenu(); + } + } else { + this.menuCalling = false; + } +}; + +Scene_Map.prototype.isMenuEnabled = function() { + return $gameSystem.isMenuEnabled() && !$gameMap.isEventRunning(); +}; + +Scene_Map.prototype.isMenuCalled = function() { + return Input.isTriggered('menu') || TouchInput.isCancelled(); +}; + +Scene_Map.prototype.callMenu = function() { + SoundManager.playOk(); + SceneManager.push(Scene_Menu); + Window_MenuCommand.initCommandPosition(); + $gameTemp.clearDestination(); + this._mapNameWindow.hide(); + this._waitCount = 2; +}; + +Scene_Map.prototype.updateCallDebug = function() { + if (this.isDebugCalled()) { + SceneManager.push(Scene_Debug); + } +}; + +Scene_Map.prototype.isDebugCalled = function() { + return Input.isTriggered('debug') && $gameTemp.isPlaytest(); +}; + +Scene_Map.prototype.fadeInForTransfer = function() { + var fadeType = $gamePlayer.fadeType(); + switch (fadeType) { + case 0: case 1: + this.startFadeIn(this.fadeSpeed(), fadeType === 1); + break; + } +}; + +Scene_Map.prototype.fadeOutForTransfer = function() { + var fadeType = $gamePlayer.fadeType(); + switch (fadeType) { + case 0: case 1: + this.startFadeOut(this.fadeSpeed(), fadeType === 1); + break; + } +}; + +Scene_Map.prototype.launchBattle = function() { + BattleManager.saveBgmAndBgs(); + this.stopAudioOnBattleStart(); + SoundManager.playBattleStart(); + this.startEncounterEffect(); + this._mapNameWindow.hide(); +}; + +Scene_Map.prototype.stopAudioOnBattleStart = function() { + if (!AudioManager.isCurrentBgm($gameSystem.battleBgm())) { + AudioManager.stopBgm(); + } + AudioManager.stopBgs(); + AudioManager.stopMe(); + AudioManager.stopSe(); +}; + +Scene_Map.prototype.startEncounterEffect = function() { + this._spriteset.hideCharacters(); + this._encounterEffectDuration = this.encounterEffectSpeed(); +}; + +Scene_Map.prototype.updateEncounterEffect = function() { + if (this._encounterEffectDuration > 0) { + this._encounterEffectDuration--; + var speed = this.encounterEffectSpeed(); + var n = speed - this._encounterEffectDuration; + var p = n / speed; + var q = ((p - 1) * 20 * p + 5) * p + 1; + var zoomX = $gamePlayer.screenX(); + var zoomY = $gamePlayer.screenY() - 24; + if (n === 2) { + $gameScreen.setZoom(zoomX, zoomY, 1); + this.snapForBattleBackground(); + this.startFlashForEncounter(speed / 2); + } + $gameScreen.setZoom(zoomX, zoomY, q); + if (n === Math.floor(speed / 6)) { + this.startFlashForEncounter(speed / 2); + } + if (n === Math.floor(speed / 2)) { + BattleManager.playBattleBgm(); + this.startFadeOut(this.fadeSpeed()); + } + } +}; + +Scene_Map.prototype.snapForBattleBackground = function() { + this._windowLayer.visible = false; + SceneManager.snapForBackground(); + this._windowLayer.visible = true; +}; + +Scene_Map.prototype.startFlashForEncounter = function(duration) { + var color = [255, 255, 255, 255]; + $gameScreen.startFlash(color, duration); +}; + +Scene_Map.prototype.encounterEffectSpeed = function() { + return 60; +}; + +//----------------------------------------------------------------------------- +// Scene_MenuBase +// +// The superclass of all the menu-type scenes. + +function Scene_MenuBase() { + this.initialize.apply(this, arguments); +} + +Scene_MenuBase.prototype = Object.create(Scene_Base.prototype); +Scene_MenuBase.prototype.constructor = Scene_MenuBase; + +Scene_MenuBase.prototype.initialize = function() { + Scene_Base.prototype.initialize.call(this); +}; + +Scene_MenuBase.prototype.create = function() { + Scene_Base.prototype.create.call(this); + this.createBackground(); + this.updateActor(); + this.createWindowLayer(); +}; + +Scene_MenuBase.prototype.actor = function() { + return this._actor; +}; + +Scene_MenuBase.prototype.updateActor = function() { + this._actor = $gameParty.menuActor(); +}; + +Scene_MenuBase.prototype.createBackground = function() { + this._backgroundSprite = new Sprite(); + this._backgroundSprite.bitmap = SceneManager.backgroundBitmap(); + this.addChild(this._backgroundSprite); +}; + +Scene_MenuBase.prototype.setBackgroundOpacity = function(opacity) { + this._backgroundSprite.opacity = opacity; +}; + +Scene_MenuBase.prototype.createHelpWindow = function() { + this._helpWindow = new Window_Help(); + this.addWindow(this._helpWindow); +}; + +Scene_MenuBase.prototype.nextActor = function() { + $gameParty.makeMenuActorNext(); + this.updateActor(); + this.onActorChange(); +}; + +Scene_MenuBase.prototype.previousActor = function() { + $gameParty.makeMenuActorPrevious(); + this.updateActor(); + this.onActorChange(); +}; + +Scene_MenuBase.prototype.onActorChange = function() { +}; + +//----------------------------------------------------------------------------- +// Scene_Menu +// +// The scene class of the menu screen. + +function Scene_Menu() { + this.initialize.apply(this, arguments); +} + +Scene_Menu.prototype = Object.create(Scene_MenuBase.prototype); +Scene_Menu.prototype.constructor = Scene_Menu; + +Scene_Menu.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_Menu.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + this.createCommandWindow(); + this.createGoldWindow(); + this.createStatusWindow(); +}; + +Scene_Menu.prototype.start = function() { + Scene_MenuBase.prototype.start.call(this); + this._statusWindow.refresh(); +}; + +Scene_Menu.prototype.createCommandWindow = function() { + this._commandWindow = new Window_MenuCommand(0, 0); + this._commandWindow.setHandler('item', this.commandItem.bind(this)); + this._commandWindow.setHandler('skill', this.commandPersonal.bind(this)); + this._commandWindow.setHandler('equip', this.commandPersonal.bind(this)); + this._commandWindow.setHandler('status', this.commandPersonal.bind(this)); + this._commandWindow.setHandler('formation', this.commandFormation.bind(this)); + this._commandWindow.setHandler('options', this.commandOptions.bind(this)); + this._commandWindow.setHandler('save', this.commandSave.bind(this)); + this._commandWindow.setHandler('gameEnd', this.commandGameEnd.bind(this)); + this._commandWindow.setHandler('cancel', this.popScene.bind(this)); + this.addWindow(this._commandWindow); +}; + +Scene_Menu.prototype.createGoldWindow = function() { + this._goldWindow = new Window_Gold(0, 0); + this._goldWindow.y = Graphics.boxHeight - this._goldWindow.height; + this.addWindow(this._goldWindow); +}; + +Scene_Menu.prototype.createStatusWindow = function() { + this._statusWindow = new Window_MenuStatus(this._commandWindow.width, 0); + this.addWindow(this._statusWindow); +}; + +Scene_Menu.prototype.commandItem = function() { + SceneManager.push(Scene_Item); +}; + +Scene_Menu.prototype.commandPersonal = function() { + this._statusWindow.setFormationMode(false); + this._statusWindow.selectLast(); + this._statusWindow.activate(); + this._statusWindow.setHandler('ok', this.onPersonalOk.bind(this)); + this._statusWindow.setHandler('cancel', this.onPersonalCancel.bind(this)); +}; + +Scene_Menu.prototype.commandFormation = function() { + this._statusWindow.setFormationMode(true); + this._statusWindow.selectLast(); + this._statusWindow.activate(); + this._statusWindow.setHandler('ok', this.onFormationOk.bind(this)); + this._statusWindow.setHandler('cancel', this.onFormationCancel.bind(this)); +}; + +Scene_Menu.prototype.commandOptions = function() { + SceneManager.push(Scene_Options); +}; + +Scene_Menu.prototype.commandSave = function() { + SceneManager.push(Scene_Save); +}; + +Scene_Menu.prototype.commandGameEnd = function() { + SceneManager.push(Scene_GameEnd); +}; + +Scene_Menu.prototype.onPersonalOk = function() { + switch (this._commandWindow.currentSymbol()) { + case 'skill': + SceneManager.push(Scene_Skill); + break; + case 'equip': + SceneManager.push(Scene_Equip); + break; + case 'status': + SceneManager.push(Scene_Status); + break; + } +}; + +Scene_Menu.prototype.onPersonalCancel = function() { + this._statusWindow.deselect(); + this._commandWindow.activate(); +}; + +Scene_Menu.prototype.onFormationOk = function() { + var index = this._statusWindow.index(); + var actor = $gameParty.members()[index]; + var pendingIndex = this._statusWindow.pendingIndex(); + if (pendingIndex >= 0) { + $gameParty.swapOrder(index, pendingIndex); + this._statusWindow.setPendingIndex(-1); + this._statusWindow.redrawItem(index); + } else { + this._statusWindow.setPendingIndex(index); + } + this._statusWindow.activate(); +}; + +Scene_Menu.prototype.onFormationCancel = function() { + if (this._statusWindow.pendingIndex() >= 0) { + this._statusWindow.setPendingIndex(-1); + this._statusWindow.activate(); + } else { + this._statusWindow.deselect(); + this._commandWindow.activate(); + } +}; + +//----------------------------------------------------------------------------- +// Scene_ItemBase +// +// The superclass of Scene_Item and Scene_Skill. + +function Scene_ItemBase() { + this.initialize.apply(this, arguments); +} + +Scene_ItemBase.prototype = Object.create(Scene_MenuBase.prototype); +Scene_ItemBase.prototype.constructor = Scene_ItemBase; + +Scene_ItemBase.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_ItemBase.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); +}; + +Scene_ItemBase.prototype.createActorWindow = function() { + this._actorWindow = new Window_MenuActor(); + this._actorWindow.setHandler('ok', this.onActorOk.bind(this)); + this._actorWindow.setHandler('cancel', this.onActorCancel.bind(this)); + this.addWindow(this._actorWindow); +}; + +Scene_ItemBase.prototype.item = function() { + return this._itemWindow.item(); +}; + +Scene_ItemBase.prototype.user = function() { + return null; +}; + +Scene_ItemBase.prototype.isCursorLeft = function() { + return this._itemWindow.index() % 2 === 0; +}; + +Scene_ItemBase.prototype.showSubWindow = function(window) { + window.x = this.isCursorLeft() ? Graphics.boxWidth - window.width : 0; + window.show(); + window.activate(); +}; + +Scene_ItemBase.prototype.hideSubWindow = function(window) { + window.hide(); + window.deactivate(); + this.activateItemWindow(); +}; + +Scene_ItemBase.prototype.onActorOk = function() { + if (this.canUse()) { + this.useItem(); + } else { + SoundManager.playBuzzer(); + } +}; + +Scene_ItemBase.prototype.onActorCancel = function() { + this.hideSubWindow(this._actorWindow); +}; + +Scene_ItemBase.prototype.determineItem = function() { + var action = new Game_Action(this.user()); + var item = this.item(); + action.setItemObject(item); + if (action.isForFriend()) { + this.showSubWindow(this._actorWindow); + this._actorWindow.selectForItem(this.item()); + } else { + this.useItem(); + this.activateItemWindow(); + } +}; + +Scene_ItemBase.prototype.useItem = function() { + this.playSeForItem(); + this.user().useItem(this.item()); + this.applyItem(); + this.checkCommonEvent(); + this.checkGameover(); + this._actorWindow.refresh(); +}; + +Scene_ItemBase.prototype.activateItemWindow = function() { + this._itemWindow.refresh(); + this._itemWindow.activate(); +}; + +Scene_ItemBase.prototype.itemTargetActors = function() { + var action = new Game_Action(this.user()); + action.setItemObject(this.item()); + if (!action.isForFriend()) { + return []; + } else if (action.isForAll()) { + return $gameParty.members(); + } else { + return [$gameParty.members()[this._actorWindow.index()]]; + } +}; + +Scene_ItemBase.prototype.canUse = function() { + return this.user().canUse(this.item()) && this.isItemEffectsValid(); +}; + +Scene_ItemBase.prototype.isItemEffectsValid = function() { + var action = new Game_Action(this.user()); + action.setItemObject(this.item()); + return this.itemTargetActors().some(function(target) { + return action.testApply(target); + }, this); +}; + +Scene_ItemBase.prototype.applyItem = function() { + var action = new Game_Action(this.user()); + action.setItemObject(this.item()); + this.itemTargetActors().forEach(function(target) { + for (var i = 0; i < action.numRepeats(); i++) { + action.apply(target); + } + }, this); + action.applyGlobal(); +}; + +Scene_ItemBase.prototype.checkCommonEvent = function() { + if ($gameTemp.isCommonEventReserved()) { + SceneManager.goto(Scene_Map); + } +}; + +//----------------------------------------------------------------------------- +// Scene_Item +// +// The scene class of the item screen. + +function Scene_Item() { + this.initialize.apply(this, arguments); +} + +Scene_Item.prototype = Object.create(Scene_ItemBase.prototype); +Scene_Item.prototype.constructor = Scene_Item; + +Scene_Item.prototype.initialize = function() { + Scene_ItemBase.prototype.initialize.call(this); +}; + +Scene_Item.prototype.create = function() { + Scene_ItemBase.prototype.create.call(this); + this.createHelpWindow(); + this.createCategoryWindow(); + this.createItemWindow(); + this.createActorWindow(); +}; + +Scene_Item.prototype.createCategoryWindow = function() { + this._categoryWindow = new Window_ItemCategory(); + this._categoryWindow.setHelpWindow(this._helpWindow); + this._categoryWindow.y = this._helpWindow.height; + this._categoryWindow.setHandler('ok', this.onCategoryOk.bind(this)); + this._categoryWindow.setHandler('cancel', this.popScene.bind(this)); + this.addWindow(this._categoryWindow); +}; + +Scene_Item.prototype.createItemWindow = function() { + var wy = this._categoryWindow.y + this._categoryWindow.height; + var wh = Graphics.boxHeight - wy; + this._itemWindow = new Window_ItemList(0, wy, Graphics.boxWidth, wh); + this._itemWindow.setHelpWindow(this._helpWindow); + this._itemWindow.setHandler('ok', this.onItemOk.bind(this)); + this._itemWindow.setHandler('cancel', this.onItemCancel.bind(this)); + this.addWindow(this._itemWindow); + this._categoryWindow.setItemWindow(this._itemWindow); +}; + +Scene_Item.prototype.user = function() { + var members = $gameParty.movableMembers(); + var bestActor = members[0]; + var bestPha = 0; + for (var i = 0; i < members.length; i++) { + if (members[i].pha > bestPha) { + bestPha = members[i].pha; + bestActor = members[i]; + } + } + return bestActor; +}; + +Scene_Item.prototype.onCategoryOk = function() { + this._itemWindow.activate(); + this._itemWindow.selectLast(); +}; + +Scene_Item.prototype.onItemOk = function() { + $gameParty.setLastItem(this.item()); + this.determineItem(); +}; + +Scene_Item.prototype.onItemCancel = function() { + this._itemWindow.deselect(); + this._categoryWindow.activate(); +}; + +Scene_Item.prototype.playSeForItem = function() { + SoundManager.playUseItem(); +}; + +Scene_Item.prototype.useItem = function() { + Scene_ItemBase.prototype.useItem.call(this); + this._itemWindow.redrawCurrentItem(); +}; + +//----------------------------------------------------------------------------- +// Scene_Skill +// +// The scene class of the skill screen. + +function Scene_Skill() { + this.initialize.apply(this, arguments); +} + +Scene_Skill.prototype = Object.create(Scene_ItemBase.prototype); +Scene_Skill.prototype.constructor = Scene_Skill; + +Scene_Skill.prototype.initialize = function() { + Scene_ItemBase.prototype.initialize.call(this); +}; + +Scene_Skill.prototype.create = function() { + Scene_ItemBase.prototype.create.call(this); + this.createHelpWindow(); + this.createSkillTypeWindow(); + this.createStatusWindow(); + this.createItemWindow(); + this.createActorWindow(); + this.refreshActor(); +}; + +Scene_Skill.prototype.createSkillTypeWindow = function() { + var wy = this._helpWindow.height; + this._skillTypeWindow = new Window_SkillType(0, wy); + this._skillTypeWindow.setHelpWindow(this._helpWindow); + this._skillTypeWindow.setHandler('skill', this.commandSkill.bind(this)); + this._skillTypeWindow.setHandler('cancel', this.popScene.bind(this)); + this._skillTypeWindow.setHandler('pagedown', this.nextActor.bind(this)); + this._skillTypeWindow.setHandler('pageup', this.previousActor.bind(this)); + this.addWindow(this._skillTypeWindow); +}; + +Scene_Skill.prototype.createStatusWindow = function() { + var wx = this._skillTypeWindow.width; + var wy = this._helpWindow.height; + var ww = Graphics.boxWidth - wx; + var wh = this._skillTypeWindow.height; + this._statusWindow = new Window_SkillStatus(wx, wy, ww, wh); + this.addWindow(this._statusWindow); +}; + +Scene_Skill.prototype.createItemWindow = function() { + var wx = 0; + var wy = this._statusWindow.y + this._statusWindow.height; + var ww = Graphics.boxWidth; + var wh = Graphics.boxHeight - wy; + this._itemWindow = new Window_SkillList(wx, wy, ww, wh); + this._itemWindow.setHelpWindow(this._helpWindow); + this._itemWindow.setHandler('ok', this.onItemOk.bind(this)); + this._itemWindow.setHandler('cancel', this.onItemCancel.bind(this)); + this._skillTypeWindow.setSkillWindow(this._itemWindow); + this.addWindow(this._itemWindow); +}; + +Scene_Skill.prototype.refreshActor = function() { + var actor = this.actor(); + this._skillTypeWindow.setActor(actor); + this._statusWindow.setActor(actor); + this._itemWindow.setActor(actor); +}; + +Scene_Skill.prototype.user = function() { + return this.actor(); +}; + +Scene_Skill.prototype.commandSkill = function() { + this._itemWindow.activate(); + this._itemWindow.selectLast(); +}; + +Scene_Skill.prototype.onItemOk = function() { + this.actor().setLastMenuSkill(this.item()); + this.determineItem(); +}; + +Scene_Skill.prototype.onItemCancel = function() { + this._itemWindow.deselect(); + this._skillTypeWindow.activate(); +}; + +Scene_Skill.prototype.playSeForItem = function() { + SoundManager.playUseSkill(); +}; + +Scene_Skill.prototype.useItem = function() { + Scene_ItemBase.prototype.useItem.call(this); + this._statusWindow.refresh(); + this._itemWindow.refresh(); +}; + +Scene_Skill.prototype.onActorChange = function() { + this.refreshActor(); + this._skillTypeWindow.activate(); +}; + +//----------------------------------------------------------------------------- +// Scene_Equip +// +// The scene class of the equipment screen. + +function Scene_Equip() { + this.initialize.apply(this, arguments); +} + +Scene_Equip.prototype = Object.create(Scene_MenuBase.prototype); +Scene_Equip.prototype.constructor = Scene_Equip; + +Scene_Equip.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_Equip.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + this.createHelpWindow(); + this.createStatusWindow(); + this.createCommandWindow(); + this.createSlotWindow(); + this.createItemWindow(); + this.refreshActor(); +}; + +Scene_Equip.prototype.createStatusWindow = function() { + this._statusWindow = new Window_EquipStatus(0, this._helpWindow.height); + this.addWindow(this._statusWindow); +}; + +Scene_Equip.prototype.createCommandWindow = function() { + var wx = this._statusWindow.width; + var wy = this._helpWindow.height; + var ww = Graphics.boxWidth - this._statusWindow.width; + this._commandWindow = new Window_EquipCommand(wx, wy, ww); + this._commandWindow.setHelpWindow(this._helpWindow); + this._commandWindow.setHandler('equip', this.commandEquip.bind(this)); + this._commandWindow.setHandler('optimize', this.commandOptimize.bind(this)); + this._commandWindow.setHandler('clear', this.commandClear.bind(this)); + this._commandWindow.setHandler('cancel', this.popScene.bind(this)); + this._commandWindow.setHandler('pagedown', this.nextActor.bind(this)); + this._commandWindow.setHandler('pageup', this.previousActor.bind(this)); + this.addWindow(this._commandWindow); +}; + +Scene_Equip.prototype.createSlotWindow = function() { + var wx = this._statusWindow.width; + var wy = this._commandWindow.y + this._commandWindow.height; + var ww = Graphics.boxWidth - this._statusWindow.width; + var wh = this._statusWindow.height - this._commandWindow.height; + this._slotWindow = new Window_EquipSlot(wx, wy, ww, wh); + this._slotWindow.setHelpWindow(this._helpWindow); + this._slotWindow.setStatusWindow(this._statusWindow); + this._slotWindow.setHandler('ok', this.onSlotOk.bind(this)); + this._slotWindow.setHandler('cancel', this.onSlotCancel.bind(this)); + this.addWindow(this._slotWindow); +}; + +Scene_Equip.prototype.createItemWindow = function() { + var wx = 0; + var wy = this._statusWindow.y + this._statusWindow.height; + var ww = Graphics.boxWidth; + var wh = Graphics.boxHeight - wy; + this._itemWindow = new Window_EquipItem(wx, wy, ww, wh); + this._itemWindow.setHelpWindow(this._helpWindow); + this._itemWindow.setStatusWindow(this._statusWindow); + this._itemWindow.setHandler('ok', this.onItemOk.bind(this)); + this._itemWindow.setHandler('cancel', this.onItemCancel.bind(this)); + this._slotWindow.setItemWindow(this._itemWindow); + this.addWindow(this._itemWindow); +}; + +Scene_Equip.prototype.refreshActor = function() { + var actor = this.actor(); + this._statusWindow.setActor(actor); + this._slotWindow.setActor(actor); + this._itemWindow.setActor(actor); +}; + +Scene_Equip.prototype.commandEquip = function() { + this._slotWindow.activate(); + this._slotWindow.select(0); +}; + +Scene_Equip.prototype.commandOptimize = function() { + SoundManager.playEquip(); + this.actor().optimizeEquipments(); + this._statusWindow.refresh(); + this._slotWindow.refresh(); + this._commandWindow.activate(); +}; + +Scene_Equip.prototype.commandClear = function() { + SoundManager.playEquip(); + this.actor().clearEquipments(); + this._statusWindow.refresh(); + this._slotWindow.refresh(); + this._commandWindow.activate(); +}; + +Scene_Equip.prototype.onSlotOk = function() { + this._itemWindow.activate(); + this._itemWindow.select(0); +}; + +Scene_Equip.prototype.onSlotCancel = function() { + this._slotWindow.deselect(); + this._commandWindow.activate(); +}; + +Scene_Equip.prototype.onItemOk = function() { + SoundManager.playEquip(); + this.actor().changeEquip(this._slotWindow.index(), this._itemWindow.item()); + this._slotWindow.activate(); + this._slotWindow.refresh(); + this._itemWindow.deselect(); + this._itemWindow.refresh(); + this._statusWindow.refresh(); +}; + +Scene_Equip.prototype.onItemCancel = function() { + this._slotWindow.activate(); + this._itemWindow.deselect(); +}; + +Scene_Equip.prototype.onActorChange = function() { + this.refreshActor(); + this._commandWindow.activate(); +}; + +//----------------------------------------------------------------------------- +// Scene_Status +// +// The scene class of the status screen. + +function Scene_Status() { + this.initialize.apply(this, arguments); +} + +Scene_Status.prototype = Object.create(Scene_MenuBase.prototype); +Scene_Status.prototype.constructor = Scene_Status; + +Scene_Status.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_Status.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + this._statusWindow = new Window_Status(); + this._statusWindow.setHandler('cancel', this.popScene.bind(this)); + this._statusWindow.setHandler('pagedown', this.nextActor.bind(this)); + this._statusWindow.setHandler('pageup', this.previousActor.bind(this)); + this.addWindow(this._statusWindow); + this.refreshActor(); +}; + +Scene_Status.prototype.refreshActor = function() { + var actor = this.actor(); + this._statusWindow.setActor(actor); +}; + +Scene_Status.prototype.onActorChange = function() { + this.refreshActor(); + this._statusWindow.activate(); +}; + +//----------------------------------------------------------------------------- +// Scene_Options +// +// The scene class of the options screen. + +function Scene_Options() { + this.initialize.apply(this, arguments); +} + +Scene_Options.prototype = Object.create(Scene_MenuBase.prototype); +Scene_Options.prototype.constructor = Scene_Options; + +Scene_Options.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_Options.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + this.createOptionsWindow(); +}; + +Scene_Options.prototype.terminate = function() { + Scene_MenuBase.prototype.terminate.call(this); + ConfigManager.save(); +}; + +Scene_Options.prototype.createOptionsWindow = function() { + this._optionsWindow = new Window_Options(); + this._optionsWindow.setHandler('cancel', this.popScene.bind(this)); + this.addWindow(this._optionsWindow); +}; + +//----------------------------------------------------------------------------- +// Scene_File +// +// The superclass of Scene_Save and Scene_Load. + +function Scene_File() { + this.initialize.apply(this, arguments); +} + +Scene_File.prototype = Object.create(Scene_MenuBase.prototype); +Scene_File.prototype.constructor = Scene_File; + +Scene_File.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_File.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + DataManager.loadAllSavefileImages(); + this.createHelpWindow(); + this.createListWindow(); +}; + +Scene_File.prototype.start = function() { + Scene_MenuBase.prototype.start.call(this); + this._listWindow.refresh(); +}; + +Scene_File.prototype.savefileId = function() { + return this._listWindow.index() + 1; +}; + +Scene_File.prototype.createHelpWindow = function() { + this._helpWindow = new Window_Help(1); + this._helpWindow.setText(this.helpWindowText()); + this.addWindow(this._helpWindow); +}; + +Scene_File.prototype.createListWindow = function() { + var x = 0; + var y = this._helpWindow.height; + var width = Graphics.boxWidth; + var height = Graphics.boxHeight - y; + this._listWindow = new Window_SavefileList(x, y, width, height); + this._listWindow.setHandler('ok', this.onSavefileOk.bind(this)); + this._listWindow.setHandler('cancel', this.popScene.bind(this)); + this._listWindow.select(this.firstSavefileIndex()); + this._listWindow.setTopRow(this.firstSavefileIndex() - 2); + this._listWindow.setMode(this.mode()); + this._listWindow.refresh(); + this.addWindow(this._listWindow); +}; + +Scene_File.prototype.mode = function() { + return null; +}; + +Scene_File.prototype.activateListWindow = function() { + this._listWindow.activate(); +}; + +Scene_File.prototype.helpWindowText = function() { + return ''; +}; + +Scene_File.prototype.firstSavefileIndex = function() { + return 0; +}; + +Scene_File.prototype.onSavefileOk = function() { +}; + +//----------------------------------------------------------------------------- +// Scene_Save +// +// The scene class of the save screen. + +function Scene_Save() { + this.initialize.apply(this, arguments); +} + +Scene_Save.prototype = Object.create(Scene_File.prototype); +Scene_Save.prototype.constructor = Scene_Save; + +Scene_Save.prototype.initialize = function() { + Scene_File.prototype.initialize.call(this); +}; + +Scene_Save.prototype.mode = function() { + return 'save'; +}; + +Scene_Save.prototype.helpWindowText = function() { + return TextManager.saveMessage; +}; + +Scene_Save.prototype.firstSavefileIndex = function() { + return DataManager.lastAccessedSavefileId() - 1; +}; + +Scene_Save.prototype.onSavefileOk = function() { + Scene_File.prototype.onSavefileOk.call(this); + $gameSystem.onBeforeSave(); + if (DataManager.saveGame(this.savefileId())) { + this.onSaveSuccess(); + } else { + this.onSaveFailure(); + } +}; + +Scene_Save.prototype.onSaveSuccess = function() { + SoundManager.playSave(); + StorageManager.cleanBackup(this.savefileId()); + this.popScene(); +}; + +Scene_Save.prototype.onSaveFailure = function() { + SoundManager.playBuzzer(); + this.activateListWindow(); +}; + +//----------------------------------------------------------------------------- +// Scene_Load +// +// The scene class of the load screen. + +function Scene_Load() { + this.initialize.apply(this, arguments); +} + +Scene_Load.prototype = Object.create(Scene_File.prototype); +Scene_Load.prototype.constructor = Scene_Load; + +Scene_Load.prototype.initialize = function() { + Scene_File.prototype.initialize.call(this); + this._loadSuccess = false; +}; + +Scene_Load.prototype.terminate = function() { + Scene_File.prototype.terminate.call(this); + if (this._loadSuccess) { + $gameSystem.onAfterLoad(); + } +}; + +Scene_Load.prototype.mode = function() { + return 'load'; +}; + +Scene_Load.prototype.helpWindowText = function() { + return TextManager.loadMessage; +}; + +Scene_Load.prototype.firstSavefileIndex = function() { + return DataManager.latestSavefileId() - 1; +}; + +Scene_Load.prototype.onSavefileOk = function() { + Scene_File.prototype.onSavefileOk.call(this); + if (DataManager.loadGame(this.savefileId())) { + this.onLoadSuccess(); + } else { + this.onLoadFailure(); + } +}; + +Scene_Load.prototype.onLoadSuccess = function() { + SoundManager.playLoad(); + this.fadeOutAll(); + this.reloadMapIfUpdated(); + SceneManager.goto(Scene_Map); + this._loadSuccess = true; +}; + +Scene_Load.prototype.onLoadFailure = function() { + SoundManager.playBuzzer(); + this.activateListWindow(); +}; + +Scene_Load.prototype.reloadMapIfUpdated = function() { + if ($gameSystem.versionId() !== $dataSystem.versionId) { + $gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y); + $gamePlayer.requestMapReload(); + } +}; + +//----------------------------------------------------------------------------- +// Scene_GameEnd +// +// The scene class of the game end screen. + +function Scene_GameEnd() { + this.initialize.apply(this, arguments); +} + +Scene_GameEnd.prototype = Object.create(Scene_MenuBase.prototype); +Scene_GameEnd.prototype.constructor = Scene_GameEnd; + +Scene_GameEnd.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_GameEnd.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + this.createCommandWindow(); +}; + +Scene_GameEnd.prototype.stop = function() { + Scene_MenuBase.prototype.stop.call(this); + this._commandWindow.close(); +}; + +Scene_GameEnd.prototype.createBackground = function() { + Scene_MenuBase.prototype.createBackground.call(this); + this.setBackgroundOpacity(128); +}; + +Scene_GameEnd.prototype.createCommandWindow = function() { + this._commandWindow = new Window_GameEnd(); + this._commandWindow.setHandler('toTitle', this.commandToTitle.bind(this)); + this._commandWindow.setHandler('cancel', this.popScene.bind(this)); + this.addWindow(this._commandWindow); +}; + +Scene_GameEnd.prototype.commandToTitle = function() { + this.fadeOutAll(); + SceneManager.goto(Scene_Title); +}; + +//----------------------------------------------------------------------------- +// Scene_Shop +// +// The scene class of the shop screen. + +function Scene_Shop() { + this.initialize.apply(this, arguments); +} + +Scene_Shop.prototype = Object.create(Scene_MenuBase.prototype); +Scene_Shop.prototype.constructor = Scene_Shop; + +Scene_Shop.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_Shop.prototype.prepare = function(goods, purchaseOnly) { + this._goods = goods; + this._purchaseOnly = purchaseOnly; + this._item = null; +}; + +Scene_Shop.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + this.createHelpWindow(); + this.createGoldWindow(); + this.createCommandWindow(); + this.createDummyWindow(); + this.createNumberWindow(); + this.createStatusWindow(); + this.createBuyWindow(); + this.createCategoryWindow(); + this.createSellWindow(); +}; + +Scene_Shop.prototype.createGoldWindow = function() { + this._goldWindow = new Window_Gold(0, this._helpWindow.height); + this._goldWindow.x = Graphics.boxWidth - this._goldWindow.width; + this.addWindow(this._goldWindow); +}; + +Scene_Shop.prototype.createCommandWindow = function() { + this._commandWindow = new Window_ShopCommand(this._goldWindow.x, this._purchaseOnly); + this._commandWindow.y = this._helpWindow.height; + this._commandWindow.setHandler('buy', this.commandBuy.bind(this)); + this._commandWindow.setHandler('sell', this.commandSell.bind(this)); + this._commandWindow.setHandler('cancel', this.popScene.bind(this)); + this.addWindow(this._commandWindow); +}; + +Scene_Shop.prototype.createDummyWindow = function() { + var wy = this._commandWindow.y + this._commandWindow.height; + var wh = Graphics.boxHeight - wy; + this._dummyWindow = new Window_Base(0, wy, Graphics.boxWidth, wh); + this.addWindow(this._dummyWindow); +}; + +Scene_Shop.prototype.createNumberWindow = function() { + var wy = this._dummyWindow.y; + var wh = this._dummyWindow.height; + this._numberWindow = new Window_ShopNumber(0, wy, wh); + this._numberWindow.hide(); + this._numberWindow.setHandler('ok', this.onNumberOk.bind(this)); + this._numberWindow.setHandler('cancel', this.onNumberCancel.bind(this)); + this.addWindow(this._numberWindow); +}; + +Scene_Shop.prototype.createStatusWindow = function() { + var wx = this._numberWindow.width; + var wy = this._dummyWindow.y; + var ww = Graphics.boxWidth - wx; + var wh = this._dummyWindow.height; + this._statusWindow = new Window_ShopStatus(wx, wy, ww, wh); + this._statusWindow.hide(); + this.addWindow(this._statusWindow); +}; + +Scene_Shop.prototype.createBuyWindow = function() { + var wy = this._dummyWindow.y; + var wh = this._dummyWindow.height; + this._buyWindow = new Window_ShopBuy(0, wy, wh, this._goods); + this._buyWindow.setHelpWindow(this._helpWindow); + this._buyWindow.setStatusWindow(this._statusWindow); + this._buyWindow.hide(); + this._buyWindow.setHandler('ok', this.onBuyOk.bind(this)); + this._buyWindow.setHandler('cancel', this.onBuyCancel.bind(this)); + this.addWindow(this._buyWindow); +}; + +Scene_Shop.prototype.createCategoryWindow = function() { + this._categoryWindow = new Window_ItemCategory(); + this._categoryWindow.setHelpWindow(this._helpWindow); + this._categoryWindow.y = this._dummyWindow.y; + this._categoryWindow.hide(); + this._categoryWindow.deactivate(); + this._categoryWindow.setHandler('ok', this.onCategoryOk.bind(this)); + this._categoryWindow.setHandler('cancel', this.onCategoryCancel.bind(this)); + this.addWindow(this._categoryWindow); +}; + +Scene_Shop.prototype.createSellWindow = function() { + var wy = this._categoryWindow.y + this._categoryWindow.height; + var wh = Graphics.boxHeight - wy; + this._sellWindow = new Window_ShopSell(0, wy, Graphics.boxWidth, wh); + this._sellWindow.setHelpWindow(this._helpWindow); + this._sellWindow.hide(); + this._sellWindow.setHandler('ok', this.onSellOk.bind(this)); + this._sellWindow.setHandler('cancel', this.onSellCancel.bind(this)); + this._categoryWindow.setItemWindow(this._sellWindow); + this.addWindow(this._sellWindow); +}; + +Scene_Shop.prototype.activateBuyWindow = function() { + this._buyWindow.setMoney(this.money()); + this._buyWindow.show(); + this._buyWindow.activate(); + this._statusWindow.show(); +}; + +Scene_Shop.prototype.activateSellWindow = function() { + this._categoryWindow.show(); + this._sellWindow.refresh(); + this._sellWindow.show(); + this._sellWindow.activate(); + this._statusWindow.hide(); +}; + +Scene_Shop.prototype.commandBuy = function() { + this._dummyWindow.hide(); + this.activateBuyWindow(); +}; + +Scene_Shop.prototype.commandSell = function() { + this._dummyWindow.hide(); + this._categoryWindow.show(); + this._categoryWindow.activate(); + this._sellWindow.show(); + this._sellWindow.deselect(); + this._sellWindow.refresh(); +}; + +Scene_Shop.prototype.onBuyOk = function() { + this._item = this._buyWindow.item(); + this._buyWindow.hide(); + this._numberWindow.setup(this._item, this.maxBuy(), this.buyingPrice()); + this._numberWindow.setCurrencyUnit(this.currencyUnit()); + this._numberWindow.show(); + this._numberWindow.activate(); +}; + +Scene_Shop.prototype.onBuyCancel = function() { + this._commandWindow.activate(); + this._dummyWindow.show(); + this._buyWindow.hide(); + this._statusWindow.hide(); + this._statusWindow.setItem(null); + this._helpWindow.clear(); +}; + +Scene_Shop.prototype.onCategoryOk = function() { + this.activateSellWindow(); + this._sellWindow.select(0); +}; + +Scene_Shop.prototype.onCategoryCancel = function() { + this._commandWindow.activate(); + this._dummyWindow.show(); + this._categoryWindow.hide(); + this._sellWindow.hide(); +}; + +Scene_Shop.prototype.onSellOk = function() { + this._item = this._sellWindow.item(); + this._categoryWindow.hide(); + this._sellWindow.hide(); + this._numberWindow.setup(this._item, this.maxSell(), this.sellingPrice()); + this._numberWindow.setCurrencyUnit(this.currencyUnit()); + this._numberWindow.show(); + this._numberWindow.activate(); + this._statusWindow.setItem(this._item); + this._statusWindow.show(); +}; + +Scene_Shop.prototype.onSellCancel = function() { + this._sellWindow.deselect(); + this._categoryWindow.activate(); + this._statusWindow.setItem(null); + this._helpWindow.clear(); +}; + +Scene_Shop.prototype.onNumberOk = function() { + SoundManager.playShop(); + switch (this._commandWindow.currentSymbol()) { + case 'buy': + this.doBuy(this._numberWindow.number()); + break; + case 'sell': + this.doSell(this._numberWindow.number()); + break; + } + this.endNumberInput(); + this._goldWindow.refresh(); + this._statusWindow.refresh(); +}; + +Scene_Shop.prototype.onNumberCancel = function() { + SoundManager.playCancel(); + this.endNumberInput(); +}; + +Scene_Shop.prototype.doBuy = function(number) { + $gameParty.loseGold(number * this.buyingPrice()); + $gameParty.gainItem(this._item, number); +}; + +Scene_Shop.prototype.doSell = function(number) { + $gameParty.gainGold(number * this.sellingPrice()); + $gameParty.loseItem(this._item, number); +}; + +Scene_Shop.prototype.endNumberInput = function() { + this._numberWindow.hide(); + switch (this._commandWindow.currentSymbol()) { + case 'buy': + this.activateBuyWindow(); + break; + case 'sell': + this.activateSellWindow(); + break; + } +}; + +Scene_Shop.prototype.maxBuy = function() { + var max = $gameParty.maxItems(this._item) - $gameParty.numItems(this._item); + var price = this.buyingPrice(); + if (price > 0) { + return Math.min(max, Math.floor(this.money() / price)); + } else { + return max; + } +}; + +Scene_Shop.prototype.maxSell = function() { + return $gameParty.numItems(this._item); +}; + +Scene_Shop.prototype.money = function() { + return this._goldWindow.value(); +}; + +Scene_Shop.prototype.currencyUnit = function() { + return this._goldWindow.currencyUnit(); +}; + +Scene_Shop.prototype.buyingPrice = function() { + return this._buyWindow.price(this._item); +}; + +Scene_Shop.prototype.sellingPrice = function() { + return Math.floor(this._item.price / 2); +}; + +//----------------------------------------------------------------------------- +// Scene_Name +// +// The scene class of the name input screen. + +function Scene_Name() { + this.initialize.apply(this, arguments); +} + +Scene_Name.prototype = Object.create(Scene_MenuBase.prototype); +Scene_Name.prototype.constructor = Scene_Name; + +Scene_Name.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_Name.prototype.prepare = function(actorId, maxLength) { + this._actorId = actorId; + this._maxLength = maxLength; +}; + +Scene_Name.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + this._actor = $gameActors.actor(this._actorId); + this.createEditWindow(); + this.createInputWindow(); +}; + +Scene_Name.prototype.start = function() { + Scene_MenuBase.prototype.start.call(this); + this._editWindow.refresh(); +}; + +Scene_Name.prototype.createEditWindow = function() { + this._editWindow = new Window_NameEdit(this._actor, this._maxLength); + this.addWindow(this._editWindow); +}; + +Scene_Name.prototype.createInputWindow = function() { + this._inputWindow = new Window_NameInput(this._editWindow); + this._inputWindow.setHandler('ok', this.onInputOk.bind(this)); + this.addWindow(this._inputWindow); +}; + +Scene_Name.prototype.onInputOk = function() { + this._actor.setName(this._editWindow.name()); + this.popScene(); +}; + +//----------------------------------------------------------------------------- +// Scene_Debug +// +// The scene class of the debug screen. + +function Scene_Debug() { + this.initialize.apply(this, arguments); +} + +Scene_Debug.prototype = Object.create(Scene_MenuBase.prototype); +Scene_Debug.prototype.constructor = Scene_Debug; + +Scene_Debug.prototype.initialize = function() { + Scene_MenuBase.prototype.initialize.call(this); +}; + +Scene_Debug.prototype.create = function() { + Scene_MenuBase.prototype.create.call(this); + this.createRangeWindow(); + this.createEditWindow(); + this.createDebugHelpWindow(); +}; + +Scene_Debug.prototype.createRangeWindow = function() { + this._rangeWindow = new Window_DebugRange(0, 0); + this._rangeWindow.setHandler('ok', this.onRangeOk.bind(this)); + this._rangeWindow.setHandler('cancel', this.popScene.bind(this)); + this.addWindow(this._rangeWindow); +}; + +Scene_Debug.prototype.createEditWindow = function() { + var wx = this._rangeWindow.width; + var ww = Graphics.boxWidth - wx; + this._editWindow = new Window_DebugEdit(wx, 0, ww); + this._editWindow.setHandler('cancel', this.onEditCancel.bind(this)); + this._rangeWindow.setEditWindow(this._editWindow); + this.addWindow(this._editWindow); +}; + +Scene_Debug.prototype.createDebugHelpWindow = function() { + var wx = this._editWindow.x; + var wy = this._editWindow.height; + var ww = this._editWindow.width; + var wh = Graphics.boxHeight - wy; + this._debugHelpWindow = new Window_Base(wx, wy, ww, wh); + this.addWindow(this._debugHelpWindow); +}; + +Scene_Debug.prototype.onRangeOk = function() { + this._editWindow.activate(); + this._editWindow.select(0); + this.refreshHelpWindow(); +}; + +Scene_Debug.prototype.onEditCancel = function() { + this._rangeWindow.activate(); + this._editWindow.deselect(); + this.refreshHelpWindow(); +}; + +Scene_Debug.prototype.refreshHelpWindow = function() { + this._debugHelpWindow.contents.clear(); + if (this._editWindow.active) { + this._debugHelpWindow.drawTextEx(this.helpText(), 4, 0); + } +}; + +Scene_Debug.prototype.helpText = function() { + if (this._rangeWindow.mode() === 'switch') { + return 'Enter : ON / OFF'; + } else { + return ('Left : -1\n' + + 'Right : +1\n' + + 'Pageup : -10\n' + + 'Pagedown : +10'); + } +}; + +//----------------------------------------------------------------------------- +// Scene_Battle +// +// The scene class of the battle screen. + +function Scene_Battle() { + this.initialize.apply(this, arguments); +} + +Scene_Battle.prototype = Object.create(Scene_Base.prototype); +Scene_Battle.prototype.constructor = Scene_Battle; + +Scene_Battle.prototype.initialize = function() { + Scene_Base.prototype.initialize.call(this); +}; + +Scene_Battle.prototype.create = function() { + Scene_Base.prototype.create.call(this); + this.createDisplayObjects(); +}; + +Scene_Battle.prototype.start = function() { + Scene_Base.prototype.start.call(this); + this.startFadeIn(this.fadeSpeed(), false); + BattleManager.playBattleBgm(); + BattleManager.startBattle(); +}; + +Scene_Battle.prototype.update = function() { + var active = this.isActive(); + $gameTimer.update(active); + $gameScreen.update(); + this.updateStatusWindow(); + this.updateWindowPositions(); + if (active && !this.isBusy()) { + this.updateBattleProcess(); + } + Scene_Base.prototype.update.call(this); +}; + +Scene_Battle.prototype.updateBattleProcess = function() { + if (!this.isAnyInputWindowActive() || BattleManager.isAborting() || + BattleManager.isBattleEnd()) { + BattleManager.update(); + this.changeInputWindow(); + } +}; + +Scene_Battle.prototype.isAnyInputWindowActive = function() { + return (this._partyCommandWindow.active || + this._actorCommandWindow.active || + this._skillWindow.active || + this._itemWindow.active || + this._actorWindow.active || + this._enemyWindow.active); +}; + +Scene_Battle.prototype.changeInputWindow = function() { + if (BattleManager.isInputting()) { + if (BattleManager.actor()) { + this.startActorCommandSelection(); + } else { + this.startPartyCommandSelection(); + } + } else { + this.endCommandSelection(); + } +}; + +Scene_Battle.prototype.stop = function() { + Scene_Base.prototype.stop.call(this); + if (this.needsSlowFadeOut()) { + this.startFadeOut(this.slowFadeSpeed(), false); + } else { + this.startFadeOut(this.fadeSpeed(), false); + } + this._statusWindow.close(); + this._partyCommandWindow.close(); + this._actorCommandWindow.close(); +}; + +Scene_Battle.prototype.terminate = function() { + Scene_Base.prototype.terminate.call(this); + $gameParty.onBattleEnd(); + $gameTroop.onBattleEnd(); + AudioManager.stopMe(); +}; + +Scene_Battle.prototype.needsSlowFadeOut = function() { + return (SceneManager.isNextScene(Scene_Title) || + SceneManager.isNextScene(Scene_Gameover)); +}; + +Scene_Battle.prototype.updateStatusWindow = function() { + if ($gameMessage.isBusy()) { + this._statusWindow.close(); + this._partyCommandWindow.close(); + this._actorCommandWindow.close(); + } else if (this.isActive() && !this._messageWindow.isClosing()) { + this._statusWindow.open(); + } +}; + +Scene_Battle.prototype.updateWindowPositions = function() { + var statusX = 0; + if (BattleManager.isInputting()) { + statusX = this._partyCommandWindow.width; + } else { + statusX = this._partyCommandWindow.width / 2; + } + if (this._statusWindow.x < statusX) { + this._statusWindow.x += 16; + if (this._statusWindow.x > statusX) { + this._statusWindow.x = statusX; + } + } + if (this._statusWindow.x > statusX) { + this._statusWindow.x -= 16; + if (this._statusWindow.x < statusX) { + this._statusWindow.x = statusX; + } + } +}; + +Scene_Battle.prototype.createDisplayObjects = function() { + this.createSpriteset(); + this.createWindowLayer(); + this.createAllWindows(); + BattleManager.setLogWindow(this._logWindow); + BattleManager.setStatusWindow(this._statusWindow); + BattleManager.setSpriteset(this._spriteset); + this._logWindow.setSpriteset(this._spriteset); +}; + +Scene_Battle.prototype.createSpriteset = function() { + this._spriteset = new Spriteset_Battle(); + this.addChild(this._spriteset); +}; + +Scene_Battle.prototype.createAllWindows = function() { + this.createLogWindow(); + this.createStatusWindow(); + this.createPartyCommandWindow(); + this.createActorCommandWindow(); + this.createHelpWindow(); + this.createSkillWindow(); + this.createItemWindow(); + this.createActorWindow(); + this.createEnemyWindow(); + this.createMessageWindow(); + this.createScrollTextWindow(); +}; + +Scene_Battle.prototype.createLogWindow = function() { + this._logWindow = new Window_BattleLog(); + this.addWindow(this._logWindow); +}; + +Scene_Battle.prototype.createStatusWindow = function() { + this._statusWindow = new Window_BattleStatus(); + this.addWindow(this._statusWindow); +}; + +Scene_Battle.prototype.createPartyCommandWindow = function() { + this._partyCommandWindow = new Window_PartyCommand(); + this._partyCommandWindow.setHandler('fight', this.commandFight.bind(this)); + this._partyCommandWindow.setHandler('escape', this.commandEscape.bind(this)); + this._partyCommandWindow.deselect(); + this.addWindow(this._partyCommandWindow); +}; + +Scene_Battle.prototype.createActorCommandWindow = function() { + this._actorCommandWindow = new Window_ActorCommand(); + this._actorCommandWindow.setHandler('attack', this.commandAttack.bind(this)); + this._actorCommandWindow.setHandler('skill', this.commandSkill.bind(this)); + this._actorCommandWindow.setHandler('guard', this.commandGuard.bind(this)); + this._actorCommandWindow.setHandler('item', this.commandItem.bind(this)); + this._actorCommandWindow.setHandler('cancel', this.selectPreviousCommand.bind(this)); + this.addWindow(this._actorCommandWindow); +}; + +Scene_Battle.prototype.createHelpWindow = function() { + this._helpWindow = new Window_Help(); + this._helpWindow.visible = false; + this.addWindow(this._helpWindow); +}; + +Scene_Battle.prototype.createSkillWindow = function() { + var wy = this._helpWindow.y + this._helpWindow.height; + var wh = this._statusWindow.y - wy; + this._skillWindow = new Window_BattleSkill(0, wy, Graphics.boxWidth, wh); + this._skillWindow.setHelpWindow(this._helpWindow); + this._skillWindow.setHandler('ok', this.onSkillOk.bind(this)); + this._skillWindow.setHandler('cancel', this.onSkillCancel.bind(this)); + this.addWindow(this._skillWindow); +}; + +Scene_Battle.prototype.createItemWindow = function() { + var wy = this._helpWindow.y + this._helpWindow.height; + var wh = this._statusWindow.y - wy; + this._itemWindow = new Window_BattleItem(0, wy, Graphics.boxWidth, wh); + this._itemWindow.setHelpWindow(this._helpWindow); + this._itemWindow.setHandler('ok', this.onItemOk.bind(this)); + this._itemWindow.setHandler('cancel', this.onItemCancel.bind(this)); + this.addWindow(this._itemWindow); +}; + +Scene_Battle.prototype.createActorWindow = function() { + this._actorWindow = new Window_BattleActor(0, this._statusWindow.y); + this._actorWindow.setHandler('ok', this.onActorOk.bind(this)); + this._actorWindow.setHandler('cancel', this.onActorCancel.bind(this)); + this.addWindow(this._actorWindow); +}; + +Scene_Battle.prototype.createEnemyWindow = function() { + this._enemyWindow = new Window_BattleEnemy(0, this._statusWindow.y); + this._enemyWindow.x = Graphics.boxWidth - this._enemyWindow.width; + this._enemyWindow.setHandler('ok', this.onEnemyOk.bind(this)); + this._enemyWindow.setHandler('cancel', this.onEnemyCancel.bind(this)); + this.addWindow(this._enemyWindow); +}; + +Scene_Battle.prototype.createMessageWindow = function() { + this._messageWindow = new Window_Message(); + this.addWindow(this._messageWindow); + this._messageWindow.subWindows().forEach(function(window) { + this.addWindow(window); + }, this); +}; + +Scene_Battle.prototype.createScrollTextWindow = function() { + this._scrollTextWindow = new Window_ScrollText(); + this.addWindow(this._scrollTextWindow); +}; + +Scene_Battle.prototype.refreshStatus = function() { + this._statusWindow.refresh(); +}; + +Scene_Battle.prototype.startPartyCommandSelection = function() { + this.refreshStatus(); + this._statusWindow.deselect(); + this._statusWindow.open(); + this._actorCommandWindow.close(); + this._partyCommandWindow.setup(); +}; + +Scene_Battle.prototype.commandFight = function() { + this.selectNextCommand(); +}; + +Scene_Battle.prototype.commandEscape = function() { + BattleManager.processEscape(); + this.changeInputWindow(); +}; + +Scene_Battle.prototype.startActorCommandSelection = function() { + this._statusWindow.select(BattleManager.actor().index()); + this._partyCommandWindow.close(); + this._actorCommandWindow.setup(BattleManager.actor()); +}; + +Scene_Battle.prototype.commandAttack = function() { + BattleManager.inputtingAction().setAttack(); + this.selectEnemySelection(); +}; + +Scene_Battle.prototype.commandSkill = function() { + this._skillWindow.setActor(BattleManager.actor()); + this._skillWindow.setStypeId(this._actorCommandWindow.currentExt()); + this._skillWindow.refresh(); + this._skillWindow.show(); + this._skillWindow.activate(); +}; + +Scene_Battle.prototype.commandGuard = function() { + BattleManager.inputtingAction().setGuard(); + this.selectNextCommand(); +}; + +Scene_Battle.prototype.commandItem = function() { + this._itemWindow.refresh(); + this._itemWindow.show(); + this._itemWindow.activate(); +}; + +Scene_Battle.prototype.selectNextCommand = function() { + BattleManager.selectNextCommand(); + this.changeInputWindow(); +}; + +Scene_Battle.prototype.selectPreviousCommand = function() { + BattleManager.selectPreviousCommand(); + this.changeInputWindow(); +}; + +Scene_Battle.prototype.selectActorSelection = function() { + this._actorWindow.refresh(); + this._actorWindow.show(); + this._actorWindow.activate(); +}; + +Scene_Battle.prototype.onActorOk = function() { + var action = BattleManager.inputtingAction(); + action.setTarget(this._actorWindow.index()); + this._actorWindow.hide(); + this._skillWindow.hide(); + this._itemWindow.hide(); + this.selectNextCommand(); +}; + +Scene_Battle.prototype.onActorCancel = function() { + this._actorWindow.hide(); + switch (this._actorCommandWindow.currentSymbol()) { + case 'skill': + this._skillWindow.show(); + this._skillWindow.activate(); + break; + case 'item': + this._itemWindow.show(); + this._itemWindow.activate(); + break; + } +}; + +Scene_Battle.prototype.selectEnemySelection = function() { + this._enemyWindow.refresh(); + this._enemyWindow.show(); + this._enemyWindow.select(0); + this._enemyWindow.activate(); +}; + +Scene_Battle.prototype.onEnemyOk = function() { + var action = BattleManager.inputtingAction(); + action.setTarget(this._enemyWindow.enemyIndex()); + this._enemyWindow.hide(); + this._skillWindow.hide(); + this._itemWindow.hide(); + this.selectNextCommand(); +}; + +Scene_Battle.prototype.onEnemyCancel = function() { + this._enemyWindow.hide(); + switch (this._actorCommandWindow.currentSymbol()) { + case 'attack': + this._actorCommandWindow.activate(); + break; + case 'skill': + this._skillWindow.show(); + this._skillWindow.activate(); + break; + case 'item': + this._itemWindow.show(); + this._itemWindow.activate(); + break; + } +}; + +Scene_Battle.prototype.onSkillOk = function() { + var skill = this._skillWindow.item(); + var action = BattleManager.inputtingAction(); + action.setSkill(skill.id); + BattleManager.actor().setLastBattleSkill(skill); + this.onSelectAction(); +}; + +Scene_Battle.prototype.onSkillCancel = function() { + this._skillWindow.hide(); + this._actorCommandWindow.activate(); +}; + +Scene_Battle.prototype.onItemOk = function() { + var item = this._itemWindow.item(); + var action = BattleManager.inputtingAction(); + action.setItem(item.id); + $gameParty.setLastItem(item); + this.onSelectAction(); +}; + +Scene_Battle.prototype.onItemCancel = function() { + this._itemWindow.hide(); + this._actorCommandWindow.activate(); +}; + +Scene_Battle.prototype.onSelectAction = function() { + var action = BattleManager.inputtingAction(); + this._skillWindow.hide(); + this._itemWindow.hide(); + if (!action.needsSelection()) { + this.selectNextCommand(); + } else if (action.isForOpponent()) { + this.selectEnemySelection(); + } else { + this.selectActorSelection(); + } +}; + +Scene_Battle.prototype.endCommandSelection = function() { + this._partyCommandWindow.close(); + this._actorCommandWindow.close(); + this._statusWindow.deselect(); +}; + +//----------------------------------------------------------------------------- +// Scene_Gameover +// +// The scene class of the game over screen. + +function Scene_Gameover() { + this.initialize.apply(this, arguments); +} + +Scene_Gameover.prototype = Object.create(Scene_Base.prototype); +Scene_Gameover.prototype.constructor = Scene_Gameover; + +Scene_Gameover.prototype.initialize = function() { + Scene_Base.prototype.initialize.call(this); +}; + +Scene_Gameover.prototype.create = function() { + Scene_Base.prototype.create.call(this); + this.playGameoverMusic(); + this.createBackground(); +}; + +Scene_Gameover.prototype.start = function() { + Scene_Base.prototype.start.call(this); + this.startFadeIn(this.slowFadeSpeed(), false); +}; + +Scene_Gameover.prototype.update = function() { + if (this.isActive() && !this.isBusy() && this.isTriggered()) { + this.gotoTitle(); + } + Scene_Base.prototype.update.call(this); +}; + +Scene_Gameover.prototype.stop = function() { + Scene_Base.prototype.stop.call(this); + this.fadeOutAll(); +}; + +Scene_Gameover.prototype.terminate = function() { + Scene_Base.prototype.terminate.call(this); + AudioManager.stopAll(); +}; + +Scene_Gameover.prototype.playGameoverMusic = function() { + AudioManager.stopBgm(); + AudioManager.stopBgs(); + AudioManager.playMe($dataSystem.gameoverMe); +}; + +Scene_Gameover.prototype.createBackground = function() { + this._backSprite = new Sprite(); + this._backSprite.bitmap = ImageManager.loadSystem('GameOver'); + this.addChild(this._backSprite); +}; + +Scene_Gameover.prototype.isTriggered = function() { + return Input.isTriggered('ok') || TouchInput.isTriggered(); +}; + +Scene_Gameover.prototype.gotoTitle = function() { + SceneManager.goto(Scene_Title); +}; diff --git a/js/rpg_sprites.js b/js/rpg_sprites.js new file mode 100644 index 0000000..e95af1e --- /dev/null +++ b/js/rpg_sprites.js @@ -0,0 +1,2675 @@ +//============================================================================= +// rpg_sprites.js v1.2.0 +//============================================================================= + +//----------------------------------------------------------------------------- +// Sprite_Base +// +// The sprite class with a feature which displays animations. + +function Sprite_Base() { + this.initialize.apply(this, arguments); +} + +Sprite_Base.prototype = Object.create(Sprite.prototype); +Sprite_Base.prototype.constructor = Sprite_Base; + +Sprite_Base.prototype.initialize = function() { + Sprite.prototype.initialize.call(this); + this._animationSprites = []; + this._effectTarget = this; + this._hiding = false; +}; + +Sprite_Base.prototype.update = function() { + Sprite.prototype.update.call(this); + this.updateVisibility(); + this.updateAnimationSprites(); +}; + +Sprite_Base.prototype.hide = function() { + this._hiding = true; + this.updateVisibility(); +}; + +Sprite_Base.prototype.show = function() { + this._hiding = false; + this.updateVisibility(); +}; + +Sprite_Base.prototype.updateVisibility = function() { + this.visible = !this._hiding; +}; + +Sprite_Base.prototype.updateAnimationSprites = function() { + if (this._animationSprites.length > 0) { + var sprites = this._animationSprites.clone(); + this._animationSprites = []; + for (var i = 0; i < sprites.length; i++) { + var sprite = sprites[i]; + if (sprite.isPlaying()) { + this._animationSprites.push(sprite); + } else { + sprite.remove(); + } + } + } +}; + +Sprite_Base.prototype.startAnimation = function(animation, mirror, delay) { + var sprite = new Sprite_Animation(); + sprite.setup(this._effectTarget, animation, mirror, delay); + this.parent.addChild(sprite); + this._animationSprites.push(sprite); +}; + +Sprite_Base.prototype.isAnimationPlaying = function() { + return this._animationSprites.length > 0; +}; + +//----------------------------------------------------------------------------- +// Sprite_Button +// +// The sprite for displaying a button. + +function Sprite_Button() { + this.initialize.apply(this, arguments); +} + +Sprite_Button.prototype = Object.create(Sprite.prototype); +Sprite_Button.prototype.constructor = Sprite_Button; + +Sprite_Button.prototype.initialize = function() { + Sprite.prototype.initialize.call(this); + this._touching = false; + this._coldFrame = null; + this._hotFrame = null; + this._clickHandler = null; +}; + +Sprite_Button.prototype.update = function() { + Sprite.prototype.update.call(this); + this.updateFrame(); + this.processTouch(); +}; + +Sprite_Button.prototype.updateFrame = function() { + var frame; + if (this._touching) { + frame = this._hotFrame; + } else { + frame = this._coldFrame; + } + if (frame) { + this.setFrame(frame.x, frame.y, frame.width, frame.height); + } +}; + +Sprite_Button.prototype.setColdFrame = function(x, y, width, height) { + this._coldFrame = new Rectangle(x, y, width, height); +}; + +Sprite_Button.prototype.setHotFrame = function(x, y, width, height) { + this._hotFrame = new Rectangle(x, y, width, height); +}; + +Sprite_Button.prototype.setClickHandler = function(method) { + this._clickHandler = method; +}; + +Sprite_Button.prototype.callClickHandler = function() { + if (this._clickHandler) { + this._clickHandler(); + } +}; + +Sprite_Button.prototype.processTouch = function() { + if (this.isActive()) { + if (TouchInput.isTriggered() && this.isButtonTouched()) { + this._touching = true; + } + if (this._touching) { + if (TouchInput.isReleased() || !this.isButtonTouched()) { + this._touching = false; + if (TouchInput.isReleased()) { + this.callClickHandler(); + } + } + } + } else { + this._touching = false; + } +}; + +Sprite_Button.prototype.isActive = function() { + var node = this; + while (node) { + if (!node.visible) { + return false; + } + node = node.parent; + } + return true; +}; + +Sprite_Button.prototype.isButtonTouched = function() { + var x = this.canvasToLocalX(TouchInput.x); + var y = this.canvasToLocalY(TouchInput.y); + return x >= 0 && y >= 0 && x < this.width && y < this.height; +}; + +Sprite_Button.prototype.canvasToLocalX = function(x) { + var node = this; + while (node) { + x -= node.x; + node = node.parent; + } + return x; +}; + +Sprite_Button.prototype.canvasToLocalY = function(y) { + var node = this; + while (node) { + y -= node.y; + node = node.parent; + } + return y; +}; + +//----------------------------------------------------------------------------- +// Sprite_Character +// +// The sprite for displaying a character. + +function Sprite_Character() { + this.initialize.apply(this, arguments); +} + +Sprite_Character.prototype = Object.create(Sprite_Base.prototype); +Sprite_Character.prototype.constructor = Sprite_Character; + +Sprite_Character.prototype.initialize = function(character) { + Sprite_Base.prototype.initialize.call(this); + this.initMembers(); + this.setCharacter(character); +}; + +Sprite_Character.prototype.initMembers = function() { + this.anchor.x = 0.5; + this.anchor.y = 1; + this._character = null; + this._balloonDuration = 0; + this._tilesetId = 0; + this._upperBody = null; + this._lowerBody = null; +}; + +Sprite_Character.prototype.setCharacter = function(character) { + this._character = character; +}; + +Sprite_Character.prototype.update = function() { + Sprite_Base.prototype.update.call(this); + this.updateBitmap(); + this.updateFrame(); + this.updatePosition(); + this.updateAnimation(); + this.updateBalloon(); + this.updateOther(); +}; + +Sprite_Character.prototype.updateVisibility = function() { + Sprite_Base.prototype.updateVisibility.call(this); + if (this._character.isTransparent()) { + this.visible = false; + } +}; + +Sprite_Character.prototype.isTile = function() { + return this._character.tileId > 0; +}; + +Sprite_Character.prototype.tilesetBitmap = function(tileId) { + var tileset = $gameMap.tileset(); + var setNumber = 5 + Math.floor(tileId / 256); + return ImageManager.loadTileset(tileset.tilesetNames[setNumber]); +}; + +Sprite_Character.prototype.updateBitmap = function() { + if (this.isImageChanged()) { + this._tilesetId = $gameMap.tilesetId(); + this._tileId = this._character.tileId(); + this._characterName = this._character.characterName(); + this._characterIndex = this._character.characterIndex(); + if (this._tileId > 0) { + this.setTileBitmap(); + } else { + this.setCharacterBitmap(); + } + } +}; + +Sprite_Character.prototype.isImageChanged = function() { + return (this._tilesetId !== $gameMap.tilesetId() || + this._tileId !== this._character.tileId() || + this._characterName !== this._character.characterName() || + this._characterIndex !== this._character.characterIndex()); +}; + +Sprite_Character.prototype.setTileBitmap = function() { + this.bitmap = this.tilesetBitmap(this._tileId); +}; + +Sprite_Character.prototype.setCharacterBitmap = function() { + this.bitmap = ImageManager.loadCharacter(this._characterName); + this._isBigCharacter = ImageManager.isBigCharacter(this._characterName); +}; + +Sprite_Character.prototype.updateFrame = function() { + if (this._tileId > 0) { + this.updateTileFrame(); + } else { + this.updateCharacterFrame(); + } +}; + +Sprite_Character.prototype.updateTileFrame = function() { + var pw = this.patternWidth(); + var ph = this.patternHeight(); + var sx = (Math.floor(this._tileId / 128) % 2 * 8 + this._tileId % 8) * pw; + var sy = Math.floor(this._tileId % 256 / 8) % 16 * ph; + this.setFrame(sx, sy, pw, ph); +}; + +Sprite_Character.prototype.updateCharacterFrame = function() { + var pw = this.patternWidth(); + var ph = this.patternHeight(); + var sx = (this.characterBlockX() + this.characterPatternX()) * pw; + var sy = (this.characterBlockY() + this.characterPatternY()) * ph; + this.updateHalfBodySprites(); + if (this._bushDepth > 0) { + var d = this._bushDepth; + this._upperBody.setFrame(sx, sy, pw, ph - d); + this._lowerBody.setFrame(sx, sy + ph - d, pw, d); + this.setFrame(sx, sy, 0, ph); + } else { + this.setFrame(sx, sy, pw, ph); + } +}; + +Sprite_Character.prototype.characterBlockX = function() { + if (this._isBigCharacter) { + return 0; + } else { + var index = this._character.characterIndex(); + return index % 4 * 3; + } +}; + +Sprite_Character.prototype.characterBlockY = function() { + if (this._isBigCharacter) { + return 0; + } else { + var index = this._character.characterIndex(); + return Math.floor(index / 4) * 4; + } +}; + +Sprite_Character.prototype.characterPatternX = function() { + return this._character.pattern(); +}; + +Sprite_Character.prototype.characterPatternY = function() { + return (this._character.direction() - 2) / 2; +}; + +Sprite_Character.prototype.patternWidth = function() { + if (this._tileId > 0) { + return $gameMap.tileWidth(); + } else if (this._isBigCharacter) { + return this.bitmap.width / 3; + } else { + return this.bitmap.width / 12; + } +}; + +Sprite_Character.prototype.patternHeight = function() { + if (this._tileId > 0) { + return $gameMap.tileHeight(); + } else if (this._isBigCharacter) { + return this.bitmap.height / 4; + } else { + return this.bitmap.height / 8; + } +}; + +Sprite_Character.prototype.updateHalfBodySprites = function() { + if (this._bushDepth > 0) { + this.createHalfBodySprites(); + this._upperBody.bitmap = this.bitmap; + this._upperBody.visible = true; + this._upperBody.y = - this._bushDepth; + this._lowerBody.bitmap = this.bitmap; + this._lowerBody.visible = true; + this._upperBody.setBlendColor(this.getBlendColor()); + this._lowerBody.setBlendColor(this.getBlendColor()); + this._upperBody.setColorTone(this.getColorTone()); + this._lowerBody.setColorTone(this.getColorTone()); + } else if (this._upperBody) { + this._upperBody.visible = false; + this._lowerBody.visible = false; + } +}; + +Sprite_Character.prototype.createHalfBodySprites = function() { + if (!this._upperBody) { + this._upperBody = new Sprite(); + this._upperBody.anchor.x = 0.5; + this._upperBody.anchor.y = 1; + this.addChild(this._upperBody); + } + if (!this._lowerBody) { + this._lowerBody = new Sprite(); + this._lowerBody.anchor.x = 0.5; + this._lowerBody.anchor.y = 1; + this._lowerBody.opacity = 128; + this.addChild(this._lowerBody); + } +}; + +Sprite_Character.prototype.updatePosition = function() { + this.x = this._character.screenX(); + this.y = this._character.screenY(); + this.z = this._character.screenZ(); +}; + +Sprite_Character.prototype.updateAnimation = function() { + this.setupAnimation(); + if (!this.isAnimationPlaying()) { + this._character.endAnimation(); + } + if (!this.isBalloonPlaying()) { + this._character.endBalloon(); + } +}; + +Sprite_Character.prototype.updateOther = function() { + this.opacity = this._character.opacity(); + this.blendMode = this._character.blendMode(); + this._bushDepth = this._character.bushDepth(); +}; + +Sprite_Character.prototype.setupAnimation = function() { + if (this._character.animationId() > 0) { + var animation = $dataAnimations[this._character.animationId()]; + this.startAnimation(animation, false, 0); + this._character.startAnimation(); + } +}; + +Sprite_Character.prototype.setupBalloon = function() { + if (this._character.balloonId() > 0) { + this.startBalloon(); + this._character.startBalloon(); + } +}; + +Sprite_Character.prototype.startBalloon = function() { + if (!this._balloonSprite) { + this._balloonSprite = new Sprite_Balloon(); + } + this._balloonSprite.setup(this._character.balloonId()); + this.parent.addChild(this._balloonSprite); +}; + +Sprite_Character.prototype.updateBalloon = function() { + this.setupBalloon(); + if (this._balloonSprite) { + this._balloonSprite.x = this.x; + this._balloonSprite.y = this.y - this.height; + if (!this._balloonSprite.isPlaying()) { + this.endBalloon(); + } + } +}; + +Sprite_Character.prototype.endBalloon = function() { + if (this._balloonSprite) { + this.parent.removeChild(this._balloonSprite); + this._balloonSprite = null; + } +}; + +Sprite_Character.prototype.isBalloonPlaying = function() { + return !!this._balloonSprite; +}; + +//----------------------------------------------------------------------------- +// Sprite_Battler +// +// The superclass of Sprite_Actor and Sprite_Enemy. + +function Sprite_Battler() { + this.initialize.apply(this, arguments); +} + +Sprite_Battler.prototype = Object.create(Sprite_Base.prototype); +Sprite_Battler.prototype.constructor = Sprite_Battler; + +Sprite_Battler.prototype.initialize = function(battler) { + Sprite_Base.prototype.initialize.call(this); + this.initMembers(); + this.setBattler(battler); +}; + +Sprite_Battler.prototype.initMembers = function() { + this.anchor.x = 0.5; + this.anchor.y = 1; + this._battler = null; + this._damages = []; + this._homeX = 0; + this._homeY = 0; + this._offsetX = 0; + this._offsetY = 0; + this._targetOffsetX = NaN; + this._targetOffsetY = NaN; + this._movementDuration = 0; + this._selectionEffectCount = 0; +}; + +Sprite_Battler.prototype.setBattler = function(battler) { + this._battler = battler; +}; + +Sprite_Battler.prototype.setHome = function(x, y) { + this._homeX = x; + this._homeY = y; + this.updatePosition(); +}; + +Sprite_Battler.prototype.update = function() { + Sprite_Base.prototype.update.call(this); + if (this._battler) { + this.updateMain(); + this.updateAnimation(); + this.updateDamagePopup(); + this.updateSelectionEffect(); + } else { + this.bitmap = null; + } +}; + +Sprite_Battler.prototype.updateVisibility = function() { + Sprite_Base.prototype.updateVisibility.call(this); + if (!this._battler || !this._battler.isSpriteVisible()) { + this.visible = false; + } +}; + +Sprite_Battler.prototype.updateMain = function() { + if (this._battler.isSpriteVisible()) { + this.updateBitmap(); + this.updateFrame(); + } + this.updateMove(); + this.updatePosition(); +}; + +Sprite_Battler.prototype.updateBitmap = function() { +}; + +Sprite_Battler.prototype.updateFrame = function() { +}; + +Sprite_Battler.prototype.updateMove = function() { + if (this._movementDuration > 0) { + var d = this._movementDuration; + this._offsetX = (this._offsetX * (d - 1) + this._targetOffsetX) / d; + this._offsetY = (this._offsetY * (d - 1) + this._targetOffsetY) / d; + this._movementDuration--; + if (this._movementDuration === 0) { + this.onMoveEnd(); + } + } +}; + +Sprite_Battler.prototype.updatePosition = function() { + this.x = this._homeX + this._offsetX; + this.y = this._homeY + this._offsetY; +}; + +Sprite_Battler.prototype.updateAnimation = function() { + this.setupAnimation(); +}; + +Sprite_Battler.prototype.updateDamagePopup = function() { + this.setupDamagePopup(); + if (this._damages.length > 0) { + for (var i = 0; i < this._damages.length; i++) { + this._damages[i].update(); + } + if (!this._damages[0].isPlaying()) { + this.parent.removeChild(this._damages[0]); + this._damages.shift(); + } + } +}; + +Sprite_Battler.prototype.updateSelectionEffect = function() { + var target = this._effectTarget; + if (this._battler.isSelected()) { + this._selectionEffectCount++; + if (this._selectionEffectCount % 30 < 15) { + target.setBlendColor([255, 255, 255, 64]); + } else { + target.setBlendColor([0, 0, 0, 0]); + } + } else if (this._selectionEffectCount > 0) { + this._selectionEffectCount = 0; + target.setBlendColor([0, 0, 0, 0]); + } +}; + +Sprite_Battler.prototype.setupAnimation = function() { + while (this._battler.isAnimationRequested()) { + var data = this._battler.shiftAnimation(); + var animation = $dataAnimations[data.animationId]; + var mirror = data.mirror; + var delay = animation.position === 3 ? 0 : data.delay; + this.startAnimation(animation, mirror, delay); + for (var i = 0; i < this._animationSprites.length; i++) { + var sprite = this._animationSprites[i]; + sprite.visible = this._battler.isSpriteVisible(); + } + } +}; + +Sprite_Battler.prototype.setupDamagePopup = function() { + if (this._battler.isDamagePopupRequested()) { + if (this._battler.isSpriteVisible()) { + var sprite = new Sprite_Damage(); + sprite.x = this.x + this.damageOffsetX(); + sprite.y = this.y + this.damageOffsetY(); + sprite.setup(this._battler); + this._damages.push(sprite); + this.parent.addChild(sprite); + } + this._battler.clearDamagePopup(); + this._battler.clearResult(); + } +}; + +Sprite_Battler.prototype.damageOffsetX = function() { + return 0; +}; + +Sprite_Battler.prototype.damageOffsetY = function() { + return 0; +}; + +Sprite_Battler.prototype.startMove = function(x, y, duration) { + if (this._targetOffsetX !== x || this._targetOffsetY !== y) { + this._targetOffsetX = x; + this._targetOffsetY = y; + this._movementDuration = duration; + if (duration === 0) { + this._offsetX = x; + this._offsetY = y; + } + } +}; + +Sprite_Battler.prototype.onMoveEnd = function() { +}; + +Sprite_Battler.prototype.isEffecting = function() { + return false; +}; + +Sprite_Battler.prototype.isMoving = function() { + return this._movementDuration > 0; +}; + +Sprite_Battler.prototype.inHomePosition = function() { + return this._offsetX === 0 && this._offsetY === 0; +}; + +//----------------------------------------------------------------------------- +// Sprite_Actor +// +// The sprite for displaying an actor. + +function Sprite_Actor() { + this.initialize.apply(this, arguments); +} + +Sprite_Actor.prototype = Object.create(Sprite_Battler.prototype); +Sprite_Actor.prototype.constructor = Sprite_Actor; + +Sprite_Actor.MOTIONS = { + walk: { index: 0, loop: true }, + wait: { index: 1, loop: true }, + chant: { index: 2, loop: true }, + guard: { index: 3, loop: true }, + damage: { index: 4, loop: false }, + evade: { index: 5, loop: false }, + thrust: { index: 6, loop: false }, + swing: { index: 7, loop: false }, + missile: { index: 8, loop: false }, + skill: { index: 9, loop: false }, + spell: { index: 10, loop: false }, + item: { index: 11, loop: false }, + escape: { index: 12, loop: true }, + victory: { index: 13, loop: true }, + dying: { index: 14, loop: true }, + abnormal: { index: 15, loop: true }, + sleep: { index: 16, loop: true }, + dead: { index: 17, loop: true } +}; + +Sprite_Actor.prototype.initialize = function(battler) { + Sprite_Battler.prototype.initialize.call(this, battler); + this.moveToStartPosition(); +}; + +Sprite_Actor.prototype.initMembers = function() { + Sprite_Battler.prototype.initMembers.call(this); + this._battlerName = ''; + this._motion = null; + this._motionCount = 0; + this._pattern = 0; + this.createShadowSprite(); + this.createWeaponSprite(); + this.createMainSprite(); + this.createStateSprite(); +}; + +Sprite_Actor.prototype.createMainSprite = function() { + this._mainSprite = new Sprite_Base(); + this._mainSprite.anchor.x = 0.5; + this._mainSprite.anchor.y = 1; + this.addChild(this._mainSprite); + this._effectTarget = this._mainSprite; +}; + +Sprite_Actor.prototype.createShadowSprite = function() { + this._shadowSprite = new Sprite(); + this._shadowSprite.bitmap = ImageManager.loadSystem('Shadow2'); + this._shadowSprite.anchor.x = 0.5; + this._shadowSprite.anchor.y = 0.5; + this._shadowSprite.y = -2; + this.addChild(this._shadowSprite); +}; + +Sprite_Actor.prototype.createWeaponSprite = function() { + this._weaponSprite = new Sprite_Weapon(); + this.addChild(this._weaponSprite); +}; + +Sprite_Actor.prototype.createStateSprite = function() { + this._stateSprite = new Sprite_StateOverlay(); + this.addChild(this._stateSprite); +}; + +Sprite_Actor.prototype.setBattler = function(battler) { + Sprite_Battler.prototype.setBattler.call(this, battler); + var changed = (battler !== this._actor); + if (changed) { + this._actor = battler; + if (battler) { + this.setActorHome(battler.index()); + } + this.startEntryMotion(); + this._stateSprite.setup(battler); + } +}; + +Sprite_Actor.prototype.moveToStartPosition = function() { + this.startMove(300, 0, 0); +}; + +Sprite_Actor.prototype.setActorHome = function(index) { + this.setHome(600 + index * 32, 280 + index * 48); +}; + +Sprite_Actor.prototype.update = function() { + Sprite_Battler.prototype.update.call(this); + this.updateShadow(); + if (this._actor) { + this.updateMotion(); + } +}; + +Sprite_Actor.prototype.updateShadow = function() { + this._shadowSprite.visible = !!this._actor; +}; + +Sprite_Actor.prototype.updateMain = function() { + Sprite_Battler.prototype.updateMain.call(this); + if (this._actor.isSpriteVisible() && !this.isMoving()) { + this.updateTargetPosition(); + } +}; + +Sprite_Actor.prototype.setupMotion = function() { + if (this._actor.isMotionRequested()) { + this.startMotion(this._actor.motionType()); + this._actor.clearMotion(); + } +}; + +Sprite_Actor.prototype.setupWeaponAnimation = function() { + if (this._actor.isWeaponAnimationRequested()) { + this._weaponSprite.setup(this._actor.weaponImageId()); + this._actor.clearWeaponAnimation(); + } +}; + +Sprite_Actor.prototype.startMotion = function(motionType) { + var newMotion = Sprite_Actor.MOTIONS[motionType]; + if (this._motion !== newMotion) { + this._motion = newMotion; + this._motionCount = 0; + this._pattern = 0; + } +}; + +Sprite_Actor.prototype.updateTargetPosition = function() { + if (this._actor.isInputting() || this._actor.isActing()) { + this.stepForward(); + } else if (this._actor.canMove() && BattleManager.isEscaped()) { + this.retreat(); + } else if (!this.inHomePosition()) { + this.stepBack(); + } +}; + +Sprite_Actor.prototype.updateBitmap = function() { + Sprite_Battler.prototype.updateBitmap.call(this); + var name = this._actor.battlerName(); + if (this._battlerName !== name) { + this._battlerName = name; + this._mainSprite.bitmap = ImageManager.loadSvActor(name); + } +}; + +Sprite_Actor.prototype.updateFrame = function() { + Sprite_Battler.prototype.updateFrame.call(this); + var bitmap = this._mainSprite.bitmap; + if (bitmap) { + var motionIndex = this._motion ? this._motion.index : 0; + var pattern = this._pattern < 3 ? this._pattern : 1; + var cw = bitmap.width / 9; + var ch = bitmap.height / 6; + var cx = Math.floor(motionIndex / 6) * 3 + pattern; + var cy = motionIndex % 6; + this._mainSprite.setFrame(cx * cw, cy * ch, cw, ch); + } +}; + +Sprite_Actor.prototype.updateMove = function() { + var bitmap = this._mainSprite.bitmap; + if (!bitmap || bitmap.isReady()) { + Sprite_Battler.prototype.updateMove.call(this); + } +}; + +Sprite_Actor.prototype.updateMotion = function() { + this.setupMotion(); + this.setupWeaponAnimation(); + if (this._actor.isMotionRefreshRequested()) { + this.refreshMotion(); + this._actor.clearMotion(); + } + this.updateMotionCount(); +}; + +Sprite_Actor.prototype.updateMotionCount = function() { + if (this._motion && ++this._motionCount >= this.motionSpeed()) { + if (this._motion.loop) { + this._pattern = (this._pattern + 1) % 4; + } else if (this._pattern < 2) { + this._pattern++; + } else { + this.refreshMotion(); + } + this._motionCount = 0; + } +}; + +Sprite_Actor.prototype.motionSpeed = function() { + return 12; +}; + +Sprite_Actor.prototype.refreshMotion = function() { + var actor = this._actor; + var motionGuard = Sprite_Actor.MOTIONS['guard']; + if (actor) { + if (this._motion === motionGuard && !BattleManager.isInputting()) { + return; + } + var stateMotion = actor.stateMotionIndex(); + if (actor.isInputting() || actor.isActing()) { + this.startMotion('walk'); + } else if (stateMotion === 3) { + this.startMotion('dead'); + } else if (stateMotion === 2) { + this.startMotion('sleep'); + } else if (actor.isChanting()) { + this.startMotion('chant'); + } else if (actor.isGuard() || actor.isGuardWaiting()) { + this.startMotion('guard'); + } else if (stateMotion === 1) { + this.startMotion('abnormal'); + } else if (actor.isDying()) { + this.startMotion('dying'); + } else if (actor.isUndecided()) { + this.startMotion('walk'); + } else { + this.startMotion('wait'); + } + } +}; + +Sprite_Actor.prototype.startEntryMotion = function() { + if (this._actor && this._actor.canMove()) { + this.startMotion('walk'); + this.startMove(0, 0, 30); + } else if (!this.isMoving()) { + this.refreshMotion(); + this.startMove(0, 0, 0); + } +}; + +Sprite_Actor.prototype.stepForward = function() { + this.startMove(-48, 0, 12); +}; + +Sprite_Actor.prototype.stepBack = function() { + this.startMove(0, 0, 12); +}; + +Sprite_Actor.prototype.retreat = function() { + this.startMove(300, 0, 30); +}; + +Sprite_Actor.prototype.onMoveEnd = function() { + Sprite_Battler.prototype.onMoveEnd.call(this); + if (!BattleManager.isBattleEnd()) { + this.refreshMotion(); + } +}; + +Sprite_Actor.prototype.damageOffsetX = function() { + return -32; +}; + +Sprite_Actor.prototype.damageOffsetY = function() { + return 0; +}; + +//----------------------------------------------------------------------------- +// Sprite_Enemy +// +// The sprite for displaying an enemy. + +function Sprite_Enemy() { + this.initialize.apply(this, arguments); +} + +Sprite_Enemy.prototype = Object.create(Sprite_Battler.prototype); +Sprite_Enemy.prototype.constructor = Sprite_Enemy; + +Sprite_Enemy.prototype.initialize = function(battler) { + Sprite_Battler.prototype.initialize.call(this, battler); +}; + +Sprite_Enemy.prototype.initMembers = function() { + Sprite_Battler.prototype.initMembers.call(this); + this._enemy = null; + this._appeared = false; + this._battlerName = ''; + this._battlerHue = 0; + this._effectType = null; + this._effectDuration = 0; + this._shake = 0; + this.createStateIconSprite(); +}; + +Sprite_Enemy.prototype.createStateIconSprite = function() { + this._stateIconSprite = new Sprite_StateIcon(); + this.addChild(this._stateIconSprite); +}; + +Sprite_Enemy.prototype.setBattler = function(battler) { + Sprite_Battler.prototype.setBattler.call(this, battler); + this._enemy = battler; + this.setHome(battler.screenX(), battler.screenY()); + this._stateIconSprite.setup(battler); +}; + +Sprite_Enemy.prototype.update = function() { + Sprite_Battler.prototype.update.call(this); + if (this._enemy) { + this.updateEffect(); + this.updateStateSprite(); + } +}; + +Sprite_Enemy.prototype.updateBitmap = function() { + Sprite_Battler.prototype.updateBitmap.call(this); + var name = this._enemy.battlerName(); + var hue = this._enemy.battlerHue(); + if (this._battlerName !== name || this._battlerHue !== hue) { + this._battlerName = name; + this._battlerHue = hue; + this.loadBitmap(name, hue); + this.initVisibility(); + } +}; + +Sprite_Enemy.prototype.loadBitmap = function(name, hue) { + if ($gameSystem.isSideView()) { + this.bitmap = ImageManager.loadSvEnemy(name, hue); + } else { + this.bitmap = ImageManager.loadEnemy(name, hue); + } +}; + +Sprite_Enemy.prototype.updateFrame = function() { + Sprite_Battler.prototype.updateFrame.call(this); + var frameHeight = this.bitmap.height; + if (this._effectType === 'bossCollapse') { + frameHeight = this._effectDuration; + } + this.setFrame(0, 0, this.bitmap.width, frameHeight); +}; + +Sprite_Enemy.prototype.updatePosition = function() { + Sprite_Battler.prototype.updatePosition.call(this); + this.x += this._shake; +}; + +Sprite_Enemy.prototype.updateStateSprite = function() { + this._stateIconSprite.y = -Math.round((this.bitmap.height + 40) * 0.9); + if (this._stateIconSprite.y < 20 - this.y) { + this._stateIconSprite.y = 20 - this.y; + } +}; + +Sprite_Enemy.prototype.initVisibility = function() { + this._appeared = this._enemy.isAlive(); + if (!this._appeared) { + this.opacity = 0; + } +}; + +Sprite_Enemy.prototype.setupEffect = function() { + if (this._appeared && this._enemy.isEffectRequested()) { + this.startEffect(this._enemy.effectType()); + this._enemy.clearEffect(); + } + if (!this._appeared && this._enemy.isAlive()) { + this.startEffect('appear'); + } else if (this._appeared && this._enemy.isHidden()) { + this.startEffect('disappear'); + } +}; + +Sprite_Enemy.prototype.startEffect = function(effectType) { + this._effectType = effectType; + switch (this._effectType) { + case 'appear': + this.startAppear(); + break; + case 'disappear': + this.startDisappear(); + break; + case 'whiten': + this.startWhiten(); + break; + case 'blink': + this.startBlink(); + break; + case 'collapse': + this.startCollapse(); + break; + case 'bossCollapse': + this.startBossCollapse(); + break; + case 'instantCollapse': + this.startInstantCollapse(); + break; + } + this.revertToNormal(); +}; + +Sprite_Enemy.prototype.startAppear = function() { + this._effectDuration = 16; + this._appeared = true; +}; + +Sprite_Enemy.prototype.startDisappear = function() { + this._effectDuration = 32; + this._appeared = false; +}; + +Sprite_Enemy.prototype.startWhiten = function() { + this._effectDuration = 16; +}; + +Sprite_Enemy.prototype.startBlink = function() { + this._effectDuration = 20; +}; + +Sprite_Enemy.prototype.startCollapse = function() { + this._effectDuration = 32; + this._appeared = false; +}; + +Sprite_Enemy.prototype.startBossCollapse = function() { + this._effectDuration = this.bitmap.height; + this._appeared = false; +}; + +Sprite_Enemy.prototype.startInstantCollapse = function() { + this._effectDuration = 16; + this._appeared = false; +}; + +Sprite_Enemy.prototype.updateEffect = function() { + this.setupEffect(); + if (this._effectDuration > 0) { + this._effectDuration--; + switch (this._effectType) { + case 'whiten': + this.updateWhiten(); + break; + case 'blink': + this.updateBlink(); + break; + case 'appear': + this.updateAppear(); + break; + case 'disappear': + this.updateDisappear(); + break; + case 'collapse': + this.updateCollapse(); + break; + case 'bossCollapse': + this.updateBossCollapse(); + break; + case 'instantCollapse': + this.updateInstantCollapse(); + break; + } + if (this._effectDuration === 0) { + this._effectType = null; + } + } +}; + +Sprite_Enemy.prototype.isEffecting = function() { + return this._effectType !== null; +}; + +Sprite_Enemy.prototype.revertToNormal = function() { + this._shake = 0; + this.blendMode = 0; + this.opacity = 255; + this.setBlendColor([0, 0, 0, 0]); +}; + +Sprite_Enemy.prototype.updateWhiten = function() { + var alpha = 128 - (16 - this._effectDuration) * 10; + this.setBlendColor([255, 255, 255, alpha]); +}; + +Sprite_Enemy.prototype.updateBlink = function() { + this.opacity = (this._effectDuration % 10 < 5) ? 255 : 0; +}; + +Sprite_Enemy.prototype.updateAppear = function() { + this.opacity = (16 - this._effectDuration) * 16; +}; + +Sprite_Enemy.prototype.updateDisappear = function() { + this.opacity = 256 - (32 - this._effectDuration) * 10; +}; + +Sprite_Enemy.prototype.updateCollapse = function() { + this.blendMode = Graphics.BLEND_ADD; + this.setBlendColor([255, 128, 128, 128]); + this.opacity *= this._effectDuration / (this._effectDuration + 1); +}; + +Sprite_Enemy.prototype.updateBossCollapse = function() { + this._shake = this._effectDuration % 2 * 4 - 2; + this.blendMode = Graphics.BLEND_ADD; + this.opacity *= this._effectDuration / (this._effectDuration + 1); + this.setBlendColor([255, 255, 255, 255 - this.opacity]); + if (this._effectDuration % 20 === 19) { + SoundManager.playBossCollapse2(); + } +}; + +Sprite_Enemy.prototype.updateInstantCollapse = function() { + this.opacity = 0; +}; + +Sprite_Enemy.prototype.damageOffsetX = function() { + return 0; +}; + +Sprite_Enemy.prototype.damageOffsetY = function() { + return -8; +}; + +//----------------------------------------------------------------------------- +// Sprite_Animation +// +// The sprite for displaying an animation. + +function Sprite_Animation() { + this.initialize.apply(this, arguments); +} + +Sprite_Animation.prototype = Object.create(Sprite.prototype); +Sprite_Animation.prototype.constructor = Sprite_Animation; + +Sprite_Animation._checker1 = {}; +Sprite_Animation._checker2 = {}; + +Sprite_Animation.prototype.initialize = function() { + Sprite.prototype.initialize.call(this); + this.initMembers(); +}; + +Sprite_Animation.prototype.initMembers = function() { + this._target = null; + this._animation = null; + this._mirror = false; + this._delay = 0; + this._rate = 4; + this._duration = 0; + this._flashColor = [0, 0, 0, 0]; + this._flashDuration = 0; + this._screenFlashDuration = 0; + this._hidingDuration = 0; + this._bitmap1 = null; + this._bitmap2 = null; + this._cellSprites = []; + this._screenFlashSprite = null; + this._duplicated = false; + this.z = 8; +}; + +Sprite_Animation.prototype.setup = function(target, animation, mirror, delay) { + this._target = target; + this._animation = animation; + this._mirror = mirror; + this._delay = delay; + if (this._animation) { + this.remove(); + this.setupRate(); + this.setupDuration(); + this.loadBitmaps(); + this.createSprites(); + } +}; + +Sprite_Animation.prototype.remove = function() { + if (this.parent && this.parent.removeChild(this)) { + this._target.setBlendColor([0, 0, 0, 0]); + this._target.show(); + } +}; + +Sprite_Animation.prototype.setupRate = function() { + this._rate = 4; +}; + +Sprite_Animation.prototype.setupDuration = function() { + this._duration = this._animation.frames.length * this._rate + 1; +}; + +Sprite_Animation.prototype.update = function() { + Sprite.prototype.update.call(this); + this.updateMain(); + this.updateFlash(); + this.updateScreenFlash(); + this.updateHiding(); + Sprite_Animation._checker1 = {}; + Sprite_Animation._checker2 = {}; +}; + +Sprite_Animation.prototype.updateFlash = function() { + if (this._flashDuration > 0) { + var d = this._flashDuration--; + this._flashColor[3] *= (d - 1) / d; + this._target.setBlendColor(this._flashColor); + } +}; + +Sprite_Animation.prototype.updateScreenFlash = function() { + if (this._screenFlashDuration > 0) { + var d = this._screenFlashDuration--; + if (this._screenFlashSprite) { + this._screenFlashSprite.x = -this.absoluteX(); + this._screenFlashSprite.y = -this.absoluteY(); + this._screenFlashSprite.opacity *= (d - 1) / d; + this._screenFlashSprite.visible = (this._screenFlashDuration > 0); + } + } +}; + +Sprite_Animation.prototype.absoluteX = function() { + var x = 0; + var object = this; + while (object) { + x += object.x; + object = object.parent; + } + return x; +}; + +Sprite_Animation.prototype.absoluteY = function() { + var y = 0; + var object = this; + while (object) { + y += object.y; + object = object.parent; + } + return y; +}; + +Sprite_Animation.prototype.updateHiding = function() { + if (this._hidingDuration > 0) { + this._hidingDuration--; + if (this._hidingDuration === 0) { + this._target.show(); + } + } +}; + +Sprite_Animation.prototype.isPlaying = function() { + return this._duration > 0; +}; + +Sprite_Animation.prototype.loadBitmaps = function() { + var name1 = this._animation.animation1Name; + var name2 = this._animation.animation2Name; + var hue1 = this._animation.animation1Hue; + var hue2 = this._animation.animation2Hue; + this._bitmap1 = ImageManager.loadAnimation(name1, hue1); + this._bitmap2 = ImageManager.loadAnimation(name2, hue2); +}; + +Sprite_Animation.prototype.isReady = function() { + return ImageManager.isReady(); +}; + +Sprite_Animation.prototype.createSprites = function() { + if (!Sprite_Animation._checker2[this._animation]) { + this.createCellSprites(); + if (this._animation.position === 3) { + Sprite_Animation._checker2[this._animation] = true; + } + this.createScreenFlashSprite(); + } + if (Sprite_Animation._checker1[this._animation]) { + this._duplicated = true; + } else { + this._duplicated = false; + if (this._animation.position === 3) { + Sprite_Animation._checker1[this._animation] = true; + } + } +}; + +Sprite_Animation.prototype.createCellSprites = function() { + this._cellSprites = []; + for (var i = 0; i < 16; i++) { + var sprite = new Sprite(); + sprite.anchor.x = 0.5; + sprite.anchor.y = 0.5; + this._cellSprites.push(sprite); + this.addChild(sprite); + } +}; + +Sprite_Animation.prototype.createScreenFlashSprite = function() { + this._screenFlashSprite = new ScreenSprite(); + this.addChild(this._screenFlashSprite); +}; + +Sprite_Animation.prototype.updateMain = function() { + if (this.isPlaying() && this.isReady()) { + if (this._delay > 0) { + this._delay--; + } else { + this._duration--; + this.updatePosition(); + if (this._duration % this._rate === 0) { + this.updateFrame(); + } + } + } +}; + +Sprite_Animation.prototype.updatePosition = function() { + if (this._animation.position === 3) { + this.x = this.parent.width / 2; + this.y = this.parent.height / 2; + } else { + var parent = this._target.parent; + var grandparent = parent ? parent.parent : null; + this.x = this._target.x; + this.y = this._target.y; + if (this.parent === grandparent) { + this.x += parent.x; + this.y += parent.y; + } + if (this._animation.position === 0) { + this.y -= this._target.height; + } else if (this._animation.position === 1) { + this.y -= this._target.height / 2; + } + } +}; + +Sprite_Animation.prototype.updateFrame = function() { + if (this._duration > 0) { + var frameIndex = this.currentFrameIndex(); + this.updateAllCellSprites(this._animation.frames[frameIndex]); + this._animation.timings.forEach(function(timing) { + if (timing.frame === frameIndex) { + this.processTimingData(timing); + } + }, this); + } +}; + +Sprite_Animation.prototype.currentFrameIndex = function() { + return (this._animation.frames.length - + Math.floor((this._duration + this._rate - 1) / this._rate)); +}; + +Sprite_Animation.prototype.updateAllCellSprites = function(frame) { + for (var i = 0; i < this._cellSprites.length; i++) { + var sprite = this._cellSprites[i]; + if (i < frame.length) { + this.updateCellSprite(sprite, frame[i]); + } else { + sprite.visible = false; + } + } +}; + +Sprite_Animation.prototype.updateCellSprite = function(sprite, cell) { + var pattern = cell[0]; + if (pattern >= 0) { + var sx = pattern % 5 * 192; + var sy = Math.floor(pattern % 100 / 5) * 192; + var mirror = this._mirror; + sprite.bitmap = pattern < 100 ? this._bitmap1 : this._bitmap2; + sprite.setFrame(sx, sy, 192, 192); + sprite.x = cell[1]; + sprite.y = cell[2]; + if (this._mirror) { + sprite.x *= -1; + } + sprite.rotation = cell[4] * Math.PI / 180; + sprite.scale.x = cell[3] / 100; + if ((cell[5] && !mirror) || (!cell[5] && mirror)) { + sprite.scale.x *= -1; + } + sprite.scale.y = cell[3] / 100; + sprite.opacity = cell[6]; + sprite.blendMode = cell[7]; + sprite.visible = true; + } else { + sprite.visible = false; + } +}; + +Sprite_Animation.prototype.processTimingData = function(timing) { + var duration = timing.flashDuration * this._rate; + switch (timing.flashScope) { + case 1: + this.startFlash(timing.flashColor, duration); + break; + case 2: + this.startScreenFlash(timing.flashColor, duration); + break; + case 3: + this.startHiding(duration); + break; + } + if (!this._duplicated && timing.se) { + AudioManager.playSe(timing.se); + } +}; + +Sprite_Animation.prototype.startFlash = function(color, duration) { + this._flashColor = color.clone(); + this._flashDuration = duration; +}; + +Sprite_Animation.prototype.startScreenFlash = function(color, duration) { + this._screenFlashDuration = duration; + if (this._screenFlashSprite) { + this._screenFlashSprite.setColor(color[0], color[1], color[2]); + this._screenFlashSprite.opacity = color[3]; + } +}; + +Sprite_Animation.prototype.startHiding = function(duration) { + this._hidingDuration = duration; + this._target.hide(); +}; + +//----------------------------------------------------------------------------- +// Sprite_Damage +// +// The sprite for displaying a popup damage. + +function Sprite_Damage() { + this.initialize.apply(this, arguments); +} + +Sprite_Damage.prototype = Object.create(Sprite.prototype); +Sprite_Damage.prototype.constructor = Sprite_Damage; + +Sprite_Damage.prototype.initialize = function() { + Sprite.prototype.initialize.call(this); + this._duration = 90; + this._flashColor = [0, 0, 0, 0]; + this._flashDuration = 0; + this._damageBitmap = ImageManager.loadSystem('Damage'); +}; + +Sprite_Damage.prototype.setup = function(target) { + var result = target.result(); + if (result.missed || result.evaded) { + this.createMiss(); + } else if (result.hpAffected) { + this.createDigits(0, result.hpDamage); + } else if (target.isAlive() && result.mpDamage !== 0) { + this.createDigits(2, result.mpDamage); + } + if (result.critical) { + this.setupCriticalEffect(); + } +}; + +Sprite_Damage.prototype.setupCriticalEffect = function() { + this._flashColor = [255, 0, 0, 160]; + this._flashDuration = 60; +}; + +Sprite_Damage.prototype.digitWidth = function() { + return this._damageBitmap ? this._damageBitmap.width / 10 : 0; +}; + +Sprite_Damage.prototype.digitHeight = function() { + return this._damageBitmap ? this._damageBitmap.height / 5 : 0; +}; + +Sprite_Damage.prototype.createMiss = function() { + var w = this.digitWidth(); + var h = this.digitHeight(); + var sprite = this.createChildSprite(); + sprite.setFrame(0, 4 * h, 4 * w, h); + sprite.dy = 0; +}; + +Sprite_Damage.prototype.createDigits = function(baseRow, value) { + var string = Math.abs(value).toString(); + var row = baseRow + (value < 0 ? 1 : 0); + var w = this.digitWidth(); + var h = this.digitHeight(); + for (var i = 0; i < string.length; i++) { + var sprite = this.createChildSprite(); + var n = Number(string[i]); + sprite.setFrame(n * w, row * h, w, h); + sprite.x = (i - (string.length - 1) / 2) * w; + sprite.dy = -i; + } +}; + +Sprite_Damage.prototype.createChildSprite = function() { + var sprite = new Sprite(); + sprite.bitmap = this._damageBitmap; + sprite.anchor.x = 0.5; + sprite.anchor.y = 1; + sprite.y = -40; + sprite.ry = sprite.y; + this.addChild(sprite); + return sprite; +}; + +Sprite_Damage.prototype.update = function() { + Sprite.prototype.update.call(this); + if (this._duration > 0) { + this._duration--; + for (var i = 0; i < this.children.length; i++) { + this.updateChild(this.children[i]); + } + } + this.updateFlash(); + this.updateOpacity(); +}; + +Sprite_Damage.prototype.updateChild = function(sprite) { + sprite.dy += 0.5; + sprite.ry += sprite.dy; + if (sprite.ry >= 0) { + sprite.ry = 0; + sprite.dy *= -0.6; + } + sprite.y = Math.round(sprite.ry); + sprite.setBlendColor(this._flashColor); +}; + +Sprite_Damage.prototype.updateFlash = function() { + if (this._flashDuration > 0) { + var d = this._flashDuration--; + this._flashColor[3] *= (d - 1) / d; + } +}; + +Sprite_Damage.prototype.updateOpacity = function() { + if (this._duration < 10) { + this.opacity = 255 * this._duration / 10; + } +}; + +Sprite_Damage.prototype.isPlaying = function() { + return this._duration > 0; +}; + +//----------------------------------------------------------------------------- +// Sprite_StateIcon +// +// The sprite for displaying state icons. + +function Sprite_StateIcon() { + this.initialize.apply(this, arguments); +} + +Sprite_StateIcon.prototype = Object.create(Sprite.prototype); +Sprite_StateIcon.prototype.constructor = Sprite_StateIcon; + +Sprite_StateIcon.prototype.initialize = function() { + Sprite.prototype.initialize.call(this); + this.initMembers(); + this.loadBitmap(); +}; + +Sprite_StateIcon._iconWidth = 32; +Sprite_StateIcon._iconHeight = 32; + +Sprite_StateIcon.prototype.initMembers = function() { + this._battler = null; + this._iconIndex = 0; + this._animationCount = 0; + this._animationIndex = 0; + this.anchor.x = 0.5; + this.anchor.y = 0.5; +}; + +Sprite_StateIcon.prototype.loadBitmap = function() { + this.bitmap = ImageManager.loadSystem('IconSet'); + this.setFrame(0, 0, 0, 0); +}; + +Sprite_StateIcon.prototype.setup = function(battler) { + this._battler = battler; +}; + +Sprite_StateIcon.prototype.update = function() { + Sprite.prototype.update.call(this); + this._animationCount++; + if (this._animationCount >= this.animationWait()) { + this.updateIcon(); + this.updateFrame(); + this._animationCount = 0; + } +}; + +Sprite_StateIcon.prototype.animationWait = function() { + return 40; +}; + +Sprite_StateIcon.prototype.updateIcon = function() { + var icons = []; + if (this._battler && this._battler.isAlive()) { + icons = this._battler.allIcons(); + } + if (icons.length > 0) { + this._animationIndex++; + if (this._animationIndex >= icons.length) { + this._animationIndex = 0; + } + this._iconIndex = icons[this._animationIndex]; + } else { + this._animationIndex = 0; + this._iconIndex = 0; + } +}; + +Sprite_StateIcon.prototype.updateFrame = function() { + var pw = Sprite_StateIcon._iconWidth; + var ph = Sprite_StateIcon._iconHeight; + var sx = this._iconIndex % 16 * pw; + var sy = Math.floor(this._iconIndex / 16) * ph; + this.setFrame(sx, sy, pw, ph); +}; + +//----------------------------------------------------------------------------- +// Sprite_StateOverlay +// +// The sprite for displaying an overlay image for a state. + +function Sprite_StateOverlay() { + this.initialize.apply(this, arguments); +} + +Sprite_StateOverlay.prototype = Object.create(Sprite_Base.prototype); +Sprite_StateOverlay.prototype.constructor = Sprite_StateOverlay; + +Sprite_StateOverlay.prototype.initialize = function() { + Sprite_Base.prototype.initialize.call(this); + this.initMembers(); + this.loadBitmap(); +}; + +Sprite_StateOverlay.prototype.initMembers = function() { + this._battler = null; + this._overlayIndex = 0; + this._animationCount = 0; + this._pattern = 0; + this.anchor.x = 0.5; + this.anchor.y = 1; +}; + +Sprite_StateOverlay.prototype.loadBitmap = function() { + this.bitmap = ImageManager.loadSystem('States'); + this.setFrame(0, 0, 0, 0); +}; + +Sprite_StateOverlay.prototype.setup = function(battler) { + this._battler = battler; +}; + +Sprite_StateOverlay.prototype.update = function() { + Sprite_Base.prototype.update.call(this); + this._animationCount++; + if (this._animationCount >= this.animationWait()) { + this.updatePattern(); + this.updateFrame(); + this._animationCount = 0; + } +}; + +Sprite_StateOverlay.prototype.animationWait = function() { + return 8; +}; + +Sprite_StateOverlay.prototype.updatePattern = function() { + this._pattern++; + this._pattern %= 8; + if (this._battler) { + this._overlayIndex = this._battler.stateOverlayIndex(); + } +}; + +Sprite_StateOverlay.prototype.updateFrame = function() { + if (this._overlayIndex > 0) { + var w = 96; + var h = 96; + var sx = this._pattern * w; + var sy = (this._overlayIndex - 1) * h; + this.setFrame(sx, sy, w, h); + } else { + this.setFrame(0, 0, 0, 0); + } +}; + +//----------------------------------------------------------------------------- +// Sprite_Weapon +// +// The sprite for displaying a weapon image for attacking. + +function Sprite_Weapon() { + this.initialize.apply(this, arguments); +} + +Sprite_Weapon.prototype = Object.create(Sprite_Base.prototype); +Sprite_Weapon.prototype.constructor = Sprite_Weapon; + +Sprite_Weapon.prototype.initialize = function() { + Sprite_Base.prototype.initialize.call(this); + this.initMembers(); +}; + +Sprite_Weapon.prototype.initMembers = function() { + this._weaponImageId = 0; + this._animationCount = 0; + this._pattern = 0; + this.anchor.x = 0.5; + this.anchor.y = 1; + this.x = -16; +}; + +Sprite_Weapon.prototype.setup = function(weaponImageId) { + this._weaponImageId = weaponImageId; + this._animationCount = 0; + this._pattern = 0; + this.loadBitmap(); + this.updateFrame(); +}; + +Sprite_Weapon.prototype.update = function() { + Sprite_Base.prototype.update.call(this); + this._animationCount++; + if (this._animationCount >= this.animationWait()) { + this.updatePattern(); + this.updateFrame(); + this._animationCount = 0; + } +}; + +Sprite_Weapon.prototype.animationWait = function() { + return 12; +}; + +Sprite_Weapon.prototype.updatePattern = function() { + this._pattern++; + if (this._pattern >= 3) { + this._weaponImageId = 0; + } +}; + +Sprite_Weapon.prototype.loadBitmap = function() { + var pageId = Math.floor((this._weaponImageId - 1) / 12) + 1; + if (pageId >= 1) { + this.bitmap = ImageManager.loadSystem('Weapons' + pageId); + } else { + this.bitmap = ImageManager.loadSystem(''); + } +}; + +Sprite_Weapon.prototype.updateFrame = function() { + if (this._weaponImageId > 0) { + var index = (this._weaponImageId - 1) % 12; + var w = 96; + var h = 64; + var sx = (Math.floor(index / 6) * 3 + this._pattern) * w; + var sy = Math.floor(index % 6) * h; + this.setFrame(sx, sy, w, h); + } else { + this.setFrame(0, 0, 0, 0); + } +}; + +Sprite_Weapon.prototype.isPlaying = function() { + return this._weaponImageId > 0; +}; + +//----------------------------------------------------------------------------- +// Sprite_Balloon +// +// The sprite for displaying a balloon icon. + +function Sprite_Balloon() { + this.initialize.apply(this, arguments); +} + +Sprite_Balloon.prototype = Object.create(Sprite_Base.prototype); +Sprite_Balloon.prototype.constructor = Sprite_Balloon; + +Sprite_Balloon.prototype.initialize = function() { + Sprite_Base.prototype.initialize.call(this); + this.initMembers(); + this.loadBitmap(); +}; + +Sprite_Balloon.prototype.initMembers = function() { + this._balloonId = 0; + this._duration = 0; + this.anchor.x = 0.5; + this.anchor.y = 1; + this.z = 7; +}; + +Sprite_Balloon.prototype.loadBitmap = function() { + this.bitmap = ImageManager.loadSystem('Balloon'); + this.setFrame(0, 0, 0, 0); +}; + +Sprite_Balloon.prototype.setup = function(balloonId) { + this._balloonId = balloonId; + this._duration = 8 * this.speed() + this.waitTime(); +}; + +Sprite_Balloon.prototype.update = function() { + Sprite_Base.prototype.update.call(this); + if (this._duration > 0) { + this._duration--; + if (this._duration > 0) { + this.updateFrame(); + } + } +}; + +Sprite_Balloon.prototype.updateFrame = function() { + var w = 48; + var h = 48; + var sx = this.frameIndex() * w; + var sy = (this._balloonId - 1) * h; + this.setFrame(sx, sy, w, h); +}; + +Sprite_Balloon.prototype.speed = function() { + return 8; +}; + +Sprite_Balloon.prototype.waitTime = function() { + return 12; +}; + +Sprite_Balloon.prototype.frameIndex = function() { + var index = (this._duration - this.waitTime()) / this.speed(); + return 7 - Math.max(Math.floor(index), 0); +}; + +Sprite_Balloon.prototype.isPlaying = function() { + return this._duration > 0; +}; + +//----------------------------------------------------------------------------- +// Sprite_Picture +// +// The sprite for displaying a picture. + +function Sprite_Picture() { + this.initialize.apply(this, arguments); +} + +Sprite_Picture.prototype = Object.create(Sprite.prototype); +Sprite_Picture.prototype.constructor = Sprite_Picture; + +Sprite_Picture.prototype.initialize = function(pictureId) { + Sprite.prototype.initialize.call(this); + this._pictureId = pictureId; + this._pictureName = ''; + this.update(); +}; + +Sprite_Picture.prototype.picture = function() { + return $gameScreen.picture(this._pictureId); +}; + +Sprite_Picture.prototype.update = function() { + Sprite.prototype.update.call(this); + this.updateBitmap(); + if (this.visible) { + this.updateOrigin(); + this.updatePosition(); + this.updateScale(); + this.updateTone(); + this.updateOther(); + } +}; + +Sprite_Picture.prototype.updateBitmap = function() { + var picture = this.picture(); + if (picture) { + var pictureName = picture.name(); + if (this._pictureName !== pictureName) { + this._pictureName = pictureName; + this.loadBitmap(); + } + this.visible = true; + } else { + this._pictureName = ''; + this.bitmap = null; + this.visible = false; + } +}; + +Sprite_Picture.prototype.updateOrigin = function() { + var picture = this.picture(); + if (picture.origin() === 0) { + this.anchor.x = 0; + this.anchor.y = 0; + } else { + this.anchor.x = 0.5; + this.anchor.y = 0.5; + } +}; + +Sprite_Picture.prototype.updatePosition = function() { + var picture = this.picture(); + this.x = Math.floor(picture.x()); + this.y = Math.floor(picture.y()); +}; + +Sprite_Picture.prototype.updateScale = function() { + var picture = this.picture(); + this.scale.x = picture.scaleX() / 100; + this.scale.y = picture.scaleY() / 100; +}; + +Sprite_Picture.prototype.updateTone = function() { + var picture = this.picture(); + if (picture.tone()) { + this.setColorTone(picture.tone()); + } else { + this.setColorTone([0, 0, 0, 0]); + } +}; + +Sprite_Picture.prototype.updateOther = function() { + var picture = this.picture(); + this.opacity = picture.opacity(); + this.blendMode = picture.blendMode(); + this.rotation = picture.angle() * Math.PI / 180; +}; + +Sprite_Picture.prototype.loadBitmap = function() { + this.bitmap = ImageManager.loadPicture(this._pictureName); +}; + +//----------------------------------------------------------------------------- +// Sprite_Timer +// +// The sprite for displaying the timer. + +function Sprite_Timer() { + this.initialize.apply(this, arguments); +} + +Sprite_Timer.prototype = Object.create(Sprite.prototype); +Sprite_Timer.prototype.constructor = Sprite_Timer; + +Sprite_Timer.prototype.initialize = function() { + Sprite.prototype.initialize.call(this); + this._seconds = 0; + this.createBitmap(); + this.update(); +}; + +Sprite_Timer.prototype.createBitmap = function() { + this.bitmap = new Bitmap(96, 48); + this.bitmap.fontSize = 32; +}; + +Sprite_Timer.prototype.update = function() { + Sprite.prototype.update.call(this); + this.updateBitmap(); + this.updatePosition(); + this.updateVisibility(); +}; + +Sprite_Timer.prototype.updateBitmap = function() { + if (this._seconds !== $gameTimer.seconds()) { + this._seconds = $gameTimer.seconds(); + this.redraw(); + } +}; + +Sprite_Timer.prototype.redraw = function() { + var text = this.timerText(); + var width = this.bitmap.width; + var height = this.bitmap.height; + this.bitmap.clear(); + this.bitmap.drawText(text, 0, 0, width, height, 'center'); +}; + +Sprite_Timer.prototype.timerText = function() { + var min = Math.floor(this._seconds / 60) % 60; + var sec = this._seconds % 60; + return min.padZero(2) + ':' + sec.padZero(2); +}; + +Sprite_Timer.prototype.updatePosition = function() { + this.x = Graphics.width - this.bitmap.width; + this.y = 0; +}; + +Sprite_Timer.prototype.updateVisibility = function() { + this.visible = $gameTimer.isWorking(); +}; + +//----------------------------------------------------------------------------- +// Sprite_Destination +// +// The sprite for displaying the destination place of the touch input. + +function Sprite_Destination() { + this.initialize.apply(this, arguments); +} + +Sprite_Destination.prototype = Object.create(Sprite.prototype); +Sprite_Destination.prototype.constructor = Sprite_Destination; + +Sprite_Destination.prototype.initialize = function() { + Sprite.prototype.initialize.call(this); + this.createBitmap(); + this._frameCount = 0; +}; + +Sprite_Destination.prototype.update = function() { + Sprite.prototype.update.call(this); + if ($gameTemp.isDestinationValid()){ + this.updatePosition(); + this.updateAnimation(); + this.visible = true; + } else { + this._frameCount = 0; + this.visible = false; + } +}; + +Sprite_Destination.prototype.createBitmap = function() { + var tileWidth = $gameMap.tileWidth(); + var tileHeight = $gameMap.tileHeight(); + this.bitmap = new Bitmap(tileWidth, tileHeight); + this.bitmap.fillAll('white'); + this.anchor.x = 0.5; + this.anchor.y = 0.5; + this.blendMode = Graphics.BLEND_ADD; +}; + +Sprite_Destination.prototype.updatePosition = function() { + var tileWidth = $gameMap.tileWidth(); + var tileHeight = $gameMap.tileHeight(); + var x = $gameTemp.destinationX(); + var y = $gameTemp.destinationY(); + this.x = ($gameMap.adjustX(x) + 0.5) * tileWidth; + this.y = ($gameMap.adjustY(y) + 0.5) * tileHeight; +}; + +Sprite_Destination.prototype.updateAnimation = function() { + this._frameCount++; + this._frameCount %= 20; + this.opacity = (20 - this._frameCount) * 6; + this.scale.x = 1 + this._frameCount / 20; + this.scale.y = this.scale.x; +}; + +//----------------------------------------------------------------------------- +// Spriteset_Base +// +// The superclass of Spriteset_Map and Spriteset_Battle. + +function Spriteset_Base() { + this.initialize.apply(this, arguments); +} + +Spriteset_Base.prototype = Object.create(Sprite.prototype); +Spriteset_Base.prototype.constructor = Spriteset_Base; + +Spriteset_Base.prototype.initialize = function() { + Sprite.prototype.initialize.call(this); + this.setFrame(0, 0, Graphics.width, Graphics.height); + this._tone = [0, 0, 0, 0]; + this.opaque = true; + this.createLowerLayer(); + this.createToneChanger(); + this.createUpperLayer(); + this.update(); +}; + +Spriteset_Base.prototype.createLowerLayer = function() { + this.createBaseSprite(); +}; + +Spriteset_Base.prototype.createUpperLayer = function() { + this.createPictures(); + this.createTimer(); + this.createScreenSprites(); +}; + +Spriteset_Base.prototype.update = function() { + Sprite.prototype.update.call(this); + this.updateScreenSprites(); + this.updateToneChanger(); + this.updatePosition(); +}; + +Spriteset_Base.prototype.createBaseSprite = function() { + this._baseSprite = new Sprite(); + this._baseSprite.setFrame(0, 0, this.width, this.height); + this._blackScreen = new ScreenSprite(); + this._blackScreen.opacity = 255; + this.addChild(this._baseSprite); + this._baseSprite.addChild(this._blackScreen); +}; + +Spriteset_Base.prototype.createToneChanger = function() { + if (Graphics.isWebGL()) { + this.createWebGLToneChanger(); + } else { + this.createCanvasToneChanger(); + } +}; + +Spriteset_Base.prototype.createWebGLToneChanger = function() { + var margin = 48; + var width = Graphics.width + margin * 2; + var height = Graphics.height + margin * 2; + this._toneFilter = new ToneFilter(); + this._baseSprite.filters = [this._toneFilter]; + this._baseSprite.filterArea = new Rectangle(-margin, -margin, width, height); +}; + +Spriteset_Base.prototype.createCanvasToneChanger = function() { + this._toneSprite = new ToneSprite(); + this.addChild(this._toneSprite); +}; + +Spriteset_Base.prototype.createPictures = function() { + var width = Graphics.boxWidth; + var height = Graphics.boxHeight; + var x = (Graphics.width - width) / 2; + var y = (Graphics.height - height) / 2; + this._pictureContainer = new Sprite(); + this._pictureContainer.setFrame(x, y, width, height); + for (var i = 1; i <= $gameScreen.maxPictures(); i++) { + this._pictureContainer.addChild(new Sprite_Picture(i)); + } + this.addChild(this._pictureContainer); +}; + +Spriteset_Base.prototype.createTimer = function() { + this._timerSprite = new Sprite_Timer(); + this.addChild(this._timerSprite); +}; + +Spriteset_Base.prototype.createScreenSprites = function() { + this._flashSprite = new ScreenSprite(); + this._fadeSprite = new ScreenSprite(); + this.addChild(this._flashSprite); + this.addChild(this._fadeSprite); +}; + +Spriteset_Base.prototype.updateScreenSprites = function() { + var color = $gameScreen.flashColor(); + this._flashSprite.setColor(color[0], color[1], color[2]); + this._flashSprite.opacity = color[3]; + this._fadeSprite.opacity = 255 - $gameScreen.brightness(); +}; + +Spriteset_Base.prototype.updateToneChanger = function() { + var tone = $gameScreen.tone(); + if (!this._tone.equals(tone)) { + this._tone = tone.clone(); + if (Graphics.isWebGL()) { + this.updateWebGLToneChanger(); + } else { + this.updateCanvasToneChanger(); + } + } +}; + +Spriteset_Base.prototype.updateWebGLToneChanger = function() { + var tone = this._tone; + this._toneFilter.reset(); + this._toneFilter.adjustTone(tone[0], tone[1], tone[2]); + this._toneFilter.adjustSaturation(-tone[3]); +}; + +Spriteset_Base.prototype.updateCanvasToneChanger = function() { + var tone = this._tone; + this._toneSprite.setTone(tone[0], tone[1], tone[2], tone[3]); +}; + +Spriteset_Base.prototype.updatePosition = function() { + var screen = $gameScreen; + var scale = screen.zoomScale(); + this.scale.x = scale; + this.scale.y = scale; + this.x = Math.round(-screen.zoomX() * (scale - 1)); + this.y = Math.round(-screen.zoomY() * (scale - 1)); + this.x += Math.round(screen.shake()); +}; + +//----------------------------------------------------------------------------- +// Spriteset_Map +// +// The set of sprites on the map screen. + +function Spriteset_Map() { + this.initialize.apply(this, arguments); +} + +Spriteset_Map.prototype = Object.create(Spriteset_Base.prototype); +Spriteset_Map.prototype.constructor = Spriteset_Map; + +Spriteset_Map.prototype.initialize = function() { + Spriteset_Base.prototype.initialize.call(this); +}; + +Spriteset_Map.prototype.createLowerLayer = function() { + Spriteset_Base.prototype.createLowerLayer.call(this); + this.createParallax(); + this.createTilemap(); + this.createCharacters(); + this.createShadow(); + this.createDestination(); + this.createWeather(); +}; + +Spriteset_Map.prototype.update = function() { + Spriteset_Base.prototype.update.call(this); + this.updateTileset(); + this.updateParallax(); + this.updateTilemap(); + this.updateShadow(); + this.updateWeather(); +}; + +Spriteset_Map.prototype.hideCharacters = function() { + for (var i = 0; i < this._characterSprites.length; i++) { + var sprite = this._characterSprites[i]; + if (!sprite.isTile()) { + sprite.hide(); + } + } +}; + +Spriteset_Map.prototype.createParallax = function() { + this._parallax = new TilingSprite(); + this._parallax.move(0, 0, Graphics.width, Graphics.height); + this._baseSprite.addChild(this._parallax); +}; + +Spriteset_Map.prototype.createTilemap = function() { + this._tilemap = new Tilemap(); + this._tilemap.tileWidth = $gameMap.tileWidth(); + this._tilemap.tileHeight = $gameMap.tileHeight(); + this._tilemap.setData($gameMap.width(), $gameMap.height(), $gameMap.data()); + this._tilemap.horizontalWrap = $gameMap.isLoopHorizontal(); + this._tilemap.verticalWrap = $gameMap.isLoopVertical(); + this.loadTileset(); + this._baseSprite.addChild(this._tilemap); +}; + +Spriteset_Map.prototype.loadTileset = function() { + this._tileset = $gameMap.tileset(); + if (this._tileset) { + var tilesetNames = this._tileset.tilesetNames; + for (var i = 0; i < tilesetNames.length; i++) { + this._tilemap.bitmaps[i] = ImageManager.loadTileset(tilesetNames[i]); + } + this._tilemap.flags = $gameMap.tilesetFlags(); + this._tilemap.refresh(); + } +}; + +Spriteset_Map.prototype.createCharacters = function() { + this._characterSprites = []; + $gameMap.events().forEach(function(event) { + this._characterSprites.push(new Sprite_Character(event)); + }, this); + $gameMap.vehicles().forEach(function(vehicle) { + this._characterSprites.push(new Sprite_Character(vehicle)); + }, this); + $gamePlayer.followers().reverseEach(function(follower) { + this._characterSprites.push(new Sprite_Character(follower)); + }, this); + this._characterSprites.push(new Sprite_Character($gamePlayer)); + for (var i = 0; i < this._characterSprites.length; i++) { + this._tilemap.addChild(this._characterSprites[i]); + } +}; + +Spriteset_Map.prototype.createShadow = function() { + this._shadowSprite = new Sprite(); + this._shadowSprite.bitmap = ImageManager.loadSystem('Shadow1'); + this._shadowSprite.anchor.x = 0.5; + this._shadowSprite.anchor.y = 1; + this._shadowSprite.z = 6; + this._tilemap.addChild(this._shadowSprite); +}; + +Spriteset_Map.prototype.createDestination = function() { + this._destinationSprite = new Sprite_Destination(); + this._destinationSprite.z = 9; + this._tilemap.addChild(this._destinationSprite); +}; + +Spriteset_Map.prototype.createWeather = function() { + this._weather = new Weather(); + this.addChild(this._weather); +}; + +Spriteset_Map.prototype.updateTileset = function() { + if (this._tileset !== $gameMap.tileset()) { + this.loadTileset(); + } +}; + +/* + * Simple fix for canvas parallax issue, destroy old parallax and readd to the tree. + */ +Spriteset_Map.prototype._canvasReAddParallax = function() { + var index = this._baseSprite.children.indexOf(this._parallax); + this._baseSprite.removeChild(this._parallax); + this._parallax = new TilingSprite(); + this._parallax.move(0, 0, Graphics.width, Graphics.height); + this._parallax.bitmap = ImageManager.loadParallax(this._parallaxName); + this._baseSprite.addChildAt(this._parallax,index); +}; + +Spriteset_Map.prototype.updateParallax = function() { + if (this._parallaxName !== $gameMap.parallaxName()) { + this._parallaxName = $gameMap.parallaxName(); + + if (this._parallax.bitmap && Graphics.isWebGL() != true) { + this._canvasReAddParallax(); + } else { + this._parallax.bitmap = ImageManager.loadParallax(this._parallaxName); + } + } + if (this._parallax.bitmap) { + this._parallax.origin.x = $gameMap.parallaxOx(); + this._parallax.origin.y = $gameMap.parallaxOy(); + } +}; + +Spriteset_Map.prototype.updateTilemap = function() { + this._tilemap.origin.x = $gameMap.displayX() * $gameMap.tileWidth(); + this._tilemap.origin.y = $gameMap.displayY() * $gameMap.tileHeight(); +}; + +Spriteset_Map.prototype.updateShadow = function() { + var airship = $gameMap.airship(); + this._shadowSprite.x = airship.shadowX(); + this._shadowSprite.y = airship.shadowY(); + this._shadowSprite.opacity = airship.shadowOpacity(); +}; + +Spriteset_Map.prototype.updateWeather = function() { + this._weather.type = $gameScreen.weatherType(); + this._weather.power = $gameScreen.weatherPower(); + this._weather.origin.x = $gameMap.displayX() * $gameMap.tileWidth(); + this._weather.origin.y = $gameMap.displayY() * $gameMap.tileHeight(); +}; + +//----------------------------------------------------------------------------- +// Spriteset_Battle +// +// The set of sprites on the battle screen. + +function Spriteset_Battle() { + this.initialize.apply(this, arguments); +} + +Spriteset_Battle.prototype = Object.create(Spriteset_Base.prototype); +Spriteset_Battle.prototype.constructor = Spriteset_Battle; + +Spriteset_Battle.prototype.initialize = function() { + Spriteset_Base.prototype.initialize.call(this); + this._battlebackLocated = false; +}; + +Spriteset_Battle.prototype.createLowerLayer = function() { + Spriteset_Base.prototype.createLowerLayer.call(this); + this.createBackground(); + this.createBattleField(); + this.createBattleback(); + this.createEnemies(); + this.createActors(); +}; + +Spriteset_Battle.prototype.createBackground = function() { + this._backgroundSprite = new Sprite(); + this._backgroundSprite.bitmap = SceneManager.backgroundBitmap(); + this._baseSprite.addChild(this._backgroundSprite); +}; + +Spriteset_Battle.prototype.update = function() { + Spriteset_Base.prototype.update.call(this); + this.updateActors(); + this.updateBattleback(); +}; + +Spriteset_Battle.prototype.createBattleField = function() { + var width = Graphics.boxWidth; + var height = Graphics.boxHeight; + var x = (Graphics.width - width) / 2; + var y = (Graphics.height - height) / 2; + this._battleField = new Sprite(); + this._battleField.setFrame(x, y, width, height); + this._battleField.x = x; + this._battleField.y = y; + this._baseSprite.addChild(this._battleField); +}; + +Spriteset_Battle.prototype.createBattleback = function() { + var margin = 32; + var x = -this._battleField.x - margin; + var y = -this._battleField.y - margin; + var width = Graphics.width + margin * 2; + var height = Graphics.height + margin * 2; + this._back1Sprite = new TilingSprite(); + this._back2Sprite = new TilingSprite(); + this._back1Sprite.bitmap = this.battleback1Bitmap(); + this._back2Sprite.bitmap = this.battleback2Bitmap(); + this._back1Sprite.move(x, y, width, height); + this._back2Sprite.move(x, y, width, height); + this._battleField.addChild(this._back1Sprite); + this._battleField.addChild(this._back2Sprite); +}; + +Spriteset_Battle.prototype.updateBattleback = function() { + if (!this._battlebackLocated) { + this.locateBattleback(); + this._battlebackLocated = true; + } +}; + +Spriteset_Battle.prototype.locateBattleback = function() { + var width = this._battleField.width; + var height = this._battleField.height; + var sprite1 = this._back1Sprite; + var sprite2 = this._back2Sprite; + sprite1.origin.x = sprite1.x + (sprite1.bitmap.width - width) / 2; + sprite2.origin.x = sprite1.y + (sprite2.bitmap.width - width) / 2; + if ($gameSystem.isSideView()) { + sprite1.origin.y = sprite1.x + sprite1.bitmap.height - height; + sprite2.origin.y = sprite1.y + sprite2.bitmap.height - height; + } +}; + +Spriteset_Battle.prototype.battleback1Bitmap = function() { + return ImageManager.loadBattleback1(this.battleback1Name()); +}; + +Spriteset_Battle.prototype.battleback2Bitmap = function() { + return ImageManager.loadBattleback2(this.battleback2Name()); +}; + +Spriteset_Battle.prototype.battleback1Name = function() { + if (BattleManager.isBattleTest()) { + return $dataSystem.battleback1Name; + } else if ($gameMap.battleback1Name()) { + return $gameMap.battleback1Name(); + } else if ($gameMap.isOverworld()) { + return this.overworldBattleback1Name(); + } else { + return ''; + } +}; + +Spriteset_Battle.prototype.battleback2Name = function() { + if (BattleManager.isBattleTest()) { + return $dataSystem.battleback2Name; + } else if ($gameMap.battleback2Name()) { + return $gameMap.battleback2Name(); + } else if ($gameMap.isOverworld()) { + return this.overworldBattleback2Name(); + } else { + return ''; + } +}; + +Spriteset_Battle.prototype.overworldBattleback1Name = function() { + if ($gamePlayer.isInVehicle()) { + return this.shipBattleback1Name(); + } else { + return this.normalBattleback1Name(); + } +}; + +Spriteset_Battle.prototype.overworldBattleback2Name = function() { + if ($gamePlayer.isInVehicle()) { + return this.shipBattleback2Name(); + } else { + return this.normalBattleback2Name(); + } +}; + +Spriteset_Battle.prototype.normalBattleback1Name = function() { + return (this.terrainBattleback1Name(this.autotileType(1)) || + this.terrainBattleback1Name(this.autotileType(0)) || + this.defaultBattleback1Name()); +}; + +Spriteset_Battle.prototype.normalBattleback2Name = function() { + return (this.terrainBattleback2Name(this.autotileType(1)) || + this.terrainBattleback2Name(this.autotileType(0)) || + this.defaultBattleback2Name()); +}; + +Spriteset_Battle.prototype.terrainBattleback1Name = function(type) { + switch (type) { + case 24: case 25: + return 'Wasteland'; + case 26: case 27: + return 'DirtField'; + case 32: case 33: + return 'Desert'; + case 34: + return 'Lava1'; + case 35: + return 'Lava2'; + case 40: case 41: + return 'Snowfield'; + case 42: + return 'Clouds'; + case 4: case 5: + return 'PoisonSwamp'; + default: + return null; + } +}; + +Spriteset_Battle.prototype.terrainBattleback2Name = function(type) { + switch (type) { + case 20: case 21: + return 'Forest'; + case 22: case 30: case 38: + return 'Cliff'; + case 24: case 25: case 26: case 27: + return 'Wasteland'; + case 32: case 33: + return 'Desert'; + case 34: case 35: + return 'Lava'; + case 40: case 41: + return 'Snowfield'; + case 42: + return 'Clouds'; + case 4: case 5: + return 'PoisonSwamp'; + } +}; + +Spriteset_Battle.prototype.defaultBattleback1Name = function() { + return 'Grassland'; +}; + +Spriteset_Battle.prototype.defaultBattleback2Name = function() { + return 'Grassland'; +}; + +Spriteset_Battle.prototype.shipBattleback1Name = function() { + return 'Ship'; +}; + +Spriteset_Battle.prototype.shipBattleback2Name = function() { + return 'Ship'; +}; + +Spriteset_Battle.prototype.autotileType = function(z) { + return $gameMap.autotileType($gamePlayer.x, $gamePlayer.y, z); +}; + +Spriteset_Battle.prototype.createEnemies = function() { + var enemies = $gameTroop.members(); + var sprites = []; + for (var i = 0; i < enemies.length; i++) { + sprites[i] = new Sprite_Enemy(enemies[i]); + } + sprites.sort(this.compareEnemySprite.bind(this)); + for (var j = 0; j < sprites.length; j++) { + this._battleField.addChild(sprites[j]); + } + this._enemySprites = sprites; +}; + +Spriteset_Battle.prototype.compareEnemySprite = function(a, b) { + if (a.y !== b.y) { + return a.y - b.y; + } else { + return b.spriteId - a.spriteId; + } +}; + +Spriteset_Battle.prototype.createActors = function() { + this._actorSprites = []; + for (var i = 0; i < $gameParty.maxBattleMembers(); i++) { + this._actorSprites[i] = new Sprite_Actor(); + this._battleField.addChild(this._actorSprites[i]); + } +}; + +Spriteset_Battle.prototype.updateActors = function() { + var members = $gameParty.battleMembers(); + for (var i = 0; i < this._actorSprites.length; i++) { + this._actorSprites[i].setBattler(members[i]); + } +}; + +Spriteset_Battle.prototype.battlerSprites = function() { + return this._enemySprites.concat(this._actorSprites); +}; + +Spriteset_Battle.prototype.isAnimationPlaying = function() { + return this.battlerSprites().some(function(sprite) { + return sprite.isAnimationPlaying(); + }); +}; + +Spriteset_Battle.prototype.isEffecting = function() { + return this.battlerSprites().some(function(sprite) { + return sprite.isEffecting(); + }); +}; + +Spriteset_Battle.prototype.isAnyoneMoving = function() { + return this.battlerSprites().some(function(sprite) { + return sprite.isMoving(); + }); +}; + +Spriteset_Battle.prototype.isBusy = function() { + return this.isAnimationPlaying() || this.isAnyoneMoving(); +}; diff --git a/js/rpg_windows.js b/js/rpg_windows.js new file mode 100644 index 0000000..af8ac99 --- /dev/null +++ b/js/rpg_windows.js @@ -0,0 +1,6020 @@ +//============================================================================= +// rpg_windows.js v1.2.0 +//============================================================================= + +//----------------------------------------------------------------------------- +// Window_Base +// +// The superclass of all windows within the game. + +function Window_Base() { + this.initialize.apply(this, arguments); +} + +Window_Base.prototype = Object.create(Window.prototype); +Window_Base.prototype.constructor = Window_Base; + +Window_Base.prototype.initialize = function(x, y, width, height) { + Window.prototype.initialize.call(this); + this.loadWindowskin(); + this.move(x, y, width, height); + this.updatePadding(); + this.updateBackOpacity(); + this.updateTone(); + this.createContents(); + this._opening = false; + this._closing = false; + this._dimmerSprite = null; +}; + +Window_Base._iconWidth = 32; +Window_Base._iconHeight = 32; +Window_Base._faceWidth = 144; +Window_Base._faceHeight = 144; + +Window_Base.prototype.lineHeight = function() { + return 36; +}; + +Window_Base.prototype.standardFontFace = function() { + if ($gameSystem.isChinese()) { + return 'SimHei, Heiti TC, sans-serif'; + } else if ($gameSystem.isKorean()) { + return 'Dotum, AppleGothic, sans-serif'; + } else { + return 'GameFont'; + } +}; + +Window_Base.prototype.standardFontSize = function() { + return 28; +}; + +Window_Base.prototype.standardPadding = function() { + return 18; +}; + +Window_Base.prototype.textPadding = function() { + return 6; +}; + +Window_Base.prototype.standardBackOpacity = function() { + return 192; +}; + +Window_Base.prototype.loadWindowskin = function() { + this.windowskin = ImageManager.loadSystem('Window'); +}; + +Window_Base.prototype.updatePadding = function() { + this.padding = this.standardPadding(); +}; + +Window_Base.prototype.updateBackOpacity = function() { + this.backOpacity = this.standardBackOpacity(); +}; + +Window_Base.prototype.contentsWidth = function() { + return this.width - this.standardPadding() * 2; +}; + +Window_Base.prototype.contentsHeight = function() { + return this.height - this.standardPadding() * 2; +}; + +Window_Base.prototype.fittingHeight = function(numLines) { + return numLines * this.lineHeight() + this.standardPadding() * 2; +}; + +Window_Base.prototype.updateTone = function() { + var tone = $gameSystem.windowTone(); + this.setTone(tone[0], tone[1], tone[2]); +}; + +Window_Base.prototype.createContents = function() { + this.contents = new Bitmap(this.contentsWidth(), this.contentsHeight()); + this.resetFontSettings(); +}; + +Window_Base.prototype.resetFontSettings = function() { + this.contents.fontFace = this.standardFontFace(); + this.contents.fontSize = this.standardFontSize(); + this.resetTextColor(); +}; + +Window_Base.prototype.resetTextColor = function() { + this.changeTextColor(this.normalColor()); +}; + +Window_Base.prototype.update = function() { + Window.prototype.update.call(this); + this.updateTone(); + this.updateOpen(); + this.updateClose(); + this.updateBackgroundDimmer(); +}; + +Window_Base.prototype.updateOpen = function() { + if (this._opening) { + this.openness += 32; + if (this.isOpen()) { + this._opening = false; + } + } +}; + +Window_Base.prototype.updateClose = function() { + if (this._closing) { + this.openness -= 32; + if (this.isClosed()) { + this._closing = false; + } + } +}; + +Window_Base.prototype.open = function() { + if (!this.isOpen()) { + this._opening = true; + } + this._closing = false; +}; + +Window_Base.prototype.close = function() { + if (!this.isClosed()) { + this._closing = true; + } + this._opening = false; +}; + +Window_Base.prototype.isOpening = function() { + return this._opening; +}; + +Window_Base.prototype.isClosing = function() { + return this._closing; +}; + +Window_Base.prototype.show = function() { + this.visible = true; +}; + +Window_Base.prototype.hide = function() { + this.visible = false; +}; + +Window_Base.prototype.activate = function() { + this.active = true; +}; + +Window_Base.prototype.deactivate = function() { + this.active = false; +}; + +Window_Base.prototype.textColor = function(n) { + var px = 96 + (n % 8) * 12 + 6; + var py = 144 + Math.floor(n / 8) * 12 + 6; + return this.windowskin.getPixel(px, py); +}; + +Window_Base.prototype.normalColor = function() { + return this.textColor(0); +}; + +Window_Base.prototype.systemColor = function() { + return this.textColor(16); +}; + +Window_Base.prototype.crisisColor = function() { + return this.textColor(17); +}; + +Window_Base.prototype.deathColor = function() { + return this.textColor(18); +}; + +Window_Base.prototype.gaugeBackColor = function() { + return this.textColor(19); +}; + +Window_Base.prototype.hpGaugeColor1 = function() { + return this.textColor(20); +}; + +Window_Base.prototype.hpGaugeColor2 = function() { + return this.textColor(21); +}; + +Window_Base.prototype.mpGaugeColor1 = function() { + return this.textColor(22); +}; + +Window_Base.prototype.mpGaugeColor2 = function() { + return this.textColor(23); +}; + +Window_Base.prototype.mpCostColor = function() { + return this.textColor(23); +}; + +Window_Base.prototype.powerUpColor = function() { + return this.textColor(24); +}; + +Window_Base.prototype.powerDownColor = function() { + return this.textColor(25); +}; + +Window_Base.prototype.tpGaugeColor1 = function() { + return this.textColor(28); +}; + +Window_Base.prototype.tpGaugeColor2 = function() { + return this.textColor(29); +}; + +Window_Base.prototype.tpCostColor = function() { + return this.textColor(29); +}; + +Window_Base.prototype.pendingColor = function() { + return this.windowskin.getPixel(120, 120); +}; + +Window_Base.prototype.translucentOpacity = function() { + return 160; +}; + +Window_Base.prototype.changeTextColor = function(color) { + this.contents.textColor = color; +}; + +Window_Base.prototype.changePaintOpacity = function(enabled) { + this.contents.paintOpacity = enabled ? 255 : this.translucentOpacity(); +}; + +Window_Base.prototype.drawText = function(text, x, y, maxWidth, align) { + this.contents.drawText(text, x, y, maxWidth, this.lineHeight(), align); +}; + +Window_Base.prototype.textWidth = function(text) { + return this.contents.measureTextWidth(text); +}; + +Window_Base.prototype.drawTextEx = function(text, x, y) { + if (text) { + var textState = { index: 0, x: x, y: y, left: x }; + textState.text = this.convertEscapeCharacters(text); + textState.height = this.calcTextHeight(textState, false); + this.resetFontSettings(); + while (textState.index < textState.text.length) { + this.processCharacter(textState); + } + return textState.x - x; + } else { + return 0; + } +}; + +Window_Base.prototype.convertEscapeCharacters = function(text) { + text = text.replace(/\\/g, '\x1b'); + text = text.replace(/\x1b\x1b/g, '\\'); + text = text.replace(/\x1bV\[(\d+)\]/gi, function() { + return $gameVariables.value(parseInt(arguments[1])); + }.bind(this)); + text = text.replace(/\x1bV\[(\d+)\]/gi, function() { + return $gameVariables.value(parseInt(arguments[1])); + }.bind(this)); + text = text.replace(/\x1bN\[(\d+)\]/gi, function() { + return this.actorName(parseInt(arguments[1])); + }.bind(this)); + text = text.replace(/\x1bP\[(\d+)\]/gi, function() { + return this.partyMemberName(parseInt(arguments[1])); + }.bind(this)); + text = text.replace(/\x1bG/gi, TextManager.currencyUnit); + return text; +}; + +Window_Base.prototype.actorName = function(n) { + var actor = n >= 1 ? $gameActors.actor(n) : null; + return actor ? actor.name() : ''; +}; + +Window_Base.prototype.partyMemberName = function(n) { + var actor = n >= 1 ? $gameParty.members()[n - 1] : null; + return actor ? actor.name() : ''; +}; + +Window_Base.prototype.processCharacter = function(textState) { + switch (textState.text[textState.index]) { + case '\n': + this.processNewLine(textState); + break; + case '\f': + this.processNewPage(textState); + break; + case '\x1b': + this.processEscapeCharacter(this.obtainEscapeCode(textState), textState); + break; + default: + this.processNormalCharacter(textState); + break; + } +}; + +Window_Base.prototype.processNormalCharacter = function(textState) { + var c = textState.text[textState.index++]; + var w = this.textWidth(c); + this.contents.drawText(c, textState.x, textState.y, w * 2, textState.height); + textState.x += w; +}; + +Window_Base.prototype.processNewLine = function(textState) { + textState.x = textState.left; + textState.y += textState.height; + textState.height = this.calcTextHeight(textState, false); + textState.index++; +}; + +Window_Base.prototype.processNewPage = function(textState) { + textState.index++; +}; + +Window_Base.prototype.obtainEscapeCode = function(textState) { + textState.index++; + var regExp = /^[\$\.\|\^!><\{\}\\]|^[A-Z]+/i; + var arr = regExp.exec(textState.text.slice(textState.index)); + if (arr) { + textState.index += arr[0].length; + return arr[0].toUpperCase(); + } else { + return ''; + } +}; + +Window_Base.prototype.obtainEscapeParam = function(textState) { + var arr = /^\[\d+\]/.exec(textState.text.slice(textState.index)); + if (arr) { + textState.index += arr[0].length; + return parseInt(arr[0].slice(1)); + } else { + return ''; + } +}; + +Window_Base.prototype.processEscapeCharacter = function(code, textState) { + switch (code) { + case 'C': + this.changeTextColor(this.textColor(this.obtainEscapeParam(textState))); + break; + case 'I': + this.processDrawIcon(this.obtainEscapeParam(textState), textState); + break; + case '{': + this.makeFontBigger(); + break; + case '}': + this.makeFontSmaller(); + break; + } +}; + +Window_Base.prototype.processDrawIcon = function(iconIndex, textState) { + this.drawIcon(iconIndex, textState.x + 2, textState.y + 2); + textState.x += Window_Base._iconWidth + 4; +}; + +Window_Base.prototype.makeFontBigger = function() { + if (this.contents.fontSize <= 96) { + this.contents.fontSize += 12; + } +}; + +Window_Base.prototype.makeFontSmaller = function() { + if (this.contents.fontSize >= 24) { + this.contents.fontSize -= 12; + } +}; + +Window_Base.prototype.calcTextHeight = function(textState, all) { + var lastFontSize = this.contents.fontSize; + var textHeight = 0; + var lines = textState.text.slice(textState.index).split('\n'); + var maxLines = all ? lines.length : 1; + + for (var i = 0; i < maxLines; i++) { + var maxFontSize = this.contents.fontSize; + var regExp = /\x1b[\{\}]/g; + for (;;) { + var array = regExp.exec(lines[i]); + if (array) { + if (array[0] === '\x1b{') { + this.makeFontBigger(); + } + if (array[0] === '\x1b}') { + this.makeFontSmaller(); + } + if (maxFontSize < this.contents.fontSize) { + maxFontSize = this.contents.fontSize; + } + } else { + break; + } + } + textHeight += maxFontSize + 8; + } + + this.contents.fontSize = lastFontSize; + return textHeight; +}; + +Window_Base.prototype.drawIcon = function(iconIndex, x, y) { + var bitmap = ImageManager.loadSystem('IconSet'); + var pw = Window_Base._iconWidth; + var ph = Window_Base._iconHeight; + var sx = iconIndex % 16 * pw; + var sy = Math.floor(iconIndex / 16) * ph; + this.contents.blt(bitmap, sx, sy, pw, ph, x, y); +}; + +Window_Base.prototype.drawFace = function(faceName, faceIndex, x, y, width, height) { + width = width || Window_Base._faceWidth; + height = height || Window_Base._faceHeight; + var bitmap = ImageManager.loadFace(faceName); + var pw = Window_Base._faceWidth; + var ph = Window_Base._faceHeight; + var sw = Math.min(width, pw); + var sh = Math.min(height, ph); + var dx = Math.floor(x + Math.max(width - pw, 0) / 2); + var dy = Math.floor(y + Math.max(height - ph, 0) / 2); + var sx = faceIndex % 4 * pw + (pw - sw) / 2; + var sy = Math.floor(faceIndex / 4) * ph + (ph - sh) / 2; + this.contents.blt(bitmap, sx, sy, sw, sh, dx, dy); +}; + +Window_Base.prototype.drawCharacter = function(characterName, characterIndex, x, y) { + var bitmap = ImageManager.loadCharacter(characterName); + var big = ImageManager.isBigCharacter(characterName); + var pw = bitmap.width / (big ? 3 : 12); + var ph = bitmap.height / (big ? 4 : 8); + var n = characterIndex; + var sx = (n % 4 * 3 + 1) * pw; + var sy = (Math.floor(n / 4) * 4) * ph; + this.contents.blt(bitmap, sx, sy, pw, ph, x - pw / 2, y - ph); +}; + +Window_Base.prototype.drawGauge = function(x, y, width, rate, color1, color2) { + var fillW = Math.floor(width * rate); + var gaugeY = y + this.lineHeight() - 8; + this.contents.fillRect(x, gaugeY, width, 6, this.gaugeBackColor()); + this.contents.gradientFillRect(x, gaugeY, fillW, 6, color1, color2); +}; + +Window_Base.prototype.hpColor = function(actor) { + if (actor.isDead()) { + return this.deathColor(); + } else if (actor.isDying()) { + return this.crisisColor(); + } else { + return this.normalColor(); + } +}; + +Window_Base.prototype.mpColor = function(actor) { + return this.normalColor(); +}; + +Window_Base.prototype.tpColor = function(actor) { + return this.normalColor(); +}; + +Window_Base.prototype.drawActorCharacter = function(actor, x, y) { + this.drawCharacter(actor.characterName(), actor.characterIndex(), x, y); +}; + +Window_Base.prototype.drawActorFace = function(actor, x, y, width, height) { + this.drawFace(actor.faceName(), actor.faceIndex(), x, y, width, height); +}; + +Window_Base.prototype.drawActorName = function(actor, x, y, width) { + width = width || 168; + this.changeTextColor(this.hpColor(actor)); + this.drawText(actor.name(), x, y, width); +}; + +Window_Base.prototype.drawActorClass = function(actor, x, y, width) { + width = width || 168; + this.resetTextColor(); + this.drawText(actor.currentClass().name, x, y, width); +}; + +Window_Base.prototype.drawActorNickname = function(actor, x, y, width) { + width = width || 270; + this.resetTextColor(); + this.drawText(actor.nickname(), x, y, width); +}; + +Window_Base.prototype.drawActorLevel = function(actor, x, y) { + this.changeTextColor(this.systemColor()); + this.drawText(TextManager.levelA, x, y, 48); + this.resetTextColor(); + this.drawText(actor.level, x + 84, y, 36, 'right'); +}; + +Window_Base.prototype.drawActorIcons = function(actor, x, y, width) { + width = width || 144; + var icons = actor.allIcons().slice(0, Math.floor(width / Window_Base._iconWidth)); + for (var i = 0; i < icons.length; i++) { + this.drawIcon(icons[i], x + Window_Base._iconWidth * i, y + 2); + } +}; + +Window_Base.prototype.drawCurrentAndMax = function(current, max, x, y, + width, color1, color2) { + var labelWidth = this.textWidth('HP'); + var valueWidth = this.textWidth('0000'); + var slashWidth = this.textWidth('/'); + var x1 = x + width - valueWidth; + var x2 = x1 - slashWidth; + var x3 = x2 - valueWidth; + if (x3 >= x + labelWidth) { + this.changeTextColor(color1); + this.drawText(current, x3, y, valueWidth, 'right'); + this.changeTextColor(color2); + this.drawText('/', x2, y, slashWidth, 'right'); + this.drawText(max, x1, y, valueWidth, 'right'); + } else { + this.changeTextColor(color1); + this.drawText(current, x1, y, valueWidth, 'right'); + } +}; + +Window_Base.prototype.drawActorHp = function(actor, x, y, width) { + width = width || 186; + var color1 = this.hpGaugeColor1(); + var color2 = this.hpGaugeColor2(); + this.drawGauge(x, y, width, actor.hpRate(), color1, color2); + this.changeTextColor(this.systemColor()); + this.drawText(TextManager.hpA, x, y, 44); + this.drawCurrentAndMax(actor.hp, actor.mhp, x, y, width, + this.hpColor(actor), this.normalColor()); +}; + +Window_Base.prototype.drawActorMp = function(actor, x, y, width) { + width = width || 186; + var color1 = this.mpGaugeColor1(); + var color2 = this.mpGaugeColor2(); + this.drawGauge(x, y, width, actor.mpRate(), color1, color2); + this.changeTextColor(this.systemColor()); + this.drawText(TextManager.mpA, x, y, 44); + this.drawCurrentAndMax(actor.mp, actor.mmp, x, y, width, + this.mpColor(actor), this.normalColor()); +}; + +Window_Base.prototype.drawActorTp = function(actor, x, y, width) { + width = width || 96; + var color1 = this.tpGaugeColor1(); + var color2 = this.tpGaugeColor2(); + this.drawGauge(x, y, width, actor.tpRate(), color1, color2); + this.changeTextColor(this.systemColor()); + this.drawText(TextManager.tpA, x, y, 44); + this.changeTextColor(this.tpColor(actor)); + this.drawText(actor.tp, x + width - 64, y, 64, 'right'); +}; + +Window_Base.prototype.drawActorSimpleStatus = function(actor, x, y, width) { + var lineHeight = this.lineHeight(); + var x2 = x + 180; + var width2 = Math.min(200, width - 180 - this.textPadding()); + this.drawActorName(actor, x, y); + this.drawActorLevel(actor, x, y + lineHeight * 1); + this.drawActorIcons(actor, x, y + lineHeight * 2); + this.drawActorClass(actor, x2, y); + this.drawActorHp(actor, x2, y + lineHeight * 1, width2); + this.drawActorMp(actor, x2, y + lineHeight * 2, width2); +}; + +Window_Base.prototype.drawItemName = function(item, x, y, width) { + width = width || 312; + if (item) { + var iconBoxWidth = Window_Base._iconWidth + 4; + this.resetTextColor(); + this.drawIcon(item.iconIndex, x + 2, y + 2); + this.drawText(item.name, x + iconBoxWidth, y, width - iconBoxWidth); + } +}; + +Window_Base.prototype.drawCurrencyValue = function(value, unit, x, y, width) { + var unitWidth = Math.min(80, this.textWidth(unit)); + this.resetTextColor(); + this.drawText(value, x, y, width - unitWidth - 6, 'right'); + this.changeTextColor(this.systemColor()); + this.drawText(unit, x + width - unitWidth, y, unitWidth, 'right'); +}; + +Window_Base.prototype.paramchangeTextColor = function(change) { + if (change > 0) { + return this.powerUpColor(); + } else if (change < 0) { + return this.powerDownColor(); + } else { + return this.normalColor(); + } +}; + +Window_Base.prototype.setBackgroundType = function(type) { + if (type === 0) { + this.opacity = 255; + } else { + this.opacity = 0; + } + if (type === 1) { + this.showBackgroundDimmer(); + } else { + this.hideBackgroundDimmer(); + } +}; + +Window_Base.prototype.showBackgroundDimmer = function() { + if (!this._dimmerSprite) { + this._dimmerSprite = new Sprite(); + this._dimmerSprite.bitmap = new Bitmap(0, 0); + this.addChildToBack(this._dimmerSprite); + } + var bitmap = this._dimmerSprite.bitmap; + if (bitmap.width !== this.width || bitmap.height !== this.height) { + this.refreshDimmerBitmap(); + } + this._dimmerSprite.visible = true; + this.updateBackgroundDimmer(); +}; + +Window_Base.prototype.hideBackgroundDimmer = function() { + if (this._dimmerSprite) { + this._dimmerSprite.visible = false; + } +}; + +Window_Base.prototype.updateBackgroundDimmer = function() { + if (this._dimmerSprite) { + this._dimmerSprite.opacity = this.openness; + } +}; + +Window_Base.prototype.refreshDimmerBitmap = function() { + if (this._dimmerSprite) { + var bitmap = this._dimmerSprite.bitmap; + var w = this.width; + var h = this.height; + var m = this.padding; + var c1 = this.dimColor1(); + var c2 = this.dimColor2(); + bitmap.resize(w, h); + bitmap.gradientFillRect(0, 0, w, m, c2, c1, true); + bitmap.fillRect(0, m, w, h - m * 2, c1); + bitmap.gradientFillRect(0, h - m, w, m, c1, c2, true); + this._dimmerSprite.setFrame(0, 0, w, h); + } +}; + +Window_Base.prototype.dimColor1 = function() { + return 'rgba(0, 0, 0, 0.6)'; +}; + +Window_Base.prototype.dimColor2 = function() { + return 'rgba(0, 0, 0, 0)'; +}; + +Window_Base.prototype.canvasToLocalX = function(x) { + var node = this; + while (node) { + x -= node.x; + node = node.parent; + } + return x; +}; + +Window_Base.prototype.canvasToLocalY = function(y) { + var node = this; + while (node) { + y -= node.y; + node = node.parent; + } + return y; +}; + +//----------------------------------------------------------------------------- +// Window_Selectable +// +// The window class with cursor movement and scroll functions. + +function Window_Selectable() { + this.initialize.apply(this, arguments); +} + +Window_Selectable.prototype = Object.create(Window_Base.prototype); +Window_Selectable.prototype.constructor = Window_Selectable; + +Window_Selectable.prototype.initialize = function(x, y, width, height) { + Window_Base.prototype.initialize.call(this, x, y, width, height); + this._index = -1; + this._cursorFixed = false; + this._cursorAll = false; + this._stayCount = 0; + this._helpWindow = null; + this._handlers = {}; + this._touching = false; + this._scrollX = 0; + this._scrollY = 0; + this.deactivate(); +}; + +Window_Selectable.prototype.index = function() { + return this._index; +}; + +Window_Selectable.prototype.cursorFixed = function() { + return this._cursorFixed; +}; + +Window_Selectable.prototype.setCursorFixed = function(cursorFixed) { + this._cursorFixed = cursorFixed; +}; + +Window_Selectable.prototype.cursorAll = function() { + return this._cursorAll; +}; + +Window_Selectable.prototype.setCursorAll = function(cursorAll) { + this._cursorAll = cursorAll; +}; + +Window_Selectable.prototype.maxCols = function() { + return 1; +}; + +Window_Selectable.prototype.maxItems = function() { + return 0; +}; + +Window_Selectable.prototype.spacing = function() { + return 12; +}; + +Window_Selectable.prototype.itemWidth = function() { + return Math.floor((this.width - this.padding * 2 + + this.spacing()) / this.maxCols() - this.spacing()); +}; + +Window_Selectable.prototype.itemHeight = function() { + return this.lineHeight(); +}; + +Window_Selectable.prototype.maxRows = function() { + return Math.max(Math.ceil(this.maxItems() / this.maxCols()), 1); +}; + +Window_Selectable.prototype.activate = function() { + Window_Base.prototype.activate.call(this); + this.reselect(); +}; + +Window_Selectable.prototype.deactivate = function() { + Window_Base.prototype.deactivate.call(this); + this.reselect(); +}; + +Window_Selectable.prototype.select = function(index) { + this._index = index; + this._stayCount = 0; + this.ensureCursorVisible(); + this.updateCursor(); + this.callUpdateHelp(); +}; + +Window_Selectable.prototype.deselect = function() { + this.select(-1); +}; + +Window_Selectable.prototype.reselect = function() { + this.select(this._index); +}; + +Window_Selectable.prototype.row = function() { + return Math.floor(this.index() / this.maxCols()); +}; + +Window_Selectable.prototype.topRow = function() { + return Math.floor(this._scrollY / this.itemHeight()); +}; + +Window_Selectable.prototype.maxTopRow = function() { + return Math.max(0, this.maxRows() - this.maxPageRows()); +}; + +Window_Selectable.prototype.setTopRow = function(row) { + var scrollY = row.clamp(0, this.maxTopRow()) * this.itemHeight(); + if (this._scrollY !== scrollY) { + this._scrollY = scrollY; + this.refresh(); + this.updateCursor(); + } +}; + +Window_Selectable.prototype.resetScroll = function() { + this.setTopRow(0); +}; + +Window_Selectable.prototype.maxPageRows = function() { + var pageHeight = this.height - this.padding * 2; + return Math.floor(pageHeight / this.itemHeight()); +}; + +Window_Selectable.prototype.maxPageItems = function() { + return this.maxPageRows() * this.maxCols(); +}; + +Window_Selectable.prototype.isHorizontal = function() { + return this.maxPageRows() === 1; +}; + +Window_Selectable.prototype.bottomRow = function() { + return Math.max(0, this.topRow() + this.maxPageRows() - 1); +}; + +Window_Selectable.prototype.setBottomRow = function(row) { + this.setTopRow(row - (this.maxPageRows() - 1)); +}; + +Window_Selectable.prototype.topIndex = function() { + return this.topRow() * this.maxCols(); +}; + +Window_Selectable.prototype.itemRect = function(index) { + var rect = new Rectangle(); + var maxCols = this.maxCols(); + rect.width = this.itemWidth(); + rect.height = this.itemHeight(); + rect.x = index % maxCols * (rect.width + this.spacing()) - this._scrollX; + rect.y = Math.floor(index / maxCols) * rect.height - this._scrollY; + return rect; +}; + +Window_Selectable.prototype.itemRectForText = function(index) { + var rect = this.itemRect(index); + rect.x += this.textPadding(); + rect.width -= this.textPadding() * 2; + return rect; +}; + +Window_Selectable.prototype.setHelpWindow = function(helpWindow) { + this._helpWindow = helpWindow; + this.callUpdateHelp(); +}; + +Window_Selectable.prototype.showHelpWindow = function() { + if (this._helpWindow) { + this._helpWindow.show(); + } +}; + +Window_Selectable.prototype.hideHelpWindow = function() { + if (this._helpWindow) { + this._helpWindow.hide(); + } +}; + +Window_Selectable.prototype.setHandler = function(symbol, method) { + this._handlers[symbol] = method; +}; + +Window_Selectable.prototype.isHandled = function(symbol) { + return !!this._handlers[symbol]; +}; + +Window_Selectable.prototype.callHandler = function(symbol) { + if (this.isHandled(symbol)) { + this._handlers[symbol](); + } +}; + +Window_Selectable.prototype.isOpenAndActive = function() { + return this.isOpen() && this.active; +}; + +Window_Selectable.prototype.isCursorMovable = function() { + return (this.isOpenAndActive() && !this._cursorFixed && + !this._cursorAll && this.maxItems() > 0); +}; + +Window_Selectable.prototype.cursorDown = function(wrap) { + var index = this.index(); + var maxItems = this.maxItems(); + var maxCols = this.maxCols(); + if (index < maxItems - maxCols || (wrap && maxCols === 1)) { + this.select((index + maxCols) % maxItems); + } +}; + +Window_Selectable.prototype.cursorUp = function(wrap) { + var index = this.index(); + var maxItems = this.maxItems(); + var maxCols = this.maxCols(); + if (index >= maxCols || (wrap && maxCols === 1)) { + this.select((index - maxCols + maxItems) % maxItems); + } +}; + +Window_Selectable.prototype.cursorRight = function(wrap) { + var index = this.index(); + var maxItems = this.maxItems(); + var maxCols = this.maxCols(); + if (maxCols >= 2 && (index < maxItems - 1 || (wrap && this.isHorizontal()))) { + this.select((index + 1) % maxItems); + } +}; + +Window_Selectable.prototype.cursorLeft = function(wrap) { + var index = this.index(); + var maxItems = this.maxItems(); + var maxCols = this.maxCols(); + if (maxCols >= 2 && (index > 0 || (wrap && this.isHorizontal()))) { + this.select((index - 1 + maxItems) % maxItems); + } +}; + +Window_Selectable.prototype.cursorPagedown = function() { + var index = this.index(); + var maxItems = this.maxItems(); + if (this.topRow() + this.maxPageRows() < this.maxRows()) { + this.setTopRow(this.topRow() + this.maxPageRows()); + this.select(Math.min(index + this.maxPageItems(), maxItems - 1)); + } +}; + +Window_Selectable.prototype.cursorPageup = function() { + var index = this.index(); + if (this.topRow() > 0) { + this.setTopRow(this.topRow() - this.maxPageRows()); + this.select(Math.max(index - this.maxPageItems(), 0)); + } +}; + +Window_Selectable.prototype.scrollDown = function() { + if (this.topRow() + 1 < this.maxRows()) { + this.setTopRow(this.topRow() + 1); + } +}; + +Window_Selectable.prototype.scrollUp = function() { + if (this.topRow() > 0) { + this.setTopRow(this.topRow() - 1); + } +}; + +Window_Selectable.prototype.update = function() { + Window_Base.prototype.update.call(this); + this.updateArrows(); + this.processCursorMove(); + this.processHandling(); + this.processWheel(); + this.processTouch(); + this._stayCount++; +}; + +Window_Selectable.prototype.updateArrows = function() { + var topRow = this.topRow(); + var maxTopRow = this.maxTopRow(); + this.downArrowVisible = maxTopRow > 0 && topRow < maxTopRow; + this.upArrowVisible = topRow > 0; +}; + +Window_Selectable.prototype.processCursorMove = function() { + if (this.isCursorMovable()) { + var lastIndex = this.index(); + if (Input.isRepeated('down')) { + this.cursorDown(Input.isTriggered('down')); + } + if (Input.isRepeated('up')) { + this.cursorUp(Input.isTriggered('up')); + } + if (Input.isRepeated('right')) { + this.cursorRight(Input.isTriggered('right')); + } + if (Input.isRepeated('left')) { + this.cursorLeft(Input.isTriggered('left')); + } + if (!this.isHandled('pagedown') && Input.isTriggered('pagedown')) { + this.cursorPagedown(); + } + if (!this.isHandled('pageup') && Input.isTriggered('pageup')) { + this.cursorPageup(); + } + if (this.index() !== lastIndex) { + SoundManager.playCursor(); + } + } +}; + +Window_Selectable.prototype.processHandling = function() { + if (this.isOpenAndActive()) { + if (this.isOkEnabled() && this.isOkTriggered()) { + this.processOk(); + } else if (this.isCancelEnabled() && this.isCancelTriggered()) { + this.processCancel(); + } else if (this.isHandled('pagedown') && Input.isTriggered('pagedown')) { + this.processPagedown(); + } else if (this.isHandled('pageup') && Input.isTriggered('pageup')) { + this.processPageup(); + } + } +}; + +Window_Selectable.prototype.processWheel = function() { + if (this.isOpenAndActive()) { + var threshold = 20; + if (TouchInput.wheelY >= threshold) { + this.scrollDown(); + } + if (TouchInput.wheelY <= -threshold) { + this.scrollUp(); + } + } +}; + +Window_Selectable.prototype.processTouch = function() { + if (this.isOpenAndActive()) { + if (TouchInput.isTriggered() && this.isTouchedInsideFrame()) { + this._touching = true; + this.onTouch(true); + } else if (TouchInput.isCancelled()) { + if (this.isCancelEnabled()) { + this.processCancel(); + } + } + if (this._touching) { + if (TouchInput.isPressed()) { + this.onTouch(false); + } else { + this._touching = false; + } + } + } else { + this._touching = false; + } +}; + +Window_Selectable.prototype.isTouchedInsideFrame = function() { + var x = this.canvasToLocalX(TouchInput.x); + var y = this.canvasToLocalY(TouchInput.y); + return x >= 0 && y >= 0 && x < this.width && y < this.height; +}; + +Window_Selectable.prototype.onTouch = function(triggered) { + var lastIndex = this.index(); + var x = this.canvasToLocalX(TouchInput.x); + var y = this.canvasToLocalY(TouchInput.y); + var hitIndex = this.hitTest(x, y); + if (hitIndex >= 0) { + if (hitIndex === this.index()) { + if (triggered && this.isTouchOkEnabled()) { + this.processOk(); + } + } else if (this.isCursorMovable()) { + this.select(hitIndex); + } + } else if (this._stayCount >= 10) { + if (y < this.padding) { + this.cursorUp(); + } else if (y >= this.height - this.padding) { + this.cursorDown(); + } + } + if (this.index() !== lastIndex) { + SoundManager.playCursor(); + } +}; + +Window_Selectable.prototype.hitTest = function(x, y) { + if (this.isContentsArea(x, y)) { + var cx = x - this.padding; + var cy = y - this.padding; + var topIndex = this.topIndex(); + for (var i = 0; i < this.maxPageItems(); i++) { + var index = topIndex + i; + if (index < this.maxItems()) { + var rect = this.itemRect(index); + var right = rect.x + rect.width; + var bottom = rect.y + rect.height; + if (cx >= rect.x && cy >= rect.y && cx < right && cy < bottom) { + return index; + } + } + } + } + return -1; +}; + +Window_Selectable.prototype.isContentsArea = function(x, y) { + var left = this.padding; + var top = this.padding; + var right = this.width - this.padding; + var bottom = this.height - this.padding; + return (x >= left && y >= top && x < right && y < bottom); +}; + +Window_Selectable.prototype.isTouchOkEnabled = function() { + return this.isOkEnabled(); +}; + +Window_Selectable.prototype.isOkEnabled = function() { + return this.isHandled('ok'); +}; + +Window_Selectable.prototype.isCancelEnabled = function() { + return this.isHandled('cancel'); +}; + +Window_Selectable.prototype.isOkTriggered = function() { + return Input.isRepeated('ok'); +}; + +Window_Selectable.prototype.isCancelTriggered = function() { + return Input.isRepeated('cancel'); +}; + +Window_Selectable.prototype.processOk = function() { + if (this.isCurrentItemEnabled()) { + this.playOkSound(); + this.updateInputData(); + this.deactivate(); + this.callOkHandler(); + } else { + this.playBuzzerSound(); + } +}; + +Window_Selectable.prototype.playOkSound = function() { + SoundManager.playOk(); +}; + +Window_Selectable.prototype.playBuzzerSound = function() { + SoundManager.playBuzzer(); +}; + +Window_Selectable.prototype.callOkHandler = function() { + this.callHandler('ok'); +}; + +Window_Selectable.prototype.processCancel = function() { + SoundManager.playCancel(); + this.updateInputData(); + this.deactivate(); + this.callCancelHandler(); +}; + +Window_Selectable.prototype.callCancelHandler = function() { + this.callHandler('cancel'); +}; + +Window_Selectable.prototype.processPageup = function() { + SoundManager.playCursor(); + this.updateInputData(); + this.deactivate(); + this.callHandler('pageup'); +}; + +Window_Selectable.prototype.processPagedown = function() { + SoundManager.playCursor(); + this.updateInputData(); + this.deactivate(); + this.callHandler('pagedown'); +}; + +Window_Selectable.prototype.updateInputData = function() { + Input.update(); + TouchInput.update(); +}; + +Window_Selectable.prototype.updateCursor = function() { + if (this._cursorAll) { + var allRowsHeight = this.maxRows() * this.itemHeight(); + this.setCursorRect(0, 0, this.contents.width, allRowsHeight); + this.setTopRow(0); + } else if (this.isCursorVisible()) { + var rect = this.itemRect(this.index()); + this.setCursorRect(rect.x, rect.y, rect.width, rect.height); + } else { + this.setCursorRect(0, 0, 0, 0); + } +}; + +Window_Selectable.prototype.isCursorVisible = function() { + var row = this.row(); + return row >= this.topRow() && row <= this.bottomRow(); +}; + +Window_Selectable.prototype.ensureCursorVisible = function() { + var row = this.row(); + if (row < this.topRow()) { + this.setTopRow(row); + } else if (row > this.bottomRow()) { + this.setBottomRow(row); + } +}; + +Window_Selectable.prototype.callUpdateHelp = function() { + if (this.active && this._helpWindow) { + this.updateHelp(); + } +}; + +Window_Selectable.prototype.updateHelp = function() { + this._helpWindow.clear(); +}; + +Window_Selectable.prototype.setHelpWindowItem = function(item) { + if (this._helpWindow) { + this._helpWindow.setItem(item); + } +}; + +Window_Selectable.prototype.isCurrentItemEnabled = function() { + return true; +}; + +Window_Selectable.prototype.drawAllItems = function() { + var topIndex = this.topIndex(); + for (var i = 0; i < this.maxPageItems(); i++) { + var index = topIndex + i; + if (index < this.maxItems()) { + this.drawItem(index); + } + } +}; + +Window_Selectable.prototype.drawItem = function(index) { +}; + +Window_Selectable.prototype.clearItem = function(index) { + var rect = this.itemRect(index); + this.contents.clearRect(rect.x, rect.y, rect.width, rect.height); +}; + +Window_Selectable.prototype.redrawItem = function(index) { + if (index >= 0) { + this.clearItem(index); + this.drawItem(index); + } +}; + +Window_Selectable.prototype.redrawCurrentItem = function() { + this.redrawItem(this.index()); +}; + +Window_Selectable.prototype.refresh = function() { + if (this.contents) { + this.contents.clear(); + this.drawAllItems(); + } +}; + +//----------------------------------------------------------------------------- +// Window_Command +// +// The superclass of windows for selecting a command. + +function Window_Command() { + this.initialize.apply(this, arguments); +} + +Window_Command.prototype = Object.create(Window_Selectable.prototype); +Window_Command.prototype.constructor = Window_Command; + +Window_Command.prototype.initialize = function(x, y) { + this.clearCommandList(); + this.makeCommandList(); + var width = this.windowWidth(); + var height = this.windowHeight(); + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this.refresh(); + this.select(0); + this.activate(); +}; + +Window_Command.prototype.windowWidth = function() { + return 240; +}; + +Window_Command.prototype.windowHeight = function() { + return this.fittingHeight(this.numVisibleRows()); +}; + +Window_Command.prototype.numVisibleRows = function() { + return Math.ceil(this.maxItems() / this.maxCols()); +}; + +Window_Command.prototype.maxItems = function() { + return this._list.length; +}; + +Window_Command.prototype.clearCommandList = function() { + this._list = []; +}; + +Window_Command.prototype.makeCommandList = function() { +}; + +Window_Command.prototype.addCommand = function(name, symbol, enabled, ext) { + if (enabled === undefined) { + enabled = true; + } + if (ext === undefined) { + ext = null; + } + this._list.push({ name: name, symbol: symbol, enabled: enabled, ext: ext}); +}; + +Window_Command.prototype.commandName = function(index) { + return this._list[index].name; +}; + +Window_Command.prototype.commandSymbol = function(index) { + return this._list[index].symbol; +}; + +Window_Command.prototype.isCommandEnabled = function(index) { + return this._list[index].enabled; +}; + +Window_Command.prototype.currentData = function() { + return this.index() >= 0 ? this._list[this.index()] : null; +}; + +Window_Command.prototype.isCurrentItemEnabled = function() { + return this.currentData() ? this.currentData().enabled : false; +}; + +Window_Command.prototype.currentSymbol = function() { + return this.currentData() ? this.currentData().symbol : null; +}; + +Window_Command.prototype.currentExt = function() { + return this.currentData() ? this.currentData().ext : null; +}; + +Window_Command.prototype.findSymbol = function(symbol) { + for (var i = 0; i < this._list.length; i++) { + if (this._list[i].symbol === symbol) { + return i; + } + } + return -1; +}; + +Window_Command.prototype.selectSymbol = function(symbol) { + var index = this.findSymbol(symbol); + if (index >= 0) { + this.select(index); + } else { + this.select(0); + } +}; + +Window_Command.prototype.findExt = function(ext) { + for (var i = 0; i < this._list.length; i++) { + if (this._list[i].ext === ext) { + return i; + } + } + return -1; +}; + +Window_Command.prototype.selectExt = function(ext) { + var index = this.findExt(ext); + if (index >= 0) { + this.select(index); + } else { + this.select(0); + } +}; + +Window_Command.prototype.drawItem = function(index) { + var rect = this.itemRectForText(index); + var align = this.itemTextAlign(); + this.resetTextColor(); + this.changePaintOpacity(this.isCommandEnabled(index)); + this.drawText(this.commandName(index), rect.x, rect.y, rect.width, align); +}; + +Window_Command.prototype.itemTextAlign = function() { + return 'left'; +}; + +Window_Command.prototype.isOkEnabled = function() { + return true; +}; + +Window_Command.prototype.callOkHandler = function() { + var symbol = this.currentSymbol(); + if (this.isHandled(symbol)) { + this.callHandler(symbol); + } else if (this.isHandled('ok')) { + Window_Selectable.prototype.callOkHandler.call(this); + } else { + this.activate(); + } +}; + +Window_Command.prototype.refresh = function() { + this.clearCommandList(); + this.makeCommandList(); + this.createContents(); + Window_Selectable.prototype.refresh.call(this); +}; + +//----------------------------------------------------------------------------- +// Window_HorzCommand +// +// The command window for the horizontal selection format. + +function Window_HorzCommand() { + this.initialize.apply(this, arguments); +} + +Window_HorzCommand.prototype = Object.create(Window_Command.prototype); +Window_HorzCommand.prototype.constructor = Window_HorzCommand; + +Window_HorzCommand.prototype.initialize = function(x, y) { + Window_Command.prototype.initialize.call(this, x, y); +}; + +Window_HorzCommand.prototype.numVisibleRows = function() { + return 1; +}; + +Window_HorzCommand.prototype.maxCols = function() { + return 4; +}; + +Window_HorzCommand.prototype.itemTextAlign = function() { + return 'center'; +}; + +//----------------------------------------------------------------------------- +// Window_Help +// +// The window for displaying the description of the selected item. + +function Window_Help() { + this.initialize.apply(this, arguments); +} + +Window_Help.prototype = Object.create(Window_Base.prototype); +Window_Help.prototype.constructor = Window_Help; + +Window_Help.prototype.initialize = function(numLines) { + var width = Graphics.boxWidth; + var height = this.fittingHeight(numLines || 2); + Window_Base.prototype.initialize.call(this, 0, 0, width, height); + this._text = ''; +}; + +Window_Help.prototype.setText = function(text) { + if (this._text !== text) { + this._text = text; + this.refresh(); + } +}; + +Window_Help.prototype.clear = function() { + this.setText(''); +}; + +Window_Help.prototype.setItem = function(item) { + this.setText(item ? item.description : ''); +}; + +Window_Help.prototype.refresh = function() { + this.contents.clear(); + this.drawTextEx(this._text, this.textPadding(), 0); +}; + +//----------------------------------------------------------------------------- +// Window_Gold +// +// The window for displaying the party's gold. + +function Window_Gold() { + this.initialize.apply(this, arguments); +} + +Window_Gold.prototype = Object.create(Window_Base.prototype); +Window_Gold.prototype.constructor = Window_Gold; + +Window_Gold.prototype.initialize = function(x, y) { + var width = this.windowWidth(); + var height = this.windowHeight(); + Window_Base.prototype.initialize.call(this, x, y, width, height); + this.refresh(); +}; + +Window_Gold.prototype.windowWidth = function() { + return 240; +}; + +Window_Gold.prototype.windowHeight = function() { + return this.fittingHeight(1); +}; + +Window_Gold.prototype.refresh = function() { + var x = this.textPadding(); + var width = this.contents.width - this.textPadding() * 2; + this.contents.clear(); + this.drawCurrencyValue(this.value(), this.currencyUnit(), x, 0, width); +}; + +Window_Gold.prototype.value = function() { + return $gameParty.gold(); +}; + +Window_Gold.prototype.currencyUnit = function() { + return TextManager.currencyUnit; +}; + +Window_Gold.prototype.open = function() { + this.refresh(); + Window_Base.prototype.open.call(this); +}; + +//----------------------------------------------------------------------------- +// Window_MenuCommand +// +// The window for selecting a command on the menu screen. + +function Window_MenuCommand() { + this.initialize.apply(this, arguments); +} + +Window_MenuCommand.prototype = Object.create(Window_Command.prototype); +Window_MenuCommand.prototype.constructor = Window_MenuCommand; + +Window_MenuCommand.prototype.initialize = function(x, y) { + Window_Command.prototype.initialize.call(this, x, y); + this.selectLast(); +}; + +Window_MenuCommand._lastCommandSymbol = null; + +Window_MenuCommand.initCommandPosition = function() { + this._lastCommandSymbol = null; +}; + +Window_MenuCommand.prototype.windowWidth = function() { + return 240; +}; + +Window_MenuCommand.prototype.numVisibleRows = function() { + return this.maxItems(); +}; + +Window_MenuCommand.prototype.makeCommandList = function() { + this.addMainCommands(); + this.addFormationCommand(); + this.addOriginalCommands(); + this.addOptionsCommand(); + this.addSaveCommand(); + this.addGameEndCommand(); +}; + +Window_MenuCommand.prototype.addMainCommands = function() { + var enabled = this.areMainCommandsEnabled(); + if (this.needsCommand('item')) { + this.addCommand(TextManager.item, 'item', enabled); + } + if (this.needsCommand('skill')) { + this.addCommand(TextManager.skill, 'skill', enabled); + } + if (this.needsCommand('equip')) { + this.addCommand(TextManager.equip, 'equip', enabled); + } + if (this.needsCommand('status')) { + this.addCommand(TextManager.status, 'status', enabled); + } +}; + +Window_MenuCommand.prototype.addFormationCommand = function() { + if (this.needsCommand('formation')) { + var enabled = this.isFormationEnabled(); + this.addCommand(TextManager.formation, 'formation', enabled); + } +}; + +Window_MenuCommand.prototype.addOriginalCommands = function() { +}; + +Window_MenuCommand.prototype.addOptionsCommand = function() { + if (this.needsCommand('options')) { + var enabled = this.isOptionsEnabled(); + this.addCommand(TextManager.options, 'options', enabled); + } +}; + +Window_MenuCommand.prototype.addSaveCommand = function() { + if (this.needsCommand('save')) { + var enabled = this.isSaveEnabled(); + this.addCommand(TextManager.save, 'save', enabled); + } +}; + +Window_MenuCommand.prototype.addGameEndCommand = function() { + var enabled = this.isGameEndEnabled(); + this.addCommand(TextManager.gameEnd, 'gameEnd', enabled); +}; + +Window_MenuCommand.prototype.needsCommand = function(name) { + var flags = $dataSystem.menuCommands; + if (flags) { + switch (name) { + case 'item': + return flags[0]; + case 'skill': + return flags[1]; + case 'equip': + return flags[2]; + case 'status': + return flags[3]; + case 'formation': + return flags[4]; + case 'save': + return flags[5]; + } + } + return true; +}; + +Window_MenuCommand.prototype.areMainCommandsEnabled = function() { + return $gameParty.exists(); +}; + +Window_MenuCommand.prototype.isFormationEnabled = function() { + return $gameParty.size() >= 2 && $gameSystem.isFormationEnabled(); +}; + +Window_MenuCommand.prototype.isOptionsEnabled = function() { + return true; +}; + +Window_MenuCommand.prototype.isSaveEnabled = function() { + return !DataManager.isEventTest() && $gameSystem.isSaveEnabled(); +}; + +Window_MenuCommand.prototype.isGameEndEnabled = function() { + return true; +}; + +Window_MenuCommand.prototype.processOk = function() { + Window_MenuCommand._lastCommandSymbol = this.currentSymbol(); + Window_Command.prototype.processOk.call(this); +}; + +Window_MenuCommand.prototype.selectLast = function() { + this.selectSymbol(Window_MenuCommand._lastCommandSymbol); +}; + +//----------------------------------------------------------------------------- +// Window_MenuStatus +// +// The window for displaying party member status on the menu screen. + +function Window_MenuStatus() { + this.initialize.apply(this, arguments); +} + +Window_MenuStatus.prototype = Object.create(Window_Selectable.prototype); +Window_MenuStatus.prototype.constructor = Window_MenuStatus; + +Window_MenuStatus.prototype.initialize = function(x, y) { + var width = this.windowWidth(); + var height = this.windowHeight(); + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this._formationMode = false; + this._pendingIndex = -1; + this.loadImages(); + this.refresh(); +}; + +Window_MenuStatus.prototype.windowWidth = function() { + return Graphics.boxWidth - 240; +}; + +Window_MenuStatus.prototype.windowHeight = function() { + return Graphics.boxHeight; +}; + +Window_MenuStatus.prototype.maxItems = function() { + return $gameParty.size(); +}; + +Window_MenuStatus.prototype.itemHeight = function() { + var clientHeight = this.height - this.padding * 2; + return Math.floor(clientHeight / this.numVisibleRows()); +}; + +Window_MenuStatus.prototype.numVisibleRows = function() { + return 4; +}; + +Window_MenuStatus.prototype.loadImages = function() { + $gameParty.members().forEach(function(actor) { + ImageManager.loadFace(actor.faceName()); + }, this); +}; + +Window_MenuStatus.prototype.drawItem = function(index) { + this.drawItemBackground(index); + this.drawItemImage(index); + this.drawItemStatus(index); +}; + +Window_MenuStatus.prototype.drawItemBackground = function(index) { + if (index === this._pendingIndex) { + var rect = this.itemRect(index); + var color = this.pendingColor(); + this.changePaintOpacity(false); + this.contents.fillRect(rect.x, rect.y, rect.width, rect.height, color); + this.changePaintOpacity(true); + } +}; + +Window_MenuStatus.prototype.drawItemImage = function(index) { + var actor = $gameParty.members()[index]; + var rect = this.itemRect(index); + this.changePaintOpacity(actor.isBattleMember()); + this.drawActorFace(actor, rect.x + 1, rect.y + 1, Window_Base._faceWidth, Window_Base._faceHeight); + this.changePaintOpacity(true); +}; + +Window_MenuStatus.prototype.drawItemStatus = function(index) { + var actor = $gameParty.members()[index]; + var rect = this.itemRect(index); + var x = rect.x + 162; + var y = rect.y + rect.height / 2 - this.lineHeight() * 1.5; + var width = rect.width - x - this.textPadding(); + this.drawActorSimpleStatus(actor, x, y, width); +}; + +Window_MenuStatus.prototype.processOk = function() { + Window_Selectable.prototype.processOk.call(this); + $gameParty.setMenuActor($gameParty.members()[this.index()]); +}; + +Window_MenuStatus.prototype.isCurrentItemEnabled = function() { + if (this._formationMode) { + var actor = $gameParty.members()[this.index()]; + return actor && actor.isFormationChangeOk(); + } else { + return true; + } +}; + +Window_MenuStatus.prototype.selectLast = function() { + this.select($gameParty.menuActor().index() || 0); +}; + +Window_MenuStatus.prototype.formationMode = function() { + return this._formationMode; +}; + +Window_MenuStatus.prototype.setFormationMode = function(formationMode) { + this._formationMode = formationMode; +}; + +Window_MenuStatus.prototype.pendingIndex = function() { + return this._pendingIndex; +}; + +Window_MenuStatus.prototype.setPendingIndex = function(index) { + var lastPendingIndex = this._pendingIndex; + this._pendingIndex = index; + this.redrawItem(this._pendingIndex); + this.redrawItem(lastPendingIndex); +}; + +//----------------------------------------------------------------------------- +// Window_MenuActor +// +// The window for selecting a target actor on the item and skill screens. + +function Window_MenuActor() { + this.initialize.apply(this, arguments); +} + +Window_MenuActor.prototype = Object.create(Window_MenuStatus.prototype); +Window_MenuActor.prototype.constructor = Window_MenuActor; + +Window_MenuActor.prototype.initialize = function() { + Window_MenuStatus.prototype.initialize.call(this, 0, 0); + this.hide(); +}; + +Window_MenuActor.prototype.processOk = function() { + if (!this.cursorAll()) { + $gameParty.setTargetActor($gameParty.members()[this.index()]); + } + this.callOkHandler(); +}; + +Window_MenuActor.prototype.selectLast = function() { + this.select($gameParty.targetActor().index() || 0); +}; + +Window_MenuActor.prototype.selectForItem = function(item) { + var actor = $gameParty.menuActor(); + var action = new Game_Action(actor); + action.setItemObject(item); + this.setCursorFixed(false); + this.setCursorAll(false); + if (action.isForUser()) { + if (DataManager.isSkill(item)) { + this.setCursorFixed(true); + this.select(actor.index()); + } else { + this.selectLast(); + } + } else if (action.isForAll()) { + this.setCursorAll(true); + this.select(0); + } else { + this.selectLast(); + } +}; + +//----------------------------------------------------------------------------- +// Window_ItemCategory +// +// The window for selecting a category of items on the item and shop screens. + +function Window_ItemCategory() { + this.initialize.apply(this, arguments); +} + +Window_ItemCategory.prototype = Object.create(Window_HorzCommand.prototype); +Window_ItemCategory.prototype.constructor = Window_ItemCategory; + +Window_ItemCategory.prototype.initialize = function() { + Window_HorzCommand.prototype.initialize.call(this, 0, 0); +}; + +Window_ItemCategory.prototype.windowWidth = function() { + return Graphics.boxWidth; +}; + +Window_ItemCategory.prototype.maxCols = function() { + return 4; +}; + +Window_ItemCategory.prototype.update = function() { + Window_HorzCommand.prototype.update.call(this); + if (this._itemWindow) { + this._itemWindow.setCategory(this.currentSymbol()); + } +}; + +Window_ItemCategory.prototype.makeCommandList = function() { + this.addCommand(TextManager.item, 'item'); + this.addCommand(TextManager.weapon, 'weapon'); + this.addCommand(TextManager.armor, 'armor'); + this.addCommand(TextManager.keyItem, 'keyItem'); +}; + +Window_ItemCategory.prototype.setItemWindow = function(itemWindow) { + this._itemWindow = itemWindow; + this.update(); +}; + +//----------------------------------------------------------------------------- +// Window_ItemList +// +// The window for selecting an item on the item screen. + +function Window_ItemList() { + this.initialize.apply(this, arguments); +} + +Window_ItemList.prototype = Object.create(Window_Selectable.prototype); +Window_ItemList.prototype.constructor = Window_ItemList; + +Window_ItemList.prototype.initialize = function(x, y, width, height) { + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this._category = 'none'; + this._data = []; +}; + +Window_ItemList.prototype.setCategory = function(category) { + if (this._category !== category) { + this._category = category; + this.refresh(); + this.resetScroll(); + } +}; + +Window_ItemList.prototype.maxCols = function() { + return 2; +}; + +Window_ItemList.prototype.spacing = function() { + return 48; +}; + +Window_ItemList.prototype.maxItems = function() { + return this._data ? this._data.length : 1; +}; + +Window_ItemList.prototype.item = function() { + var index = this.index(); + return this._data && index >= 0 ? this._data[index] : null; +}; + +Window_ItemList.prototype.isCurrentItemEnabled = function() { + return this.isEnabled(this.item()); +}; + +Window_ItemList.prototype.includes = function(item) { + switch (this._category) { + case 'item': + return DataManager.isItem(item) && item.itypeId === 1; + case 'weapon': + return DataManager.isWeapon(item); + case 'armor': + return DataManager.isArmor(item); + case 'keyItem': + return DataManager.isItem(item) && item.itypeId === 2; + default: + return false; + } +}; + +Window_ItemList.prototype.needsNumber = function() { + return true; +}; + +Window_ItemList.prototype.isEnabled = function(item) { + return $gameParty.canUse(item); +}; + +Window_ItemList.prototype.makeItemList = function() { + this._data = $gameParty.allItems().filter(function(item) { + return this.includes(item); + }, this); + if (this.includes(null)) { + this._data.push(null); + } +}; + +Window_ItemList.prototype.selectLast = function() { + var index = this._data.indexOf($gameParty.lastItem()); + this.select(index >= 0 ? index : 0); +}; + +Window_ItemList.prototype.drawItem = function(index) { + var item = this._data[index]; + if (item) { + var numberWidth = this.numberWidth(); + var rect = this.itemRect(index); + rect.width -= this.textPadding(); + this.changePaintOpacity(this.isEnabled(item)); + this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth); + this.drawItemNumber(item, rect.x, rect.y, rect.width); + this.changePaintOpacity(1); + } +}; + +Window_ItemList.prototype.numberWidth = function() { + return this.textWidth('000'); +}; + +Window_ItemList.prototype.drawItemNumber = function(item, x, y, width) { + if (this.needsNumber()) { + this.drawText(':', x, y, width - this.textWidth('00'), 'right'); + this.drawText($gameParty.numItems(item), x, y, width, 'right'); + } +}; + +Window_ItemList.prototype.updateHelp = function() { + this.setHelpWindowItem(this.item()); +}; + +Window_ItemList.prototype.refresh = function() { + this.makeItemList(); + this.createContents(); + this.drawAllItems(); +}; + +//----------------------------------------------------------------------------- +// Window_SkillType +// +// The window for selecting a skill type on the skill screen. + +function Window_SkillType() { + this.initialize.apply(this, arguments); +} + +Window_SkillType.prototype = Object.create(Window_Command.prototype); +Window_SkillType.prototype.constructor = Window_SkillType; + +Window_SkillType.prototype.initialize = function(x, y) { + Window_Command.prototype.initialize.call(this, x, y); + this._actor = null; +}; + +Window_SkillType.prototype.windowWidth = function() { + return 240; +}; + +Window_SkillType.prototype.setActor = function(actor) { + if (this._actor !== actor) { + this._actor = actor; + this.refresh(); + this.selectLast(); + } +}; + +Window_SkillType.prototype.numVisibleRows = function() { + return 4; +}; + +Window_SkillType.prototype.makeCommandList = function() { + if (this._actor) { + var skillTypes = this._actor.addedSkillTypes(); + skillTypes.sort(function(a, b) { + return a - b; + }); + skillTypes.forEach(function(stypeId) { + var name = $dataSystem.skillTypes[stypeId]; + this.addCommand(name, 'skill', true, stypeId); + }, this); + } +}; + +Window_SkillType.prototype.update = function() { + Window_Command.prototype.update.call(this); + if (this._skillWindow) { + this._skillWindow.setStypeId(this.currentExt()); + } +}; + +Window_SkillType.prototype.setSkillWindow = function(skillWindow) { + this._skillWindow = skillWindow; + this.update(); +}; + +Window_SkillType.prototype.selectLast = function() { + var skill = this._actor.lastMenuSkill(); + if (skill) { + this.selectExt(skill.stypeId); + } else { + this.select(0); + } +}; + +//----------------------------------------------------------------------------- +// Window_SkillStatus +// +// The window for displaying the skill user's status on the skill screen. + +function Window_SkillStatus() { + this.initialize.apply(this, arguments); +} + +Window_SkillStatus.prototype = Object.create(Window_Base.prototype); +Window_SkillStatus.prototype.constructor = Window_SkillStatus; + +Window_SkillStatus.prototype.initialize = function(x, y, width, height) { + Window_Base.prototype.initialize.call(this, x, y, width, height); + this._actor = null; +}; + +Window_SkillStatus.prototype.setActor = function(actor) { + if (this._actor !== actor) { + this._actor = actor; + this.refresh(); + } +}; + +Window_SkillStatus.prototype.refresh = function() { + this.contents.clear(); + if (this._actor) { + var w = this.width - this.padding * 2; + var h = this.height - this.padding * 2; + var y = h / 2 - this.lineHeight() * 1.5; + var width = w - 162 - this.textPadding(); + this.drawActorFace(this._actor, 0, 0, 144, h); + this.drawActorSimpleStatus(this._actor, 162, y, width); + } +}; + +//----------------------------------------------------------------------------- +// Window_SkillList +// +// The window for selecting a skill on the skill screen. + +function Window_SkillList() { + this.initialize.apply(this, arguments); +} + +Window_SkillList.prototype = Object.create(Window_Selectable.prototype); +Window_SkillList.prototype.constructor = Window_SkillList; + +Window_SkillList.prototype.initialize = function(x, y, width, height) { + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this._actor = null; + this._stypeId = 0; + this._data = []; +}; + +Window_SkillList.prototype.setActor = function(actor) { + if (this._actor !== actor) { + this._actor = actor; + this.refresh(); + this.resetScroll(); + } +}; + +Window_SkillList.prototype.setStypeId = function(stypeId) { + if (this._stypeId !== stypeId) { + this._stypeId = stypeId; + this.refresh(); + this.resetScroll(); + } +}; + +Window_SkillList.prototype.maxCols = function() { + return 2; +}; + +Window_SkillList.prototype.spacing = function() { + return 48; +}; + +Window_SkillList.prototype.maxItems = function() { + return this._data ? this._data.length : 1; +}; + +Window_SkillList.prototype.item = function() { + return this._data && this.index() >= 0 ? this._data[this.index()] : null; +}; + +Window_SkillList.prototype.isCurrentItemEnabled = function() { + return this.isEnabled(this._data[this.index()]); +}; + +Window_SkillList.prototype.includes = function(item) { + return item && item.stypeId === this._stypeId; +}; + +Window_SkillList.prototype.isEnabled = function(item) { + return this._actor && this._actor.canUse(item); +}; + +Window_SkillList.prototype.makeItemList = function() { + if (this._actor) { + this._data = this._actor.skills().filter(function(item) { + return this.includes(item); + }, this); + } else { + this._data = []; + } +}; + +Window_SkillList.prototype.selectLast = function() { + var skill; + if ($gameParty.inBattle()) { + skill = this._actor.lastBattleSkill(); + } else { + skill = this._actor.lastMenuSkill(); + } + var index = this._data.indexOf(skill); + this.select(index >= 0 ? index : 0); +}; + +Window_SkillList.prototype.drawItem = function(index) { + var skill = this._data[index]; + if (skill) { + var costWidth = this.costWidth(); + var rect = this.itemRect(index); + rect.width -= this.textPadding(); + this.changePaintOpacity(this.isEnabled(skill)); + this.drawItemName(skill, rect.x, rect.y, rect.width - costWidth); + this.drawSkillCost(skill, rect.x, rect.y, rect.width); + this.changePaintOpacity(1); + } +}; + +Window_SkillList.prototype.costWidth = function() { + return this.textWidth('000'); +}; + +Window_SkillList.prototype.drawSkillCost = function(skill, x, y, width) { + if (this._actor.skillTpCost(skill) > 0) { + this.changeTextColor(this.tpCostColor()); + this.drawText(this._actor.skillTpCost(skill), x, y, width, 'right'); + } else if (this._actor.skillMpCost(skill) > 0) { + this.changeTextColor(this.mpCostColor()); + this.drawText(this._actor.skillMpCost(skill), x, y, width, 'right'); + } +}; + +Window_SkillList.prototype.updateHelp = function() { + this.setHelpWindowItem(this.item()); +}; + +Window_SkillList.prototype.refresh = function() { + this.makeItemList(); + this.createContents(); + this.drawAllItems(); +}; + +//----------------------------------------------------------------------------- +// Window_EquipStatus +// +// The window for displaying parameter changes on the equipment screen. + +function Window_EquipStatus() { + this.initialize.apply(this, arguments); +} + +Window_EquipStatus.prototype = Object.create(Window_Base.prototype); +Window_EquipStatus.prototype.constructor = Window_EquipStatus; + +Window_EquipStatus.prototype.initialize = function(x, y) { + var width = this.windowWidth(); + var height = this.windowHeight(); + Window_Base.prototype.initialize.call(this, x, y, width, height); + this._actor = null; + this._tempActor = null; + this.refresh(); +}; + +Window_EquipStatus.prototype.windowWidth = function() { + return 312; +}; + +Window_EquipStatus.prototype.windowHeight = function() { + return this.fittingHeight(this.numVisibleRows()); +}; + +Window_EquipStatus.prototype.numVisibleRows = function() { + return 7; +}; + +Window_EquipStatus.prototype.setActor = function(actor) { + if (this._actor !== actor) { + this._actor = actor; + this.refresh(); + } +}; + +Window_EquipStatus.prototype.refresh = function() { + this.contents.clear(); + if (this._actor) { + this.drawActorName(this._actor, this.textPadding(), 0); + for (var i = 0; i < 6; i++) { + this.drawItem(0, this.lineHeight() * (1 + i), 2 + i); + } + } +}; + +Window_EquipStatus.prototype.setTempActor = function(tempActor) { + if (this._tempActor !== tempActor) { + this._tempActor = tempActor; + this.refresh(); + } +}; + +Window_EquipStatus.prototype.drawItem = function(x, y, paramId) { + this.drawParamName(x + this.textPadding(), y, paramId); + if (this._actor) { + this.drawCurrentParam(x + 140, y, paramId); + } + this.drawRightArrow(x + 188, y); + if (this._tempActor) { + this.drawNewParam(x + 222, y, paramId); + } +}; + +Window_EquipStatus.prototype.drawParamName = function(x, y, paramId) { + this.changeTextColor(this.systemColor()); + this.drawText(TextManager.param(paramId), x, y, 120); +}; + +Window_EquipStatus.prototype.drawCurrentParam = function(x, y, paramId) { + this.resetTextColor(); + this.drawText(this._actor.param(paramId), x, y, 48, 'right'); +}; + +Window_EquipStatus.prototype.drawRightArrow = function(x, y) { + this.changeTextColor(this.systemColor()); + this.drawText('\u2192', x, y, 32, 'center'); +}; + +Window_EquipStatus.prototype.drawNewParam = function(x, y, paramId) { + var newValue = this._tempActor.param(paramId); + var diffvalue = newValue - this._actor.param(paramId); + this.changeTextColor(this.paramchangeTextColor(diffvalue)); + this.drawText(newValue, x, y, 48, 'right'); +}; + +//----------------------------------------------------------------------------- +// Window_EquipCommand +// +// The window for selecting a command on the equipment screen. + +function Window_EquipCommand() { + this.initialize.apply(this, arguments); +} + +Window_EquipCommand.prototype = Object.create(Window_HorzCommand.prototype); +Window_EquipCommand.prototype.constructor = Window_EquipCommand; + +Window_EquipCommand.prototype.initialize = function(x, y, width) { + this._windowWidth = width; + Window_HorzCommand.prototype.initialize.call(this, x, y); +}; + +Window_EquipCommand.prototype.windowWidth = function() { + return this._windowWidth; +}; + +Window_EquipCommand.prototype.maxCols = function() { + return 3; +}; + +Window_EquipCommand.prototype.makeCommandList = function() { + this.addCommand(TextManager.equip2, 'equip'); + this.addCommand(TextManager.optimize, 'optimize'); + this.addCommand(TextManager.clear, 'clear'); +}; + +//----------------------------------------------------------------------------- +// Window_EquipSlot +// +// The window for selecting an equipment slot on the equipment screen. + +function Window_EquipSlot() { + this.initialize.apply(this, arguments); +} + +Window_EquipSlot.prototype = Object.create(Window_Selectable.prototype); +Window_EquipSlot.prototype.constructor = Window_EquipSlot; + +Window_EquipSlot.prototype.initialize = function(x, y, width, height) { + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this._actor = null; + this.refresh(); +}; + +Window_EquipSlot.prototype.setActor = function(actor) { + if (this._actor !== actor) { + this._actor = actor; + this.refresh(); + } +}; + +Window_EquipSlot.prototype.update = function() { + Window_Selectable.prototype.update.call(this); + if (this._itemWindow) { + this._itemWindow.setSlotId(this.index()); + } +}; + +Window_EquipSlot.prototype.maxItems = function() { + return this._actor ? this._actor.equipSlots().length : 0; +}; + +Window_EquipSlot.prototype.item = function() { + return this._actor ? this._actor.equips()[this.index()] : null; +}; + +Window_EquipSlot.prototype.drawItem = function(index) { + if (this._actor) { + var rect = this.itemRectForText(index); + this.changeTextColor(this.systemColor()); + this.changePaintOpacity(this.isEnabled(index)); + this.drawText(this.slotName(index), rect.x, rect.y, 138, this.lineHeight()); + this.drawItemName(this._actor.equips()[index], rect.x + 138, rect.y); + this.changePaintOpacity(true); + } +}; + +Window_EquipSlot.prototype.slotName = function(index) { + var slots = this._actor.equipSlots(); + return this._actor ? $dataSystem.equipTypes[slots[index]] : ''; +}; + +Window_EquipSlot.prototype.isEnabled = function(index) { + return this._actor ? this._actor.isEquipChangeOk(index) : false; +}; + +Window_EquipSlot.prototype.isCurrentItemEnabled = function() { + return this.isEnabled(this.index()); +}; + +Window_EquipSlot.prototype.setStatusWindow = function(statusWindow) { + this._statusWindow = statusWindow; + this.callUpdateHelp(); +}; + +Window_EquipSlot.prototype.setItemWindow = function(itemWindow) { + this._itemWindow = itemWindow; + this.update(); +}; + +Window_EquipSlot.prototype.updateHelp = function() { + Window_Selectable.prototype.updateHelp.call(this); + this.setHelpWindowItem(this.item()); + if (this._statusWindow) { + this._statusWindow.setTempActor(null); + } +}; + +//----------------------------------------------------------------------------- +// Window_EquipItem +// +// The window for selecting an equipment item on the equipment screen. + +function Window_EquipItem() { + this.initialize.apply(this, arguments); +} + +Window_EquipItem.prototype = Object.create(Window_ItemList.prototype); +Window_EquipItem.prototype.constructor = Window_EquipItem; + +Window_EquipItem.prototype.initialize = function(x, y, width, height) { + Window_ItemList.prototype.initialize.call(this, x, y, width, height); + this._actor = null; + this._slotId = 0; +}; + +Window_EquipItem.prototype.setActor = function(actor) { + if (this._actor !== actor) { + this._actor = actor; + this.refresh(); + this.resetScroll(); + } +}; + +Window_EquipItem.prototype.setSlotId = function(slotId) { + if (this._slotId !== slotId) { + this._slotId = slotId; + this.refresh(); + this.resetScroll(); + } +}; + +Window_EquipItem.prototype.includes = function(item) { + if (item === null) { + return true; + } + if (this._slotId < 0 || item.etypeId !== this._actor.equipSlots()[this._slotId]) { + return false; + } + return this._actor.canEquip(item); +}; + +Window_EquipItem.prototype.isEnabled = function(item) { + return true; +}; + +Window_EquipItem.prototype.selectLast = function() { +}; + +Window_EquipItem.prototype.setStatusWindow = function(statusWindow) { + this._statusWindow = statusWindow; + this.callUpdateHelp(); +}; + +Window_EquipItem.prototype.updateHelp = function() { + Window_ItemList.prototype.updateHelp.call(this); + if (this._actor && this._statusWindow) { + var actor = JsonEx.makeDeepCopy(this._actor); + actor.forceChangeEquip(this._slotId, this.item()); + this._statusWindow.setTempActor(actor); + } +}; + +Window_EquipItem.prototype.playOkSound = function() { +}; + +//----------------------------------------------------------------------------- +// Window_Status +// +// The window for displaying full status on the status screen. + +function Window_Status() { + this.initialize.apply(this, arguments); +} + +Window_Status.prototype = Object.create(Window_Selectable.prototype); +Window_Status.prototype.constructor = Window_Status; + +Window_Status.prototype.initialize = function() { + var width = Graphics.boxWidth; + var height = Graphics.boxHeight; + Window_Selectable.prototype.initialize.call(this, 0, 0, width, height); + this.refresh(); + this.activate(); +}; + +Window_Status.prototype.setActor = function(actor) { + if (this._actor !== actor) { + this._actor = actor; + this.refresh(); + } +}; + +Window_Status.prototype.refresh = function() { + this.contents.clear(); + if (this._actor) { + var lineHeight = this.lineHeight(); + this.drawBlock1(lineHeight * 0); + this.drawHorzLine(lineHeight * 1); + this.drawBlock2(lineHeight * 2); + this.drawHorzLine(lineHeight * 6); + this.drawBlock3(lineHeight * 7); + this.drawHorzLine(lineHeight * 13); + this.drawBlock4(lineHeight * 14); + } +}; + +Window_Status.prototype.drawBlock1 = function(y) { + this.drawActorName(this._actor, 6, y); + this.drawActorClass(this._actor, 192, y); + this.drawActorNickname(this._actor, 432, y); +}; + +Window_Status.prototype.drawBlock2 = function(y) { + this.drawActorFace(this._actor, 12, y); + this.drawBasicInfo(204, y); + this.drawExpInfo(456, y); +}; + +Window_Status.prototype.drawBlock3 = function(y) { + this.drawParameters(48, y); + this.drawEquipments(432, y); +}; + +Window_Status.prototype.drawBlock4 = function(y) { + this.drawProfile(6, y); +}; + +Window_Status.prototype.drawHorzLine = function(y) { + var lineY = y + this.lineHeight() / 2 - 1; + this.contents.paintOpacity = 48; + this.contents.fillRect(0, lineY, this.contentsWidth(), 2, this.lineColor()); + this.contents.paintOpacity = 255; +}; + +Window_Status.prototype.lineColor = function() { + return this.normalColor(); +}; + +Window_Status.prototype.drawBasicInfo = function(x, y) { + var lineHeight = this.lineHeight(); + this.drawActorLevel(this._actor, x, y + lineHeight * 0); + this.drawActorIcons(this._actor, x, y + lineHeight * 1); + this.drawActorHp(this._actor, x, y + lineHeight * 2); + this.drawActorMp(this._actor, x, y + lineHeight * 3); +}; + +Window_Status.prototype.drawParameters = function(x, y) { + var lineHeight = this.lineHeight(); + for (var i = 0; i < 6; i++) { + var paramId = i + 2; + var y2 = y + lineHeight * i; + this.changeTextColor(this.systemColor()); + this.drawText(TextManager.param(paramId), x, y2, 160); + this.resetTextColor(); + this.drawText(this._actor.param(paramId), x + 160, y2, 60, 'right'); + } +}; + +Window_Status.prototype.drawExpInfo = function(x, y) { + var lineHeight = this.lineHeight(); + var expTotal = TextManager.expTotal.format(TextManager.exp); + var expNext = TextManager.expNext.format(TextManager.level); + var value1 = this._actor.currentExp(); + var value2 = this._actor.nextRequiredExp(); + if (this._actor.isMaxLevel()) { + value1 = '-------'; + value2 = '-------'; + } + this.changeTextColor(this.systemColor()); + this.drawText(expTotal, x, y + lineHeight * 0, 270); + this.drawText(expNext, x, y + lineHeight * 2, 270); + this.resetTextColor(); + this.drawText(value1, x, y + lineHeight * 1, 270, 'right'); + this.drawText(value2, x, y + lineHeight * 3, 270, 'right'); +}; + +Window_Status.prototype.drawEquipments = function(x, y) { + var equips = this._actor.equips(); + var count = Math.min(equips.length, this.maxEquipmentLines()); + for (var i = 0; i < count; i++) { + this.drawItemName(equips[i], x, y + this.lineHeight() * i); + } +}; + +Window_Status.prototype.drawProfile = function(x, y) { + this.drawTextEx(this._actor.profile(), x, y); +}; + +Window_Status.prototype.maxEquipmentLines = function() { + return 6; +}; + +//----------------------------------------------------------------------------- +// Window_Options +// +// The window for changing various settings on the options screen. + +function Window_Options() { + this.initialize.apply(this, arguments); +} + +Window_Options.prototype = Object.create(Window_Command.prototype); +Window_Options.prototype.constructor = Window_Options; + +Window_Options.prototype.initialize = function() { + Window_Command.prototype.initialize.call(this, 0, 0); + this.updatePlacement(); +}; + +Window_Options.prototype.windowWidth = function() { + return 400; +}; + +Window_Options.prototype.windowHeight = function() { + return this.fittingHeight(Math.min(this.numVisibleRows(), 12)); +}; + +Window_Options.prototype.updatePlacement = function() { + this.x = (Graphics.boxWidth - this.width) / 2; + this.y = (Graphics.boxHeight - this.height) / 2; +}; + +Window_Options.prototype.makeCommandList = function() { + this.addGeneralOptions(); + this.addVolumeOptions(); +}; + +Window_Options.prototype.addGeneralOptions = function() { + this.addCommand(TextManager.alwaysDash, 'alwaysDash'); + this.addCommand(TextManager.commandRemember, 'commandRemember'); +}; + +Window_Options.prototype.addVolumeOptions = function() { + this.addCommand(TextManager.bgmVolume, 'bgmVolume'); + this.addCommand(TextManager.bgsVolume, 'bgsVolume'); + this.addCommand(TextManager.meVolume, 'meVolume'); + this.addCommand(TextManager.seVolume, 'seVolume'); +}; + +Window_Options.prototype.drawItem = function(index) { + var rect = this.itemRectForText(index); + var statusWidth = this.statusWidth(); + var titleWidth = rect.width - statusWidth; + this.resetTextColor(); + this.changePaintOpacity(this.isCommandEnabled(index)); + this.drawText(this.commandName(index), rect.x, rect.y, titleWidth, 'left'); + this.drawText(this.statusText(index), titleWidth, rect.y, statusWidth, 'right'); +}; + +Window_Options.prototype.statusWidth = function() { + return 120; +}; + +Window_Options.prototype.statusText = function(index) { + var symbol = this.commandSymbol(index); + var value = this.getConfigValue(symbol); + if (this.isVolumeSymbol(symbol)) { + return this.volumeStatusText(value); + } else { + return this.booleanStatusText(value); + } +}; + +Window_Options.prototype.isVolumeSymbol = function(symbol) { + return symbol.contains('Volume'); +}; + +Window_Options.prototype.booleanStatusText = function(value) { + return value ? 'ON' : 'OFF'; +}; + +Window_Options.prototype.volumeStatusText = function(value) { + return value + '%'; +}; + +Window_Options.prototype.processOk = function() { + var index = this.index(); + var symbol = this.commandSymbol(index); + var value = this.getConfigValue(symbol); + if (this.isVolumeSymbol(symbol)) { + value += this.volumeOffset(); + if (value > 100) { + value = 0; + } + value = value.clamp(0, 100); + this.changeValue(symbol, value); + } else { + this.changeValue(symbol, !value); + } +}; + +Window_Options.prototype.cursorRight = function(wrap) { + var index = this.index(); + var symbol = this.commandSymbol(index); + var value = this.getConfigValue(symbol); + if (this.isVolumeSymbol(symbol)) { + value += this.volumeOffset(); + value = value.clamp(0, 100); + this.changeValue(symbol, value); + } else { + this.changeValue(symbol, true); + } +}; + +Window_Options.prototype.cursorLeft = function(wrap) { + var index = this.index(); + var symbol = this.commandSymbol(index); + var value = this.getConfigValue(symbol); + if (this.isVolumeSymbol(symbol)) { + value -= this.volumeOffset(); + value = value.clamp(0, 100); + this.changeValue(symbol, value); + } else { + this.changeValue(symbol, false); + } +}; + +Window_Options.prototype.volumeOffset = function() { + return 20; +}; + +Window_Options.prototype.changeValue = function(symbol, value) { + var lastValue = this.getConfigValue(symbol); + if (lastValue !== value) { + this.setConfigValue(symbol, value); + this.redrawItem(this.findSymbol(symbol)); + SoundManager.playCursor(); + } +}; + +Window_Options.prototype.getConfigValue = function(symbol) { + return ConfigManager[symbol]; +}; + +Window_Options.prototype.setConfigValue = function(symbol, volume) { + ConfigManager[symbol] = volume; +}; + +//----------------------------------------------------------------------------- +// Window_SavefileList +// +// The window for selecting a save file on the save and load screens. + +function Window_SavefileList() { + this.initialize.apply(this, arguments); +} + +Window_SavefileList.prototype = Object.create(Window_Selectable.prototype); +Window_SavefileList.prototype.constructor = Window_SavefileList; + +Window_SavefileList.prototype.initialize = function(x, y, width, height) { + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this.activate(); + this._mode = null; +}; + +Window_SavefileList.prototype.setMode = function(mode) { + this._mode = mode; +}; + +Window_SavefileList.prototype.maxItems = function() { + return DataManager.maxSavefiles(); +}; + +Window_SavefileList.prototype.maxVisibleItems = function() { + return 5; +}; + +Window_SavefileList.prototype.itemHeight = function() { + var innerHeight = this.height - this.padding * 2; + return Math.floor(innerHeight / this.maxVisibleItems()); +}; + +Window_SavefileList.prototype.drawItem = function(index) { + var id = index + 1; + var valid = DataManager.isThisGameFile(id); + var info = DataManager.loadSavefileInfo(id); + var rect = this.itemRectForText(index); + this.resetTextColor(); + if (this._mode === 'load') { + this.changePaintOpacity(valid); + } + this.drawFileId(id, rect.x, rect.y); + if (info) { + this.changePaintOpacity(valid); + this.drawContents(info, rect, valid); + this.changePaintOpacity(true); + } +}; + +Window_SavefileList.prototype.drawFileId = function(id, x, y) { + this.drawText(TextManager.file + ' ' + id, x, y, 180); +}; + +Window_SavefileList.prototype.drawContents = function(info, rect, valid) { + var bottom = rect.y + rect.height; + if (rect.width >= 420) { + this.drawGameTitle(info, rect.x + 192, rect.y, rect.width - 192); + if (valid) { + this.drawPartyCharacters(info, rect.x + 220, bottom - 4); + } + } + var lineHeight = this.lineHeight(); + var y2 = bottom - lineHeight; + if (y2 >= lineHeight) { + this.drawPlaytime(info, rect.x, y2, rect.width); + } +}; + +Window_SavefileList.prototype.drawGameTitle = function(info, x, y, width) { + if (info.title) { + this.drawText(info.title, x, y, width); + } +}; + +Window_SavefileList.prototype.drawPartyCharacters = function(info, x, y) { + if (info.characters) { + for (var i = 0; i < info.characters.length; i++) { + var data = info.characters[i]; + this.drawCharacter(data[0], data[1], x + i * 48, y); + } + } +}; + +Window_SavefileList.prototype.drawPlaytime = function(info, x, y, width) { + if (info.playtime) { + this.drawText(info.playtime, x, y, width, 'right'); + } +}; + +Window_SavefileList.prototype.playOkSound = function() { +}; + +//----------------------------------------------------------------------------- +// Window_ShopCommand +// +// The window for selecting buy/sell on the shop screen. + +function Window_ShopCommand() { + this.initialize.apply(this, arguments); +} + +Window_ShopCommand.prototype = Object.create(Window_HorzCommand.prototype); +Window_ShopCommand.prototype.constructor = Window_ShopCommand; + +Window_ShopCommand.prototype.initialize = function(width, purchaseOnly) { + this._windowWidth = width; + this._purchaseOnly = purchaseOnly; + Window_HorzCommand.prototype.initialize.call(this, 0, 0); +}; + +Window_ShopCommand.prototype.windowWidth = function() { + return this._windowWidth; +}; + +Window_ShopCommand.prototype.maxCols = function() { + return 3; +}; + +Window_ShopCommand.prototype.makeCommandList = function() { + this.addCommand(TextManager.buy, 'buy'); + this.addCommand(TextManager.sell, 'sell', !this._purchaseOnly); + this.addCommand(TextManager.cancel, 'cancel'); +}; + +//----------------------------------------------------------------------------- +// Window_ShopBuy +// +// The window for selecting an item to buy on the shop screen. + +function Window_ShopBuy() { + this.initialize.apply(this, arguments); +} + +Window_ShopBuy.prototype = Object.create(Window_Selectable.prototype); +Window_ShopBuy.prototype.constructor = Window_ShopBuy; + +Window_ShopBuy.prototype.initialize = function(x, y, height, shopGoods) { + var width = this.windowWidth(); + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this._shopGoods = shopGoods; + this._money = 0; + this.refresh(); + this.select(0); +}; + +Window_ShopBuy.prototype.windowWidth = function() { + return 456; +}; + +Window_ShopBuy.prototype.maxItems = function() { + return this._data ? this._data.length : 1; +}; + +Window_ShopBuy.prototype.item = function() { + return this._data[this.index()]; +}; + +Window_ShopBuy.prototype.setMoney = function(money) { + this._money = money; + this.refresh(); +}; + +Window_ShopBuy.prototype.isCurrentItemEnabled = function() { + return this.isEnabled(this._data[this.index()]); +}; + +Window_ShopBuy.prototype.price = function(item) { + return this._price[this._data.indexOf(item)] || 0; +}; + +Window_ShopBuy.prototype.isEnabled = function(item) { + return (item && this.price(item) <= this._money && + !$gameParty.hasMaxItems(item)); +}; + +Window_ShopBuy.prototype.refresh = function() { + this.makeItemList(); + this.createContents(); + this.drawAllItems(); +}; + +Window_ShopBuy.prototype.makeItemList = function() { + this._data = []; + this._price = []; + this._shopGoods.forEach(function(goods) { + var item = null; + switch (goods[0]) { + case 0: + item = $dataItems[goods[1]]; + break; + case 1: + item = $dataWeapons[goods[1]]; + break; + case 2: + item = $dataArmors[goods[1]]; + break; + } + if (item) { + this._data.push(item); + this._price.push(goods[2] === 0 ? item.price : goods[3]); + } + }, this); +}; + +Window_ShopBuy.prototype.drawItem = function(index) { + var item = this._data[index]; + var rect = this.itemRect(index); + var priceWidth = 96; + rect.width -= this.textPadding(); + this.changePaintOpacity(this.isEnabled(item)); + this.drawItemName(item, rect.x, rect.y, rect.width - priceWidth); + this.drawText(this.price(item), rect.x + rect.width - priceWidth, + rect.y, priceWidth, 'right'); + this.changePaintOpacity(true); +}; + +Window_ShopBuy.prototype.setStatusWindow = function(statusWindow) { + this._statusWindow = statusWindow; + this.callUpdateHelp(); +}; + +Window_ShopBuy.prototype.updateHelp = function() { + this.setHelpWindowItem(this.item()); + if (this._statusWindow) { + this._statusWindow.setItem(this.item()); + } +}; + +//----------------------------------------------------------------------------- +// Window_ShopSell +// +// The window for selecting an item to sell on the shop screen. + +function Window_ShopSell() { + this.initialize.apply(this, arguments); +} + +Window_ShopSell.prototype = Object.create(Window_ItemList.prototype); +Window_ShopSell.prototype.constructor = Window_ShopSell; + +Window_ShopSell.prototype.initialize = function(x, y, width, height) { + Window_ItemList.prototype.initialize.call(this, x, y, width, height); +}; + +Window_ShopSell.prototype.isEnabled = function(item) { + return item && item.price > 0; +}; + +//----------------------------------------------------------------------------- +// Window_ShopNumber +// +// The window for inputting quantity of items to buy or sell on the shop +// screen. + +function Window_ShopNumber() { + this.initialize.apply(this, arguments); +} + +Window_ShopNumber.prototype = Object.create(Window_Selectable.prototype); +Window_ShopNumber.prototype.constructor = Window_ShopNumber; + +Window_ShopNumber.prototype.initialize = function(x, y, height) { + var width = this.windowWidth(); + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this._item = null; + this._max = 1; + this._price = 0; + this._number = 1; + this._currencyUnit = TextManager.currencyUnit; + this.createButtons(); +}; + +Window_ShopNumber.prototype.windowWidth = function() { + return 456; +}; + +Window_ShopNumber.prototype.number = function() { + return this._number; +}; + +Window_ShopNumber.prototype.setup = function(item, max, price) { + this._item = item; + this._max = Math.floor(max); + this._price = price; + this._number = 1; + this.placeButtons(); + this.updateButtonsVisiblity(); + this.refresh(); +}; + +Window_ShopNumber.prototype.setCurrencyUnit = function(currencyUnit) { + this._currencyUnit = currencyUnit; + this.refresh(); +}; + +Window_ShopNumber.prototype.createButtons = function() { + var bitmap = ImageManager.loadSystem('ButtonSet'); + var buttonWidth = 48; + var buttonHeight = 48; + this._buttons = []; + for (var i = 0; i < 5; i++) { + var button = new Sprite_Button(); + var x = buttonWidth * i; + var w = buttonWidth * (i === 4 ? 2 : 1); + button.bitmap = bitmap; + button.setColdFrame(x, 0, w, buttonHeight); + button.setHotFrame(x, buttonHeight, w, buttonHeight); + button.visible = false; + this._buttons.push(button); + this.addChild(button); + } + this._buttons[0].setClickHandler(this.onButtonDown2.bind(this)); + this._buttons[1].setClickHandler(this.onButtonDown.bind(this)); + this._buttons[2].setClickHandler(this.onButtonUp.bind(this)); + this._buttons[3].setClickHandler(this.onButtonUp2.bind(this)); + this._buttons[4].setClickHandler(this.onButtonOk.bind(this)); +}; + +Window_ShopNumber.prototype.placeButtons = function() { + var numButtons = this._buttons.length; + var spacing = 16; + var totalWidth = -spacing; + for (var i = 0; i < numButtons; i++) { + totalWidth += this._buttons[i].width + spacing; + } + var x = (this.width - totalWidth) / 2; + for (var j = 0; j < numButtons; j++) { + var button = this._buttons[j]; + button.x = x; + button.y = this.buttonY(); + x += button.width + spacing; + } +}; + +Window_ShopNumber.prototype.updateButtonsVisiblity = function() { + if (TouchInput.date > Input.date) { + this.showButtons(); + } else { + this.hideButtons(); + } +}; + +Window_ShopNumber.prototype.showButtons = function() { + for (var i = 0; i < this._buttons.length; i++) { + this._buttons[i].visible = true; + } +}; + +Window_ShopNumber.prototype.hideButtons = function() { + for (var i = 0; i < this._buttons.length; i++) { + this._buttons[i].visible = false; + } +}; + +Window_ShopNumber.prototype.refresh = function() { + this.contents.clear(); + this.drawItemName(this._item, 0, this.itemY()); + this.drawMultiplicationSign(); + this.drawNumber(); + this.drawTotalPrice(); +}; + +Window_ShopNumber.prototype.drawMultiplicationSign = function() { + var sign = '\u00d7'; + var width = this.textWidth(sign); + var x = this.cursorX() - width * 2; + var y = this.itemY(); + this.resetTextColor(); + this.drawText(sign, x, y, width); +}; + +Window_ShopNumber.prototype.drawNumber = function() { + var x = this.cursorX(); + var y = this.itemY(); + var width = this.cursorWidth() - this.textPadding(); + this.resetTextColor(); + this.drawText(this._number, x, y, width, 'right'); +}; + +Window_ShopNumber.prototype.drawTotalPrice = function() { + var total = this._price * this._number; + var width = this.contentsWidth() - this.textPadding(); + this.drawCurrencyValue(total, this._currencyUnit, 0, this.priceY(), width); +}; + +Window_ShopNumber.prototype.itemY = function() { + return Math.round(this.contentsHeight() / 2 - this.lineHeight() * 1.5); +}; + +Window_ShopNumber.prototype.priceY = function() { + return Math.round(this.contentsHeight() / 2 + this.lineHeight() / 2); +}; + +Window_ShopNumber.prototype.buttonY = function() { + return Math.round(this.priceY() + this.lineHeight() * 2.5); +}; + +Window_ShopNumber.prototype.cursorWidth = function() { + var digitWidth = this.textWidth('0'); + return this.maxDigits() * digitWidth + this.textPadding() * 2; +}; + +Window_ShopNumber.prototype.cursorX = function() { + return this.contentsWidth() - this.cursorWidth() - this.textPadding(); +}; + +Window_ShopNumber.prototype.maxDigits = function() { + return 2; +}; + +Window_ShopNumber.prototype.update = function() { + Window_Selectable.prototype.update.call(this); + this.processNumberChange(); +}; + +Window_ShopNumber.prototype.isOkTriggered = function() { + return Input.isTriggered('ok'); +}; + +Window_ShopNumber.prototype.playOkSound = function() { +}; + +Window_ShopNumber.prototype.processNumberChange = function() { + if (this.isOpenAndActive()) { + if (Input.isRepeated('right')) { + this.changeNumber(1); + } + if (Input.isRepeated('left')) { + this.changeNumber(-1); + } + if (Input.isRepeated('up')) { + this.changeNumber(10); + } + if (Input.isRepeated('down')) { + this.changeNumber(-10); + } + } +}; + +Window_ShopNumber.prototype.changeNumber = function(amount) { + var lastNumber = this._number; + this._number = (this._number + amount).clamp(1, this._max); + if (this._number !== lastNumber) { + SoundManager.playCursor(); + this.refresh(); + } +}; + +Window_ShopNumber.prototype.updateCursor = function() { + this.setCursorRect(this.cursorX(), this.itemY(), + this.cursorWidth(), this.lineHeight()); +}; + +Window_ShopNumber.prototype.onButtonUp = function() { + this.changeNumber(1); +}; + +Window_ShopNumber.prototype.onButtonUp2 = function() { + this.changeNumber(10); +}; + +Window_ShopNumber.prototype.onButtonDown = function() { + this.changeNumber(-1); +}; + +Window_ShopNumber.prototype.onButtonDown2 = function() { + this.changeNumber(-10); +}; + +Window_ShopNumber.prototype.onButtonOk = function() { + this.processOk(); +}; + +//----------------------------------------------------------------------------- +// Window_ShopStatus +// +// The window for displaying number of items in possession and the actor's +// equipment on the shop screen. + +function Window_ShopStatus() { + this.initialize.apply(this, arguments); +} + +Window_ShopStatus.prototype = Object.create(Window_Base.prototype); +Window_ShopStatus.prototype.constructor = Window_ShopStatus; + +Window_ShopStatus.prototype.initialize = function(x, y, width, height) { + Window_Base.prototype.initialize.call(this, x, y, width, height); + this._item = null; + this._pageIndex = 0; + this.refresh(); +}; + +Window_ShopStatus.prototype.refresh = function() { + this.contents.clear(); + if (this._item) { + var x = this.textPadding(); + this.drawPossession(x, 0); + if (this.isEquipItem()) { + this.drawEquipInfo(x, this.lineHeight() * 2); + } + } +}; + +Window_ShopStatus.prototype.setItem = function(item) { + this._item = item; + this.refresh(); +}; + +Window_ShopStatus.prototype.isEquipItem = function() { + return DataManager.isWeapon(this._item) || DataManager.isArmor(this._item); +}; + +Window_ShopStatus.prototype.drawPossession = function(x, y) { + var width = this.contents.width - this.textPadding() - x; + var possessionWidth = this.textWidth('0000'); + this.changeTextColor(this.systemColor()); + this.drawText(TextManager.possession, x, y, width - possessionWidth); + this.resetTextColor(); + this.drawText($gameParty.numItems(this._item), x, y, width, 'right'); +}; + +Window_ShopStatus.prototype.drawEquipInfo = function(x, y) { + var members = this.statusMembers(); + for (var i = 0; i < members.length; i++) { + this.drawActorEquipInfo(x, y + this.lineHeight() * (i * 2.4), members[i]); + } +}; + +Window_ShopStatus.prototype.statusMembers = function() { + var start = this._pageIndex * this.pageSize(); + var end = start + this.pageSize(); + return $gameParty.members().slice(start, end); +}; + +Window_ShopStatus.prototype.pageSize = function() { + return 4; +}; + +Window_ShopStatus.prototype.maxPages = function() { + return Math.floor(($gameParty.size() + this.pageSize() - 1) / this.pageSize()); +}; + +Window_ShopStatus.prototype.drawActorEquipInfo = function(x, y, actor) { + var enabled = actor.canEquip(this._item); + this.changePaintOpacity(enabled); + this.resetTextColor(); + this.drawText(actor.name(), x, y, 168); + var item1 = this.currentEquippedItem(actor, this._item.etypeId); + if (enabled) { + this.drawActorParamChange(x, y, actor, item1); + } + this.drawItemName(item1, x, y + this.lineHeight()); + this.changePaintOpacity(true); +}; + +Window_ShopStatus.prototype.drawActorParamChange = function(x, y, actor, item1) { + var width = this.contents.width - this.textPadding() - x; + var paramId = this.paramId(); + var change = this._item.params[paramId] - (item1 ? item1.params[paramId] : 0); + this.changeTextColor(this.paramchangeTextColor(change)); + this.drawText((change > 0 ? '+' : '') + change, x, y, width, 'right'); +}; + +Window_ShopStatus.prototype.paramId = function() { + return DataManager.isWeapon(this._item) ? 2 : 3; +}; + +Window_ShopStatus.prototype.currentEquippedItem = function(actor, etypeId) { + var list = []; + var equips = actor.equips(); + var slots = actor.equipSlots(); + for (var i = 0; i < slots.length; i++) { + if (slots[i] === etypeId) { + list.push(equips[i]); + } + } + var paramId = this.paramId(); + var worstParam = Number.MAX_VALUE; + var worstItem = null; + for (var j = 0; j < list.length; j++) { + if (list[j] && list[j].params[paramId] < worstParam) { + worstParam = list[j].params[paramId]; + worstItem = list[j]; + } + } + return worstItem; +}; + +Window_ShopStatus.prototype.update = function() { + Window_Base.prototype.update.call(this); + this.updatePage(); +}; + +Window_ShopStatus.prototype.updatePage = function() { + if (this.isPageChangeEnabled() && this.isPageChangeRequested()) { + this.changePage(); + } +}; + +Window_ShopStatus.prototype.isPageChangeEnabled = function() { + return this.visible && this.maxPages() >= 2; +}; + +Window_ShopStatus.prototype.isPageChangeRequested = function() { + if (Input.isTriggered('shift')) { + return true; + } + if (TouchInput.isTriggered() && this.isTouchedInsideFrame()) { + return true; + } + return false; +}; + +Window_ShopStatus.prototype.isTouchedInsideFrame = function() { + var x = this.canvasToLocalX(TouchInput.x); + var y = this.canvasToLocalY(TouchInput.y); + return x >= 0 && y >= 0 && x < this.width && y < this.height; +}; + +Window_ShopStatus.prototype.changePage = function() { + this._pageIndex = (this._pageIndex + 1) % this.maxPages(); + this.refresh(); + SoundManager.playCursor(); +}; + +//----------------------------------------------------------------------------- +// Window_NameEdit +// +// The window for editing an actor's name on the name input screen. + +function Window_NameEdit() { + this.initialize.apply(this, arguments); +} + +Window_NameEdit.prototype = Object.create(Window_Base.prototype); +Window_NameEdit.prototype.constructor = Window_NameEdit; + +Window_NameEdit.prototype.initialize = function(actor, maxLength) { + var width = this.windowWidth(); + var height = this.windowHeight(); + var x = (Graphics.boxWidth - width) / 2; + var y = (Graphics.boxHeight - (height + this.fittingHeight(9) + 8)) / 2; + Window_Base.prototype.initialize.call(this, x, y, width, height); + this._actor = actor; + this._name = actor.name().slice(0, this._maxLength); + this._index = this._name.length; + this._maxLength = maxLength; + this._defaultName = this._name; + this.deactivate(); + this.refresh(); + ImageManager.loadFace(actor.faceName()); +}; + +Window_NameEdit.prototype.windowWidth = function() { + return 480; +}; + +Window_NameEdit.prototype.windowHeight = function() { + return this.fittingHeight(4); +}; + +Window_NameEdit.prototype.name = function() { + return this._name; +}; + +Window_NameEdit.prototype.restoreDefault = function() { + this._name = this._defaultName; + this._index = this._name.length; + this.refresh(); + return this._name.length > 0; +}; + +Window_NameEdit.prototype.add = function(ch) { + if (this._index < this._maxLength) { + this._name += ch; + this._index++; + this.refresh(); + return true; + } else { + return false; + } +}; + +Window_NameEdit.prototype.back = function() { + if (this._index > 0) { + this._index--; + this._name = this._name.slice(0, this._index); + this.refresh(); + return true; + } else { + return false; + } +}; + +Window_NameEdit.prototype.faceWidth = function() { + return 144; +}; + +Window_NameEdit.prototype.charWidth = function() { + var text = $gameSystem.isJapanese() ? '\uff21' : 'A'; + return this.textWidth(text); +}; + +Window_NameEdit.prototype.left = function() { + var nameCenter = (this.contentsWidth() + this.faceWidth()) / 2; + var nameWidth = (this._maxLength + 1) * this.charWidth(); + return Math.min(nameCenter - nameWidth / 2, this.contentsWidth() - nameWidth); +}; + +Window_NameEdit.prototype.itemRect = function(index) { + return { + x: this.left() + index * this.charWidth(), + y: 54, + width: this.charWidth(), + height: this.lineHeight() + }; +}; + +Window_NameEdit.prototype.underlineRect = function(index) { + var rect = this.itemRect(index); + rect.x++; + rect.y += rect.height - 4; + rect.width -= 2; + rect.height = 2; + return rect; +}; + +Window_NameEdit.prototype.underlineColor = function() { + return this.normalColor(); +}; + +Window_NameEdit.prototype.drawUnderline = function(index) { + var rect = this.underlineRect(index); + var color = this.underlineColor(); + this.contents.paintOpacity = 48; + this.contents.fillRect(rect.x, rect.y, rect.width, rect.height, color); + this.contents.paintOpacity = 255; +}; + +Window_NameEdit.prototype.drawChar = function(index) { + var rect = this.itemRect(index); + this.resetTextColor(); + this.drawText(this._name[index] || '', rect.x, rect.y); +}; + +Window_NameEdit.prototype.refresh = function() { + this.contents.clear(); + this.drawActorFace(this._actor, 0, 0); + for (var i = 0; i < this._maxLength; i++) { + this.drawUnderline(i); + } + for (var j = 0; j < this._name.length; j++) { + this.drawChar(j); + } + var rect = this.itemRect(this._index); + this.setCursorRect(rect.x, rect.y, rect.width, rect.height); +}; + +//----------------------------------------------------------------------------- +// Window_NameInput +// +// The window for selecting text characters on the name input screen. + +function Window_NameInput() { + this.initialize.apply(this, arguments); +} + +Window_NameInput.prototype = Object.create(Window_Selectable.prototype); +Window_NameInput.prototype.constructor = Window_NameInput; +Window_NameInput.LATIN1 = + [ 'A','B','C','D','E', 'a','b','c','d','e', + 'F','G','H','I','J', 'f','g','h','i','j', + 'K','L','M','N','O', 'k','l','m','n','o', + 'P','Q','R','S','T', 'p','q','r','s','t', + 'U','V','W','X','Y', 'u','v','w','x','y', + 'Z','[',']','^','_', 'z','{','}','|','~', + '0','1','2','3','4', '!','#','$','%','&', + '5','6','7','8','9', '(',')','*','+','-', + '/','=','@','<','>', ':',';',' ','Page','OK' ]; +Window_NameInput.LATIN2 = + [ 'Á','É','Í','Ó','Ú', 'á','é','í','ó','ú', + 'À','È','Ì','Ò','Ù', 'à','è','ì','ò','ù', + 'Â','Ê','Î','Ô','Û', 'â','ê','î','ô','û', + 'Ä','Ë','Ï','Ö','Ü', 'ä','ë','ï','ö','ü', + 'Ā','Ē','Ī','Ō','Ū', 'ā','ē','ī','ō','ū', + 'Ã','Å','Æ','Ç','Ð', 'ã','å','æ','ç','ð', + 'Ñ','Õ','Ø','Š','Ŵ', 'ñ','õ','ø','š','ŵ', + 'Ý','Ŷ','Ÿ','Ž','Þ', 'ý','ÿ','ŷ','ž','þ', + 'IJ','Œ','ij','œ','ß', '«','»',' ','Page','OK' ]; +Window_NameInput.RUSSIA = + [ 'А','Б','В','Г','Д', 'а','б','в','г','д', + 'Е','Ё','Ж','З','И', 'е','ё','ж','з','и', + 'Й','К','Л','М','Н', 'й','к','л','м','н', + 'О','П','Р','С','Т', 'о','п','р','с','т', + 'У','Ф','Х','Ц','Ч', 'у','ф','х','ц','ч', + 'Ш','Щ','Ъ','Ы','Ь', 'ш','щ','ъ','ы','ь', + 'Э','Ю','Я','^','_', 'э','ю','я','%','&', + '0','1','2','3','4', '(',')','*','+','-', + '5','6','7','8','9', ':',';',' ','','OK' ]; +Window_NameInput.JAPAN1 = + [ 'あ','い','う','え','お', 'が','ぎ','ぐ','げ','ご', + 'か','き','く','け','こ', 'ざ','じ','ず','ぜ','ぞ', + 'さ','し','す','せ','そ', 'だ','ぢ','づ','で','ど', + 'た','ち','つ','て','と', 'ば','び','ぶ','べ','ぼ', + 'な','に','ぬ','ね','の', 'ぱ','ぴ','ぷ','ぺ','ぽ', + 'は','ひ','ふ','へ','ほ', 'ぁ','ぃ','ぅ','ぇ','ぉ', + 'ま','み','む','め','も', 'っ','ゃ','ゅ','ょ','ゎ', + 'や','ゆ','よ','わ','ん', 'ー','~','・','=','☆', + 'ら','り','る','れ','ろ', 'ゔ','を',' ','カナ','決定' ]; +Window_NameInput.JAPAN2 = + [ 'ア','イ','ウ','エ','オ', 'ガ','ギ','グ','ゲ','ゴ', + 'カ','キ','ク','ケ','コ', 'ザ','ジ','ズ','ゼ','ゾ', + 'サ','シ','ス','セ','ソ', 'ダ','ヂ','ヅ','デ','ド', + 'タ','チ','ツ','テ','ト', 'バ','ビ','ブ','ベ','ボ', + 'ナ','ニ','ヌ','ネ','ノ', 'パ','ピ','プ','ペ','ポ', + 'ハ','ヒ','フ','ヘ','ホ', 'ァ','ィ','ゥ','ェ','ォ', + 'マ','ミ','ム','メ','モ', 'ッ','ャ','ュ','ョ','ヮ', + 'ヤ','ユ','ヨ','ワ','ン', 'ー','~','・','=','☆', + 'ラ','リ','ル','レ','ロ', 'ヴ','ヲ',' ','英数','決定' ]; +Window_NameInput.JAPAN3 = + [ 'A','B','C','D','E', 'a','b','c','d','e', + 'F','G','H','I','J', 'f','g','h','i','j', + 'K','L','M','N','O', 'k','l','m','n','o', + 'P','Q','R','S','T', 'p','q','r','s','t', + 'U','V','W','X','Y', 'u','v','w','x','y', + 'Z','[',']','^','_', 'z','{','}','|','~', + '0','1','2','3','4', '!','#','$','%','&', + '5','6','7','8','9', '(',')','*','+','-', + '/','=','@','<','>', ':',';',' ','かな','決定' ]; + +Window_NameInput.prototype.initialize = function(editWindow) { + var x = editWindow.x; + var y = editWindow.y + editWindow.height + 8; + var width = editWindow.width; + var height = this.windowHeight(); + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this._editWindow = editWindow; + this._page = 0; + this._index = 0; + this.refresh(); + this.updateCursor(); + this.activate(); +}; + +Window_NameInput.prototype.windowHeight = function() { + return this.fittingHeight(9); +}; + +Window_NameInput.prototype.table = function() { + if ($gameSystem.isJapanese()) { + return [Window_NameInput.JAPAN1, + Window_NameInput.JAPAN2, + Window_NameInput.JAPAN3]; + } else if ($gameSystem.isRussian()) { + return [Window_NameInput.RUSSIA]; + } else { + return [Window_NameInput.LATIN1, + Window_NameInput.LATIN2]; + } +}; + +Window_NameInput.prototype.maxCols = function() { + return 10; +}; + +Window_NameInput.prototype.maxItems = function() { + return 90; +}; + +Window_NameInput.prototype.character = function() { + return this._index < 88 ? this.table()[this._page][this._index] : ''; +}; + +Window_NameInput.prototype.isPageChange = function() { + return this._index === 88; +}; + +Window_NameInput.prototype.isOk = function() { + return this._index === 89; +}; + +Window_NameInput.prototype.itemRect = function(index) { + return { + x: index % 10 * 42 + Math.floor(index % 10 / 5) * 24, + y: Math.floor(index / 10) * this.lineHeight(), + width: 42, + height: this.lineHeight() + }; +}; + +Window_NameInput.prototype.refresh = function() { + var table = this.table(); + this.contents.clear(); + this.resetTextColor(); + for (var i = 0; i < 90; i++) { + var rect = this.itemRect(i); + rect.x += 3; + rect.width -= 6; + this.drawText(table[this._page][i], rect.x, rect.y, rect.width, 'center'); + } +}; + +Window_NameInput.prototype.updateCursor = function() { + var rect = this.itemRect(this._index); + this.setCursorRect(rect.x, rect.y, rect.width, rect.height); +}; + +Window_NameInput.prototype.isCursorMovable = function() { + return this.active; +}; + +Window_NameInput.prototype.cursorDown = function(wrap) { + if (this._index < 80 || wrap) { + this._index = (this._index + 10) % 90; + } +}; + +Window_NameInput.prototype.cursorUp = function(wrap) { + if (this._index >= 10 || wrap) { + this._index = (this._index + 80) % 90; + } +}; + +Window_NameInput.prototype.cursorRight = function(wrap) { + if (this._index % 10 < 9) { + this._index++; + } else if (wrap) { + this._index -= 9; + } +}; + +Window_NameInput.prototype.cursorLeft = function(wrap) { + if (this._index % 10 > 0) { + this._index--; + } else if (wrap) { + this._index += 9; + } +}; + +Window_NameInput.prototype.cursorPagedown = function() { + this._page = (this._page + 1) % this.table().length; + this.refresh(); +}; + +Window_NameInput.prototype.cursorPageup = function() { + this._page = (this._page + this.table().length - 1) % this.table().length; + this.refresh(); +}; + +Window_NameInput.prototype.processCursorMove = function() { + var lastPage = this._page; + Window_Selectable.prototype.processCursorMove.call(this); + this.updateCursor(); + if (this._page !== lastPage) { + SoundManager.playCursor(); + } +}; + +Window_NameInput.prototype.processHandling = function() { + if (this.isOpen() && this.active) { + if (Input.isTriggered('shift')) { + this.processJump(); + } + if (Input.isRepeated('cancel')) { + this.processBack(); + } + if (Input.isRepeated('ok')) { + this.processOk(); + } + } +}; + +Window_NameInput.prototype.isCancelEnabled = function() { + return true; +}; + +Window_NameInput.prototype.processCancel = function() { + this.processBack(); +}; + +Window_NameInput.prototype.processJump = function() { + if (this._index !== 89) { + this._index = 89; + SoundManager.playCursor(); + } +}; + +Window_NameInput.prototype.processBack = function() { + if (this._editWindow.back()) { + SoundManager.playCancel(); + } +}; + +Window_NameInput.prototype.processOk = function() { + if (this.character()) { + this.onNameAdd(); + } else if (this.isPageChange()) { + SoundManager.playOk(); + this.cursorPagedown(); + } else if (this.isOk()) { + this.onNameOk(); + } +}; + +Window_NameInput.prototype.onNameAdd = function() { + if (this._editWindow.add(this.character())) { + SoundManager.playOk(); + } else { + SoundManager.playBuzzer(); + } +}; + +Window_NameInput.prototype.onNameOk = function() { + if (this._editWindow.name() === '') { + if (this._editWindow.restoreDefault()) { + SoundManager.playOk(); + } else { + SoundManager.playBuzzer(); + } + } else { + SoundManager.playOk(); + this.callOkHandler(); + } +}; + +//----------------------------------------------------------------------------- +// Window_ChoiceList +// +// The window used for the event command [Show Choices]. + +function Window_ChoiceList() { + this.initialize.apply(this, arguments); +} + +Window_ChoiceList.prototype = Object.create(Window_Command.prototype); +Window_ChoiceList.prototype.constructor = Window_ChoiceList; + +Window_ChoiceList.prototype.initialize = function(messageWindow) { + this._messageWindow = messageWindow; + Window_Command.prototype.initialize.call(this, 0, 0); + this.openness = 0; + this.deactivate(); + this._background = 0; +}; + +Window_ChoiceList.prototype.start = function() { + this.updatePlacement(); + this.updateBackground(); + this.refresh(); + this.selectDefault(); + this.open(); + this.activate(); +}; + +Window_ChoiceList.prototype.selectDefault = function() { + this.select($gameMessage.choiceDefaultType()); +}; + +Window_ChoiceList.prototype.updatePlacement = function() { + var positionType = $gameMessage.choicePositionType(); + var messageY = this._messageWindow.y; + this.width = this.windowWidth(); + this.height = this.windowHeight(); + switch (positionType) { + case 0: + this.x = 0; + break; + case 1: + this.x = (Graphics.boxWidth - this.width) / 2; + break; + case 2: + this.x = Graphics.boxWidth - this.width; + break; + } + if (messageY >= Graphics.boxHeight / 2) { + this.y = messageY - this.height; + } else { + this.y = messageY + this._messageWindow.height; + } +}; + +Window_ChoiceList.prototype.updateBackground = function() { + this._background = $gameMessage.choiceBackground(); + this.setBackgroundType(this._background); +}; + +Window_ChoiceList.prototype.windowWidth = function() { + var width = this.maxChoiceWidth() + this.padding * 2; + return Math.min(width, Graphics.boxWidth); +}; + +Window_ChoiceList.prototype.numVisibleRows = function() { + var messageY = this._messageWindow.y; + var messageHeight = this._messageWindow.height; + var centerY = Graphics.boxHeight / 2; + var choices = $gameMessage.choices(); + var numLines = choices.length; + var maxLines = 8; + if (messageY < centerY && messageY + messageHeight > centerY) { + maxLines = 4; + } + if (numLines > maxLines) { + numLines = maxLines; + } + return numLines; +}; + +Window_ChoiceList.prototype.maxChoiceWidth = function() { + var maxWidth = 96; + var choices = $gameMessage.choices(); + for (var i = 0; i < choices.length; i++) { + var choiceWidth = this.textWidthEx(choices[i]) + this.textPadding() * 2; + if (maxWidth < choiceWidth) { + maxWidth = choiceWidth; + } + } + return maxWidth; +}; + +Window_ChoiceList.prototype.textWidthEx = function(text) { + return this.drawTextEx(text, 0, this.contents.height); +}; + +Window_ChoiceList.prototype.contentsHeight = function() { + return this.maxItems() * this.itemHeight(); +}; + +Window_ChoiceList.prototype.makeCommandList = function() { + var choices = $gameMessage.choices(); + for (var i = 0; i < choices.length; i++) { + this.addCommand(choices[i], 'choice'); + } +}; + +Window_ChoiceList.prototype.drawItem = function(index) { + var rect = this.itemRectForText(index); + this.drawTextEx(this.commandName(index), rect.x, rect.y); +}; + +Window_ChoiceList.prototype.isCancelEnabled = function() { + return $gameMessage.choiceCancelType() !== -1; +}; + +Window_ChoiceList.prototype.isOkTriggered = function() { + return Input.isTriggered('ok'); +}; + +Window_ChoiceList.prototype.callOkHandler = function() { + $gameMessage.onChoice(this.index()); + this._messageWindow.terminateMessage(); + this.close(); +}; + +Window_ChoiceList.prototype.callCancelHandler = function() { + $gameMessage.onChoice($gameMessage.choiceCancelType()); + this._messageWindow.terminateMessage(); + this.close(); +}; + +//----------------------------------------------------------------------------- +// Window_NumberInput +// +// The window used for the event command [Input Number]. + +function Window_NumberInput() { + this.initialize.apply(this, arguments); +} + +Window_NumberInput.prototype = Object.create(Window_Selectable.prototype); +Window_NumberInput.prototype.constructor = Window_NumberInput; + +Window_NumberInput.prototype.initialize = function(messageWindow) { + this._messageWindow = messageWindow; + Window_Selectable.prototype.initialize.call(this, 0, 0, 0, 0); + this._number = 0; + this._maxDigits = 1; + this.openness = 0; + this.createButtons(); + this.deactivate(); +}; + +Window_NumberInput.prototype.start = function() { + this._maxDigits = $gameMessage.numInputMaxDigits(); + this._number = $gameVariables.value($gameMessage.numInputVariableId()); + this._number = this._number.clamp(0, Math.pow(10, this._maxDigits) - 1); + this.updatePlacement(); + this.placeButtons(); + this.updateButtonsVisiblity(); + this.createContents(); + this.refresh(); + this.open(); + this.activate(); + this.select(0); +}; + +Window_NumberInput.prototype.updatePlacement = function() { + var messageY = this._messageWindow.y; + var spacing = 8; + this.width = this.windowWidth(); + this.height = this.windowHeight(); + this.x = (Graphics.boxWidth - this.width) / 2; + if (messageY >= Graphics.boxHeight / 2) { + this.y = messageY - this.height - spacing; + } else { + this.y = messageY + this._messageWindow.height + spacing; + } +}; + +Window_NumberInput.prototype.windowWidth = function() { + return this.maxCols() * this.itemWidth() + this.padding * 2; +}; + +Window_NumberInput.prototype.windowHeight = function() { + return this.fittingHeight(1); +}; + +Window_NumberInput.prototype.maxCols = function() { + return this._maxDigits; +}; + +Window_NumberInput.prototype.maxItems = function() { + return this._maxDigits; +}; + +Window_NumberInput.prototype.spacing = function() { + return 0; +}; + +Window_NumberInput.prototype.itemWidth = function() { + return 32; +}; + +Window_NumberInput.prototype.createButtons = function() { + var bitmap = ImageManager.loadSystem('ButtonSet'); + var buttonWidth = 48; + var buttonHeight = 48; + this._buttons = []; + for (var i = 0; i < 3; i++) { + var button = new Sprite_Button(); + var x = buttonWidth * [1, 2, 4][i]; + var w = buttonWidth * (i === 2 ? 2 : 1); + button.bitmap = bitmap; + button.setColdFrame(x, 0, w, buttonHeight); + button.setHotFrame(x, buttonHeight, w, buttonHeight); + button.visible = false; + this._buttons.push(button); + this.addChild(button); + } + this._buttons[0].setClickHandler(this.onButtonDown.bind(this)); + this._buttons[1].setClickHandler(this.onButtonUp.bind(this)); + this._buttons[2].setClickHandler(this.onButtonOk.bind(this)); +}; + +Window_NumberInput.prototype.placeButtons = function() { + var numButtons = this._buttons.length; + var spacing = 16; + var totalWidth = -spacing; + for (var i = 0; i < numButtons; i++) { + totalWidth += this._buttons[i].width + spacing; + } + var x = (this.width - totalWidth) / 2; + for (var j = 0; j < numButtons; j++) { + var button = this._buttons[j]; + button.x = x; + button.y = this.buttonY(); + x += button.width + spacing; + } +}; + +Window_NumberInput.prototype.updateButtonsVisiblity = function() { + if (TouchInput.date > Input.date) { + this.showButtons(); + } else { + this.hideButtons(); + } +}; + +Window_NumberInput.prototype.showButtons = function() { + for (var i = 0; i < this._buttons.length; i++) { + this._buttons[i].visible = true; + } +}; + +Window_NumberInput.prototype.hideButtons = function() { + for (var i = 0; i < this._buttons.length; i++) { + this._buttons[i].visible = false; + } +}; + +Window_NumberInput.prototype.buttonY = function() { + var spacing = 8; + if (this._messageWindow.y >= Graphics.boxHeight / 2) { + return 0 - this._buttons[0].height - spacing; + } else { + return this.height + spacing; + } +}; + +Window_NumberInput.prototype.update = function() { + Window_Selectable.prototype.update.call(this); + this.processDigitChange(); +}; + +Window_NumberInput.prototype.processDigitChange = function() { + if (this.isOpenAndActive()) { + if (Input.isRepeated('up')) { + this.changeDigit(true); + } else if (Input.isRepeated('down')) { + this.changeDigit(false); + } + } +}; + +Window_NumberInput.prototype.changeDigit = function(up) { + var index = this.index(); + var place = Math.pow(10, this._maxDigits - 1 - index); + var n = Math.floor(this._number / place) % 10; + this._number -= n * place; + if (up) { + n = (n + 1) % 10; + } else { + n = (n + 9) % 10; + } + this._number += n * place; + this.refresh(); + SoundManager.playCursor(); +}; + +Window_NumberInput.prototype.isTouchOkEnabled = function() { + return false; +}; + +Window_NumberInput.prototype.isOkEnabled = function() { + return true; +}; + +Window_NumberInput.prototype.isCancelEnabled = function() { + return false; +}; + +Window_NumberInput.prototype.isOkTriggered = function() { + return Input.isTriggered('ok'); +}; + +Window_NumberInput.prototype.processOk = function() { + SoundManager.playOk(); + $gameVariables.setValue($gameMessage.numInputVariableId(), this._number); + this._messageWindow.terminateMessage(); + this.updateInputData(); + this.deactivate(); + this.close(); +}; + +Window_NumberInput.prototype.drawItem = function(index) { + var rect = this.itemRect(index); + var align = 'center'; + var s = this._number.padZero(this._maxDigits); + var c = s.slice(index, index + 1); + this.resetTextColor(); + this.drawText(c, rect.x, rect.y, rect.width, align); +}; + +Window_NumberInput.prototype.onButtonUp = function() { + this.changeDigit(true); +}; + +Window_NumberInput.prototype.onButtonDown = function() { + this.changeDigit(false); +}; + +Window_NumberInput.prototype.onButtonOk = function() { + this.processOk(); + this.hideButtons(); +}; + +//----------------------------------------------------------------------------- +// Window_EventItem +// +// The window used for the event command [Select Item]. + +function Window_EventItem() { + this.initialize.apply(this, arguments); +} + +Window_EventItem.prototype = Object.create(Window_ItemList.prototype); +Window_EventItem.prototype.constructor = Window_EventItem; + +Window_EventItem.prototype.initialize = function(messageWindow) { + this._messageWindow = messageWindow; + var width = Graphics.boxWidth; + var height = this.windowHeight(); + Window_ItemList.prototype.initialize.call(this, 0, 0, width, height); + this.openness = 0; + this.deactivate(); + this.setHandler('ok', this.onOk.bind(this)); + this.setHandler('cancel', this.onCancel.bind(this)); +}; + +Window_EventItem.prototype.windowHeight = function() { + return this.fittingHeight(this.numVisibleRows()); +}; + +Window_EventItem.prototype.numVisibleRows = function() { + return 4; +}; + +Window_EventItem.prototype.start = function() { + this.refresh(); + this.updatePlacement(); + this.select(0); + this.open(); + this.activate(); +}; + +Window_EventItem.prototype.updatePlacement = function() { + if (this._messageWindow.y >= Graphics.boxHeight / 2) { + this.y = 0; + } else { + this.y = Graphics.boxHeight - this.height; + } +}; + +Window_EventItem.prototype.includes = function(item) { + var itypeId = $gameMessage.itemChoiceItypeId(); + return DataManager.isItem(item) && item.itypeId === itypeId; +}; + +Window_EventItem.prototype.isEnabled = function(item) { + return true; +}; + +Window_EventItem.prototype.onOk = function() { + var item = this.item(); + var itemId = item ? item.id : 0; + $gameVariables.setValue($gameMessage.itemChoiceVariableId(), itemId); + this._messageWindow.terminateMessage(); + this.close(); +}; + +Window_EventItem.prototype.onCancel = function() { + $gameVariables.setValue($gameMessage.itemChoiceVariableId(), 0); + this._messageWindow.terminateMessage(); + this.close(); +}; + +//----------------------------------------------------------------------------- +// Window_Message +// +// The window for displaying text messages. + +function Window_Message() { + this.initialize.apply(this, arguments); +} + +Window_Message.prototype = Object.create(Window_Base.prototype); +Window_Message.prototype.constructor = Window_Message; + +Window_Message.prototype.initialize = function() { + var width = this.windowWidth(); + var height = this.windowHeight(); + var x = (Graphics.boxWidth - width) / 2; + Window_Base.prototype.initialize.call(this, x, 0, width, height); + this.openness = 0; + this.initMembers(); + this.createSubWindows(); + this.updatePlacement(); +}; + +Window_Message.prototype.initMembers = function() { + this._background = 0; + this._positionType = 2; + this._waitCount = 0; + this._faceBitmap = null; + this._textState = null; + this.clearFlags(); +}; + +Window_Message.prototype.subWindows = function() { + return [this._goldWindow, this._choiceWindow, + this._numberWindow, this._itemWindow]; +}; + +Window_Message.prototype.createSubWindows = function() { + this._goldWindow = new Window_Gold(0, 0); + this._goldWindow.x = Graphics.boxWidth - this._goldWindow.width; + this._goldWindow.openness = 0; + this._choiceWindow = new Window_ChoiceList(this); + this._numberWindow = new Window_NumberInput(this); + this._itemWindow = new Window_EventItem(this); +}; + +Window_Message.prototype.windowWidth = function() { + return Graphics.boxWidth; +}; + +Window_Message.prototype.windowHeight = function() { + return this.fittingHeight(this.numVisibleRows()); +}; + +Window_Message.prototype.clearFlags = function() { + this._showFast = false; + this._lineShowFast = false; + this._pauseSkip = false; +}; + +Window_Message.prototype.numVisibleRows = function() { + return 4; +}; + +Window_Message.prototype.update = function() { + this.checkToNotClose(); + Window_Base.prototype.update.call(this); + while (!this.isOpening() && !this.isClosing()) { + if (this.updateWait()) { + return; + } else if (this.updateLoading()) { + return; + } else if (this.updateInput()) { + return; + } else if (this.updateMessage()) { + return; + } else if (this.canStart()) { + this.startMessage(); + } else { + this.startInput(); + return; + } + } +}; + +Window_Message.prototype.checkToNotClose = function() { + if (this.isClosing() && this.isOpen()) { + if (this.doesContinue()) { + this.open(); + } + } +}; + +Window_Message.prototype.canStart = function() { + return $gameMessage.hasText() && !$gameMessage.scrollMode(); +}; + +Window_Message.prototype.startMessage = function() { + this._textState = {}; + this._textState.index = 0; + this._textState.text = this.convertEscapeCharacters($gameMessage.allText()); + this.newPage(this._textState); + this.updatePlacement(); + this.updateBackground(); + this.open(); +}; + +Window_Message.prototype.updatePlacement = function() { + this._positionType = $gameMessage.positionType(); + this.y = this._positionType * (Graphics.boxHeight - this.height) / 2; + this._goldWindow.y = this.y > 0 ? 0 : Graphics.boxHeight - this._goldWindow.height; +}; + +Window_Message.prototype.updateBackground = function() { + this._background = $gameMessage.background(); + this.setBackgroundType(this._background); +}; + +Window_Message.prototype.terminateMessage = function() { + this.close(); + this._goldWindow.close(); + $gameMessage.clear(); +}; + +Window_Message.prototype.updateWait = function() { + if (this._waitCount > 0) { + this._waitCount--; + return true; + } else { + return false; + } +}; + +Window_Message.prototype.updateLoading = function() { + if (this._faceBitmap) { + if (ImageManager.isReady()) { + this.drawMessageFace(); + this._faceBitmap = null; + return false; + } else { + return true; + } + } else { + return false; + } +}; + +Window_Message.prototype.updateInput = function() { + if (this.isAnySubWindowActive()) { + return true; + } + if (this.pause) { + if (this.isTriggered()) { + Input.update(); + this.pause = false; + if (!this._textState) { + this.terminateMessage(); + } + } + return true; + } + return false; +}; + +Window_Message.prototype.isAnySubWindowActive = function() { + return (this._choiceWindow.active || + this._numberWindow.active || + this._itemWindow.active); +}; + +Window_Message.prototype.updateMessage = function() { + if (this._textState) { + while (!this.isEndOfText(this._textState)) { + if (this.needsNewPage(this._textState)) { + this.newPage(this._textState); + } + this.updateShowFast(); + this.processCharacter(this._textState); + if (!this._showFast && !this._lineShowFast) { + break; + } + if (this.pause || this._waitCount > 0) { + break; + } + } + if (this.isEndOfText(this._textState)) { + this.onEndOfText(); + } + return true; + } else { + return false; + } +}; + +Window_Message.prototype.onEndOfText = function() { + if (!this.startInput()) { + if (!this._pauseSkip) { + this.startPause(); + } else { + this.terminateMessage(); + } + } + this._textState = null; +}; + +Window_Message.prototype.startInput = function() { + if ($gameMessage.isChoice()) { + this._choiceWindow.start(); + return true; + } else if ($gameMessage.isNumberInput()) { + this._numberWindow.start(); + return true; + } else if ($gameMessage.isItemChoice()) { + this._itemWindow.start(); + return true; + } else { + return false; + } +}; + +Window_Message.prototype.isTriggered = function() { + return (Input.isRepeated('ok') || Input.isRepeated('cancel') || + TouchInput.isRepeated()); +}; + +Window_Message.prototype.doesContinue = function() { + return ($gameMessage.hasText() && !$gameMessage.scrollMode() && + !this.areSettingsChanged()); +}; + +Window_Message.prototype.areSettingsChanged = function() { + return (this._background !== $gameMessage.background() || + this._positionType !== $gameMessage.positionType()); +}; + +Window_Message.prototype.updateShowFast = function() { + if (this.isTriggered()) { + this._showFast = true; + } +}; + +Window_Message.prototype.newPage = function(textState) { + this.contents.clear(); + this.resetFontSettings(); + this.clearFlags(); + this.loadMessageFace(); + textState.x = this.newLineX(); + textState.y = 0; + textState.left = this.newLineX(); + textState.height = this.calcTextHeight(textState, false); +}; + +Window_Message.prototype.loadMessageFace = function() { + this._faceBitmap = ImageManager.loadFace($gameMessage.faceName()); +}; + +Window_Message.prototype.drawMessageFace = function() { + this.drawFace($gameMessage.faceName(), $gameMessage.faceIndex(), 0, 0); +}; + +Window_Message.prototype.newLineX = function() { + return $gameMessage.faceName() === '' ? 0 : 168; +}; + +Window_Message.prototype.processNewLine = function(textState) { + this._lineShowFast = false; + Window_Base.prototype.processNewLine.call(this, textState); + if (this.needsNewPage(textState)) { + this.startPause(); + } +}; + +Window_Message.prototype.processNewPage = function(textState) { + Window_Base.prototype.processNewPage.call(this, textState); + if (textState.text[textState.index] === '\n') { + textState.index++; + } + textState.y = this.contents.height; + this.startPause(); +}; + +Window_Message.prototype.isEndOfText = function(textState) { + return textState.index >= textState.text.length; +}; + +Window_Message.prototype.needsNewPage = function(textState) { + return (!this.isEndOfText(textState) && + textState.y + textState.height > this.contents.height); +}; + +Window_Message.prototype.processEscapeCharacter = function(code, textState) { + switch (code) { + case '$': + this._goldWindow.open(); + break; + case '.': + this.startWait(15); + break; + case '|': + this.startWait(60); + break; + case '!': + this.startPause(); + break; + case '>': + this._lineShowFast = true; + break; + case '<': + this._lineShowFast = false; + break; + case '^': + this._pauseSkip = true; + break; + default: + Window_Base.prototype.processEscapeCharacter.call(this, code, textState); + break; + } +}; + +Window_Message.prototype.startWait = function(count) { + this._waitCount = count; +}; + +Window_Message.prototype.startPause = function() { + this.startWait(10); + this.pause = true; +}; + +//----------------------------------------------------------------------------- +// Window_ScrollText +// +// The window for displaying scrolling text. No frame is displayed, but it +// is handled as a window for convenience. + +function Window_ScrollText() { + this.initialize.apply(this, arguments); +} + +Window_ScrollText.prototype = Object.create(Window_Base.prototype); +Window_ScrollText.prototype.constructor = Window_ScrollText; + +Window_ScrollText.prototype.initialize = function() { + var width = Graphics.boxWidth; + var height = Graphics.boxHeight; + Window_Base.prototype.initialize.call(this, 0, 0, width, height); + this.opacity = 0; + this.hide(); + this._text = ''; + this._allTextHeight = 0; +}; + +Window_ScrollText.prototype.update = function() { + Window_Base.prototype.update.call(this); + if ($gameMessage.scrollMode()) { + if (this._text) { + this.updateMessage(); + } + if (!this._text && $gameMessage.hasText()) { + this.startMessage(); + } + } +}; + +Window_ScrollText.prototype.startMessage = function() { + this._text = $gameMessage.allText(); + this.refresh(); + this.show(); +}; + +Window_ScrollText.prototype.refresh = function() { + var textState = { index: 0 }; + textState.text = this.convertEscapeCharacters(this._text); + this.resetFontSettings(); + this._allTextHeight = this.calcTextHeight(textState, true); + this.createContents(); + this.origin.y = -this.height; + this.drawTextEx(this._text, this.textPadding(), 1); +}; + +Window_ScrollText.prototype.contentsHeight = function() { + return Math.max(this._allTextHeight, 1); +}; + +Window_ScrollText.prototype.updateMessage = function() { + this.origin.y += this.scrollSpeed(); + if (this.origin.y >= this.contents.height) { + this.terminateMessage(); + } +}; + +Window_ScrollText.prototype.scrollSpeed = function() { + var speed = $gameMessage.scrollSpeed() / 2; + if (this.isFastForward()) { + speed *= this.fastForwardRate(); + } + return speed; +}; + +Window_ScrollText.prototype.isFastForward = function() { + if ($gameMessage.scrollNoFast()) { + return false; + } else { + return (Input.isPressed('ok') || Input.isPressed('shift') || + TouchInput.isPressed()); + } +}; + +Window_ScrollText.prototype.fastForwardRate = function() { + return 3; +}; + +Window_ScrollText.prototype.terminateMessage = function() { + this._text = null; + $gameMessage.clear(); + this.hide(); +}; + +//----------------------------------------------------------------------------- +// Window_MapName +// +// The window for displaying the map name on the map screen. + +function Window_MapName() { + this.initialize.apply(this, arguments); +} + +Window_MapName.prototype = Object.create(Window_Base.prototype); +Window_MapName.prototype.constructor = Window_MapName; + +Window_MapName.prototype.initialize = function() { + var wight = this.windowWidth(); + var height = this.windowHeight(); + Window_Base.prototype.initialize.call(this, 0, 0, wight, height); + this.opacity = 0; + this.contentsOpacity = 0; + this._showCount = 0; + this.refresh(); +}; + +Window_MapName.prototype.windowWidth = function() { + return 360; +}; + +Window_MapName.prototype.windowHeight = function() { + return this.fittingHeight(1); +}; + +Window_MapName.prototype.update = function() { + Window_Base.prototype.update.call(this); + if (this._showCount > 0 && $gameMap.isNameDisplayEnabled()) { + this.updateFadeIn(); + this._showCount--; + } else { + this.updateFadeOut(); + } +}; + +Window_MapName.prototype.updateFadeIn = function() { + this.contentsOpacity += 16; +}; + +Window_MapName.prototype.updateFadeOut = function() { + this.contentsOpacity -= 16; +}; + +Window_MapName.prototype.open = function() { + this.refresh(); + this._showCount = 150; +}; + +Window_MapName.prototype.close = function() { + this._showCount = 0; +}; + +Window_MapName.prototype.refresh = function() { + this.contents.clear(); + if ($gameMap.displayName()) { + var width = this.contentsWidth(); + this.drawBackground(0, 0, width, this.lineHeight()); + this.drawText($gameMap.displayName(), 0, 0, width, 'center'); + } +}; + +Window_MapName.prototype.drawBackground = function(x, y, width, height) { + var color1 = this.dimColor1(); + var color2 = this.dimColor2(); + this.contents.gradientFillRect(x, y, width / 2, height, color2, color1); + this.contents.gradientFillRect(x + width / 2, y, width / 2, height, color1, color2); +}; + +//----------------------------------------------------------------------------- +// Window_BattleLog +// +// The window for displaying battle progress. No frame is displayed, but it is +// handled as a window for convenience. + +function Window_BattleLog() { + this.initialize.apply(this, arguments); +} + +Window_BattleLog.prototype = Object.create(Window_Selectable.prototype); +Window_BattleLog.prototype.constructor = Window_BattleLog; + +Window_BattleLog.prototype.initialize = function() { + var width = this.windowWidth(); + var height = this.windowHeight(); + Window_Selectable.prototype.initialize.call(this, 0, 0, width, height); + this.opacity = 0; + this._lines = []; + this._methods = []; + this._waitCount = 0; + this._waitMode = ''; + this._baseLineStack = []; + this._spriteset = null; + this.createBackBitmap(); + this.createBackSprite(); + this.refresh(); +}; + +Window_BattleLog.prototype.setSpriteset = function(spriteset) { + this._spriteset = spriteset; +}; + +Window_BattleLog.prototype.windowWidth = function() { + return Graphics.boxWidth; +}; + +Window_BattleLog.prototype.windowHeight = function() { + return this.fittingHeight(this.maxLines()); +}; + +Window_BattleLog.prototype.maxLines = function() { + return 10; +}; + +Window_BattleLog.prototype.createBackBitmap = function() { + this._backBitmap = new Bitmap(this.width, this.height); +}; + +Window_BattleLog.prototype.createBackSprite = function() { + this._backSprite = new Sprite(); + this._backSprite.bitmap = this._backBitmap; + this._backSprite.y = this.y; + this.addChildToBack(this._backSprite); +}; + +Window_BattleLog.prototype.numLines = function() { + return this._lines.length; +}; + +Window_BattleLog.prototype.messageSpeed = function() { + return 16; +}; + +Window_BattleLog.prototype.isBusy = function() { + return this._waitCount > 0 || this._waitMode || this._methods.length > 0; +}; + +Window_BattleLog.prototype.update = function() { + if (!this.updateWait()) { + this.callNextMethod(); + } +}; + +Window_BattleLog.prototype.updateWait = function() { + return this.updateWaitCount() || this.updateWaitMode(); +}; + +Window_BattleLog.prototype.updateWaitCount = function() { + if (this._waitCount > 0) { + this._waitCount -= this.isFastForward() ? 3 : 1; + if (this._waitCount < 0) { + this._waitCount = 0; + } + return true; + } + return false; +}; + +Window_BattleLog.prototype.updateWaitMode = function() { + var waiting = false; + switch (this._waitMode) { + case 'effect': + waiting = this._spriteset.isEffecting(); + break; + case 'movement': + waiting = this._spriteset.isAnyoneMoving(); + break; + } + if (!waiting) { + this._waitMode = ''; + } + return waiting; +}; + +Window_BattleLog.prototype.setWaitMode = function(waitMode) { + this._waitMode = waitMode; +}; + +Window_BattleLog.prototype.callNextMethod = function() { + if (this._methods.length > 0) { + var method = this._methods.shift(); + if (method.name && this[method.name]) { + this[method.name].apply(this, method.params); + } else { + throw new Error('Method not found: ' + method.name); + } + } +}; + +Window_BattleLog.prototype.isFastForward = function() { + return (Input.isLongPressed('ok') || Input.isPressed('shift') || + TouchInput.isLongPressed()); +}; + +Window_BattleLog.prototype.push = function(methodName) { + var methodArgs = Array.prototype.slice.call(arguments, 1); + this._methods.push({ name: methodName, params: methodArgs }); +}; + +Window_BattleLog.prototype.clear = function() { + this._lines = []; + this._baseLineStack = []; + this.refresh(); +}; + +Window_BattleLog.prototype.wait = function() { + this._waitCount = this.messageSpeed(); +}; + +Window_BattleLog.prototype.waitForEffect = function() { + this.setWaitMode('effect'); +}; + +Window_BattleLog.prototype.waitForMovement = function() { + this.setWaitMode('movement'); +}; + +Window_BattleLog.prototype.addText = function(text) { + this._lines.push(text); + this.refresh(); + this.wait(); +}; + +Window_BattleLog.prototype.pushBaseLine = function() { + this._baseLineStack.push(this._lines.length); +}; + +Window_BattleLog.prototype.popBaseLine = function() { + var baseLine = this._baseLineStack.pop(); + while (this._lines.length > baseLine) { + this._lines.pop(); + } +}; + +Window_BattleLog.prototype.waitForNewLine = function() { + var baseLine = 0; + if (this._baseLineStack.length > 0) { + baseLine = this._baseLineStack[this._baseLineStack.length - 1]; + } + if (this._lines.length > baseLine) { + this.wait(); + } +}; + +Window_BattleLog.prototype.popupDamage = function(target) { + target.startDamagePopup(); +}; + +Window_BattleLog.prototype.performActionStart = function(subject, action) { + subject.performActionStart(action); +}; + +Window_BattleLog.prototype.performAction = function(subject, action) { + subject.performAction(action); +}; + +Window_BattleLog.prototype.performActionEnd = function(subject) { + subject.performActionEnd(); +}; + +Window_BattleLog.prototype.performDamage = function(target) { + target.performDamage(); +}; + +Window_BattleLog.prototype.performMiss = function(target) { + target.performMiss(); +}; + +Window_BattleLog.prototype.performRecovery = function(target) { + target.performRecovery(); +}; + +Window_BattleLog.prototype.performEvasion = function(target) { + target.performEvasion(); +}; + +Window_BattleLog.prototype.performMagicEvasion = function(target) { + target.performMagicEvasion(); +}; + +Window_BattleLog.prototype.performCounter = function(target) { + target.performCounter(); +}; + +Window_BattleLog.prototype.performReflection = function(target) { + target.performReflection(); +}; + +Window_BattleLog.prototype.performSubstitute = function(substitute, target) { + substitute.performSubstitute(target); +}; + +Window_BattleLog.prototype.performCollapse = function(target) { + target.performCollapse(); +}; + +Window_BattleLog.prototype.showAnimation = function(subject, targets, animationId) { + if (animationId < 0) { + this.showAttackAnimation(subject, targets); + } else { + this.showNormalAnimation(targets, animationId); + } +}; + +Window_BattleLog.prototype.showAttackAnimation = function(subject, targets) { + if (subject.isActor()) { + this.showActorAttackAnimation(subject, targets); + } else { + this.showEnemyAttackAnimation(subject, targets); + } +}; + +Window_BattleLog.prototype.showActorAttackAnimation = function(subject, targets) { + this.showNormalAnimation(targets, subject.attackAnimationId1(), false); + this.showNormalAnimation(targets, subject.attackAnimationId2(), true); +}; + +Window_BattleLog.prototype.showEnemyAttackAnimation = function(subject, targets) { + SoundManager.playEnemyAttack(); +}; + +Window_BattleLog.prototype.showNormalAnimation = function(targets, animationId, mirror) { + var animation = $dataAnimations[animationId]; + if (animation) { + var delay = this.animationBaseDelay(); + var nextDelay = this.animationNextDelay(); + targets.forEach(function(target) { + target.startAnimation(animationId, mirror, delay); + delay += nextDelay; + }); + } +}; + +Window_BattleLog.prototype.animationBaseDelay = function() { + return 8; +}; + +Window_BattleLog.prototype.animationNextDelay = function() { + return 12; +}; + +Window_BattleLog.prototype.refresh = function() { + this.drawBackground(); + this.contents.clear(); + for (var i = 0; i < this._lines.length; i++) { + this.drawLineText(i); + } +}; + +Window_BattleLog.prototype.drawBackground = function() { + var rect = this.backRect(); + var color = this.backColor(); + this._backBitmap.clear(); + this._backBitmap.paintOpacity = this.backPaintOpacity(); + this._backBitmap.fillRect(rect.x, rect.y, rect.width, rect.height, color); + this._backBitmap.paintOpacity = 255; +}; + +Window_BattleLog.prototype.backRect = function() { + return { + x: 0, + y: this.padding, + width: this.width, + height: this.numLines() * this.lineHeight() + }; +}; + +Window_BattleLog.prototype.backColor = function() { + return '#000000'; +}; + +Window_BattleLog.prototype.backPaintOpacity = function() { + return 64; +}; + +Window_BattleLog.prototype.drawLineText = function(index) { + var rect = this.itemRectForText(index); + this.contents.clearRect(rect.x, rect.y, rect.width, rect.height); + this.drawTextEx(this._lines[index], rect.x, rect.y, rect.width); +}; + +Window_BattleLog.prototype.startTurn = function() { + this.push('wait'); +}; + +Window_BattleLog.prototype.startAction = function(subject, action, targets) { + var item = action.item(); + this.push('performActionStart', subject, action); + this.push('waitForMovement'); + this.push('performAction', subject, action); + this.push('showAnimation', subject, targets.clone(), item.animationId); + this.displayAction(subject, item); +}; + +Window_BattleLog.prototype.endAction = function(subject) { + this.push('waitForNewLine'); + this.push('clear'); + this.push('performActionEnd', subject); +}; + +Window_BattleLog.prototype.displayCurrentState = function(subject) { + var stateText = subject.mostImportantStateText(); + if (stateText) { + this.push('addText', subject.name() + stateText); + this.push('wait'); + this.push('clear'); + } +}; + +Window_BattleLog.prototype.displayRegeneration = function(subject) { + this.push('popupDamage', subject); +}; + +Window_BattleLog.prototype.displayAction = function(subject, item) { + var numMethods = this._methods.length; + if (DataManager.isSkill(item)) { + if (item.message1) { + this.push('addText', subject.name() + item.message1.format(item.name)); + } + if (item.message2) { + this.push('addText', item.message2.format(item.name)); + } + } else { + this.push('addText', TextManager.useItem.format(subject.name(), item.name)); + } + if (this._methods.length === numMethods) { + this.push('wait'); + } +}; + +Window_BattleLog.prototype.displayCounter = function(target) { + this.push('performCounter', target); + this.push('addText', TextManager.counterAttack.format(target.name())); +}; + +Window_BattleLog.prototype.displayReflection = function(target) { + this.push('performReflection', target); + this.push('addText', TextManager.magicReflection.format(target.name())); +}; + +Window_BattleLog.prototype.displaySubstitute = function(substitute, target) { + var substName = substitute.name(); + this.push('performSubstitute', substitute, target); + this.push('addText', TextManager.substitute.format(substName, target.name())); +}; + +Window_BattleLog.prototype.displayActionResults = function(subject, target) { + if (target.result().used) { + this.push('pushBaseLine'); + this.displayCritical(target); + this.push('popupDamage', target); + this.push('popupDamage', subject); + this.displayDamage(target); + this.displayAffectedStatus(target); + this.displayFailure(target); + this.push('waitForNewLine'); + this.push('popBaseLine'); + } +}; + +Window_BattleLog.prototype.displayFailure = function(target) { + if (target.result().isHit() && !target.result().success) { + this.push('addText', TextManager.actionFailure.format(target.name())); + } +}; + +Window_BattleLog.prototype.displayCritical = function(target) { + if (target.result().critical) { + if (target.isActor()) { + this.push('addText', TextManager.criticalToActor); + } else { + this.push('addText', TextManager.criticalToEnemy); + } + } +}; + +Window_BattleLog.prototype.displayDamage = function(target) { + if (target.result().missed) { + this.displayMiss(target); + } else if (target.result().evaded) { + this.displayEvasion(target); + } else { + this.displayHpDamage(target); + this.displayMpDamage(target); + this.displayTpDamage(target); + } +}; + +Window_BattleLog.prototype.displayMiss = function(target) { + var fmt; + if (target.result().physical) { + fmt = target.isActor() ? TextManager.actorNoHit : TextManager.enemyNoHit; + this.push('performMiss', target); + } else { + fmt = TextManager.actionFailure; + } + this.push('addText', fmt.format(target.name())); +}; + +Window_BattleLog.prototype.displayEvasion = function(target) { + var fmt; + if (target.result().physical) { + fmt = TextManager.evasion; + this.push('performEvasion', target); + } else { + fmt = TextManager.magicEvasion; + this.push('performMagicEvasion', target); + } + this.push('addText', fmt.format(target.name())); +}; + +Window_BattleLog.prototype.displayHpDamage = function(target) { + if (target.result().hpAffected) { + if (target.result().hpDamage > 0 && !target.result().drain) { + this.push('performDamage', target); + } + if (target.result().hpDamage < 0) { + this.push('performRecovery', target); + } + this.push('addText', this.makeHpDamageText(target)); + } +}; + +Window_BattleLog.prototype.displayMpDamage = function(target) { + if (target.isAlive() && target.result().mpDamage !== 0) { + if (target.result().mpDamage < 0) { + this.push('performRecovery', target); + } + this.push('addText', this.makeMpDamageText(target)); + } +}; + +Window_BattleLog.prototype.displayTpDamage = function(target) { + if (target.isAlive() && target.result().tpDamage !== 0) { + if (target.result().tpDamage < 0) { + this.push('performRecovery', target); + } + this.push('addText', this.makeTpDamageText(target)); + } +}; + +Window_BattleLog.prototype.displayAffectedStatus = function(target) { + if (target.result().isStatusAffected()) { + this.push('pushBaseLine'); + this.displayChangedStates(target); + this.displayChangedBuffs(target); + this.push('waitForNewLine'); + this.push('popBaseLine'); + } +}; + +Window_BattleLog.prototype.displayAutoAffectedStatus = function(target) { + if (target.result().isStatusAffected()) { + this.displayAffectedStatus(target, null); + this.push('clear'); + } +}; + +Window_BattleLog.prototype.displayChangedStates = function(target) { + this.displayAddedStates(target); + this.displayRemovedStates(target); +}; + +Window_BattleLog.prototype.displayAddedStates = function(target) { + target.result().addedStateObjects().forEach(function(state) { + var stateMsg = target.isActor() ? state.message1 : state.message2; + if (state.id === target.deathStateId()) { + this.push('performCollapse', target); + } + if (stateMsg) { + this.push('popBaseLine'); + this.push('pushBaseLine'); + this.push('addText', target.name() + stateMsg); + this.push('waitForEffect'); + } + }, this); +}; + +Window_BattleLog.prototype.displayRemovedStates = function(target) { + target.result().removedStateObjects().forEach(function(state) { + if (state.message4) { + this.push('popBaseLine'); + this.push('pushBaseLine'); + this.push('addText', target.name() + state.message4); + } + }, this); +}; + +Window_BattleLog.prototype.displayChangedBuffs = function(target) { + var result = target.result(); + this.displayBuffs(target, result.addedBuffs, TextManager.buffAdd); + this.displayBuffs(target, result.addedDebuffs, TextManager.debuffAdd); + this.displayBuffs(target, result.removedBuffs, TextManager.buffRemove); +}; + +Window_BattleLog.prototype.displayBuffs = function(target, buffs, fmt) { + buffs.forEach(function(paramId) { + this.push('popBaseLine'); + this.push('pushBaseLine'); + this.push('addText', fmt.format(target.name(), TextManager.param(paramId))); + }, this); +}; + +Window_BattleLog.prototype.makeHpDamageText = function(target) { + var result = target.result(); + var damage = result.hpDamage; + var isActor = target.isActor(); + var fmt; + if (damage > 0 && result.drain) { + fmt = isActor ? TextManager.actorDrain : TextManager.enemyDrain; + return fmt.format(target.name(), TextManager.hp, damage); + } else if (damage > 0) { + fmt = isActor ? TextManager.actorDamage : TextManager.enemyDamage; + return fmt.format(target.name(), damage); + } else if (damage < 0) { + fmt = isActor ? TextManager.actorRecovery : TextManager.enemyRecovery; + return fmt.format(target.name(), TextManager.hp, -damage); + } else { + fmt = isActor ? TextManager.actorNoDamage : TextManager.enemyNoDamage; + return fmt.format(target.name()); + } +}; + +Window_BattleLog.prototype.makeMpDamageText = function(target) { + var result = target.result(); + var damage = result.mpDamage; + var isActor = target.isActor(); + var fmt; + if (damage > 0 && result.drain) { + fmt = isActor ? TextManager.actorDrain : TextManager.enemyDrain; + return fmt.format(target.name(), TextManager.mp, damage); + } else if (damage > 0) { + fmt = isActor ? TextManager.actorLoss : TextManager.enemyLoss; + return fmt.format(target.name(), TextManager.mp, damage); + } else if (damage < 0) { + fmt = isActor ? TextManager.actorRecovery : TextManager.enemyRecovery; + return fmt.format(target.name(), TextManager.mp, -damage); + } else { + return ''; + } +}; + +Window_BattleLog.prototype.makeTpDamageText = function(target) { + var result = target.result(); + var damage = result.tpDamage; + var isActor = target.isActor(); + var fmt; + if (damage > 0) { + fmt = isActor ? TextManager.actorLoss : TextManager.enemyLoss; + return fmt.format(target.name(), TextManager.tp, damage); + } else if (damage < 0) { + fmt = isActor ? TextManager.actorGain : TextManager.enemyGain; + return fmt.format(target.name(), TextManager.tp, -damage); + } else { + return ''; + } +}; + +//----------------------------------------------------------------------------- +// Window_PartyCommand +// +// The window for selecting whether to fight or escape on the battle screen. + +function Window_PartyCommand() { + this.initialize.apply(this, arguments); +} + +Window_PartyCommand.prototype = Object.create(Window_Command.prototype); +Window_PartyCommand.prototype.constructor = Window_PartyCommand; + +Window_PartyCommand.prototype.initialize = function() { + var y = Graphics.boxHeight - this.windowHeight(); + Window_Command.prototype.initialize.call(this, 0, y); + this.openness = 0; + this.deactivate(); +}; + +Window_PartyCommand.prototype.windowWidth = function() { + return 192; +}; + +Window_PartyCommand.prototype.numVisibleRows = function() { + return 4; +}; + +Window_PartyCommand.prototype.makeCommandList = function() { + this.addCommand(TextManager.fight, 'fight'); + this.addCommand(TextManager.escape, 'escape', BattleManager.canEscape()); +}; + +Window_PartyCommand.prototype.setup = function() { + this.clearCommandList(); + this.makeCommandList(); + this.refresh(); + this.select(0); + this.activate(); + this.open(); +}; + +//----------------------------------------------------------------------------- +// Window_ActorCommand +// +// The window for selecting an actor's action on the battle screen. + +function Window_ActorCommand() { + this.initialize.apply(this, arguments); +} + +Window_ActorCommand.prototype = Object.create(Window_Command.prototype); +Window_ActorCommand.prototype.constructor = Window_ActorCommand; + +Window_ActorCommand.prototype.initialize = function() { + var y = Graphics.boxHeight - this.windowHeight(); + Window_Command.prototype.initialize.call(this, 0, y); + this.openness = 0; + this.deactivate(); + this._actor = null; +}; + +Window_ActorCommand.prototype.windowWidth = function() { + return 192; +}; + +Window_ActorCommand.prototype.numVisibleRows = function() { + return 4; +}; + +Window_ActorCommand.prototype.makeCommandList = function() { + if (this._actor) { + this.addAttackCommand(); + this.addSkillCommands(); + this.addGuardCommand(); + this.addItemCommand(); + } +}; + +Window_ActorCommand.prototype.addAttackCommand = function() { + this.addCommand(TextManager.attack, 'attack', this._actor.canAttack()); +}; + +Window_ActorCommand.prototype.addSkillCommands = function() { + var skillTypes = this._actor.addedSkillTypes(); + skillTypes.sort(function(a, b) { + return a - b; + }); + skillTypes.forEach(function(stypeId) { + var name = $dataSystem.skillTypes[stypeId]; + this.addCommand(name, 'skill', true, stypeId); + }, this); +}; + +Window_ActorCommand.prototype.addGuardCommand = function() { + this.addCommand(TextManager.guard, 'guard', this._actor.canGuard()); +}; + +Window_ActorCommand.prototype.addItemCommand = function() { + this.addCommand(TextManager.item, 'item'); +}; + +Window_ActorCommand.prototype.setup = function(actor) { + this._actor = actor; + this.clearCommandList(); + this.makeCommandList(); + this.refresh(); + this.selectLast(); + this.activate(); + this.open(); +}; + +Window_ActorCommand.prototype.processOk = function() { + if (this._actor) { + if (ConfigManager.commandRemember) { + this._actor.setLastCommandSymbol(this.currentSymbol()); + } else { + this._actor.setLastCommandSymbol(''); + } + } + Window_Command.prototype.processOk.call(this); +}; + +Window_ActorCommand.prototype.selectLast = function() { + this.select(0); + if (this._actor && ConfigManager.commandRemember) { + var symbol = this._actor.lastCommandSymbol(); + this.selectSymbol(symbol); + if (symbol === 'skill') { + var skill = this._actor.lastBattleSkill(); + if (skill) { + this.selectExt(skill.stypeId); + } + } + } +}; + +//----------------------------------------------------------------------------- +// Window_BattleStatus +// +// The window for displaying the status of party members on the battle screen. + +function Window_BattleStatus() { + this.initialize.apply(this, arguments); +} + +Window_BattleStatus.prototype = Object.create(Window_Selectable.prototype); +Window_BattleStatus.prototype.constructor = Window_BattleStatus; + +Window_BattleStatus.prototype.initialize = function() { + var width = this.windowWidth(); + var height = this.windowHeight(); + var x = Graphics.boxWidth - width; + var y = Graphics.boxHeight - height; + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this.refresh(); + this.openness = 0; +}; + +Window_BattleStatus.prototype.windowWidth = function() { + return Graphics.boxWidth - 192; +}; + +Window_BattleStatus.prototype.windowHeight = function() { + return this.fittingHeight(this.numVisibleRows()); +}; + +Window_BattleStatus.prototype.numVisibleRows = function() { + return 4; +}; + +Window_BattleStatus.prototype.maxItems = function() { + return $gameParty.battleMembers().length; +}; + +Window_BattleStatus.prototype.refresh = function() { + this.contents.clear(); + this.drawAllItems(); +}; + +Window_BattleStatus.prototype.drawItem = function(index) { + var actor = $gameParty.battleMembers()[index]; + this.drawBasicArea(this.basicAreaRect(index), actor); + this.drawGaugeArea(this.gaugeAreaRect(index), actor); +}; + +Window_BattleStatus.prototype.basicAreaRect = function(index) { + var rect = this.itemRectForText(index); + rect.width -= this.gaugeAreaWidth() + 15; + return rect; +}; + +Window_BattleStatus.prototype.gaugeAreaRect = function(index) { + var rect = this.itemRectForText(index); + rect.x += rect.width - this.gaugeAreaWidth(); + rect.width = this.gaugeAreaWidth(); + return rect; +}; + +Window_BattleStatus.prototype.gaugeAreaWidth = function() { + return 330; +}; + +Window_BattleStatus.prototype.drawBasicArea = function(rect, actor) { + this.drawActorName(actor, rect.x + 0, rect.y, 150); + this.drawActorIcons(actor, rect.x + 156, rect.y, rect.width - 156); +}; + +Window_BattleStatus.prototype.drawGaugeArea = function(rect, actor) { + if ($dataSystem.optDisplayTp) { + this.drawGaugeAreaWithTp(rect, actor); + } else { + this.drawGaugeAreaWithoutTp(rect, actor); + } +}; + +Window_BattleStatus.prototype.drawGaugeAreaWithTp = function(rect, actor) { + this.drawActorHp(actor, rect.x + 0, rect.y, 108); + this.drawActorMp(actor, rect.x + 123, rect.y, 96); + this.drawActorTp(actor, rect.x + 234, rect.y, 96); +}; + +Window_BattleStatus.prototype.drawGaugeAreaWithoutTp = function(rect, actor) { + this.drawActorHp(actor, rect.x + 0, rect.y, 201); + this.drawActorMp(actor, rect.x + 216, rect.y, 114); +}; + +//----------------------------------------------------------------------------- +// Window_BattleActor +// +// The window for selecting a target actor on the battle screen. + +function Window_BattleActor() { + this.initialize.apply(this, arguments); +} + +Window_BattleActor.prototype = Object.create(Window_BattleStatus.prototype); +Window_BattleActor.prototype.constructor = Window_BattleActor; + +Window_BattleActor.prototype.initialize = function(x, y) { + Window_BattleStatus.prototype.initialize.call(this); + this.x = x; + this.y = y; + this.openness = 255; + this.hide(); +}; + +Window_BattleActor.prototype.show = function() { + this.select(0); + Window_BattleStatus.prototype.show.call(this); +}; + +Window_BattleActor.prototype.hide = function() { + Window_BattleStatus.prototype.hide.call(this); + $gameParty.select(null); +}; + +Window_BattleActor.prototype.select = function(index) { + Window_BattleStatus.prototype.select.call(this, index); + $gameParty.select(this.actor()); +}; + +Window_BattleActor.prototype.actor = function() { + return $gameParty.members()[this.index()]; +}; + +//----------------------------------------------------------------------------- +// Window_BattleEnemy +// +// The window for selecting a target enemy on the battle screen. + +function Window_BattleEnemy() { + this.initialize.apply(this, arguments); +} + +Window_BattleEnemy.prototype = Object.create(Window_Selectable.prototype); +Window_BattleEnemy.prototype.constructor = Window_BattleEnemy; + +Window_BattleEnemy.prototype.initialize = function(x, y) { + this._enemies = []; + var width = this.windowWidth(); + var height = this.windowHeight(); + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this.refresh(); + this.hide(); +}; + +Window_BattleEnemy.prototype.windowWidth = function() { + return Graphics.boxWidth - 192; +}; + +Window_BattleEnemy.prototype.windowHeight = function() { + return this.fittingHeight(this.numVisibleRows()); +}; + +Window_BattleEnemy.prototype.numVisibleRows = function() { + return 4; +}; + +Window_BattleEnemy.prototype.maxCols = function() { + return 2; +}; + +Window_BattleEnemy.prototype.maxItems = function() { + return this._enemies.length; +}; + +Window_BattleEnemy.prototype.enemy = function() { + return this._enemies[this.index()]; +}; + +Window_BattleEnemy.prototype.enemyIndex = function() { + var enemy = this.enemy(); + return enemy ? enemy.index() : -1; +}; + +Window_BattleEnemy.prototype.drawItem = function(index) { + this.resetTextColor(); + var name = this._enemies[index].name(); + var rect = this.itemRectForText(index); + this.drawText(name, rect.x, rect.y, rect.width); +}; + +Window_BattleEnemy.prototype.show = function() { + this.refresh(); + this.select(0); + Window_Selectable.prototype.show.call(this); +}; + +Window_BattleEnemy.prototype.hide = function() { + Window_Selectable.prototype.hide.call(this); + $gameTroop.select(null); +}; + +Window_BattleEnemy.prototype.refresh = function() { + this._enemies = $gameTroop.aliveMembers(); + Window_Selectable.prototype.refresh.call(this); +}; + +Window_BattleEnemy.prototype.select = function(index) { + Window_Selectable.prototype.select.call(this, index); + $gameTroop.select(this.enemy()); +}; + +//----------------------------------------------------------------------------- +// Window_BattleSkill +// +// The window for selecting a skill to use on the battle screen. + +function Window_BattleSkill() { + this.initialize.apply(this, arguments); +} + +Window_BattleSkill.prototype = Object.create(Window_SkillList.prototype); +Window_BattleSkill.prototype.constructor = Window_BattleSkill; + +Window_BattleSkill.prototype.initialize = function(x, y, width, height) { + Window_SkillList.prototype.initialize.call(this, x, y, width, height); + this.hide(); +}; + +Window_BattleSkill.prototype.show = function() { + this.selectLast(); + this.showHelpWindow(); + Window_SkillList.prototype.show.call(this); +}; + +Window_BattleSkill.prototype.hide = function() { + this.hideHelpWindow(); + Window_SkillList.prototype.hide.call(this); +}; + +//----------------------------------------------------------------------------- +// Window_BattleItem +// +// The window for selecting an item to use on the battle screen. + +function Window_BattleItem() { + this.initialize.apply(this, arguments); +} + +Window_BattleItem.prototype = Object.create(Window_ItemList.prototype); +Window_BattleItem.prototype.constructor = Window_BattleItem; + +Window_BattleItem.prototype.initialize = function(x, y, width, height) { + Window_ItemList.prototype.initialize.call(this, x, y, width, height); + this.hide(); +}; + +Window_BattleItem.prototype.includes = function(item) { + return $gameParty.canUse(item); +}; + +Window_BattleItem.prototype.show = function() { + this.selectLast(); + this.showHelpWindow(); + Window_ItemList.prototype.show.call(this); +}; + +Window_BattleItem.prototype.hide = function() { + this.hideHelpWindow(); + Window_ItemList.prototype.hide.call(this); +}; + +//----------------------------------------------------------------------------- +// Window_TitleCommand +// +// The window for selecting New Game/Continue on the title screen. + +function Window_TitleCommand() { + this.initialize.apply(this, arguments); +} + +Window_TitleCommand.prototype = Object.create(Window_Command.prototype); +Window_TitleCommand.prototype.constructor = Window_TitleCommand; + +Window_TitleCommand.prototype.initialize = function() { + Window_Command.prototype.initialize.call(this, 0, 0); + this.updatePlacement(); + this.openness = 0; + this.selectLast(); +}; + +Window_TitleCommand._lastCommandSymbol = null; + +Window_TitleCommand.initCommandPosition = function() { + this._lastCommandSymbol = null; +}; + +Window_TitleCommand.prototype.windowWidth = function() { + return 240; +}; + +Window_TitleCommand.prototype.updatePlacement = function() { + this.x = (Graphics.boxWidth - this.width) / 2; + this.y = Graphics.boxHeight - this.height - 96; +}; + +Window_TitleCommand.prototype.makeCommandList = function() { + this.addCommand(TextManager.newGame, 'newGame'); + this.addCommand(TextManager.continue_, 'continue', this.isContinueEnabled()); + this.addCommand(TextManager.options, 'options'); +}; + +Window_TitleCommand.prototype.isContinueEnabled = function() { + return DataManager.isAnySavefileExists(); +}; + +Window_TitleCommand.prototype.processOk = function() { + Window_TitleCommand._lastCommandSymbol = this.currentSymbol(); + Window_Command.prototype.processOk.call(this); +}; + +Window_TitleCommand.prototype.selectLast = function() { + if (Window_TitleCommand._lastCommandSymbol) { + this.selectSymbol(Window_TitleCommand._lastCommandSymbol); + } else if (this.isContinueEnabled()) { + this.selectSymbol('continue'); + } +}; + +//----------------------------------------------------------------------------- +// Window_GameEnd +// +// The window for selecting "Go to Title" on the game end screen. + +function Window_GameEnd() { + this.initialize.apply(this, arguments); +} + +Window_GameEnd.prototype = Object.create(Window_Command.prototype); +Window_GameEnd.prototype.constructor = Window_GameEnd; + +Window_GameEnd.prototype.initialize = function() { + Window_Command.prototype.initialize.call(this, 0, 0); + this.updatePlacement(); + this.openness = 0; + this.open(); +}; + +Window_GameEnd.prototype.windowWidth = function() { + return 240; +}; + +Window_GameEnd.prototype.updatePlacement = function() { + this.x = (Graphics.boxWidth - this.width) / 2; + this.y = (Graphics.boxHeight - this.height) / 2; +}; + +Window_GameEnd.prototype.makeCommandList = function() { + this.addCommand(TextManager.toTitle, 'toTitle'); + this.addCommand(TextManager.cancel, 'cancel'); +}; + +//----------------------------------------------------------------------------- +// Window_DebugRange +// +// The window for selecting a block of switches/variables on the debug screen. + +function Window_DebugRange() { + this.initialize.apply(this, arguments); +} + +Window_DebugRange.prototype = Object.create(Window_Selectable.prototype); +Window_DebugRange.prototype.constructor = Window_DebugRange; + +Window_DebugRange.lastTopRow = 0; +Window_DebugRange.lastIndex = 0; + +Window_DebugRange.prototype.initialize = function(x, y) { + this._maxSwitches = Math.ceil(($dataSystem.switches.length - 1) / 10); + this._maxVariables = Math.ceil(($dataSystem.variables.length - 1) / 10); + var width = this.windowWidth(); + var height = this.windowHeight(); + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this.refresh(); + this.setTopRow(Window_DebugRange.lastTopRow); + this.select(Window_DebugRange.lastIndex); + this.activate(); +}; + +Window_DebugRange.prototype.windowWidth = function() { + return 246; +}; + +Window_DebugRange.prototype.windowHeight = function() { + return Graphics.boxHeight; +}; + +Window_DebugRange.prototype.maxItems = function() { + return this._maxSwitches + this._maxVariables; +}; + +Window_DebugRange.prototype.update = function() { + Window_Selectable.prototype.update.call(this); + if (this._editWindow) { + this._editWindow.setMode(this.mode()); + this._editWindow.setTopId(this.topId()); + } +}; + +Window_DebugRange.prototype.mode = function() { + return this.index() < this._maxSwitches ? 'switch' : 'variable'; +}; + +Window_DebugRange.prototype.topId = function() { + var index = this.index(); + if (index < this._maxSwitches) { + return index * 10 + 1; + } else { + return (index - this._maxSwitches) * 10 + 1; + } +}; + +Window_DebugRange.prototype.refresh = function() { + this.createContents(); + this.drawAllItems(); +}; + +Window_DebugRange.prototype.drawItem = function(index) { + var rect = this.itemRectForText(index); + var start; + var text; + if (index < this._maxSwitches) { + start = index * 10 + 1; + text = 'S'; + } else { + start = (index - this._maxSwitches) * 10 + 1; + text = 'V'; + } + var end = start + 9; + text += ' [' + start.padZero(4) + '-' + end.padZero(4) + ']'; + this.drawText(text, rect.x, rect.y, rect.width); +}; + +Window_DebugRange.prototype.isCancelTriggered = function() { + return (Window_Selectable.prototype.isCancelTriggered() || + Input.isTriggered('debug')); +}; + +Window_DebugRange.prototype.processCancel = function() { + Window_Selectable.prototype.processCancel.call(this); + Window_DebugRange.lastTopRow = this.topRow(); + Window_DebugRange.lastIndex = this.index(); +}; + +Window_DebugRange.prototype.setEditWindow = function(editWindow) { + this._editWindow = editWindow; + this.update(); +}; + +//----------------------------------------------------------------------------- +// Window_DebugEdit +// +// The window for displaying switches and variables on the debug screen. + +function Window_DebugEdit() { + this.initialize.apply(this, arguments); +} + +Window_DebugEdit.prototype = Object.create(Window_Selectable.prototype); +Window_DebugEdit.prototype.constructor = Window_DebugEdit; + +Window_DebugEdit.prototype.initialize = function(x, y, width) { + var height = this.fittingHeight(10); + Window_Selectable.prototype.initialize.call(this, x, y, width, height); + this._mode = 'switch'; + this._topId = 1; + this.refresh(); +}; + +Window_DebugEdit.prototype.maxItems = function() { + return 10; +}; + +Window_DebugEdit.prototype.refresh = function() { + this.contents.clear(); + this.drawAllItems(); +}; + +Window_DebugEdit.prototype.drawItem = function(index) { + var dataId = this._topId + index; + var idText = dataId.padZero(4) + ':'; + var idWidth = this.textWidth(idText); + var statusWidth = this.textWidth('-00000000'); + var name = this.itemName(dataId); + var status = this.itemStatus(dataId); + var rect = this.itemRectForText(index); + this.resetTextColor(); + this.drawText(idText, rect.x, rect.y, rect.width); + rect.x += idWidth; + rect.width -= idWidth + statusWidth; + this.drawText(name, rect.x, rect.y, rect.width); + this.drawText(status, rect.x + rect.width, rect.y, statusWidth, 'right'); +}; + +Window_DebugEdit.prototype.itemName = function(dataId) { + if (this._mode === 'switch') { + return $dataSystem.switches[dataId]; + } else { + return $dataSystem.variables[dataId]; + } +}; + +Window_DebugEdit.prototype.itemStatus = function(dataId) { + if (this._mode === 'switch') { + return $gameSwitches.value(dataId) ? '[ON]' : '[OFF]'; + } else { + return String($gameVariables.value(dataId)); + } +}; + +Window_DebugEdit.prototype.setMode = function(mode) { + if (this._mode !== mode) { + this._mode = mode; + this.refresh(); + } +}; + +Window_DebugEdit.prototype.setTopId = function(id) { + if (this._topId !== id) { + this._topId = id; + this.refresh(); + } +}; + +Window_DebugEdit.prototype.currentId = function() { + return this._topId + this.index(); +}; + +Window_DebugEdit.prototype.update = function() { + Window_Selectable.prototype.update.call(this); + if (this.active) { + if (this._mode === 'switch') { + this.updateSwitch(); + } else { + this.updateVariable(); + } + } +}; + +Window_DebugEdit.prototype.updateSwitch = function() { + if (Input.isRepeated('ok')) { + var switchId = this.currentId(); + SoundManager.playCursor(); + $gameSwitches.setValue(switchId, !$gameSwitches.value(switchId)); + this.redrawCurrentItem(); + } +}; + +Window_DebugEdit.prototype.updateVariable = function() { + var variableId = this.currentId(); + var value = $gameVariables.value(variableId); + if (typeof value === 'number') { + if (Input.isRepeated('right')) { + value++; + } + if (Input.isRepeated('left')) { + value--; + } + if (Input.isRepeated('pagedown')) { + value += 10; + } + if (Input.isRepeated('pageup')) { + value -= 10; + } + if ($gameVariables.value(variableId) !== value) { + $gameVariables.setValue(variableId, value); + SoundManager.playCursor(); + this.redrawCurrentItem(); + } + } +};