ジェシー

parameters: それは本や映像ではない、母親以外で初めて見る

parameters: 生身の女性の裸だった…。

parameters: 少年のころの私の脳裏に焼き付いた。

parameters: \N<ジェシー>「オー、ボク！

parameters: こんなところでキグーですねー」

parameters: \N<ボク>「じぇ、ジェシー⁉

parameters: は、裸で何してるの…⁉」

parameters: \N<ジェシー>「誰もいなかったので

parameters: 水がクールで気持ちいいでーす。

parameters: ボクもいっしょに浴びますかー？」

parameters: \N<ジェシー>「OK！

parameters: "ハダカノオツキアイ"でーす」

parameters: \N<ボク>（あ、あれ…？

parameters: お、おちんちん…大きくなっちゃってる…。

parameters: もしかして、ボクのディック

parameters: エレクトしてませんかー…？」

parameters: \N<ボク>「こ、これは…その…」

parameters: \N<ジェシー>「オーマイ。

parameters: ジェシーの体はシゲキが強すぎでしたかー。

parameters: 釣りのゴホービがまだでしたねー」

parameters: ボクはエッチなこと、キョーミありますねー？

parameters: だからジェシーがしてあげまーす♥

parameters: こっちのシゲミに行きましょー♥」

parameters: \N<ボク>「え、えぇ…!?」

parameters: \N<ジェシー>「オー、よかったでーす♥

parameters: またいつでも、SEXしましょー♥

parameters: \N<ジェシー>「そのかわり…

parameters: ゴマンゾクさせてくださいねー♥」

parameters: \N<ボク>「う、うん…。

name: BGS管理（屋外_深）_TE

parameters: \N<ジェシー>「オー、ボク。

parameters: ボクもまた、釣りですかー？」

parameters: 欲しくなったですかー？♥」

parameters: う、うん…！ ち、ちがうよ！

parameters: \N<ジェシー>「OK♥

parameters: ジェシーもhornyしてましたー♥

parameters: ボクのおちんちん、出してくださーい♥」

parameters: \N<ジェシー>「オー、ソーリー。

parameters: またゴホービ、欲しくなったら

parameters: ジェシーに教えてくださいねー♥」

note: <TE:エッチなビデオ>


selfSwitchCh: A

外出禁止

parameters: \N<ボク>「勝手に帰っちゃだめだよね…」

parameters: \N<ボク>「まだハカセくんと遊んでないよね。

parameters: \N<ボク>「勝手に帰っちゃだめだよね…」

窓の光：上（小1マス）_CP

note: <TE:窓の光：上（小1マス）>

parameters: \N<ボク>（何だか、変な音がするような…？

parameters: ちょっとのぞいてみよう…）

parameters: ここって、ハカセくんのお家…？」

parameters: \N<おばさん>「博士？　ああ、マー君のことね。

parameters: 君が、マー君がいってたボク君ね？

parameters: マー君なら、二階にいるわよ」

parameters: \N<ボク>「おじゃましまーす」

parameters: \N<おばさん>「あら、ボク君？

parameters: \N<ボク>「そうなんだー…。

parameters: ぼく、明日都会に帰るんだ…」

parameters: \N<おばさん>「まあ、そうなの？

parameters: もう夏休み終わりだものね…。

parameters: \N<おばさん>「あら、もちろんよ♥

parameters: …おばさんも、嬉しいわ♥」

parameters: \N<ボク>「よかった…！

parameters: ハカセくんにも、またねって

parameters: \N<おばさん>「えぇ、わかったわ。

parameters: じゃあ、またね、ボク君♥」

parameters: \N<おばさん>「あら、ボク君？

parameters: \N<ボク>「そうなんだー…。

parameters: \N<おばさん>「あら、ボク君？

parameters: でももう、こんな時間だし…」

parameters: \N<ボク>「あ、ホントだ。

parameters: そろそろ帰らなくちゃ…」

parameters: \N<おばさん>「……じゃあ、今日は

parameters: マー君も喜ぶと思うし…ね…？」

parameters: \N<おばさん>「ふふ。

parameters: じゃあおばさんは、晩御飯用意するから

parameters: \N<ボク>「ご、ごちそうさまでした」

parameters: \N<おばさん>「はい。お粗末様でした。

parameters: じゃあ、ボク君にマー君も

parameters: ちゃんと歯みがきして、お風呂に入ってから寝るのよ」

parameters: \N<二人>「「はーい」」

parameters: \N<ハカセくん>「じゃあ、いっしょにお風呂

parameters: \N<ハカセくん>「ふぁ～～…。

parameters: \N<ボク>「うん、おやすみ」

parameters: うーん、まだ眠くないけど

parameters: \N<おばさん>「あら、ボク君？

parameters: 今日はマー君いないけど、どうしたの？

parameters: おばさんとエッチなこと、したくなっちゃった…？」

parameters: うん！ ちがうよー

parameters: おばさんに会いたくなっちゃった！」

parameters: \N<おばさん>「あ、あら、そうなの…？

parameters: じゃあ、こっちにいらっしゃい…♥」

parameters: \N<ボク>「ちがうよー。

parameters: ハカセくんと遊ぼうと思ったんだけど

parameters: じゃあ、帰るね。ばいばい、おばさん！」

parameters: \N<おばさん>「あら、そうだったの？

parameters: \N<おばさん>「あら、どうしたの？

parameters: マー君なら、二階にいるわよ？

parameters: それともおばさんとお話ししたいのかしら？♥」

parameters: \N<おばさん>「うふふ、冗談よ♥

parameters: おばさんとお話ししても退屈なだけよね♥

parameters: ほら、遊んでいらっしゃい」

parameters: \N<おばさん>「あら、どうしたの？

parameters: マー君なら、二階にいるわよ？

parameters: それともおばさんとお話ししたいのかしら？♥」

parameters: \N<おばさん>「うふふ、冗談よ♥

parameters: おばさんとお話ししても退屈なだけよね♥

parameters: ほら、遊んでいらっしゃい」

characterName: !Flame

parameters: 本の内容を変数に記録する

parameters: 本の内容によってポーズ等を変える

parameters: こ、これって…おばさん…⁉

parameters: え、エッチな本に…おばさんがでてるの…⁉

parameters: な、なんだろこれ…ど、どうしよう…）

parameters: \N<ボク>（やっぱりこれ

parameters: ハカセくんのお母さんだよね…？

parameters: \N<ハカセくん>「ボクくーん。

parameters: ハカセ君と何をどうして遊んだか覚えてない。

parameters: 頭の中は友達の母親が載っていた本のことで

parameters: いつの間にか夕方になっていた…。

parameters: \N<ハカセくん>「あー、もうこんな時間だ。

parameters: ボク君、今日はうちに泊まっていってよ」

parameters: \N<ボク>「ご、ごちそうさまでした」

parameters: \N<おばさん>「はい。お粗末様でした。

parameters: じゃあ、ボク君にマー君も

parameters: ちゃんと歯みがきして、お風呂に入ってから寝るのよ」

parameters: \N<二人>「「はーい」」

parameters: \N<ハカセくん>「じゃあ、いっしょにお風呂

parameters: \N<ボク>「う、うん」

parameters: \N<ハカセくん>「ふぁ～～…。

parameters: \N<ボク>「うん、おやすみ」

parameters: うーん、まだ眠くないけど

parameters: \N<おばさん>「あら、ボク君？

parameters: やっぱりその…おばさんとエッチなこと

parameters: したくなっちゃったのかな…？」

parameters: \N<ボク>「う、うん…！」

parameters: \N<おばさん>「そっか…。

parameters: うん、仕方ないわよね…♥

parameters: 本のこと、黙っておいてもらう代わりだもの…♥

parameters: 大体あの人が、あんな本をとっておくのが悪いのよ…♥」

parameters: \N<おばさん>「ううん、何でもないわ。

parameters: じゃあ、お風呂に入ってくるから

parameters: \N<おばさん>「そ、それで、ボク君…？

parameters: 今日はどんなことをしたいのかしら…？♥」

parameters: \N<おばさん>「あら？

parameters: おばさんに何か用かしら？」

parameters: \N<ボク>「あ、あのね…ボク…。

parameters: ハカセくんと宝探ししてた時…その…

parameters: ……おばさんがでてるエッチな本、

parameters: \N<おばさん>「えぇっ⁉　う、うそ…⁉

parameters: あの人ったら捨ててなかったの…⁉

parameters: や、やだ、その…あ、あれはね…⁉

parameters: \N<おばさん>「わ、若気の至りというか

parameters: わ、私は嫌だったのよ…？

parameters: でも、どうしてもってあの人が…。

parameters: い、いや、こんなこと聞かされても困るわよね…」

parameters: \N<おばさん>「ね、ねぇ、ボク君…？

parameters: このことは、マー君には黙っててもらえるかな…？

parameters: 何でもしてあげるから…ね…？」

parameters: \N<ボク>「うん、わかった！

parameters: ぼく、だれにも言わないよ！」

parameters: \N<おばさん>「そ、そう…？

parameters: おばさんに何して欲しいのかな…？」

parameters: ぼく、ひみつぐらい守れるもん！」

parameters: \N<おばさん>「そ、そうなの…？

parameters: 少しぐらいあるんじゃないの…？」

parameters: \N<ボク>「うーん…？

parameters: じゃあ、おばさんのでてた本をちょーだい！

parameters: きれいでエッチだったから

parameters: だ、だめよ、それだけは！

parameters: あんなのすぐに捨てなきゃ…！

parameters: ね？　他のものにしましょう？」

parameters: ぼく、あれが欲しいのに…」

parameters: \N<おばさん>「う…。

parameters: あ、あれだけはダメなの…。

parameters: お、おばさんが、本と同じことしてあげるから…ね…？」

parameters: \N<おばさん>「本はあげられないけど

parameters: その代わりに、本と同じこと

parameters: ボク君にさせてあげる…。

parameters: ね？　本みたいなエッチなこと、したかったんでしょ…？」

parameters: \N<ボク>「あ、えーと、う、うん…」

parameters: \N<おばさん>「…マー君はもう、寝てるわよね…。

parameters: お風呂に入ってくるから…ここで待ってて…」

parameters: \N<ボク>「う、うん…」

parameters: それは本や映像ではない、母親以外で初めて見る

parameters: 生身の女性の裸だった…。

parameters: 少年のころの私の脳裏に焼き付いた。

parameters: \N<おばさん>「お、おまたせ、ボク君…。

parameters: えっと…ロープはここにしまってたかしら…」

parameters: 本の中でも、おばさんを縄でしばってたけど

parameters: いや、これはね、お、夫の趣味で

parameters: わ、私が好きなわけじゃないのよ…⁉」

parameters: \N<おばさん>「で、でもほら、

parameters: やっぱり夫婦生活において互いの趣味の尊重は大切だし

parameters: 一応、痛くないように配慮してくれてるし

parameters: ま、まあそんなに嫌なわけでもないし…」

parameters: \N<おばさん>「……いや、息子の友達に何言ってるのかしら…。

parameters: そ、その、これはね、え、"SM"って言って

parameters: 大人のごっこ遊びみたいなものよ…？」

parameters: \N<ボク>「ふーん…？

parameters: じゃあ、今からぼくとおばさんで

parameters: エスエムごっこをするんだね？」

parameters: \N<おばさん>「そ、そうよ…。

parameters: じゃ、じゃあ…おばさんのこことここ…、

parameters: このロープでしばってくれる…？♥」

parameters: \N<ボク>「…おばさんのパンツが入ってる…。

parameters: 一枚ぐらいなら、もらってもいいかな…？」

parameters: もっていく やめておく

parameters: \N<ボク>「やっぱり、やーめた」

parameters: \N<おばさん>「そ、それで、ボク君…？

parameters: 今日はどんなことをしたいのかしら…？♥」

parameters: \N<おばさん>「あら…？

parameters: あ、あら、まさか…夜這い…？♥」

parameters: \N<おばさん>「い、いえ、何でも無いのよ…！

parameters: えっと、眠れないのかしら？」

parameters: 何だか、寝付けなくて…」

parameters: \N<おばさん>「あら…。

parameters: も、もしかして、晩ご飯に入れた

parameters: スッポンエキスのせいかしら…？」

parameters: \N<ボク>「うぅ…おちんちんも

parameters: 大きくなって、戻らないんだ…」

parameters: \N<おばさん>「あらまあ…！

parameters: つ、つい、うっかりなのよ？

parameters: 主人がいつも喜んでいたから、ついつい癖で…！

parameters: ああ、でも、責任を取らなくちゃ…♥」

parameters: \N<おばさん>「えっと…そ、そうね…？

parameters: ……せっかくだし、この前とは別の

parameters: SMごっこをしてみる…？　それでおばさんが、

parameters: おちんちん、スッキリさせてあげようか…？」

parameters: エスエムごっこって、他にもあるんだ！

parameters: うん！　ぼく、してみたい！」

parameters: \N<おばさん>「そ、そう…？

parameters: じゃ、じゃあ、準備するわね…♥

parameters: ちょっと待っていて…♥」

parameters: おばさん、ねむってる…。

parameters: いたずらしてもいいかな…？」

parameters: 服を脱がせる やめとこう

parameters: \N<ボク>（…ちょっとぐらい、いいよね…。

parameters: ほんの少し…ちょっと見るだけだから…）

parameters: \N<ボク>（…お、おきてない…よね…？

parameters: …これぐらいでもおきないなら…

parameters: いたずらしてもいいかな…？）

parameters: エッチないたずらをする やめとこう

parameters: \N<ボク>（や、やっぱりダメダメ！

parameters: 自慰を経験していなくても

parameters: 睡姦の知識があれば夜這い出来るように変更

parameters: おばさん、ねむってる…。

parameters: おこさない方がいいよね…」

repo_name: dazed/translations

license: unknown


note: <TE:窓の光：上（小1マス）>

ハカセくん

parameters: \N<ハカセくん>「あー、ボクくん、いらっしゃい。

parameters: じゃあ、何してあそぼっか？」

parameters: \N<ハカセくん>「あー、ボクくん、いらっしゃい。

parameters: 約束のメカカブトムシだよ」

parameters: \#メカカブトムシMkII

parameters: ありがとう、ハカセくん！

parameters: \N<ハカセくん>「うん。

parameters: じゃあ、何して遊ぼうか？」

parameters: \N<ハカセくん>「かくれんぼか…。

parameters: 代わりに宝探しごっこしない？」

parameters: \N<ボク>「宝探しごっこ？」

parameters: \N<ハカセくん>「ぼくがこのカプセルを家の中に隠すから

parameters: ボクくんがそれを探すんだ。

parameters: 100秒以内にボクくんが見つけられたら

parameters: \N<ハカセくん>「それじゃあ、やろっか。

parameters: 隠してくるから待っててね」

parameters: \N<ボク>「今日も宝探しごっこしようよ」

parameters: \N<ハカセくん>「いいね。

parameters: 隠してくるから待っててね」

parameters: \N<ハカセくん>「１階に隠してきたよ。

parameters: \N<ハカセくん>「１階に隠してきたよ。

note: <TE:お泊りベッド上>


ナナちゃん

parameters: \N<ナナちゃん>「うわ、暑いわね…。

parameters: 脱いじゃおっかなー…？♥」

parameters: \N<ボク>「えっ…⁉」

parameters: \N<ナナちゃん>「ほら、ボクも脱ぎなさいよ♥

parameters: どーせ、ちんちん見せるんだから

parameters: \N<ボク>「う、うん…」

parameters: それは本や映像ではない、母親以外で初めて見る

parameters: 生身の女性の裸だった…。

parameters: 少年のころの私の脳裏に焼き付いた。

parameters: \N<ナナちゃん>「あー♥

parameters: ホントにちんちん、大きくなってる…♥

parameters: あたしの裸を見て、エッチなこと考えてたんだ？♥

parameters: \N<ボク>「う、うー…、

parameters: \N<ナナちゃん>「手で隠しちゃだめよ♥

parameters: こんな風になってるんだ…♥」

parameters: \N<ボク>「…う、うぅ…」

parameters: \N<ナナちゃん>「……ねえ、

parameters: ちんちん、さわってもいい…？♥」

parameters: \N<ナナちゃん>「はー？

parameters: あーあ、あたしの裸まで見といて

parameters: \N<ボク>「えぇぇ…⁉

parameters: \N<ナナちゃん>「だーめ♥

parameters: ボクのちんちん、ふんじゃおっと…♥」

parameters: いたいのはやだよー…！」

parameters: \N<ナナちゃん>「じゃー、

parameters: いたくないようにふめばいいんだ？♥」

parameters: ま、まぁ、いたくないなら…いい…かも…？」

parameters: \N<ナナちゃん>「ふーん…♥

parameters: じゃあ、おしおきするから

parameters: \N<ボク>「う、うー…うん…」

parameters: \N<ナナちゃん>「ねえ…？♥

parameters: もっとエッチなこと、したいんでしょ…？♥」

parameters: \N<ナナちゃん>「あはは、やっぱり♥

parameters: でもなー、あたしはそんなに

parameters: 安い女じゃないのよねー…♥」

parameters: じゃあ、どうしたらいいの…？」

parameters: \N<ナナちゃん>「そうねー…。

parameters: 秘密基地で変な大会するんでしょ？」

parameters: \N<ボク>「それって…ムシバトル大会？」

parameters: \N<ナナちゃん>「そうそれ。

parameters: そのムシバトル大会でボクが優勝したら

parameters: もっとエッチなことしてあげる…♥

parameters: あたしのために、そのぐらいは努力してもらわなきゃね♥」

parameters: \N<ボク>「う、うー…。

parameters: ぼく、が、がんばるよ…！

parameters: ……でも、優勝できなかったら…？」

parameters: \N<ナナちゃん>「その時はー…。

parameters: \N<ナナちゃん>「さーて。

parameters: 汗かいちゃったし、帰ってお風呂入ろっと。

parameters: じゃ、ボクはちゃんと、優勝してね…♥」

parameters: \N<ボク>「う、うん…！」

parameters: \N<ナナちゃん>「バイビー」

parameters: そ、それで…エッチなことって

parameters: \N<ナナちゃん>「えー？

parameters: 都会の男子でも、案外遅れてるんだー？♥」

parameters: いや、知らないわけじゃ…その…」

parameters: \N<ナナちゃん>「いーよ、

parameters: 知ったかぶらなくてもー？♥

parameters: エッチなことっていうのは、

parameters: セックスっていうの…♥」

parameters: \N<ナナちゃん>「まず、男の人のちんちんを

parameters: 女の人のわれめに入れるの。

parameters: そのまま何回もちんちんをぬいたり入れたりして

parameters: 最後にちんちんから出る白いのを、女の人の中に出すの」

parameters: \N<ナナちゃん>「これが

parameters: ね？　やりたくなったでしょ？」

parameters: \N<ボク>「えっと、その

parameters: ナナちゃんは、したことあるの…？」

parameters: \N<ナナちゃん>「あるわけないでしょ？

parameters: こんな田舎で誰とするのよ？

parameters: そりゃまあ、自分のを指でさわるぐらいはしたけど…」

parameters: \N<ボク>「そ、そうなんだ…。

parameters: \N<ナナちゃん>「そう、わかったならいいのよ。

parameters: \N<ボク>「うん…！」

parameters: \N<ナナちゃん>「さーて。

parameters: 汗かいちゃったし、あたしはもう帰るから。

parameters: \N<ボク>「う、うん。

parameters: \N<ナナちゃん>「ほーら、ボク？

parameters: あたしにして欲しいの？♥」

parameters: \N<ナナちゃん>「さーて。

parameters: 汗かいちゃったし、あたしはもう帰るから。

parameters: \N<ボク>「う、うん。


parameters: ナナちゃん、ねむってる…。

parameters: いたずらしてもいいかな…？」

parameters: 服を脱がせる やめとこう

parameters: \N<ボク>（…ちょっとぐらい、いいよね…。

parameters: ほんの少し…ちょっと見るだけだから…）

parameters: \N<ボク>（…お、おきてない…よね…？

parameters: …これぐらいでもおきないなら…

parameters: いたずらしてもいいかな…？）

parameters: エッチないたずらをする やめとこう

parameters: \N<ボク>（や、やっぱりダメダメ！

parameters: 自慰を経験していなくても

parameters: 睡姦の知識があれば夜這い出来るように変更

parameters: ナナちゃん、ねむってる…。

parameters: おこさない方がいいよね…」

parameters: \N<ボク>（ナナちゃんがねてる…。

parameters: \N<ボク>「…ナナちゃんの

parameters: 一枚ぐらいなら、もらってもいいかな…？」

parameters: \N<ボク>「やっぱり、やーめた」


parameters: \N<ボク>（ユウくんが寝てる…。

parameters: おこさないようにしないとね）

parameters: ユウくん、ねむってる…。

parameters: いたずらしてもいいかな…？」

parameters: 服を脱がせる やめとこう

parameters: \N<ボク>（…ちょっとぐらい、いいよね…。

parameters: ほんの少し…ちょっと見るだけだから…）

parameters: \N<ボク>（…お、おきてない…よね…？

parameters: …これぐらいでもおきないなら…

parameters: いたずらしてもいいかな…？）

parameters: エッチないたずらをする やめとこう

parameters: \N<ボク>（や、やっぱりダメダメ！

parameters: 自慰を経験していなくても

parameters: 睡姦の知識があれば夜這い出来るように変更

parameters: ユウくん、ねむってる…。

parameters: おこさない方がいいよね…」

parameters: \N<ボク>「…ユウくんの

parameters: 一枚ぐらいなら、もらってもいいかな…？」

parameters: \N<ボク>「やっぱり、やーめた」


カスタムモード

characterName: !Crystal

parameters: ゲーム本編に登場するキャラクターの外見を

parameters: カスタマイズすることが可能です。

parameters: ただし、変更できるのは外見だけですので

parameters: セリフ等の整合性がとれなくなる場合がありますので

parameters: また、性別や男性器の有無を変更した場合

parameters: キャラクター固有のHイベント（とくべつなエッチ）には

parameters: 対応できませんのでご注意下さい。

parameters: キャラクターのカスタマイズ キャラクターをデフォルトに戻す キャンセル

parameters: キャラクターのカスタマイズ

parameters: カスタマイズしたいキャラクターを選択してください。

parameters: カスタマイズする方法を選択してください。

parameters: 今の状態からカスタマイズ お気に入りからカスタマイズ ピンクチラシを読み込んでカスタマイズ 秘密の合言葉を入力してカスタマイズ ランダムキャラからカスタマイズ キャンセル

parameters: 今の状態からカスタマイズ

parameters: お気に入りからカスタマイズ

parameters: ピンクチラシを読み込んでカスタマイズ

parameters: 画面キャプチャ読込 19 20 -1

parameters: 読み込みに失敗しました。

parameters: 秘密の合言葉を入力してカスタマイズ

parameters: ランダムキャラからカスタマイズ

parameters: Live2dモデルのスケール変更 FR 30

parameters: ※"肌色＆肌の明るさの変更"と"日焼け"は

parameters: どちらか一方しか選べませんのでご注意ください。

parameters: 裸の状態にしか対応していませんのでご注意ください。

parameters: キャラクターをデフォルトに戻す

parameters: この処理は元には戻せません。

parameters: はい いいえ

思い出改変機

parameters: このクリスタルでは、エンドレスモード時、

parameters: ゲーム本編中に期間限定でしか攻略できないキャラクターを

parameters: 攻略したことにすることが可能です。

parameters: ナナちゃんと仲良くなったことにしますか？

parameters: ※この操作は、元には戻せません。

parameters: 現在、この操作が必要なキャラクターはいません。

parameters: 裸 着衣

parameters: ようこそ"ひみつの屋根裏部屋"へ。

parameters: "ひみつの屋根裏部屋"では、

parameters: ゲーム本編に登場するキャラクターの外見を

parameters: カスタマイズすることが可能です。

parameters: カスタマイズした外見を確認するための

parameters: マネキンも設置してあります。

parameters: セリフ等の整合性が合わなくなったり

parameters: ゲームの雰囲気等が大きく変わる場合もありますので


こうげき

description:
こうげきだ！ あいてのバリアもふきとばすよ！
でもひっさつわざには負けちゃうんだ。

message1: は、こうげきをえらんだ！

バリア

description:
バリアー！　相手のひっさつわざをふせげるよ！
でもこうげきには弱いんだ･･･。

message1: は、バリアをえらんだ！

note:
スキル２番は［防御］コマンドを
選択したときに使用されます。

連続攻撃

formula: a.atk * 4 - b.def * 2

message1: の攻撃！

逃げる

message1: は逃げてしまった。

様子を見る

message1: は様子を見ている。

ヒール

message1: は%1を唱えた！

攻撃

formula: Math.max(a.atk * 8 - b.def * 2,1)

note:
スキル１番は［攻撃］コマンドを
選択したときに使用されます。
<DAE攻撃:12,10,0,0>      # 12フレーム、高度10で対象まで移動
<DAE帰投:18,25>          # 18フレーム、高度25で元に位置に戻る

バリア攻撃

formula: Math.max(a.def * 5 - b.def * 2,1)

message1: のバリアこうげき！

チャージ

description:
次のターンのこうげきりょくが上がるよ！
少しスタミナもかいふくするんだ！

message1: は、チャージをえらんだ！

じぶんボンバー！

formula: Math.max(a. mat * 10 - b.def * 2,1)

message1: のじぶんボンバー！

note:
<DAE攻撃:12,20,0,0>      # 12フレーム、高度10で対象まで移動
<DAE帰投:18,25>          # 18フレーム、高度25で元に位置に戻る

じぶんボンバー

description: じぶんじしんがばくだんになるんだ！

message1: は、じぶんボンバーをつかうぞ！

だいせつざんおろし！

formula: Math.max(a. mat * 8 - b.def * 2,1)

description:
あいてをぐるぐる回すひっさつわざだ！
目を回しちゃうかも！

message1: のだいせつざんおろし！

だいせつざんおろし

description:
あいてをぐるぐる回すひっさつわざだ！
目を回しちゃうかも！

message1: は、だいせつざんおろしをつかうぞ！

ダイナマイトスペシャル！

formula: Math.max(a .mat * 8 - b.def * 2,1)

message1: のダイナマイトスペシャル！

ダイナマイトスペシャル

description:
とにかくすごいひっさつわざだ！
わざポイントも10つかうよ。

message1: は、ダイナマイトスペシャルをつかうぞ！

あっかんべー！

description:
したを出してあいてをおこらせるぞ！
でも、虫のしたってどこにあるのかな･･･？

message1: の、あっかんべー！

あっかんべー

description:
ベロを出してあいてをおこらせるぞ！でも、虫のベロって
どこにあるのかな･･･？　わざポイントも10つかうよ。

message1: は、あっかんべーをつかうぞ！

マッハはりて！

formula: Math.max(a. mat * 11 - b.def * 2,1)

message1: のマッハはりて！

マッハはりて

description: つよそう！

message1: は、マッハはりてをつかうぞ！

スーパーミラクルハイパーデンジャラスアタック！

formula: a. mat * 12

message1: のスーパーミラクルハイパーデンジャラスアタック！

スーパーミラクルハイパーデンジャラスアタック

description:
すごくつよくてかっこいいひっさつわざだ！
きあいをためていっぱつぎゃくてん！

message1: は、スーパーミラクルハイパーデンジャラスアタックをつかうぞ！

げんわくのまい！

description: あやしいおどりで相手を眠らせるぞ！

message1: の、げんわくのまい！

げんわくのまい

description: あやしいおどりで相手を眠らせるぞ！

message1: は、げんわくのまいをつかうぞ！

わざはかい！

formula: Math.max(a.mat * 3 - b.mdf * 2,1)

description: あやしいおどりで相手を眠らせるぞ！

message1: の、わざはかい！

わざはかい

formula: a.mat * 3 - b.mdf * 2

description: あいてのわざポイントをへらすぞ！

message1: は、わざはかいをつかうぞ！

わざドロボウ！

formula: Math.max(a.mat * 2 - b.mdf * 2,1)

description: あやしいおどりで相手を眠らせるぞ！

message1: の、わざドロボウ！

わざドロボウ

description: あいてのわざポイントをぬすむぞ！

message1: は、わざドロボウをつかうぞ！

わざごろし！

formula: Math.max(a. mat * 6 - b.def * 2,1)

message1: のわざごろし！

わざごろし

description: あいてのワザをふういんできるかも！

message1: は、わざごろしをつかうぞ！

チャージごろし！

message1: のチャージごろし！

チャージごろし

description: あいてのチャージをふういんできるかも！

message1: は、チャージごろしをつかうぞ！

バリアごろし！

message1: のバリアごろし！

バリアごろし

description: あいてのバリアをふういんできるかも！

message1: は、バリアごろしをつかうぞ！

こうげきごろし！

message1: のこうげきごろし！

こうげきごろし

description: あいてのこうげきをふういんできるかも！

message1: は、こうげきごろしをつかうぞ！

千年ごろし！

message1: の千年ごろし！

千年ごろし

description:
あいてのヒコウをつくぞ！
わざポイントも10つかうよ。

message1: は、千年ごろしをつかうぞ！

計算中･･･

description: 計算中･･･。

message1: は、計算中だ･･･。

ヘラクレスパワー！

formula: Math.max(a. mat * 9 - b.def,1)

message1: のヘラクレスパワー！

ヘラクレスパワー

description:
いけ！　ヘラクレス！　その力を見せてみろ！
わざポイントも12つかうよ。

message1: は、ヘラクレスパワーをつかうぞ！

トリプルクラッシャー！

message1: のトリプルクラッシャー！

トリプルクラッシャー

description:
三本のつのでやっつけろ！
わざポイントも12つかうよ。

message1: は、トリプルクラッシャーをつかうぞ！

ギロチンスペシャル！

message1: のギロチンスペシャル！

ギロチンスペシャル

description:
スペシャルなわざだ！　でも、ギロチンって何だろ？
わざポイントも12つかうよ。

message1: は、ギロチンスペシャルをつかうぞ！

みずてっぽう！

formula: Math.max(a. mat * 11 - b.def,2)

message1: のみずてっぽう！

みずてっぽう

description: かぜをひかないようにね！

message1: は、みずでっぽうをつかうぞ！

ジェットカッター！

message1: のジェットカッター！

ジェットカッター

description: なんでもまっぷたつだ！

message1: は、ジェットカッターをつかうぞ！


負け…。

message1: は負けてしまった！

message2: に勝った！

message4: は立ち上がった！

note:
ステート１番はＨＰが０になったときに
自動的に付加されます。

目回し

message1: は目が回った！

message2: は目が回った！

message3: は目が回っている。

message4: は目回しがなおった！

おこった！

message1: はおこった！

message2: はおこった！

message3: はおこっている。

message4: のいかりがおさまった。

きぜつ

message1: はきぜつした。

message2: はきぜつした。

message3: はきぜつしている。

message4: は目をさました！

睡眠

message1: は眠った！

message2: を眠らせた！

message3: は眠っている。

message4: は目を覚ました！

計算中

message1: は計算中･･･。

message2: は計算中･･･。

message4: の計算が終わった！

こうげきふういん！

message1: のこうげきがふういんされた！

message2: のこうげきがふういんされた！

message4: はこうげきがつかえるようになった！

ひっさつわざふういん！

message1: のひっさつわざがふういんされた！

message2: のひっさつわざがふういんされた！

message4: はひっさつわざがつかえるようになった！

チャージふういん！

message1: のチャージがふういんされた！

message2: のチャージがふういんされた！

message4: はチャージがつかえるようになった！

バリアふういん！

message1: のバリアがふういんされた！

message2: のバリアがふういんされた！

message4: はバリアがつかえるようになった！

パワーダウン！

message1: は力が出ない･･･。

message2: は力が出ない･･･。

message3: は力が出ない･･･。

message4: の力が戻った！


characterName: Vehicle

armorTypes: 一般防具 魔法防具 軽装防具 重装防具 小型盾 大型盾

battlerName: Dragon

currencyUnit: 円

elements: 物理 炎 氷 雷 水 土 風 光 闇

equipTypes: 武器 盾 頭 身体 装飾品

gameTitle: ぼくのひみつの夏休み2 ver1.2.7

skillTypes: ひっさつわざ チャージ

switches: Live2D中 時間監視中 移動禁止 ターン(ミニゲーム) タイミング（ミニゲーム） 往復（ミニゲーム） 判定往（ミニゲーム） 判定複（ミニゲーム） セミ取り開始（ミニゲーム） インフォメーション無効 汎用一時スイッチ 宝探しゲーム 草すべり中 イカダゲット 抜け道① 抜け道② モデルデータ入力済み 回想モード中 パスワード入力 スクロールバー中 ロリ知識 BL知識 アナル知識 睡姦知識 上ルート 草すべり滑走 気絶禁止 晩御飯 女装 ジェシー宿泊中 夢精中 さっちゃん風呂 夜の明かり モザイク有りシーン PC水着モード エディットモード OPスキップ 立ち絵非表示 クリア済み 夜更かし 夜更かし限界 晩御飯終了 遊び時間終了 一日終了 気絶 気絶中 水泳中 寝坊 朝帰り 秘密基地集合中 睡眠薬 夢H準備 プレイヤー裸 夢精 乗り物BGM エディット中 ムシ育成 BGS停止 フォグ 自動入れ替え停止 ムシバトル中 昆虫大百科 ムシバトル全滅 ムシバトル不可 ムシバトル大会優勝 食用魚ゲット ガチャコンプリート アトリエ初訪問 魚おかず 深夜番組モデル キャンプ参加 自動販売機 少年キャラ BL表現（攻守逆転） BL表現 女性ボイス 少年ボイス 主人公ボイス ヒーロー消しゴムモード ポインタ追い モーションSE 主人公非表示 特殊ズーム 裸いたずら 日焼け中 男性器キャラ カオスモード 自動日焼け ズーム禁止 ホイールクリック ピストン中 アナル中 モデル表示中 断面図表示中 陰毛 再挿入 連続シーン 断面図 ズーム中 Live2Dプリロード 断面図プリロード 動画説明 ランダム生成説明 夢モード説明 AV自慰中 視聴中断 AE無し 隠し場所発見 新品 ラジオ体操中 初めてのエログッズ アトリエキャンセル エログッズ発見中 初めてのポケット 初めての裸体 コンドーム アイス当たり 入隊済み モデル2ロード中 初オナニー 初射精 初体験 初性器観察 初手コキ 初コンドーム 必ず中高 必ず低発育 必ず大人の女性 必ず巨乳 必ず熟女 必ず少女 必ず少年 必ずふたなり 必ずボテ腹 ランダム生成補正OFF 裏ローディング 回想部屋説明 回想部屋移動 夢モード ノコギリクワガタ+ オニクワガタ コクワガタ アカアシ ネブト ミヤマ ヒラタ オオクワ カブト♀ カブト カナブン マイマイ オサムシ ハンミョウ カミキリ シロスジ ルリボシ ハラビロ カマキリ タガメ ゲンゴロウ サワガニ ザリガニ メカカブ ヘラク コーカサス ギラファ キンカブ ムシコンプ 正常位プレイ_攻略 手コキプレイ_攻略 フェラプレイ_攻略 パイズリプレイ_攻略 騎乗位プレイ_攻略 睡姦オナニー_攻略 後背位プレイ_攻略 睡姦パイズリ_攻略 睡姦素股_攻略 睡姦フェラ_攻略 尻コキ_攻略 ロリ知識_攻略 BL知識_攻略 アナル知識_攻略 睡姦知識_攻略 背面睡姦_攻略 睡姦_攻略 本で自慰_攻略 本①攻略 本②攻略 本③攻略 本④攻略 本⑤攻略 本⑥攻略 本⑦攻略 テレビで自慰_攻略 AVで自慰_攻略 AV①攻略 AV②攻略 AV③攻略 AV④攻略 AV⑤攻略 AV⑥攻略 AV⑦攻略 AV⑧攻略 AV⑨攻略 夢モード攻略 本⑧攻略 AV⑩攻略 AV:EX①攻略 AV:EX②攻略 AV:EX③攻略 AV:EX④攻略 AV:EX⑤攻略 AV:EX⑥攻略 AV:EX⑦攻略 AV:EX⑧攻略 AV:EX⑨攻略 AV:EX⑩攻略 本EX攻略 AV:EX⑪攻略 物置説明 屋根裏説明 自販機説明 見せ合い（お姉ちゃん）攻略 素股事故（お姉ちゃん）攻略 睡姦（お姉ちゃん）攻略 初H（美大生）攻略 初H（お店）攻略 初H（留学生）攻略 自慰のぞき（おばちゃん）攻略 風呂フェラ（おばちゃん） 初アナル（おばちゃん）攻略 初H（マダム）攻略 目隠しフェラ（従妹）攻略 お医者さんごっこ（従妹）攻略 足コキ（ナナ）攻略 初H（ナナ）攻略 相互自慰（ミカ）攻略 フェラ（スイ）攻略 初H（ユウ）攻略 初SM（友母）攻略 （スイ）攻略 睡姦（美大生）攻略 睡姦（おばちゃん）攻略 睡姦（さっちゃん）攻略 睡姦（留学生）攻略 睡姦（ナナちゃん）攻略 睡姦（ユウくん）攻略 睡姦（お店）攻略 睡姦（友母）攻略 睡姦（マダム）攻略 雨宿り（美大生）攻略 オナニーばれ（お店）攻略 トイレ遭遇（留学生）攻略 深夜露出（友母）攻略 ベニパン（マダム）攻略 ブルマ（ミカ）攻略 お姉ちゃんモデル おばちゃんモデル さっちゃんモデル 美大生モデル お店モデル 留学生モデル 友母モデル マダムモデル ナナちゃんモデル ミカちゃんモデル スイちゃんモデル ユウくんモデル 夢見のポプリ＋ 夢見草の花＋ 水槽＋ ヘッドライト＋ ワセリン＋ ポシェット＋ ガチャコンプ＋ 正常位＋ 騎乗位＋ 後背位＋ 手コキ＋ フェラ＋ パイズリ＋ 室内 トイレ使用中 主人公トイレ使用中 トイレ使用中B 自慰中 必ずラッキースケベ 着衣カスタム 背面騎乗位 騎乗位デフォルト バイブオナニー 初ふたなり おばちゃん汎用プレイ さっちゃん汎用プレイ 太鼓練習 体位カスタム カスタムモード中 カスタムモードチラシ発行 チラシ男性器用処理 太鼓ミニゲーム 太鼓ヒット 太鼓ミス 太鼓ギブアップ 顔射 初足コキ 草すべり説明 秘密基地30日 夢精処理中 美大生睡姦脱衣 回想用コンドーム イカダ乗船中 紙飛行機説明 手コキ有り 従姉用睡眠薬 宝探し終了 エンドロール マップ①秘密基地 マップ②アトリエ マップ③湖 マップ④穴場 マップ⑤お花 マップ⑥廃墟 マップ⑦牧場 マップ⑧学校 マップ⑨神社 マップ⑩抜け道1 マップ⑪空地 マップ⑫別荘 マップ⑬洞窟 マップ⑭自販機 マップ⑮滝 マップ⑯スキー場 カスタムモードのみ解禁 屋根裏 エンドレスモード

basic: レベル Lv スタミナ スタミナ わざポイント わざP きあい きあい けいけんち EXP

params: スタミナ わざポイント パワー かたさ わざパワー わざガード すばやさ 運 命中率 回避率

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が下がった！

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の勝ち！

title1Name: index

variables: 日数 時 分 曜日 ミニゲーム難易度 マップID 運勢 ニワトリ セミ取りイベント よい子ポイント 難易度 セルフ変数① セルフ変数② ストーリー進行度 性知識レベル 着衣状態 モデル呼び出し番号 ランダム 百進数 Live2D音量 R15 時間の速さ 記録用R-15 さっちゃん好感度 お姉ちゃん好感度 美大生好感度 お店好感度 留学生好感度 バトル勝利数 釣果 エッチな本の数 エッチなビデオの数 本の番号 選択した本の番号 ビデオ番号 選択したビデオ番号 はじめての裸体モデル 敵レベル ボーナス経験値 自分ムシ位置 相手ムシ位置 判定用ムシ位置 秘密基地イベント 草すべりイベント ミカちゃん好感度 ナナちゃん好感度 釣り 釣り成功判定 ガジェット種類 歯磨きした日 お風呂に入った日 性知識発見レベル 夢精回数 回想用性知識 スイちゃん好感度 収集したムシの数 手元のムシの数 性別（SEX） 発育（AG） 予備01 前髪（F_hair） 横髪（S_hair） 後ろ髪（R_hair） 髪EX（EX_hair） 髪色（Hair_C） 髪明るさ（Hair_B） アイライン（Eye_liner） 眼サイズ（Eye_size） 瞳サイズ（Pupil_size） 瞳色（Pupil_C） 眉（Brow） 特徴（CP） 化粧（Makeup） 顔ぽっちゃり（FAT_face） アクセサリー（Accessory） 後ろ髪長さ（R_hair_L） 予備02 肌色（SK_C） 胸サイズ（Bust） 胸向き（Bust_UP） 乳首種類（Nipple） 乳首大きさ（Nipple_size） 肌色明るさ（SK_B） 脂肪（FAT） 陰毛（AH_size） 予備03 日焼けタイプ（SB_type） 日焼け（SB） 固定日焼け（SB_default） ボテ腹（PW） 予備04 予備05 男性器（Penis） 下着（UC） 服（COS） 寝間着 キャラクター プレイヤー日焼け プレイヤー陰茎サイズ プレイヤー不透明度 陰茎不透明度 モーション効果音音量 ズーム拡大率 ズーム位置X ズーム位置Y モード 拡大率 位置X 位置Y SV拡大率 SV位置X SV位置Y SVズーム拡大率 SVズーム位置X SVズーム位置Y モーション種類 背景拡大率 背景拡大位置X 背景拡大位置Y ピストン速度 記録用ピストン速度 呼吸間隔 自慰種類 射精場所 色調処理変数⑤ 色調処理変数 色調処理変数② 色調処理変数③ 色調処理変数④ 身長調整 撮影ポーズ 小数点計算用① 小数点計算用② スクロールバー数 一時変数 電話番号A 電話番号B 値段 さっちゃん勝利数 ボウシくん勝利数 ユウくん勝利数 ハカセくん勝利数 ボスくん勝利数 おばちゃん呼び名 さっちゃん呼び名 おば好感度 友母好感度 マダム好感度 ユウくん好感度 回想モード用背景 入れ替え先モデル 入れ替え元モデル 入れ替え元_番号 チラシモデル一時保存 主人公（デフォルト） 美大生（デフォルト） 従姉（デフォルト） お店（デフォルト） 外国（デフォルト） 叔母（デフォルト） 友母（デフォルト） マダム（デフォルト） 年上（デフォルト） 同い年（デフォルト） 従妹（デフォルト） 不思議（デフォルト） 少年（デフォルト） 主人公 美大生 従姉 お店 外国 叔母 友母 マダム 年上 同い年 従妹 不思議 少年 標準 お気に入り① お気に入り② お気に入り③ お気に入り④ お気に入り⑤ お気に入り⑥ お気に入り⑦ お気に入り⑧ お気に入り⑨ お気に入り⑩ お気に入り⑪ お気に入り⑫ お気に入り⑬ お気に入り⑭ お気に入り⑮ お気に入り⑯ お気に入り⑰ お気に入り⑱ お気に入り⑲ お気に入り⑳ エッチな本① エッチな本② エッチな本EX テレビ ビデオ① ノコギリLv オニLv コクワLv アカアシLv ネブト ミヤマ ヒラタ オオクワ カブト♀ カブト カナブン マイマイ オサムシ ハンミョウ カミキリ シロスジ ルリボシ ハラビロ カマキリ タガメ ゲンゴロウ サワガニ ザリガニ メカカブ ヘラク コーカサス ギラファ キンカブ 性知識レベル＋ 性知識発見レベル＋ 育成ポイント＋ 良い子ポイント＋ 所持金＋ プレイヤーのX座標 プレイヤーのY座標 プレイヤー座標のリージョン タイミング判定用 難易度 敵の数値 成否判定 ダメージ 敵の乱数最大 敵の乱数最小 ぼくの最大HP ぼくのHP 敵の最大HP 敵のHP 勝敗 タイミング値往 タイミング値復 判定往 判定復 何か 相手飛行機P 相手飛行機T タイミングバーP タイミングバーT 飛距離計算用 飛距離計算結果 相手飛距離 カウント タイミングバー最大数 セミ捕り目標 橋イベント 釣りの穴場イベント 宝探しごっこ タイマー フィクション セミ 自動販売機購入額 ED カスタムするキャラ 太鼓差分 太鼓叩き 太鼓点数 コンボ 夏祭り 上半身ポーズ 下半身ポーズ イベント汎用 お気に入りP上① お気に入りP下① お気に入りP上② お気に入りP下② お気に入りP上③ お気に入りP下③ 自慰監視 トイレ監視 公衆トイレ のぞき対象

weaponTypes: 短剣 剣 フレイル 斧 ムチ 杖 弓 クロスボウ 銃 爪 グローブ 槍


value: #ffffff

blendMode: add

spawnType: point

blendMode: ADD

spawnType: circle


code:
/*! 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; g < j; g++)if (e[g] === a) return g; return -1 } function I() {
        var a = arguments, e; for (e in a[1]) if (a[1].hasOwnProperty(e)) switch (H(a[1][e])) {
            case "object": a[0][e] =
                I({}, a[0][e], a[1][e]); break; case "array": a[0][e] = a[1][e].slice(0); break; default: a[0][e] = a[1][e]
        }return 2 < a.length ? I.apply(null, [a[0]].concat(Array.prototype.slice.call(a, 2))) : a[0]
    } function N(a) { a = Math.round(255 * a).toString(16); return 1 === a.length ? "0" + a : a } function S(a, e, g, j) { if (a.addEventListener) a[j ? "removeEventListener" : "addEventListener"](e, g, !1); else if (a.attachEvent) a[j ? "detachEvent" : "attachEvent"]("on" + e, g) } function D(a, e) {
        function g(a, b, d, c) { return y[0 | a][Math.round(Math.min((b - d) / (c - d) * J, J))] }
        function r() { f.legend.fps !== q && (f.legend.fps = q, f.legend[T] = q ? "FPS" : "ms"); K = q ? b.fps : b.duration; f.count[T] = 999 < K ? "999+" : K.toFixed(99 < K ? 0 : d.decimals) } function m() {
            z = A(); L < z - d.threshold && (b.fps -= b.fps / Math.max(1, 60 * d.smoothing / d.interval), b.duration = 1E3 / b.fps); for (c = d.history; c--;)E[c] = 0 === c ? b.fps : E[c - 1], F[c] = 0 === c ? b.duration : F[c - 1]; r(); if (d.heat) {
                if (w.length) for (c = w.length; c--;)w[c].el.style[h[w[c].name].heatOn] = q ? g(h[w[c].name].heatmap, b.fps, 0, d.maxFps) : g(h[w[c].name].heatmap, b.duration, d.threshold,
                    0); if (f.graph && h.column.heatOn) for (c = u.length; c--;)u[c].style[h.column.heatOn] = q ? g(h.column.heatmap, E[c], 0, d.maxFps) : g(h.column.heatmap, F[c], d.threshold, 0)
            } if (f.graph) for (p = 0; p < d.history; p++)u[p].style.height = (q ? E[p] ? Math.round(O / d.maxFps * Math.min(E[p], d.maxFps)) : 0 : F[p] ? Math.round(O / d.threshold * Math.min(F[p], d.threshold)) : 0) + "px"
        } function k() { 20 > d.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 < h.heatmaps.length; p++) {
                    y[p] = []; for (c = 0; c <= J; c++) {
                        var b = y[p], e = c, g; g = 0.33 / J * c; var j = h.heatmaps[p].saturation, m = h.heatmaps[p].lightness, n = void 0, k = void 0, l = void 0, t = l = void 0, v = n = k = void 0, v = void 0, l = 0.5 >= 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 < d.history; c++)u[c] = f.graph.appendChild(s(document.createElement("div"), h.column)), u[c].style.position = "absolute", u[c].style.bottom = 0, u[c].style.right = c * h.column.width + c * h.column.spacing + "px", u[c].style.width = h.column.width + "px", u[c].style.height = "0px" } s(f.container, d); r(); a.appendChild(f.container); f.graph && (O = f.graph.clientHeight); d.toggleOn && ("click" ===
                    d.toggleOn && (f.container.style.cursor = "pointer"), S(f.container, d.toggleOn, G))
        } "object" === H(a) && a.nodeType === j && (e = a, a = document.body); a || (a = document.body); var b = this, d = I({}, D.defaults, e || {}), f = {}, u = [], h, y, J = 100, w = [], W = 0, B = d.threshold, Q = 0, L = A() - B, z, E = [], F = [], x, P, q = "fps" === d.show, O, K, c, p; b.options = d; b.fps = 0; b.duration = 0; b.isPaused = 0; b.tickStart = function () { Q = A() }; b.tick = function () { z = A(); W = z - L; B += (W - B) / d.smoothing; b.fps = 1E3 / B; b.duration = Q < L ? B : z - Q; L = z }; b.pause = function () {
            x && (b.isPaused = 1, clearTimeout(x),
                C(x), C(P), x = P = 0); return b
        }; b.resume = function () { x || (b.isPaused = 0, k()); return b }; b.set = function (a, c) { d[a] = c; q = "fps" === d.show; -1 !== R(a, X) && V(); -1 !== R(a, Y) && s(f.container, d); return b }; b.showDuration = function () { b.set("show", "ms"); return b }; b.showFps = function () { b.set("show", "fps"); return b }; b.toggle = function () { b.set("show", q ? "ms" : "fps"); return b }; b.hide = function () { b.pause(); f.container.style.display = "none"; return b }; b.show = function () { b.resume(); f.container.style.display = "block"; return b }; b.destroy = function () {
            b.pause();
            U(); b.tick = b.tickStart = function () { }
        }; V(); k()
    } var A, r = m.performance; A = r && (r.now || r.webkitNow) ? r[r.now ? "now" : "webkitNow"].bind(r) : function () { return +new Date }; for (var C = m.cancelAnimationFrame || m.cancelRequestAnimationFrame, M = m.requestAnimationFrame, r = ["moz", "webkit", "o"], G = 0, k = 0, Z = r.length; k < Z && !C; ++k)M = (C = m[r[k] + "CancelAnimationFrame"] || m[r[k] + "CancelRequestAnimationFrame"]) && m[r[k] + "RequestAnimationFrame"]; C || (M = function (a) {
        var e = A(), g = Math.max(0, 16 - (e - G)); G = e + g; return m.setTimeout(function () {
            a(e +
                g)
        }, g)
    }, C = function (a) { clearTimeout(a) }); var T = "string" === H(document.createElement("div").textContent) ? "textContent" : "innerText"; D.extend = I; window.FPSMeter = D; D.defaults = { interval: 100, smoothing: 10, show: "fps", toggleOn: "click", decimals: 1, maxFps: 60, threshold: 100, position: "absolute", zIndex: 10, left: "5px", top: "5px", right: "auto", bottom: "auto", margin: "0 0 0 0", theme: "dark", heat: 0, graph: 0, history: 20 }; var X = ["toggleOn", "theme", "heat", "graph", "history"], Y = "position zIndex left top right bottom margin".split(" ")
})(window); (function (m, j) {
    j.theme = {}; var s = j.theme.base = {
        heatmaps: [], container: { heatOn: null, heatmap: null, padding: "5px", minWidth: "95px", height: "30px", lineHeight: "30px", textAlign: "right", textShadow: "none" }, count: { heatOn: null, heatmap: null, position: "absolute", top: 0, right: 0, padding: "5px 10px", height: "30px", fontSize: "24px", fontFamily: "Consolas, Andale Mono, monospace", zIndex: 2 }, legend: {
            heatOn: null, heatmap: null, position: "absolute", top: 0, left: 0, padding: "5px 10px", height: "30px", fontSize: "12px", lineHeight: "32px", fontFamily: "sans-serif",
            textAlign: "left", zIndex: 2
        }, graph: { heatOn: null, heatmap: null, position: "relative", boxSizing: "padding-box", MozBoxSizing: "padding-box", height: "100%", zIndex: 1 }, column: { width: 4, spacing: 1, heatOn: null, heatmap: null }
    }; j.theme.dark = j.extend({}, s, { heatmaps: [{ saturation: 0.8, lightness: 0.8 }], container: { background: "#222", color: "#fff", border: "1px solid #1a1a1a", textShadow: "1px 1px 0 #222" }, count: { heatOn: "color" }, column: { background: "#3f3f3f" } }); j.theme.light = j.extend({}, s, {
        heatmaps: [{ saturation: 0.5, lightness: 0.5 }],
        container: { color: "#666", background: "#fff", textShadow: "1px 1px 0 rgba(255,255,255,.5), -1px -1px 0 rgba(255,255,255,.5)", boxShadow: "0 0 0 1px rgba(0,0,0,.1)" }, count: { heatOn: "color" }, column: { background: "#eaeaea" }
    }); j.theme.colorful = j.extend({}, s, { heatmaps: [{ saturation: 0.5, lightness: 0.6 }], container: { heatOn: "backgroundColor", background: "#888", color: "#fff", textShadow: "1px 1px 0 rgba(0,0,0,.2)", boxShadow: "0 0 0 1px rgba(0,0,0,.1)" }, column: { background: "#777", backgroundColor: "rgba(0,0,0,.2)" } }); j.theme.transparent =
        j.extend({}, s, { heatmaps: [{ saturation: 0.8, lightness: 0.5 }], container: { padding: 0, color: "#fff", textShadow: "1px 1px 0 rgba(0,0,0,.5)" }, count: { padding: "0 5px", height: "40px", lineHeight: "40px" }, legend: { padding: "0 5px", height: "40px", lineHeight: "42px" }, graph: { height: "40px" }, column: { width: 5, background: "#999", heatOn: "backgroundColor", opacity: 0.5 } })
})(window, FPSMeter);


code:
var PIXI;
(function (PIXI) {
    var tilemap;
    (function (tilemap) {
        var CanvasTileRenderer = (function () {
            function CanvasTileRenderer(renderer) {
                this.tileAnim = [0, 0];
                this.dontUseTransform = false;
                this.renderer = renderer;
                this.tileAnim = [0, 0];
            }
            return CanvasTileRenderer;
        }());
        tilemap.CanvasTileRenderer = CanvasTileRenderer;
        PIXI.CanvasRenderer.registerPlugin('tilemap', CanvasTileRenderer);
    })(tilemap = PIXI.tilemap || (PIXI.tilemap = {}));
})(PIXI || (PIXI = {}));
var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var PIXI;
(function (PIXI) {
    var tilemap;
    (function (tilemap) {
        var CompositeRectTileLayer = (function (_super) {
            __extends(CompositeRectTileLayer, _super);
            function CompositeRectTileLayer(zIndex, bitmaps, useSquare, texPerChild) {
                var _this = _super.call(this) || this;
                _this.shadowColor = new Float32Array([0.0, 0.0, 0.0, 0.5]);
                _this.modificationMarker = 0;
                _this._globalMat = null;
                _this._tempScale = null;
                _this.initialize.apply(_this, arguments);
                return _this;
            }
            CompositeRectTileLayer.prototype.updateTransform = function () {
                _super.prototype.displayObjectUpdateTransform.call(this);
            };
            CompositeRectTileLayer.prototype.initialize = function (zIndex, bitmaps, useSquare, texPerChild) {
                this.z = this.zIndex = zIndex;
                this.useSquare = useSquare;
                this.texPerChild = texPerChild || 16;
                if (bitmaps) {
                    this.setBitmaps(bitmaps);
                }
            };
            CompositeRectTileLayer.prototype.setBitmaps = function (bitmaps) {
                var texPerChild = this.texPerChild;
                var len1 = this.children.length;
                var len2 = Math.ceil(bitmaps.length / texPerChild);
                var i;
                for (i = 0; i < len1; i++) {
                    this.children[i].textures = bitmaps.slice(i * texPerChild, (i + 1) * texPerChild);
                }
                for (i = len1; i < len2; i++) {
                    this.addChild(new tilemap.RectTileLayer(this.zIndex, bitmaps.slice(i * texPerChild, (i + 1) * texPerChild)));
                }
            };
            CompositeRectTileLayer.prototype.clear = function () {
                for (var i = 0; i < this.children.length; i++)
                    this.children[i].clear();
                this.modificationMarker = 0;
            };
            CompositeRectTileLayer.prototype.addRect = function (num, u, v, x, y, tileWidth, tileHeight) {
                if (this.children[num] && this.children[num].textures)
                    this.children[num].addRect(0, u, v, x, y, tileWidth, tileHeight);
            };
            CompositeRectTileLayer.prototype.addFrame = function (texture_, x, y, animX, animY) {
                var texture;
                var layer = null, ind = 0;
                var children = this.children;
                if (typeof texture_ === "number") {
                    var childIndex = texture_ / this.texPerChild >> 0;
                    layer = children[childIndex];
                    if (!layer) {
                        layer = children[0];
                        if (!layer) {
                            return false;
                        }
                        ind = 0;
                    }
                    else {
                        ind = texture_ % this.texPerChild;
                    }
                    texture = layer.textures[ind];
                }
                else if (typeof texture_ === "string") {
                    texture = PIXI.Texture.fromImage(texture_);
                }
                else {
                    texture = texture_;
                    for (var i = 0; i < children.length; i++) {
                        var child = children[i];
                        var tex = child.textures;
                        for (var j = 0; j < tex.length; j++) {
                            if (tex[j].baseTexture == texture.baseTexture) {
                                layer = child;
                                ind = j;
                                break;
                            }
                        }
                        if (layer) {
                            break;
                        }
                    }
                    if (!layer) {
                        for (i = 0; i < children.length; i++) {
                            var child = children[i];
                            if (child.textures.length < this.texPerChild) {
                                layer = child;
                                ind = child.textures.length;
                                child.textures.push(texture);
                                break;
                            }
                        }
                        if (!layer) {
                            children.push(layer = new tilemap.RectTileLayer(this.zIndex, texture));
                            ind = 0;
                        }
                    }
                }
                layer.addRect(ind, texture.frame.x, texture.frame.y, x, y, texture.frame.width, texture.frame.height, animX, animY);
                return true;
            };
            ;
            CompositeRectTileLayer.prototype.renderCanvas = function (renderer) {
                if (!renderer.plugins.tilemap.dontUseTransform) {
                    var wt = this.worldTransform;
                    renderer.context.setTransform(wt.a, wt.b, wt.c, wt.d, wt.tx * renderer.resolution, wt.ty * renderer.resolution);
                }
                var layers = this.children;
                for (var i = 0; i < layers.length; i++)
                    layers[i].renderCanvas(renderer);
            };
            ;
            CompositeRectTileLayer.prototype.renderWebGL = function (renderer) {
                var gl = renderer.gl;
                var shader = renderer.plugins.tilemap.getShader(this.useSquare);
                renderer.setObjectRenderer(renderer.plugins.tilemap);
                renderer.bindShader(shader);
                this._globalMat = this._globalMat || new PIXI.Matrix();
                renderer._activeRenderTarget.projectionMatrix.copy(this._globalMat).append(this.worldTransform);
                shader.uniforms.projectionMatrix = this._globalMat.toArray(true);
                shader.uniforms.shadowColor = this.shadowColor;
                if (this.useSquare) {
                    var tempScale = this._tempScale = (this._tempScale || [0, 0]);
                    tempScale[0] = this._globalMat.a >= 0 ? 1 : -1;
                    tempScale[1] = this._globalMat.d < 0 ? 1 : -1;
                    var ps = shader.uniforms.pointScale = tempScale;
                    shader.uniforms.projectionScale = Math.abs(this.worldTransform.a) * renderer.resolution;
                }
                var af = shader.uniforms.animationFrame = renderer.plugins.tilemap.tileAnim;
                var layers = this.children;
                for (var i = 0; i < layers.length; i++)
                    layers[i].renderWebGL(renderer, this.useSquare);
            };
            CompositeRectTileLayer.prototype.isModified = function (anim) {
                var layers = this.children;
                if (this.modificationMarker != layers.length) {
                    return true;
                }
                for (var i = 0; i < layers.length; i++) {
                    var layer = layers[i];
                    if (layer.modificationMarker != layer.pointsBuf.length ||
                        anim && layer.hasAnim) {
                        return true;
                    }
                }
                return false;
            };
            CompositeRectTileLayer.prototype.clearModify = function () {
                var layers = this.children;
                this.modificationMarker = layers.length;
                for (var i = 0; i < layers.length; i++) {
                    var layer = layers[i];
                    layer.modificationMarker = layer.pointsBuf.length;
                }
            };
            return CompositeRectTileLayer;
        }(PIXI.Container));
        tilemap.CompositeRectTileLayer = CompositeRectTileLayer;
    })(tilemap = PIXI.tilemap || (PIXI.tilemap = {}));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
    var tilemap;
    (function (tilemap) {
        var GraphicsLayer = (function (_super) {
            __extends(GraphicsLayer, _super);
            function GraphicsLayer(zIndex) {
                var _this = _super.call(this) || this;
                _this.z = _this.zIndex = zIndex;
                return _this;
            }
            GraphicsLayer.prototype.renderCanvas = function (renderer) {
                var wt = null;
                if (renderer.plugins.tilemap.dontUseTransform) {
                    wt = this.transform.worldTransform;
                    this.transform.worldTransform = PIXI.Matrix.IDENTITY;
                }
                renderer.plugins.graphics.render(this);
                if (renderer.plugins.tilemap.dontUseTransform) {
                    this.transform.worldTransform = wt;
                }
                renderer.context.globalAlpha = 1.0;
            };
            GraphicsLayer.prototype.renderWebGL = function (renderer) {
                if (!this._webGL[renderer.CONTEXT_UID])
                    this.dirty = true;
                _super.prototype.renderWebGL.call(this, renderer);
            };
            GraphicsLayer.prototype.isModified = function (anim) {
                return false;
            };
            GraphicsLayer.prototype.clearModify = function () {
            };
            return GraphicsLayer;
        }(PIXI.Graphics));
    })(tilemap = PIXI.tilemap || (PIXI.tilemap = {}));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
    var tilemap;
    (function (tilemap) {
        var RectTileLayer = (function (_super) {
            __extends(RectTileLayer, _super);
            function RectTileLayer(zIndex, texture) {
                var _this = _super.call(this) || this;
                _this.z = 0;
                _this.zIndex = 0;
                _this.pointsBuf = [];
                _this._tempSize = new Float32Array([0, 0]);
                _this._tempTexSize = 1;
                _this.modificationMarker = 0;
                _this.hasAnim = false;
                _this.vbId = 0;
                _this.vbBuffer = null;
                _this.vbArray = null;
                _this.vbInts = null;
                _this.initialize(zIndex, texture);
                return _this;
            }
            RectTileLayer.prototype.initialize = function (zIndex, textures) {
                if (!textures) {
                    textures = [];
                }
                else if (!(textures instanceof Array) && textures.baseTexture) {
                    textures = [textures];
                }
                this.textures = textures;
                this.z = this.zIndex = zIndex;
                this.visible = false;
            };
            RectTileLayer.prototype.clear = function () {
                this.pointsBuf.length = 0;
                this.modificationMarker = 0;
                this.hasAnim = false;
            };
            RectTileLayer.prototype.renderCanvas = function (renderer) {
                if (this.textures.length === 0)
                    return;
                var points = this.pointsBuf;
                renderer.context.fillStyle = '#000000';
                for (var i = 0, n = points.length; i < n; i += 9) {
                    var x1 = points[i], y1 = points[i + 1];
                    var x2 = points[i + 2], y2 = points[i + 3];
                    var w = points[i + 4];
                    var h = points[i + 5];
                    x1 += points[i + 6] * renderer.plugins.tilemap.tileAnim[0];
                    y1 += points[i + 7] * renderer.plugins.tilemap.tileAnim[1];
                    var textureId = points[i + 8];
                    if (textureId >= 0) {
                        renderer.context.drawImage(this.textures[textureId].baseTexture.source, x1, y1, w, h, x2, y2, w, h);
                    }
                    else {
                        renderer.context.globalAlpha = 0.5;
                        renderer.context.fillRect(x2, y2, w, h);
                        renderer.context.globalAlpha = 1;
                    }
                }
            };
            RectTileLayer.prototype.addRect = function (textureId, u, v, x, y, tileWidth, tileHeight, animX, animY) {
                if (animX === void 0) { animX = 0; }
                if (animY === void 0) { animY = 0; }
                var pb = this.pointsBuf;
                this.hasAnim = this.hasAnim || animX > 0 || animY > 0;
                if (tileWidth == tileHeight) {
                    pb.push(u);
                    pb.push(v);
                    pb.push(x);
                    pb.push(y);
                    pb.push(tileWidth);
                    pb.push(tileHeight);
                    pb.push(animX | 0);
                    pb.push(animY | 0);
                    pb.push(textureId);
                }
                else {
                    var i;
                    if (tileWidth % tileHeight === 0) {
                        for (i = 0; i < tileWidth / tileHeight; i++) {
                            pb.push(u + i * tileHeight);
                            pb.push(v);
                            pb.push(x + i * tileHeight);
                            pb.push(y);
                            pb.push(tileHeight);
                            pb.push(tileHeight);
                            pb.push(animX | 0);
                            pb.push(animY | 0);
                            pb.push(textureId);
                        }
                    }
                    else if (tileHeight % tileWidth === 0) {
                        for (i = 0; i < tileHeight / tileWidth; i++) {
                            pb.push(u);
                            pb.push(v + i * tileWidth);
                            pb.push(x);
                            pb.push(y + i * tileWidth);
                            pb.push(tileWidth);
                            pb.push(tileWidth);
                            pb.push(animX | 0);
                            pb.push(animY | 0);
                            pb.push(textureId);
                        }
                    }
                    else {
                        pb.push(u);
                        pb.push(v);
                        pb.push(x);
                        pb.push(y);
                        pb.push(tileWidth);
                        pb.push(tileHeight);
                        pb.push(animX | 0);
                        pb.push(animY | 0);
                        pb.push(textureId);
                    }
                }
            };
            ;
            RectTileLayer.prototype.renderWebGL = function (renderer, useSquare) {
                if (useSquare === void 0) { useSquare = false; }
                var points = this.pointsBuf;
                if (points.length === 0)
                    return;
                var rectsCount = points.length / 9;
                var tile = renderer.plugins.tilemap;
                var gl = renderer.gl;
                if (!useSquare) {
                    tile.checkIndexBuffer(rectsCount);
                }
                var shader = tile.getShader(useSquare);
                var textures = this.textures;
                if (textures.length === 0)
                    return;
                var len = textures.length;
                if (this._tempTexSize < shader.maxTextures) {
                    this._tempTexSize = shader.maxTextures;
                    this._tempSize = new Float32Array(2 * shader.maxTextures);
                }
                for (var i = 0; i < len; i++) {
                    if (!textures[i] || !textures[i].valid)
                        return;
                    var texture = textures[i].baseTexture;
                }
                tile.bindTextures(renderer, shader, textures);
                var vb = tile.getVb(this.vbId);
                if (!vb) {
                    vb = tile.createVb(useSquare);
                    this.vbId = vb.id;
                    this.vbBuffer = null;
                    this.modificationMarker = 0;
                }
                var vao = vb.vao;
                renderer.bindVao(vao);
                var vertexBuf = vb.vb;
                vertexBuf.bind();
                var vertices = rectsCount * shader.vertPerQuad;
                if (vertices === 0)
                    return;
                if (this.modificationMarker != vertices) {
                    this.modificationMarker = vertices;
                    var vs = shader.stride * vertices;
                    if (!this.vbBuffer || this.vbBuffer.byteLength < vs) {
                        var bk = shader.stride;
                        while (bk < vs) {
                            bk *= 2;
                        }
                        this.vbBuffer = new ArrayBuffer(bk);
                        this.vbArray = new Float32Array(this.vbBuffer);
                        this.vbInts = new Uint32Array(this.vbBuffer);
                        vertexBuf.upload(this.vbBuffer, 0, true);
                    }
                    var arr = this.vbArray, ints = this.vbInts;
                    var sz = 0;
                    var textureId, shiftU, shiftV;
                    if (useSquare) {
                        for (i = 0; i < points.length; i += 9) {
                            textureId = (points[i + 8] >> 2);
                            shiftU = 1024 * (points[i + 8] & 1);
                            shiftV = 1024 * ((points[i + 8] >> 1) & 1);
                            arr[sz++] = points[i + 2];
                            arr[sz++] = points[i + 3];
                            arr[sz++] = points[i + 0] + shiftU;
                            arr[sz++] = points[i + 1] + shiftV;
                            arr[sz++] = points[i + 4];
                            arr[sz++] = points[i + 6];
                            arr[sz++] = points[i + 7];
                            arr[sz++] = textureId;
                        }
                    }
                    else {
                        var tint = -1;
                        for (i = 0; i < points.length; i += 9) {
                            var eps = 0.5;
                            textureId = (points[i + 8] >> 2);
                            shiftU = 1024 * (points[i + 8] & 1);
                            shiftV = 1024 * ((points[i + 8] >> 1) & 1);
                            var x = points[i + 2], y = points[i + 3];
                            var w = points[i + 4], h = points[i + 5];
                            var u = points[i] + shiftU, v = points[i + 1] + shiftV;
                            var animX = points[i + 6], animY = points[i + 7];
                            arr[sz++] = x;
                            arr[sz++] = y;
                            arr[sz++] = u;
                            arr[sz++] = v;
                            arr[sz++] = u + eps;
                            arr[sz++] = v + eps;
                            arr[sz++] = u + w - eps;
                            arr[sz++] = v + h - eps;
                            arr[sz++] = animX;
                            arr[sz++] = animY;
                            arr[sz++] = textureId;
                            arr[sz++] = x + w;
                            arr[sz++] = y;
                            arr[sz++] = u + w;
                            arr[sz++] = v;
                            arr[sz++] = u + eps;
                            arr[sz++] = v + eps;
                            arr[sz++] = u + w - eps;
                            arr[sz++] = v + h - eps;
                            arr[sz++] = animX;
                            arr[sz++] = animY;
                            arr[sz++] = textureId;
                            arr[sz++] = x + w;
                            arr[sz++] = y + h;
                            arr[sz++] = u + w;
                            arr[sz++] = v + h;
                            arr[sz++] = u + eps;
                            arr[sz++] = v + eps;
                            arr[sz++] = u + w - eps;
                            arr[sz++] = v + h - eps;
                            arr[sz++] = animX;
                            arr[sz++] = animY;
                            arr[sz++] = textureId;
                            arr[sz++] = x;
                            arr[sz++] = y + h;
                            arr[sz++] = u;
                            arr[sz++] = v + h;
                            arr[sz++] = u + eps;
                            arr[sz++] = v + eps;
                            arr[sz++] = u + w - eps;
                            arr[sz++] = v + h - eps;
                            arr[sz++] = animX;
                            arr[sz++] = animY;
                            arr[sz++] = textureId;
                        }
                    }
                    vertexBuf.upload(arr, 0, true);
                }
                if (useSquare)
                    gl.drawArrays(gl.POINTS, 0, vertices);
                else
                    gl.drawElements(gl.TRIANGLES, rectsCount * 6, gl.UNSIGNED_SHORT, 0);
            };
            return RectTileLayer;
        }(PIXI.Container));
        tilemap.RectTileLayer = RectTileLayer;
    })(tilemap = PIXI.tilemap || (PIXI.tilemap = {}));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
    var tilemap;
    (function (tilemap) {
        var rectShaderFrag = "varying vec2 vTextureCoord;\nvarying vec4 vFrame;\nvarying float vTextureId;\nuniform vec4 shadowColor;\nuniform sampler2D uSamplers[%count%];\nuniform vec2 uSamplerSize[%count%];\n\nvoid main(void){\n   vec2 textureCoord = clamp(vTextureCoord, vFrame.xy, vFrame.zw);\n   float textureId = floor(vTextureId + 0.5);\n\n   vec4 color;\n   %forloop%\n   gl_FragColor = color;\n}";
        var rectShaderVert = "\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aFrame;\nattribute vec2 aAnim;\nattribute float aTextureId;\n\nuniform mat3 projectionMatrix;\nuniform vec2 animationFrame;\n\nvarying vec2 vTextureCoord;\nvarying float vTextureId;\nvarying vec4 vFrame;\n\nvoid main(void){\n   gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n   vec2 anim = aAnim * animationFrame;\n   vTextureCoord = aTextureCoord + anim;\n   vFrame = aFrame + vec4(anim, anim);\n   vTextureId = aTextureId;\n}\n";
        var TilemapShader = (function (_super) {
            __extends(TilemapShader, _super);
            function TilemapShader(gl, maxTextures, shaderVert, shaderFrag) {
                var _this = _super.call(this, gl, shaderVert, shaderFrag) || this;
                _this.maxTextures = 0;
                _this.maxTextures = maxTextures;
                tilemap.shaderGenerator.fillSamplers(_this, _this.maxTextures);
                return _this;
            }
            return TilemapShader;
        }(PIXI.Shader));
        tilemap.TilemapShader = TilemapShader;
        var RectTileShader = (function (_super) {
            __extends(RectTileShader, _super);
            function RectTileShader(gl, maxTextures) {
                var _this = _super.call(this, gl, maxTextures, rectShaderVert, tilemap.shaderGenerator.generateFragmentSrc(maxTextures, rectShaderFrag)) || this;
                _this.vertSize = 11;
                _this.vertPerQuad = 4;
                _this.stride = _this.vertSize * 4;
                tilemap.shaderGenerator.fillSamplers(_this, _this.maxTextures);
                return _this;
            }
            RectTileShader.prototype.createVao = function (renderer, vb) {
                var gl = renderer.gl;
                return renderer.createVao()
                    .addIndex(this.indexBuffer)
                    .addAttribute(vb, this.attributes.aVertexPosition, gl.FLOAT, false, this.stride, 0)
                    .addAttribute(vb, this.attributes.aTextureCoord, gl.FLOAT, false, this.stride, 2 * 4)
                    .addAttribute(vb, this.attributes.aFrame, gl.FLOAT, false, this.stride, 4 * 4)
                    .addAttribute(vb, this.attributes.aAnim, gl.FLOAT, false, this.stride, 8 * 4)
                    .addAttribute(vb, this.attributes.aTextureId, gl.FLOAT, false, this.stride, 10 * 4);
            };
            return RectTileShader;
        }(TilemapShader));
        tilemap.RectTileShader = RectTileShader;
    })(tilemap = PIXI.tilemap || (PIXI.tilemap = {}));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
    var tilemap;
    (function (tilemap) {
        var shaderGenerator;
        (function (shaderGenerator) {
            function fillSamplers(shader, maxTextures) {
                var sampleValues = [];
                for (var i = 0; i < maxTextures; i++) {
                    sampleValues[i] = i;
                }
                shader.bind();
                shader.uniforms.uSamplers = sampleValues;
                var samplerSize = [];
                for (i = 0; i < maxTextures; i++) {
                    samplerSize.push(1.0 / 2048);
                    samplerSize.push(1.0 / 2048);
                }
                shader.uniforms.uSamplerSize = samplerSize;
            }
            shaderGenerator.fillSamplers = fillSamplers;
            function generateFragmentSrc(maxTextures, fragmentSrc) {
                return fragmentSrc.replace(/%count%/gi, maxTextures + "")
                    .replace(/%forloop%/gi, this.generateSampleSrc(maxTextures));
            }
            shaderGenerator.generateFragmentSrc = generateFragmentSrc;
            function generateSampleSrc(maxTextures) {
                var src = '';
                src += '\n';
                src += '\n';
                src += 'if(vTextureId <= -1.0) {';
                src += '\n\tcolor = shadowColor;';
                src += '\n}';
                for (var i = 0; i < maxTextures; i++) {
                    src += '\nelse ';
                    if (i < maxTextures - 1) {
                        src += 'if(textureId == ' + i + '.0)';
                    }
                    src += '\n{';
                    src += '\n\tcolor = texture2D(uSamplers[' + i + '], textureCoord * uSamplerSize[' + i + ']);';
                    src += '\n}';
                }
                src += '\n';
                src += '\n';
                return src;
            }
            shaderGenerator.generateSampleSrc = generateSampleSrc;
        })(shaderGenerator = tilemap.shaderGenerator || (tilemap.shaderGenerator = {}));
    })(tilemap = PIXI.tilemap || (PIXI.tilemap = {}));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
    var tilemap;
    (function (tilemap) {
        var squareShaderVert = "\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec2 aAnim;\nattribute float aTextureId;\nattribute float aSize;\n\nuniform mat3 projectionMatrix;\nuniform vec2 samplerSize;\nuniform vec2 animationFrame;\nuniform float projectionScale;\n\nvarying vec2 vTextureCoord;\nvarying float vSize;\nvarying float vTextureId;\n\nvoid main(void){\n   gl_Position = vec4((projectionMatrix * vec3(aVertexPosition + aSize * 0.5, 1.0)).xy, 0.0, 1.0);\n   gl_PointSize = aSize * projectionScale;\n   vTextureCoord = aTextureCoord + aAnim * animationFrame;\n   vTextureId = aTextureId;\n   vSize = aSize;\n}\n";
        var squareShaderFrag = "\nvarying vec2 vTextureCoord;\nvarying float vSize;\nvarying float vTextureId;\n\nuniform vec4 shadowColor;\nuniform sampler2D uSamplers[%count%];\nuniform vec2 uSamplerSize[%count%];\nuniform vec2 pointScale;\n\nvoid main(void){\n   float margin = 0.5 / vSize;\n   vec2 pointCoord = (gl_PointCoord - 0.5) * pointScale + 0.5;\n   vec2 clamped = vec2(clamp(pointCoord.x, margin, 1.0 - margin), clamp(pointCoord.y, margin, 1.0 - margin));\n   vec2 textureCoord = pointCoord * vSize + vTextureCoord;\n   float textureId = vTextureId;\n   vec4 color;\n   %forloop%\n   gl_FragColor = color;\n}\n\n";
        var SquareTileShader = (function (_super) {
            __extends(SquareTileShader, _super);
            function SquareTileShader(gl, maxTextures) {
                var _this = _super.call(this, gl, maxTextures, squareShaderVert, tilemap.shaderGenerator.generateFragmentSrc(maxTextures, squareShaderFrag)) || this;
                _this.vertSize = 8;
                _this.vertPerQuad = 1;
                _this.stride = _this.vertSize * 4;
                _this.maxTextures = maxTextures;
                tilemap.shaderGenerator.fillSamplers(_this, _this.maxTextures);
                return _this;
            }
            SquareTileShader.prototype.createVao = function (renderer, vb) {
                var gl = renderer.gl;
                return renderer.createVao()
                    .addIndex(this.indexBuffer)
                    .addAttribute(vb, this.attributes.aVertexPosition, gl.FLOAT, false, this.stride, 0)
                    .addAttribute(vb, this.attributes.aTextureCoord, gl.FLOAT, false, this.stride, 2 * 4)
                    .addAttribute(vb, this.attributes.aSize, gl.FLOAT, false, this.stride, 4 * 4)
                    .addAttribute(vb, this.attributes.aAnim, gl.FLOAT, false, this.stride, 5 * 4)
                    .addAttribute(vb, this.attributes.aTextureId, gl.FLOAT, false, this.stride, 7 * 4);
            };
            ;
            return SquareTileShader;
        }(tilemap.TilemapShader));
        tilemap.SquareTileShader = SquareTileShader;
    })(tilemap = PIXI.tilemap || (PIXI.tilemap = {}));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
    var tilemap;
    (function (tilemap) {
        var glCore = PIXI.glCore;
        function _hackSubImage(tex, sprite, clearBuffer, clearWidth, clearHeight) {
            var gl = tex.gl;
            var baseTex = sprite.texture.baseTexture;
            if (clearBuffer && clearWidth > 0 && clearHeight > 0) {
                gl.texSubImage2D(gl.TEXTURE_2D, 0, sprite.position.x, sprite.position.y, clearWidth, clearHeight, tex.format, tex.type, clearBuffer);
            }
            gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 1);
            gl.texSubImage2D(gl.TEXTURE_2D, 0, sprite.position.x, sprite.position.y, tex.format, tex.type, baseTex.source);
        }
        var TileRenderer = (function (_super) {
            __extends(TileRenderer, _super);
            function TileRenderer(renderer) {
                var _this = _super.call(this, renderer) || this;
                _this.vbs = {};
                _this.indices = new Uint16Array(0);
                _this.lastTimeCheck = 0;
                _this.tileAnim = [0, 0];
                _this.maxTextures = 4;
                _this.texLoc = [];
                return _this;
            }
            TileRenderer.prototype.onContextChange = function () {
                var gl = this.renderer.gl;
                var maxTextures = this.maxTextures;
                this.rectShader = new tilemap.RectTileShader(gl, maxTextures);
                this.squareShader = new tilemap.SquareTileShader(gl, maxTextures);
                this.checkIndexBuffer(2000);
                this.rectShader.indexBuffer = this.indexBuffer;
                this.squareShader.indexBuffer = this.indexBuffer;
                this.vbs = {};
                this.glTextures = [];
                this.boundSprites = [];
                this.initBounds();
            };
            TileRenderer.prototype.initBounds = function () {
                var gl = this.renderer.gl;
                var tempCanvas = document.createElement('canvas');
                tempCanvas.width = 2048;
                tempCanvas.height = 2048;
                for (var i = 0; i < this.maxTextures; i++) {
                    var rt = PIXI.RenderTexture.create(2048, 2048);
                    rt.baseTexture.premultipliedAlpha = true;
                    rt.baseTexture.scaleMode = TileRenderer.SCALE_MODE;
                    rt.baseTexture.wrapMode = PIXI.WRAP_MODES.CLAMP;
                    this.renderer.textureManager.updateTexture(rt);
                    this.glTextures.push(rt);
                    var bs = [];
                    for (var j = 0; j < 4; j++) {
                        var spr = new PIXI.Sprite();
                        spr.position.x = 1024 * (j & 1);
                        spr.position.y = 1024 * (j >> 1);
                        bs.push(spr);
                    }
                    this.boundSprites.push(bs);
                }
            };
            TileRenderer.prototype.bindTextures = function (renderer, shader, textures) {
                var bounds = this.boundSprites;
                var glts = this.glTextures;
                var len = textures.length;
                var maxTextures = this.maxTextures;
                if (len > 4 * maxTextures) {
                    return;
                }
                var doClear = TileRenderer.DO_CLEAR;
                if (doClear && !this._clearBuffer) {
                    this._clearBuffer = new Uint8Array(1024 * 1024 * 4);
                }
                var i;
                for (i = 0; i < len; i++) {
                    var texture = textures[i];
                    if (!texture || !textures[i].valid)
                        continue;
                    var bs = bounds[i >> 2][i & 3];
                    if (!bs.texture ||
                        bs.texture.baseTexture !== texture.baseTexture) {
                        bs.texture = texture;
                        var glt = glts[i >> 2];
                        renderer.bindTexture(glt, 0, true);
                        if (doClear) {
                            _hackSubImage(glt.baseTexture._glTextures[renderer.CONTEXT_UID], bs, this._clearBuffer, 1024, 1024);
                        }
                        else {
                            _hackSubImage(glt.baseTexture._glTextures[renderer.CONTEXT_UID], bs);
                        }
                    }
                }
                this.texLoc.length = 0;
                for (i = 0; i < maxTextures; i++) {
                    this.texLoc.push(renderer.bindTexture(glts[i], i, true));
                }
                shader.uniforms.uSamplers = this.texLoc;
            };
            TileRenderer.prototype.checkLeaks = function () {
                var now = Date.now();
                var old = now - 10000;
                if (this.lastTimeCheck < old ||
                    this.lastTimeCheck > now) {
                    this.lastTimeCheck = now;
                    var vbs = this.vbs;
                    for (var key in vbs) {
                        if (vbs[key].lastTimeAccess < old) {
                            this.removeVb(key);
                        }
                    }
                }
            };
            ;
            TileRenderer.prototype.start = function () {
                this.renderer.state.setBlendMode(PIXI.BLEND_MODES.NORMAL);
            };
            TileRenderer.prototype.getVb = function (id) {
                this.checkLeaks();
                var vb = this.vbs[id];
                if (vb) {
                    vb.lastAccessTime = Date.now();
                    return vb;
                }
                return null;
            };
            TileRenderer.prototype.createVb = function (useSquare) {
                var id = ++TileRenderer.vbAutoincrement;
                var shader = this.getShader(useSquare);
                var gl = this.renderer.gl;
                var vb = PIXI.glCore.GLBuffer.createVertexBuffer(gl, null, gl.STREAM_DRAW);
                var stuff = {
                    id: id,
                    vb: vb,
                    vao: shader.createVao(this.renderer, vb),
                    lastTimeAccess: Date.now(),
                    useSquare: useSquare,
                    shader: shader
                };
                this.vbs[id] = stuff;
                return stuff;
            };
            TileRenderer.prototype.removeVb = function (id) {
                if (this.vbs[id]) {
                    this.vbs[id].vb.destroy();
                    this.vbs[id].vao.destroy();
                    delete this.vbs[id];
                }
            };
            TileRenderer.prototype.checkIndexBuffer = function (size) {
                var totalIndices = size * 6;
                var indices = this.indices;
                if (totalIndices <= indices.length) {
                    return;
                }
                var len = indices.length || totalIndices;
                while (len < totalIndices) {
                    len <<= 1;
                }
                indices = new Uint16Array(len);
                this.indices = indices;
                for (var i = 0, j = 0; i + 5 < indices.length; i += 6, j += 4) {
                    indices[i + 0] = j + 0;
                    indices[i + 1] = j + 1;
                    indices[i + 2] = j + 2;
                    indices[i + 3] = j + 0;
                    indices[i + 4] = j + 2;
                    indices[i + 5] = j + 3;
                }
                if (this.indexBuffer) {
                    this.indexBuffer.upload(indices);
                }
                else {
                    var gl = this.renderer.gl;
                    this.indexBuffer = glCore.GLBuffer.createIndexBuffer(gl, this.indices, gl.STATIC_DRAW);
                }
            };
            TileRenderer.prototype.getShader = function (useSquare) {
                return useSquare ? this.squareShader : this.rectShader;
            };
            TileRenderer.prototype.destroy = function () {
                _super.prototype.destroy.call(this);
                this.rectShader.destroy();
                this.squareShader.destroy();
                this.rectShader = null;
                this.squareShader = null;
            };
            ;
            return TileRenderer;
        }(PIXI.ObjectRenderer));
        TileRenderer.vbAutoincrement = 0;
        TileRenderer.SCALE_MODE = PIXI.SCALE_MODES.LINEAR;
        TileRenderer.DO_CLEAR = false;
        tilemap.TileRenderer = TileRenderer;
        PIXI.WebGLRenderer.registerPlugin('tilemap', TileRenderer);
    })(tilemap = PIXI.tilemap || (PIXI.tilemap = {}));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
    var tilemap;
    (function (tilemap_1) {
        var ZLayer = (function (_super) {
            __extends(ZLayer, _super);
            function ZLayer(tilemap, zIndex) {
                var _this = _super.call(this) || this;
                _this._lastAnimationFrame = -1;
                _this.tilemap = tilemap;
                _this.z = zIndex;
                return _this;
            }
            ZLayer.prototype.clear = function () {
                var layers = this.children;
                for (var i = 0; i < layers.length; i++)
                    layers[i].clear();
                this._previousLayers = 0;
            };
            ZLayer.prototype.cacheIfDirty = function () {
                var tilemap = this.tilemap;
                var layers = this.children;
                var modified = this._previousLayers != layers.length;
                this._previousLayers = layers.length;
                var buf = this.canvasBuffer;
                var tempRender = this._tempRender;
                if (!buf) {
                    buf = this.canvasBuffer = document.createElement('canvas');
                    tempRender = this._tempRender = new PIXI.CanvasRenderer(100, 100, { view: buf });
                    tempRender.context = tempRender.rootContext;
                    tempRender.plugins.tilemap.dontUseTransform = true;
                }
                if (buf.width != tilemap._layerWidth ||
                    buf.height != tilemap._layerHeight) {
                    buf.width = tilemap._layerWidth;
                    buf.height = tilemap._layerHeight;
                    modified = true;
                }
                var i;
                if (!modified) {
                    for (i = 0; i < layers.length; i++) {
                        if (layers[i].isModified(this._lastAnimationFrame != tilemap.animationFrame)) {
                            modified = true;
                            break;
                        }
                    }
                }
                this._lastAnimationFrame = tilemap.animationFrame;
                if (modified) {
                    if (tilemap._hackRenderer) {
                        tilemap._hackRenderer(tempRender);
                    }
                    tempRender.context.clearRect(0, 0, buf.width, buf.height);
                    for (i = 0; i < layers.length; i++) {
                        layers[i].clearModify();
                        layers[i].renderCanvas(tempRender);
                    }
                }
                this.layerTransform = this.worldTransform;
                for (i = 0; i < layers.length; i++) {
                    this.layerTransform = layers[i].worldTransform;
                    break;
                }
            };
            ;
            ZLayer.prototype.renderCanvas = function (renderer) {
                this.cacheIfDirty();
                var wt = this.layerTransform;
                renderer.context.setTransform(wt.a, wt.b, wt.c, wt.d, wt.tx * renderer.resolution, wt.ty * renderer.resolution);
                var tilemap = this.tilemap;
                renderer.context.drawImage(this.canvasBuffer, 0, 0);
            };
            ;
            return ZLayer;
        }(PIXI.Container));
        tilemap_1.ZLayer = ZLayer;
    })(tilemap = PIXI.tilemap || (PIXI.tilemap = {}));
})(PIXI || (PIXI = {}));
//# sourceMappingURL=pixi-tilemap.js.map