【サイトについて】
* RPGツクールMVを使った、ゲームを一層楽しくするためのアイディアや、豆知識、プラグインなどを紹介していきます。あくまで個人の考えに基づく記事ですので、参考程度にお読みいただければ幸いです。
ファイル圧縮以外での軽量化
0

    軽量化のお話です。

    画像は画質を落として圧縮することで、音楽はビットレートを下げることでそれぞれ容量を減らすことが出来、再生の高速化が期待できます。しかしそれでもまだまだサクサク動くとは言えないものです。

     

    音楽とアニメーションの軽量化について、書きたいと思います。

     

    ■BGMの遅延を無くす

     

    ツクールMVで製作したゲームは、環境によってはBGMが大きく遅延する事がありますよね。

    ただ私の環境ではBGMの遅延というのがダウンロード版では全く再現出来ず、ブラウザ版をプレイすると「たま〜に遅れるかな」と感じる事はありますが毎回ではありませんので、勘で調整していく他無さそうです。

     

    こだわりたかったのは、主人公のピンチを救うために某キャラクターが颯爽と助けに来るこの場面。

     

     

    見せ場のシーンなので出来れば場面と登場のBGMとシンクロさせたいなと思っています。

    無音登場は空しいですからね。

    でもプリロード(先読み)プラグインはスマホなどでは不安定になる事もあるらしくて、イベントの配置だけで対応させました。

     

    方法はこんな感じです。

     

     

    ピンチのBGMを流す前に、仲間が駆け付けたBGMを音量0で一瞬だけ流しておきます

    このコマンドを挟んでおけば、次のBGMが魔王の台詞の時にまず先読みされます。

    あとは流したい場面で、そのBGMを通常音量で流すだけですね。

    流したい場面に近いイベントのどこかに配置すると良いでしょう。

     

    ・BGMが常時流れっぱなしのイベントの場合は、

     そのBGMが流れる直前にウェイトを設けて入れておくと良いでしょう。

     

    ・間に他のBGMが入らない場合は、「BGMの停止」を入れておかないと

     無音で流したBGMが続きから再生されてしまうので注意。

     

    完璧とは言えませんが、色んな環境で試した限り、ここは遅延無しで再生されていそうです。

     

     

    ■戦闘アニメーションのフラッシュを無くす

     

    もう一つの軽量化について。

    こっちは戦闘演出に大きく絡んで来る事もあって、「それやると臨場感が欠けるんだよなあ」とか「画面に深みが無くなるんだよなぁ」とか色々意見があると思いますが、ラハ園ではやってなくて続編では下記の方法を実行。両方プレイされているプレイヤーさんは違いにお気づきでしょうか? 魔法を撃った時の戦闘アニメーションから全てのフラッシュが消えているという事を。

     

    例えばデータベースのアニメーション「矢/必殺技」は以下の様になっています。

     

     

    このアニメーションでは対象に向かってフラッシュが4回、画面フラッシュが1回実行されていますね。

    ビカビカビカビカズシャーン!!って感じの演出です。

    聴く所によると、画面はともかく、この「対象へのフラッシュ」の処理が非常に重いらしいんです。

     

     

    必要以上に画面がチカチカするのを疎ましがるプレイヤーさんも居ると思いますので、

    それならと思って対象・画面フラッシュを全てのアニメーションから削除しました。

    こうする事で派手さは無くなりますが、魔法を撃った時の画面が確かにスムーズになった気がします。

     

    軽量化について、どんどん取り入れていきたいと思いますので、

    他の方法、ご意見などお待ちしております。

    | RPGツクールMV技術情報 | 12:05 |- |
    PCとiPhone「画面の色調変更」の差、検証
    0

      RPGツクールMV(現在ver1.3.1)において、

      イベントコマンド「画面の色調変更」で「夜」にすると、

      PC版ではこうなりますよね。

       

       

      しかしiPhone(ブラウザ版・ネイティブアプリ版含め)で同じ画面を再生すると、

      この様になってしまうんです。

       

       

      まるで一面の銀世界に彩られた様に真っ白!

       

      Android版(例外除き)ではこんな風になっていないので、

      これはiPhoneやiPad特有の現象と考えられます。

       

      何とかしてiPhone版でもまともな色に出来ないかなぁと思っているんですが、

      そもそも何でこんな事になってるんでしょう??

      色々な画面色調を検証してみました。

       

      左がPC版の画面、右がiPhoneの画面です。

       

      ■緑のみ-255で、あとは0

       

       

      ■赤のみ255で、あとは0

       

       

      色調を一つだけ変化させる演出の場合、問題はまったく無い様です。

       

      では今度は二つ以上変えてみましょう。

       

      ■赤を-255、緑を-128、あとは0

       

       

      ■赤を-68、緑を136、青を-120、グレーは0

       

       

      まったく問題はありません。

      という事は、、

       

      iPhoneの画面色調をおかしくさせた犯人は、自然と絞り込まれましたね。

       

      ■赤を255、グレーを170

       

       

      予想通りです。

      色調のブレンドにグレーが絡んでくると、おかしくなるのです

       

      つまりiPhoneで画面色調をおかしくさせないためには、

      グレーを使わない

      というのが得策の様ですね。
      (強引な解決手段ですが、変に白飛びするよりマシという)

       

      PC版・iPhone版の両方を夜っぽくするのに最適な画面色調は、

       

      ■赤を-102、緑を-102、あとは0

       

       

      あるいは

      ■赤を-64、緑を-64、青を-16

       

      こんな感じでいかがでしょうか?

      グレーが無くても何となく夜の演出が出来ると思います。

       

       

      2016/08/21 19:15追記

      この件についてliplyさんよりtwitterでツイート頂いたのですけど、

       

       

      という事の様です。

      iOS側のバグもしくは仕様なのでツクール側ではどうしようもなさそうなのが現状。

       

      代案として、「黒や灰色一色の816px×624pxピクチャを乗算やスクリーンで重ねてみる」、などといった方法で近いことが出来ると考えましたが、全く同一の色調表現はなかなか難しそうですね。

       

      | RPGツクールMV技術情報 | 12:52 |- |
      RPGツクールMVで作品のPVを作る
      0

        今回はRPGツクールMVで作品紹介のビデオ・・いわゆるPVを作っていこうの回です。

        つまり「RPGツクールPV」というわけですね。いや、うまくも何とも無いですけど。

         

        私は一番最初の公開作品ではiMovieというソフトを使ってPVを作っていたのですが、これがまたとんでもなく面倒でした。適当に良いシーンを録画して、トリミングして、繋いで、途中にフェードイン・フェードアウト効果を入れつつ、後ろにBGMを・・やる事多すぎです。おまけに沢山のシーンをプロジェクト上に置くと重くなりますし、途中で強制終了落ちしようものなら大変です。

        これが、「ツクールMVの作品ならツクール上でPVを作ってしまえばいいのでは」と思い至った流れです。

         

        手順

         

        (1) 完成品のプロジェクトを必ずコピーし、そのコピー先のプロジェクトで進めてください。ゲームタイトルも【PV用】とでも付け足しておくといいと思います。PV用にマップだけをコピーしてしまうと、「コピー元のマップ間違えていじっちゃったーー」みたいなトラブルになりかねないので、いっそファイルごとコピーしちゃいましょう。

         

        (2) あとは自由に編集してください。

        PVの一番最初に見せたいシーンをプレイヤーの初期位置にし、自動実行でイベントが実行される様にしてください。

        場面と場面の間は「場所移動」で繋ぎ、基本的には自動実行イベントだけの状態にします。会話はウェイトを入れて自動でウィンドウが閉じる様にします(ウェイトは¥|もしくは¥. 自動的に閉じるのは¥^を文章の表示内に入れます)。こうすると会話の表示時間が均等になりますので、最終的に録画時間を計りやすいですね。会話送りが手動操作だと時間に誤差が出ますからね。

         

        戦闘シーンだけは自分で操作する必要がありますが、これもすぐ終わる様に[戦闘を中断する]コマンドを1ターン終わりや敵のHPが90%になった時など、確実に任意のタイミングでストップ出来るイベントを仕込んでおくと良いでしょう。

        戦闘中も常にPV用のBGMを流しっぱなしにしたい場合は戦闘BGMをPV用のBGMと同じものにして、戦闘開始時のSEも消しておきましょう。これでずっと流れっぱなしになります。

         

        (3) 最後にデスクトップをキャプチャ出来る録画ソフトを使って、ツクールのプレイをそのまま録るだけです。MacならQuickTimeの画面録画機能、Windowsならカハマルカの瞳などでしょうか。

         

        手順は以上、この3工程となります。

        見せたい部分に場所移動してその会話イベントだけ残して残りは削除すればいいので、場面ごとにムービー録画してわざわざ切ったり貼ったりする必要が無いわけです。動画編集ソフトの使い勝手が今一つという場合には是非ご利用ください。

         

         

        PV作りのコツ

         

        ここからはあくまで個人的な演出アイディアです。あくまでご参考程度に。

        ちなみに私はいつもPV作りにはお金をかけています。

        ここにあるコツをやろうとすると、人によっては手元に数千円〜程度必要になって来ると思います。

         

        (1) ボイスを入れる

         

         

        これは作る人・見る人によって好き嫌いはありますが、私はPVには必ずボイスを入れたい派です。

        目から入る情報だけじゃなく、耳から入る情報でも期待感を煽るためです。

        たとえ作品内に一切ボイス入っていなくても、PVに入れる事には罪はありません。

        「PVにもゲームにもボイス要らねえよ」という人は少なくないと思いますが、"多くもない"というのが私の考えです。

         

        声優さんは「ココナラ」というサイトを中心に探しています。ちょっとした台詞ならお試しで無料で吹き込んでくれたり、2000円以内でお願い出来たりするので、是非PVでただ映像を流すだけじゃ物足りないなと感じている作者さんは試してみてください。本格的なボイスが入っているとPVを見るだけで一気に商業感が出ますよね。でも蓋を開けてみればフリー。PVを見た人にはお得感満載じゃないですか。

        しかしここで重視すべきなのは読み方よりもまず音質です。いきなりノイズ交じりのボイスが入ると開始早々閉じられる可能性があります。いかにゲームが良くてもボイスが酷くこもっていたり、携帯電話から聞こえてくる様な音質ですと、ちょっと残念に感じます。学生時代は音について専攻していたので、ある程度の音加工は対応出来ますが、やはりマイクの質・収録環境が全てを左右する事もあり、その辺りは声優さんに要相談でしょう。

         

         

        (2) BGMは一曲もしくは二曲にする

         

        劇場で映画が始まる前の「予告編」などを思い出してみてください。

        そこで流れているBGMは、

         

        ・印象の強いBGMが一曲だけ

        ・最初は明るくテンポのいいBGM、しかし途中から場面が切り替わり盛り上がるドラマチックなBGMに

         

        この2パターンが多いのではないでしょうか。

        わずか3〜5分程度のPVにおいて沢山のBGMを流す事は見ている側のストレスに繋がります。

        殆どのPVについて既にBGMは絞り込まれていると思いますが、ゲーム内に使われていなくてもPV専用の音楽でいいです。期待感を煽るBGMを一つ、もしくは二つ、入れてみてください。ツクール内でPVを作る場合「BGMの再生」で一曲再生したまま、マップ上のBGMの設定をオフにするだけで流れっぱなしになるので楽ですよね。

        与太話ですが、劇場の予告編、あれほどPV作りの参考になるPVは無いと思います。だって映画本編より予告の方が面白かったって経験ありません?(ゲーム本編よりPVの方が面白いと言われそうな作品ばかり作っている私です)

         

         

        (3) 大きな文字はピクチャとして表示する

         

        重要なシーンに字幕を入れる場合。

        たとえば、「君だけの物語が始まる……」とか「人類滅亡まであと、7日——」とか「今度の主人公はなんと、オタク!?」とか、映像に重ねて入れたいとしますよね。

         

         

        この手の煽り文は、ツクールの文章表示じゃなく画像で、インパクトのあるフォントを作って、ピクチャの表示でPVに入れてみましょう。透過PNGと呼ばれるフォーマットを使うことで、シーンの上にそのまま文字を重ねることが出来ます。

        イラストを描いておられる作者さんならこの手の作業は得意だとは思いますが、苦手な場合はこちらもココナラでロゴを作っておられるイラストレーターさんが沢山おられます。相談してみると良いでしょう。お金をかけたくないという場合でも、この手のキャッチをフォントで画像化してくれるソフトは沢山ありますので、ぜひ探してみてください。

         

         

        (4) PVには本編に無いシーンを入れてもいい

         

        俗に言う「予告詐欺」と言われるものです。予告と本編が全く同じでなくちゃいけないなんて法律はありません。特に映画にはよくある手法ですよね。予告で主人公が格好良く喋っていたシーンが丸々カットされてるじゃないか!みたいなのが。

         

         

        そもそもラハと魔法の園にはこんなシーン無いですからね。

        チャタが上級生に炎魔法をぶつけるシーンも無いですし、

        フーバルト先生が「明日までに魔法覚えてこい」なんてシーンもありません。

         

        雰囲気が掴めて、話の本筋さえ違わなければ、PVでは何をしてもいいと思っています。

        「主人公がPVでは剣を持ってるのに本編ではピストルに変わってるじゃん!」みたいな全然違うのは流石にやめた方がいいと思いますが、「ヒロインとの出会いをPVに載せたいけど、本編を楽しみにして欲しいな〜」という場合は、PV用の出会いのシーンを作ってしまえばいいわけです。

        一応PVの説明文には「※PVの内容は実際のゲームと一部異なる場合があります」これを載せておけば良いでしょう。でないと、あまりに内容が違いすぎて本当に「PVの方が良かった・・」って思わせてしまいますからね。

        ゲームとPVを賞に応募する際などは念のため応募事項を確かめておいてくださいね。PVと内容が異なる場合は失格ですなんて書かれていると即落とされてしまいますので、、

         

         

        (5) PVの基本的な流れ

         

        これはどんな作品かにもよりますが、ストーリーもののRPGの場合は、

        大体こういった形でPVが進行すると良いと思います。ご参考までに。

         

        シーン1 印象的な言葉、モノローグ、ナレーションで始まる

          例)「10年前、兄は死んだ。私の目の前で」

            「かつて魔法が栄えた時代があった」

            「貴方は最近、泣いていますか?」など

         

        シーン2 世界観の説明

          例) 主人公が大勢の敵軍に囲まれているシーン、

            船に乗って大航海しているシーン、変わってしまった世界の景色など

            これは「目で見て伝わる」ことを意識してください。

            長いあらすじがスクロールで流れる、みたいなのは避けた方が良いと思います。

         

        シーン3 主人公達の紹介

          例)「心優しき少年アムス——」

            「謎の覆面男マスク——」

            といった感じで、先ほど(3)で書いたピクチャを使って、主人公達の台詞や動きにあわせて

            表示してみて下さい。ピクチャ表示のいい所は会話シーンの途中でも

            ふわっと出せることですね。

         

        シーン4 その主人公達のイベントシーン、会話シーンなど

          例)これはシーン3に混ぜてしまっても良いと思います。

            「お前がお尋ね者のマスクって奴なんだろ?」みたいな感じです。

         

        シーン5 システムの解説や戦闘シーン

          例)独自で採用しているシステムや、実際に戦っているシーンを入れましょう。

            見て欲しい機能、グラフィックや特技、魔法などを見せると良いと思います。

            ラハ園のPVでは本編を楽しみにして欲しかったのでカットしています。

         

        シーン6 インパクトのあるシーンを幾つか

          例)仲間と口喧嘩になって主人公が一人ぼっちになるシーン、

            魔王を追い詰めるが返り討ちにされトドメを刺されかけるシーン、

            洞窟探索中に落とし穴にはまるシーン、

            あるいはド派手なバトルが繰り広げられるシーンから、

            ドバーーン!とゲームタイトルを表示する、なんてのもカッコイイと思います。

         

        シーン7 タイトル

          例)最初に入れてる人はもう一度ここにも入れていいです。

            なんとなくタイトルはPVの終わりの方に入れると映画っぽくなりますよね。

         

        シーン8 インパクトのある〆の台詞、キャッチ

          例)PVの最後です。期待感を最大限に煽る台詞やキャッチでPVを締めましょう。

           「果たしてこの世界は、悪か、正義か」

           「その先にあるのは、ただ、絶望のみ」

           「魔法使い達の物語が、いま始まる」

           「僕たちは誰でも、ヒーローになれる」etc

           こういうのを声つきで言われると「うおぉぉっ!」ってなりません?(笑)

         

         

        いかがだったでしょうか?

        参考になるものもあれば、「いやそのやり方は」というものも、もちろん沢山あると思います。

        ツクールでPVを作る回というよりは、完全にPVそのもののアイディア集みたいになってしまいましたが、これらが作者さまの作品を彩るためのお役に立てれば甚だ幸いです。

         

         

        (参考までに私のPVの制作環境)

        ツール RPGツクールMV

        画像編集 Adobe Fireworks CS5

        音声編集 Audacity

        収録 QuickTime

        (※PC内の音声の取り込みにSoundflowerというツールを使用)

         

        | RPGツクールMV技術情報 | 16:56 |- |
        色んな値を変数に入れよう!
        0
          「変数の操作」をする際、「ゲームデータ」を選択すると、各アイテムの所持数やキャラクターのレベル、所持金、座標、歩数、戦闘回数など非常に色んな値を代入する事が出来ますよね。

          しかしここに無い項目を扱いたい、というケースがしばしばあります。

          ゲームデータのチェックの下に、「スクリプト」という項目があるのはお気づきでしょうか? これをうまく使うことで、本来は代入出来ない項目を変数に入れることが出来るんです。
          その一例を幾つかご紹介したいと思います。

          ■キャラクターのTP
          むしろ何でデフォルトで無いんだ、って思うんですが、本体機能では代入する事は出来ません。
          戦闘イベントなどでTPが一定数以上になったらTPを使った必殺技のチュートリアルをコモンイベントで発生させたい、なんて事もあるでしょう。そういう場合は、「変数の操作」で「スクリプト」を選び、以下のスクリプトを書いてください。
          $gameActors.actor(アクターID).tp

          これでTPを変数に入れることが出来ます。
          標準では代入出来ない項目は、スクリプトで代入が出来るのです。


          ■キャラクターの最大レベル
          特殊な例かも知れませんが、経験値をもらうイベントなどで「あら、貴方のレベルは20までのはずよ。それ以上は上がらないけどいい?」みたいな事を言わせたいとしますよね。ゲームデータでは最大レベルを取得できないので、これもスクリプトを用います。

          $dataActors[アクターID].maxLevel

          ( )ではなく[ ] の中にIDを入れてください。これでアクターの最大レベルを変数に入れる事が出来ます。
          ちなみに初期レベルを取得したい場合はmaxLevelをinitialLevelに変更してください。


          ■キャラクターの二つ名やプロフィール、メモ欄の内容
          ところで「変数」に入れられるのは数値だけ・・なんて思っていませんでした?
          「変数」は「数」って言うぐらいだから日本語や英語を入れる事は出来ないだろ?なんて思っている方それは間違いです。

          はーい日本語も問題なく入れられちゃいます!

          キャラクターの二つ名が「輝きの剣士」だったとして、スクリプトに
          $dataActors[アクターID].nickname
          と入れましょう。



          戦闘の文章表示でこの変数を表示させてみましょうか。



          敵さんに称号を喋らせることが出来ました。



          プロフィールの文章の取得は
          $dataActors[アクターID].profile
          です。



          えらく説明口調なコウモリですが、人物紹介などでは使えますよね。
          ちなみに $dataActors[アクターID].note でメモ欄の内容もそのまんま取得できますよ。
          「変数に日本語が入る」という事に気付けば創作の幅がぐんと広がりますよね。そもそも「加算」や「減算」なんていう単語が目に飛び込むから数字しか入れちゃダメなのかな?とか思ってしまうんですよね。

          さて、ちょっと難しくなります。
          応用編です。

          ■敵のドロップアイテム情報を表示させる
          $dataActorsが味方の情報だとすると、モンスターの情報を取得するには??
          そう、$dataEnemies[モンスターID] を使います。
          色んな情報が取得出来て、色んな例を書きたい所ではありますが、そろそろ応用させていきましょうか。

          例えば「モンスターのドロップアイテム名を表示させたい」としますよね。
          「コウモリはポーションを1/3の確率で落とすらしいですよ!」なんて言わせてみても面白いかも知れません。

          $dataEnemies[モンスターID].dropItem[0].dataId
          これでその敵キャラリストの1番目にセットされているドロップアイテムのアイテムIDが取得できます。

          $dataEnemies[モンスターID].dropItem[0].denominator
          これが確率が格納されている変数です。1/xのxですね。
          普通に設定していると1/xの1は固定なので、以上2つの値さえ取れればドロップアイテム情報は表示させられます。

          「よし、これで表示できるんだな」と言いたい所なのですが、このままだとドロップアイテムIDが表示されるだけです。「1/3の確率で3を落とします!」なんて言われても「は?」ってなっちゃいますよね。
          そこで、アイテムIDをアイテム名に変える、という処理を加えなければなりません。

          $dataItems[アイテムID].name

          で、そのアイテムIDのアイテム名が取得できますので、アイテムIDの部分に上の構文を丸ごとカッコで入れます。

          $dataItems[$dataEnemies[モンスターID].dropItems[0].dataId].name

          変数の中に変数を入れるメージですね。

          ちなみに取得した情報を使い回さない場合は、変数を使う必要は全くありません。
          変数を使えば、文章の表示の制御文字 ¥V[変数ID] で取得できるというだけの話ですので。

          キャライベントを作成し、イベントコマンド「スクリプト」を使ってそのまま入れてもOKです。

          $gameMessage.add($dataEnemies[1].name+"は");
          $gameMessage.add($dataItems[$dataEnemies[1].dropItems[0].dataId].name+"を");
          $gameMessage.add("1/"+$dataEnemies[1].dropItems[0].denominator+"の確率で落とすわ。");

          こう書くと、



          てな感じで、情報屋さんの出来上がりです。
          モンスターの名前が変わったり、落とすアイテムや確率が変わった時には、わざわざ「文章の表示」から固定値を書くより便利ですよね。

          いかがでしょうか。変数に日本語が代入できたり、データベースの情報が取得できると分かれば、かなり面倒な処理が半減されると思います。ぜひ色々お試しください。

          | RPGツクールMV技術情報 | 09:47 |- |
          ブラウザ版のセーブデータをWindows版に移す
          0
            RPGツクールMVではWindows版、Mac版、ブラウザ版の3つの出力が可能です。
            (厳密に言えばスマートフォン版出力がありますが、ここでは無視します)

            ダウンロードせずにすぐ遊ぶことの出来るブラウザ版は便利。しかしある程度遊んでみてから、「やっぱりWindows版やMac版に移行してゆっくり遊びたいな」という場合や、うっかりブラウザの履歴削除などをしてしまってセーブデータが消えてしまうのが怖いという場合のために、データはローカル環境に持っておきたいですね。

            ここでは「ブラウザ版のゲームのセーブデータを、Windows版のゲームに移す」方法について解説させていただきます。Mac版Safariからのデータ移動については、こまさんに教えていただきました。ありがとうございます。

            各ブラウザで保存したセーブデータは「Local Storage(ローカルストレージ)」という領域に格納されます。
            OSやブラウザごとに保存場所はかなり違うのですが、ご参考までに。
            ※フォルダが見当たらない場合は隠しファイルの可能性があります。フォルダ設定の「隠しファイル」にチェックを入れるか、フォルダオプションから「隠しファイルを表示する」をチェックしてください。

            ■Google Chrome(Windows10)
            (ユーザフォルダ)¥AppData¥Local¥Google¥Chrome¥User Data¥Default¥Local Storage

            ■Safari(Mac)
            (ユーザフォルダ)¥ライブラリ¥Safari¥LocalStorage

            ■Google Chrome(Mac)
            (ユーザフォルダ)¥ライブラリ¥Application Support¥Google¥Chrome¥Default¥Local Storage

            階層深すぎです!! ファイル名がhttpから始まり、そのブラウザ版ゲームのURLで始まっているものがセーブデータ格納ファイルです。それを適当な場所、とりあえずデスクトップなどにコピーしておいてください。

            まだ終わりじゃありませんよ!
            このファイルをそのまんまWindows版のsaveフォルダに移しても駄目です。Local StorageはSQLite3と呼ばれるデータベースファイル内に集約されていますので、個別のセーブデータとしてファイル出力する必要があります。

            そのためには「PupSQLite」というツールを使います。
            SQLite3データベースの編集ソフトです。Windowsにインストールしてください。

            インストールが終わりましたら、PupSQLiteを開いてください。



            この灰色の画面の上に、先ほどデスクトップに移したファイルをドラッグ&ドロップします。
            すると左側のメニュー欄に「ItemTable」と表示されるので、これをダブルクリックします。



            すると今度は右側にずらっとリストが表示されますよね。
            「RPG Config」「RPG Global」「RPG File1」「RPG File 2」…
            勘のいい方ならここで既に把握出来ると思うのですが、このkeyがそれぞれ各セーブデータファイルと対応しているわけです。

            ひとまず「RPG Global」行の右側のByte[] 配列と書かれている文字を右クリックし、「ファイルの出力」を選んでください。



            そうすると保存するファイル名を訊いてきますので、global.rpgsaveというファイル名で保存してください。

            同様の手順で、
            RPG File1は file1.rpgsave
            RPG File2は file2.rpgsave
            RPG Configは config.rpgsave
            という名前で、それぞれ一つずつ保存していきます。

            すべてのファイルの保存を終えましたら、それらをsaveフォルダにまとめ、Windows版のゲームのsaveフォルダに入れるだけです。この状態でゲームを起動しましたら、ブラウザ版のセーブデータがWindows版に移行されている事が確認出来るかと思います。
            | RPGツクールMV技術情報 | 14:42 |- |
            MV1.1.0→1.2.0 Javascript変更部分
            0
              RPGツクールMVのメジャーアップデートが公開されました。
              バージョンは1.1.0から1.2.0となります。

              Javascriptの差し替えが必要という事で、
              「差し替える事でプラグインが動かなくなるんじゃ…?」
              と心配されている方も多いかも知れません。
              それでは今回も実際にjsフォルダの中身がどのぐらい書き換わっているのか、確認してみました。


              ■main.js
              変更なし


              ■rpg_core.js
              4754行目に下記文追加
               
              TilingSprite.prototype.generateTilingTexture = function(arg) {
                  PIXI.TilingSprite.prototype.generateTilingTexture.call(this, arg);
                  // Purge from Pixi's Cache
                  if (this.tilingTexture.canvasBuffer)
                      PIXI.Texture.removeTextureFromCache(this.tilingTexture.canvasBuffer.canvas._pixiId);
              };

              これはリリースノートの[バグ対応]欄にある、タイルスプライトのメモリリークの修正でしょう。
              liplyさんが以前公開されたメモリリークパッチがそのまま入れられていますね。
              (この処理について、記事一番下に補足説明を記載)


              ■rpg_managers.js
              変更なし


              ■rpg_objects.js
              1091〜1095行目が少し書き換えられています。

              旧)バージョン1.1.0
              Game_Picture.prototype.updateRotation = function() {
                  if (this._rotationSpeed > 0) {
                      this._angle += this._rotationSpeed / 2;
                  }
              };

              新)バージョン1.2.0
              Game_Picture.prototype.updateRotation = function() {
                  if (this._rotationSpeed !== 0) {
                      this._angle += this._rotationSpeed / 2;
                  }
              };

              ピクチャの回転で、1.2.0において半時計回りの機能を追加した事による処理変更かと思います。

              ■rpg_scenes.js
              変更なし


              ■rpg_sprites.js
              1431行目 Sprite_Animation.prototype.updateCellSpriteの処理です。
              変更部分は一箇所ですが、切り所が難しいためちょっと長いですが丸ごと処理を貼り付けておきます。

              旧)バージョン1.1.0
              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 = this._target.visible;
                  } else {
                      sprite.visible = false;
                  }
              };

              新)バージョン1.2.0
              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;
                  }
              };

              リリースノートにある「アニメーションのバグ修正:正しくないターゲットを隠す問題」がこれにあたります。
              (※追記 4/21 16:30修正。この箇所のみソースが新旧逆でした。申し訳無いです)

              Javascript修正箇所はおそらく以上です。
              rpg_core.jsのバージョン情報変数Utils.RPGMAKER_VERSION も 1.1.0のままでした。
              JSに関しては軽微な修正のみかも知れませんね。


              2016/04/22 22:30追記

              今回メモリリーク修正について、1.2.0へのバージョンアップ当初、
              イベント「遠景の変更」を入れたゲームをCanvasモードで開くと、以下の様なエラーが発生していました。



              この問題についてツクール開発部様に報告し、
              メモリリーク修正を以下の様に記述する事でCanvasモードでのエラー落ちを回避できる旨記事にしました所、
               
              (function(){
                  var TilingSprite_prototype_generateTilingTexture = TilingSprite.prototype.generateTilingTexture;
                  TilingSprite.prototype.generateTilingTexture = function(arg){
                      TilingSprite_prototype_generateTilingTexture.call(this, arg);
                      if (Graphics.isWebGL())
                          if (this.tilingTexture.canvasBuffer)    PIXI.Texture.removeTextureFromCache(this.tilingTexture.canvasBuffer.canvas._pixiId);
                  }
              })();

              本日夕方新しく行われたアップデート(バージョン変わらず1.2.0)で、この私の案が採用された様です。
              つまり「Canvasモードの時はメモリリークパッチは反映しない」という事です。

              Canvasモードではメモリリークの影響はWebGLと比較すれば浅いのですが、完全では無いので、おそらくは当面の応急処置だと思います。pixi.jsが絡んでいる問題という事もあり、バージョン1.3.0までの繋ぎという形かも知れませんね。
              | RPGツクールMV技術情報 | 15:10 |- |
              MV1.0.1→1.1.0 Javascript変更部分
              0
                昨日RPGツクールMVのメジャーアップデートがあり、バージョンは1.0.1から1.1.0となりました。

                Javascriptの差し替えが必要という事で、
                「差し替える事でプラグインが動かなくなるのが心配・・」
                という方も居るかも知れません。

                私も差し替えてからは真っ先に動作チェックを行いましたが、
                ・公式プラグイン
                ・YEP_CoreEngine
                ・トリアコンタンさんのプラグイン
                ・自分で書いたプラグイン
                すべて問題なく動作している様です。

                実際にjsフォルダの中身がどのぐらい書き換わっているのか、確認です。

                ■main.js
                変更無しです。


                ■rpg_core.js
                167〜175行目にかけてバージョン情報をセットしておく処理が追加されていました。
                /**
                 * The version of the RPG Maker.
                 *
                 * @static
                 * @property RPGMAKER_VERSION
                 * @type String
                 * @final
                 */
                Utils.RPGMAKER_VERSION = "1.1.0";


                ■rpg_manager.js
                333行目、339行目にセーブファイル周りの処理が追加されています。
                バージョンアップ情報に書かれていましたね。
                セーブを行う時に不具合が発生した場合、元データが消えない様にされた様です。
                 
                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;
                    }

                597行目〜662行目にかけて、セーブデータのバックアップ処理関数がありました。
                (行数多いので割愛します)

                そして1551〜1558行目、1571〜1573行目SceneManagerに追加がありました。
                ミリ秒で時刻を取得する処理の様ですが、
                 
                /*
                 * Gets the current time in ms.
                 * @private
                 */
                SceneManager._getTimeInMs = function() {
                    return performance.now();
                };

                この処理の影響により、1744行目、バージョン1.0.1では

                SceneManager.updateMain = function() {
                    this.changeScene();
                    this.updateScene();
                    this.renderScene();
                    this.requestUpdate();
                };

                この様な処理だったのが、
                 
                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();
                };

                この様になっていました。
                this.changeScene();とthis.updateScene();が、新たに加わった処理の中に変更。
                詳しくは分かりませんが、これが「ゲームの動作スピードが変動してしまう不具合の修正」かも知れません。

                それから2408行目、$gameParty.removeBattleStates();の場所が
                BattleManager.processAbortからBattleManager.processEscapeの中に移動されています。
                こちらは「戦闘時、逃走に失敗すると状態異常が消失する不具合を修正」の様ですね。


                ■rpg_object.js
                殆ど変更無しですが、細かい部分が幾つか。

                v1.0.1 1409行目・1531行目 this._targetIndex = target.index();
                v1.1.0 1409行目・1531行目 this._targetIndex = target.index;
                target.indexから()が外れていました。

                1688行目ダメージ計算式を処理する
                Game_Action.prototype.evalDamageFormulaの中で
                return Math.max(eval(item.damage.formula), 0) * sign;
                から
                var value = Math.max(eval(item.damage.formula), 0) * sign;
                        if (isNaN(value)) value = 0;
                        return value;

                に変更されています。
                「ダメージ計算式が空白のスキルを使用すると、エラーが発生する不具合を修正」への対応ですね。

                あと見逃す所でしたが、最後の方の10259行目、
                職業変更の処理をする関数 Game_Interpreter.prototype.command321

                バージョン1.0.1 actor.changeClass(this._params[1], false);
                バージョン1.1.0 actor.changeClass(this._params[1], this._params[2]);
                これが職業変更時のレベル保持の処理ですね。


                ■rpg_scenes.js
                こちらも殆ど変更無しですが、1箇所だけ。
                今回のバージョンアップにおいてゲームセーブ時に取得していたバックアップを、
                セーブ成功と同時に削除する処理が加えられています。
                 
                Scene_Save.prototype.onSaveSuccess = function() {
                    SoundManager.playSave();
                    StorageManager.cleanBackup(this.savefileId());
                    this.popScene();
                };


                ■rpg_sprites.js
                これは偶然なのか、ちょうど前回私が記事に使用した関数に修正が入っています。
                845行目、
                 
                Sprite_Actor.prototype.refreshMotion = function() {
                    var actor = this._actor;
                    var motionGuard = Sprite_Actor.MOTIONS['guard'];
                    if (actor) {
                        if (this._motion === motionGuard && !BattleManager.isInputting()) {
                                return;
                        }

                「サイドビュー戦闘時、防御アニメーションが適切に再生されない不具合を修正」
                この部分に関する修正処理ですね。
                もし前回か前々回のブログ記事にてこの処理を直接書き加えられた方は、ご留意ください。

                それから2358行目にて遠景の不具合についての追加と、
                2374行目でupdateParallaxへの修正が行われています。
                 
                /*
                 * 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);
                };
                 
                        if (this._parallax.bitmap && Graphics.isWebGL() != true) {
                            this._canvasReAddParallax();
                        } else {

                            this._parallax.bitmap = ImageManager.loadParallax(this._parallaxName);
                        }

                「Canvasモード時に遠景の変更が反映されない不具合を修正」ですね。


                ■rpg_windows.js
                変更点は3箇所。

                1749行目〜1755行目
                ゲームの解像度変更により、メニューの顔グラフィック表示位置がずれる不具合の修正
                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, 144, rect.height - 2);
                    this.changePaintOpacity(true);
                };

                4599行目〜4606行目
                文章の表示 のコマンドで一括入力がオンの場合、スクロールバーが表示されない不具合の修正
                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(), 100);
                };

                5431行目〜5436行目
                コマンド記憶がONの時、スキルタイプ選択時のカーソル位置が記憶されない不具合の修正
                Window_ActorCommand.prototype.selectLast = function() {
                    this.select(0);
                    if (this._actor && ConfigManager.commandRemember) {
                        this.selectSymbol(this._actor.lastCommandSymbol());
                    }
                };

                という感じですね。

                アップデートによる差分は以上の様です。
                これ以外ですとlibs/pixi.jsがバージョン2.2.9から2.2.10になっている事ぐらいでした。

                ここまで見てみると、現存しているプラグインに大幅な影響を与える追加修正は特に無さそうな気がしますね。安心して公開中の作品のファイルも差し替え出来そうです。ただしバックアップとテストプレイは念のためお忘れずに。
                | RPGツクールMV技術情報 | 09:56 |- |
                oggファイルとm4aファイルを軽量化する
                0
                  とりあえずRPGツクールMVのブログを始めてみました。
                  但し人に読ませるための文章ではなく、あくまで私自身が仮にド忘れした時に読むための備忘録や作業のメモとして活用していきたいので、細かな手順などはかなりざっくりと割愛していく方向です。

                  ■目的
                  RPGツクールMVの、ファイルサイズの大きいBGM素材を軽量化したい

                  ■対象
                  各プロジェクトフォルダ¥audio¥bgmにある、
                  Battle1.ogg(PC用)   4.23MB ビットレート498kbps ←
                  Battle1.m4a(スマホ用) 2.36MB ビットレート276kbps ←

                  ■問題
                  容量肥大の原因である高すぎるビットレートを落とすのが手っ取り早いのですが、適当なオーディオ変換ツールで変換・保存するとループタグが削除されてしまう事が多いです。そしてその状態のまま変換後のファイルをプロジェクトフォルダに上書きすると、戦闘の途中でBGMが途切れてしまいます。

                  ■解決策
                  幾つかの変換ツールを試してみた所、
                  Windows「foobar2000」というオーディオ管理ツールを使用する事で
                  ループタグは変換後のものに問題なく引き継がれていました。

                  準備
                  1) 「foobar2000」をインストール
                   (※ogg,m4aの変換ライブラリパック「foobar2000 Free Encoder Pack」も併せて入れておくと良いでしょう)
                  2) 起動
                  3) File -> Preference -> Display -> Default User Interface -> Playlist View
                  4) Custom columnsに「Add new」をクリックして以下の2項目を追加
                   Name「LOOPSTART」 Pattern「%LOOPSTART%」
                   Name「LOOPLENGTH」 Pattern「%LOOPLENGTH%」
                  5) OKをクリック
                  6) foobar2000のリストの、項目バー(Artist/albumやTrack No等が書かれているバー)を右クリック
                  7) Columns -> LOOPSTARTとLOOPLENGTHをチェック
                   この先File Sizeもチェックして表示しておくと分かりやすくて良いと思います。
                  8) リストにBGM素材をドラッグ&ドロップ
                  9) リストに追加したBGMのLOOPSTART欄・LOOPLENGTH欄に数値が表示されていれば、その曲はループ処理が施されています。

                  oggファイルの変換
                  1) oggファイルをまとめてリストにドラッグ&ドロップ
                  2) Edit -> Select All
                  3) 選択したファイルの上で右クリック -> Convert -> Quick Convert
                  4) フォーマット一覧から「Ogg Vorbis」を選択し、Editをクリック
                  5) Qualityのバーを左に動かしてビットレートの数値を下げます。ここでは128kbpsに設定します。
                  6) okをクリック
                  7) Convertをクリック
                  8) Transcode warningが表示されたら「はい」をクリック
                  9) 保存フォルダを選択
                  10) ※この時、「oggenc2.exe」の場所を聞かれる事があります。
                    デフォルトではインストールされていないので「foobar2000 Free Encoder Pack」をインストールして下さい。
                  11) 成功



                  m4aファイルの変換
                  1) m4aファイルをまとめてリストにドラッグ&ドロップ
                  2) Edit -> Select All
                  3) 選択したファイルの上で右クリック -> Convert -> Quick Convert
                  4) フォーマット一覧から「AAC(Apple)」を選択し、Editをクリック
                  5) Qualityのバーを左に動かしてビットレートの数値を下げる。スマホプレイ用なら96kbps程度で良いと思われます。
                  6) okをクリック
                  7) Convertをクリック
                  8) Transcode warningが表示されたら「はい」をクリック
                  9) 保存フォルダを選択
                  10) ※この時、「qaac.exe」の場所を聞かれる事があります。
                    デフォルトではインストールされていないので「foobar2000 Free Encoder Pack」をインストールして下さい
                  11) 成功

                  ■追補
                  既に「Xrecode II」「Audacity」など別の変換ツールで大量の変換をかけてしまった場合や、「foobar2000」をどうしてもインストール出来ない・起動エラーが発生してしまう場合は、oggファイル限定ではありますが、元素材のループタグを変換した素材にコピーするDOSバッチファイルを作成しました。

                  以下のURLよりダウンロード可能です。
                  http://ktnh5108.pw/oggtag.html
                  詳しい内容は同梱のテキストにて。
                  私自身不勉強ゆえにかなり雑な作りになっているのでご容赦下さい。
                  (再配布自由、改良自由)
                  | RPGツクールMV技術情報 | 16:05 |- |
                  PR