chunk of log

プログラムを書いたり、ゲームを作ったりしています。

ツクールMV製の日記を書いた「感想」「運用」

RPGツクールMV(なんでもあり) Advent Calendar 2015 13日目の記事です。

僕は、RPGツクールMV(海外版)を使って日記を書いています。 日記がキャラクターやアイテムとして登場するゲーム(?)です。

https://chunkof.github.io/tkool-diary/

f:id:chunkof:20151213194957j:plain

今回は、この日記について

  1. ツクールで「日記」を書いてみた。
  2. ツクールで「随時アップデート型コンテンツ(=日記)」を運用してみた。

という2つの観点で書きます。後者は技術的な話を含みます。

1.ツクールで「日記」を書いてみた。

10月26日からツクールMVを使って日記を書いています。考えもなく書き始めて行き当たりばったり更新中です。

書いてみた感想

ゲームを1本仕上げなくても、とりあえず公開できるのが良いです。日々あったことをツクールに落とし込んでいくだけです。ちょっと凝った日記を書いたり、新たにマップを追加したりすると、それなりに時間はかかりますが。

「日記でも書くか」と思いながらツクールを起動するの、なかなか楽しいです。おすすめです。ネタを手軽に仕込める土台を手に入れた!って感じです。

今のところ世界観は適当ですが、適当なおかげで整合性をあまり気にせず更新できます。 しっかり世界観をもった日記をつくると大変だと思います。日記として更新を重ねながら世界観を崩さず積み上げていく。難易度高そうです。

でも、世界観が作りこまれたツクール日記。読んでみたい。 事前準備も更新も大変そうですが期間を短く設定すればできるかもしれません。

読んでみた感想

日記を読んだ人から感想を貰えることがあります。

「おもしろい」「くだらないのが良い」「更新があったときにチョロっとプレイできるのが良い」「習慣的に毎日ちょっとだけやるゲーム好き」

「試みとしておもしろい」「ツクールMVを日記ツールとして発展させることができそう」「日記以外にもこんなことができそう」

感想や意見を貰った流れで、ツクールMVの可能性や実現方法について意見を交わすこともあり、楽しいです。夢が広がりますツクールMV。

「日記のどこが更新されたか、わかり難い」「更新された場所を探す楽しさもある」という意見も貰います。どちらも参考になります。 日記更新時に、大まかな更新箇所かスクリーンショットをツイートしているので、それをヒントに探してもらえればと思っています。

また適当に更新していきますので、気が向いたときに読んでもらえると嬉しいです。

日記として

日記やブログサービスでは最初から用意されている機能も、ツクールにはありません。欲しければツクる必要があります。

まず思いつくのは

  • 目次
  • 検索
  • コメント
  • 更新履歴

あたりですかね。

これらを「ツクールらしさ」「RPGらしさ」を活かした形で取り込みたい。しかし現状ほとんど取り込めていません。

目次

目次はルーラで代用しています。 今はメニュー階層を辿ってスキルから呼び出さないといけないので面倒です。改善したい。

このルーラ(目次)は地形ハマりの救済も兼ねています。日記を更新しながらマップも弄っているので、セーブから再開時に地形が変わっていて抜け出せなくなることがあります。その脱出用です。

検索

このブログを書くまで「検索」という機能を忘れていました。「検索」にあたる機能はありません。 なにかの形で取り込みたいですね。現状ノーアイディアです。

コメント

ツイッターがその役割を担っています。

バグったままアップしちゃうことが多く、「バグってるよ」とレス貰えたりして助かっています。それをすぐ直してアップデートできるのもブラウザプレイのいいところですね。後述の「キャッシュファイル残り」への対策は必要ですが。

更新履歴

日記更新時のツイートは検索で引っかけることができます。

https://twitter.com/search?f=tweets&q=tkool.org%2Fchunkof%2Fd&src=typd

ツイッター検索を更新履歴として使うなら、ハッシュタグ付けたほうがよさそうですね。 Togetterでまとめとておくのも手か。

ゲームとして

ゲーム要素はいまのところ、ほぼ入れていません。

手軽なものであれば入れてしまって、プレイアブル・ダイアリーにしたい。 例えば「月曜日」とのバトルを実装したいです。日曜の夕方以降にだけ出現する強敵。倒したところで月曜はやってくるけど。

ゲームといえばインタラクティブ性が重要だと、どこかで読んだ記憶があります。この日記もインタラクティブ性があるといえばあるんです。

f:id:chunkof:20151213195521j:plain

f:id:chunkof:20151213195558j:plain

これは日記ですけど、僕をツクラーとして成長させる育成ゲームでもあるわけです!

これから

盛り込みたいイベントやら何やらが沢山あります。でも時間がかかりそうなのが多い。気が向いたときに入れていきます。

最近は少し手の込んだことをやろうとする傾向にあるので、初心を思い出して手抜きを心掛けます。

日記とは別の話になりますが、ツクールを買ったからには、やはり”ロール・プレイング・ゲーム”を作りたいです。いつになるかわからないけど、短編ならいけるかな。日記のように随時更新&公開もよいですが、エターなるか完成するかの狭間で魂削って作品仕上げる。やっぱこれですよ。だいたいエターなるけど。

2.ツクールで「随時アップデート型コンテンツ(=日記)」を運用してみた。

ツクールMVから「Web上にゲームをアップしてブラウザでプレイしてもらう」ということが可能になりました。日記もその方法で公開しています。そのなかで、以下の問題が発生しました。

  • 古いキャッシュファイルが残っていて、更新が反映されない。
  • セーブデータの整合性がとれなくなる。

このあたりについて書きます。

キャッシュファイル残り

古いキャッシュファイルが残っていると……。

  • マップやイベント、データベースを更新しても反映されない(data/*.json)
  • プラグインの登録やパラメータ変更が反映されない(js/plugins.js)
  • プラグインの修正が反映されない(js/plugins/*.js)
  • ツクールMV本体ソースの更新が反映されない(js/*.js)

対策方針

ブラウザからキャッシュファイルを削除すれば、この問題自体は解消されます。 しかし「キャッシュを一度削除してください」というのは無理があります。 また「まったくキャッシュを使用しない設定にする」という対策もありますが、変更が無いファイルはキャッシュを使いたいです。

ということで、今回の要件は以下の通り。

  • 変更の無いファイルはキャッシュを使用する。
  • 変更の有るファイルはキャッシュを使用しない。

対策

現在使っている対策をGitHubにあげました。

Cache Control

クエリパラメータにハッシュ値を付与することで対応しています。例えば「Map001.json」というファイルをロードするとき、直前でファイル名を「Map001.json?v=ハッシュ値」に差し替えます。ハッシュ値が異なれば別ファイルと認識されるため、キャッシュファイルは使われません。

これで

  • ハッシュ値がおなじ(≒ファイルに変更が無い)場合はキャッシュを使用する。
  • ハッシュ値が異なる(≒ファイルに変更が有る)場合はキャッシュを使用しない。

となり、要件が満たせました。

ハッシュ値は衝突する可能性もありますが、今回の用途からすれば無視してよいレベルかと。

使用方法

使用方法はGitHub上のReadMeに記載しました。

プラグインだけで実現したかったのですが、今回はGulpも使用します。 プラグインだけで対応するのは難しく諦めました。

Gulpとは、ビルドシステムヘルパーといわれるもので、ファイルを結合したり変換したり圧縮したり色々できるツールです。使用するにはNode.jsをインストールし、そのうえでGulpをインストールする必要があります。インストールの方法は「Node.js インストール」「Gulp インストール」等でググるとでてきます。

簡易版(プラグインだけで導入可)

プラグインだけで導入可能な簡易版(Cache Control light)も作成しました。

「対象はゲームデータ(data/*.json)のみ」「変更の有無は簡易的にversionIdでチェック」という仕様です。スクリプトの更新やプラグインの変更が無い場合は使えると思います。変更チェックが簡易的なので無駄なロードは発生しやすいです。versionIdとは、ツクールMVでゲームを上書き保存する度に更新される値です。

サーバやXMLHttpRequestの設定でキャッシュを無効にする方法もあります。試してみたのですが、どうもキャッシュを握ったままになるブラウザがありました。適当に試しただけなので、僕のやり方が間違っていただけかもしれませんが。

未対応部分

キャッシュファイル残りの問題は、スクリプトやゲームデータ以外に、画像や音楽ファイルでも発生すると思います。今まで画像や音楽を差し替える機会がなかったので未対応です。

これらも今回と同じ方法で対応できると考えています。ただ画像や音楽はファイルサイズが大きいので、ハッシュ値の生成に時間がかかるかもしれません。Gulpのコマンドは別にしたほうがよいかも。ハッシュ値の代わりにファイルのタイムスタンプを使うのもありですかね。

セーブデータの整合性

一度公開したゲームを後から変更すると、それまでのセーブデータと整合性がとれなくなる場合があります。 イベントフラグや変数、マップの座標など。旧来のツクールでも注意が必要だった点です。

「セーブ機能なし」という仕様で問題なければ、そうしてしまうのが簡単だと思います。

ツクールMVならではの事象があったので書きます。セーブデータとゲームタイトルについてです。

セーブデータはタイトルに紐づいている

ゲームのタイトルを「日記★マナーモードでも音鳴るかも注意★」から「日記」に変更したことがあります。そうすると、ゲーム再開時にタイトル変更前のセーブデータが選択できなくなりました。

なぜタイトル変更前のセーブデータが選択できなくなるのか?それは 「プレイ中のゲームのタイトル」と「セーブデータに保存されいているタイトル」が一致するかチェックしているためです(オンラインの場合のみ)。このチェックで弾かれたセーブデータは選択できません。

とりあえず、チェックを甘くするプラグインを書いて対応しました。タイトルのチェックを先頭2文字分だけにする汎用性の低いプラグインです。

そもそも何故、ゲームのタイトルをチェックしているのか?同一ドメイン上に設置されているゲームは、セーブデータを同じ領域(LocalStorage)で管理しています。ロード画面には他のゲームのセーブデータも一緒に並びます。でも実際にロードできるのは、プレイ中のゲームのデータだけにしたい。そういう理由だと思います。

f:id:chunkof:20151213200107j:plain

その他もろもろ

ブラウザプレイのゲームに関するもろもろ。

Google アナリティクス

日記にはGoogleアナリティクスの解析用コードを入れています。ただ、解析用コードをそのまま入れるとローカルでのテストプレイ時にフリーズしてしまいます。Webにアップした場合はフリーズしません。この問題は、解析用コードをif (location.hostname != “”)で括ることで回避できます。

if (location.hostname != “”){
    // 解析用コード
}

ファイルの圧縮

ツクールMVに同梱されている画像や音声素材はファイルサイズが大きいです。画像や音声が重いとブラウザプレイ時にラグが発生することがあります。 素材についてのスタンスは「公式は高品質な素材を提供。ユーザーが用途に応じて圧縮」だったと記憶しています。

ということで圧縮が必要になります。圧縮ツールのデファクトスタンダートってあるんですかね?知りたいです。ベターな方法を共有したい。

WindowsだとPNGooというGUIツールがあったので、これを使いました。ドラッグ&ドロップで一括変換が可能です。

ここにはCUIツールもあります。「Binary for Windows」だけ試しましたが、パラメータを細かく指定できるようでした。同梱されているバッチに「そのまま上書きするオプション(--ext .png)」をつけて流すと楽です。 試す場合は、変換前のファイルをバックアップしてからお願いします。

音声ファイルは「圧縮かけるとループ設定が外れる」という話をきいたことがあります。今のところループさせたい場面がないので検証はしていません。しかしBGMとして流す場合は困りますね。よい方法があれば教えてください。

3.余談

 ところで「ツクール」「日記」といえば、RPGツクール2000で作成された「日記のネタがないときの逃げ道6」というSubrinaさんのゲームがあります。このゲームは「第11回3分ゲーコンテスト」の優勝作品です。3分ゲーコンテストとは、 ”3分程度で遊べるフリーゲームを応募し合い、人気投票により順位を決定するコンテスト”です。しばらく開催されていなかったのですが、最近復活したらしく、第20回大会が9~10月の期間で開催されていました。

そう、「第20回3分ゲーコンテスト」といえば、第20回大会で10位タイに輝いたPixReversiというパズルゲームがあります。僕が作りました。現在、これのversion2を開発中です。ツクールMVがおもしろいせいで進捗がダメです。 しかし、ツクールMVを触った経験はPixReversiの開発に活かせます。共通点が多いんですよ。「ブラウザでプレイ可能」「スマホでのプレイも想定」「セーブデータをLocalStorageに保存」など。いい経験になっています。ありがとうツクールMV。

そう、ありがとうといえば、12月20日に「RPGツクールMV」交流&もくもく勉強会in大阪【初心者歓迎】が開催されます。 僕も参加します。近畿在住なので大阪であるのは嬉しい。大阪でもあったらいいなと思っていたのですが、自分から手を挙げられるタイプじゃないので、ありがたいです。ノートパソコンは必要ですが、みなさんも是非。

ここまで読んでいただき、ありがとうございます。この記事はアドベントカレンダー13日目の記事なので、12月13日です。12月13日ってどんな日かな?とググってみたところ「正月事始め」らしいです。

Wikipediaから引用します。

正月事始め(しょうがつごとはじめ)とは、正月を迎える準備を始めること。かつては旧暦12月13日、現在は新暦12月13日に行われる。昔はこの日に門松やお雑煮を炊くための薪など、お正月に必要な木を山へ取りに行く習慣があった。

昔の人は今ぐらいから正月の準備をしていたんですね。

それでは皆様も、よい正月準備を!