Unityと吉里吉里でSLGとかRPGを作るブログ

頑張りすぎて、腰痛になった猫ダマシです。
1フロアに2人はヘルニアの居る職業なので、ついに自分に回ってきたかといった感じではあります。

ゲーム制作の方は、地獄のリスト作りが終わりました。
ここで言うリストは、ゲーム上のアイテムリストやスキルリストと言った物です。
RPGってのはとにかくリストが多いゲームで、宿屋に入っても、松竹梅と宿屋のランクが選べたりと無駄にリストが出てきます。
その上、潜水艦モノと言う事で、潜水艦用パーツと人間用パーツに分かれます。
基本機能は継承するとしても、個々に機能が違う訳で、ひたすらリストを作る作業が1ヶ月近く続きました。

しかし、その地獄も抜け、いよいよプロトタイプテストに入ります。
プロトタイプテストでは、実際のゲームの最小単位を作り込んでテストします。
RPGであれば、街でアイテムを購入し、ダンジョンで戦闘し、帰還して街で休むって感じですかね。
機能や画像を正式化していく作業でもあります。


■好感度システム

ろくにスクショも張れないので、RPGにおける好感度について色々書いてお茶を濁そうと思います。

そもそも、好感度システムってなんだろうかって所から入りたいと思います。
実を言うと、高感度システムなる物が搭載されたゲームを、私は殆ど遊んだことがありません。
それでも、少ない情報を元にまとめて見ようと思います。

●好感度システムとは何なのか
簡単に言えば、シナリオを分岐させる為のフラグ管理システムです。
一部を除いて、ゲームクリア必須でないこと、そしてプレイヤーの行動によって変化する事が条件だと思います。

FF8には好感度システムが導入される予定があったそうです。
しかし、実際にはどうプレイしてもリノアとくっ付く仕様になってます。
途中、明らかにリノアの好感度が下がりそうな選択肢が出たり、パーティでの演奏の様に好感度に影響しそうなイベントがあったりしたのは、この名残なんでしょうかね。

FF7の好感度システムは、デートイベントや一部の仕草が変わる程度で、誰の好感度が高かろうが、ゲームクリアには影響しません。
ただ、こちらもシステム的には微妙な導入で、普通にやるとエアリスが一番高くなる設定となってます。
更に戦闘中に変化する好感度もあるとの事ですが、こちらはイベントに一切関連しないとの事。
◆FFの好感度◆


シナリオクリアに必須であった場合、好感度システムの意味は半減してしまいます。
しかし、多くのゲームで100%無意味と言うのも無い気がします。
キャラクター個別のエンディングを迎えるのに必須であれば、それはシナリオに関連するとも言えますしね。

この様に、好感度システムの役割は、ゲームシステムの根本と言うよりも、プレイヤーに選択肢を与える事で、楽しさや、モチベーションのアップを狙ったものと言えます。
※私はやった事ないのですが、例外として、ときめきメモリアル系のゲームは、好感度がゲーム性に強く結びついてると聞いています。

●好感度システムの使われ方
アドベンチャーゲームからRPGまで、大体以下3つの使われ方と思われます。

1.特定期間内で数値の優劣を判定
 有名な所ではFF7のデートイベントなど、特定のイベントが一番高いキャラクターで実行される。
 また、ノベルゲーム等では、この時点で個別ルートに移行する。

2.特定のイベントの発生条件
 好感度○○以上なら、○○イベントが発生などに使われます。
 ○○イベント発生時に、好感度○○以上なら、○○イベント発生など、特定のイベントでの分岐でも使われます。
 1との違いは、キャラクター間の優劣は関係ないこと。

3.選択の成否確認
 昨今のゲームでは、好感度が上がっているか明示的にされている事が多いです。
 謎の音符やハートが飛びかい、選択肢の結果を教えてくれます。
 これは、プレイヤーがやりたい事へのサポートとなっています。つまり、選んだ選択肢が正解と分かる訳です。

●好感度システムの仕様
1.上下を明確化
 上でも書きましたが、音やマークで上がったか下がったか分かる様になってます。

2.現在地の明確化
 明確に数値で分かる物か、抽象的ながら段階がわかる物に分かれますが、完全な隠しパラメータというのは少ないです。
 抽象化も隠す為というよりは、雰囲気作りが主な目的な気がします。恋愛度5より、「淡い好意を持っている」とかの方が雰囲気が出るという訳です。

3.ポイントによる段階アップ
 全部で10段階であっても、1→2に上がるには、ポイントを10ポイントためる必要があるなど、段階上昇に緩衝用のポイントが設定されている事が殆どです。

4.特定イベントによる制限
 特定のイベントが発生するまでは、どれ程ポイントを稼いでも段階が上がらない等の制限がある場合があります。
 下で詳しく書きますが、これはシナリオ上の都合です。


■好感度システムを設計して見る

 まず、各キャラクターに好感度レベルと、段階を上げるポイントを設けます。
 ただし、ポイントの上昇で勝手に好感度レベルを上げてはいけません。それだと、特定イベントによる制限がかけられないからです。
 そんな訳で以下の方式で作ろうと思います。

 1.ポイントに最大値を設ける
 2.ポイントが最大値になったら立つフラグを作る。(PMAXフラグ)
 3.好感度レベルを0~9段階として、各レベルに到達した時に、レベル毎にフラグを立たせる(レベルフラグ)
 4.好感度レベルが変化したら、ポイントは0になる様にする(PMAXフラグもオフになる)
 4.好感度レベルは、特定イベント等で上げられる様に設定する。
 5.好感度レベルフラグと、PMAXフラグを元に特定のイベントを設定する。

イベント自体は、PMAXフラグと、レベルフラグ2つで、制御する。
制御方法は以前紹介した「イベント制御について」で行うとします。

これなら、日常会話でポイントを稼ぎ、ポイントが最大になると、PMAXフラグがON。
これとレベルフラグを元に、イベントが発生し、好感度レベルがアップという流れになります。
この方式なら、特定イベントによる制限は、イベント発生条件に+αするだけでOKです。

どちらが高いとか、誰が一番高いってのは、現在地を元に算出するファンクションを作ればいいから問題ないですね。

■総括

書いてみて思ったけど、あんまり有益な情報とは言えないかもです。
正直、恋愛系のゲームしこたまやってる様な人の方が、私より詳しいでしょうしね。。。
それでも、自分で作る分には、随分クリアになったので、これでよしとします。





◆つぶつぶ主人公HP◆
スポンサーサイト
2013.04.30 / Top↑
と、言う訳で、姫百合の乱を世にリリースしてから、丁度一年となりました。
当サークルは、サークル立ち上げ時期が非常に不鮮明なので、作品の周年で祝おうと思います。

そんな訳で、今回は一周年を迎えての感想と、姫百合の乱でお世話になったサイトを紹介して行きます。

■一周年を迎えて

姫百合の乱は、ダウンロード販売サイト→コミティア→コミケの順でリリースしました。
この中で、一番イメージが変わったのは、ダウンロードサイトです。
特にDLサイトさんの印象は180度大きく変わりました。

18禁ソフトが盛況で、ユーザーと製作者の距離も離れている(淡々と買われる)と言う印象でしたが、意外にも沢山のレビューやコメントを頂きました。
これらは、姫百合を出して最も嬉しかった事です、次回作へのモチベーションにもなっています。
DLサイトさんはレビューやコメントを付けやすいと言う事もあるでしょうし、ダウンロード販売サイトとして盛況であり、同人ソフトへの意識の高いユーザーが多いと言った所なんでしょうか。

イベントで購入して下さいった方は、個人サイトでレビューを書いて下さった方が多かった様に思います。
私の知る限りでも4箇所でレビューを書いて頂けました。

コミティアとコミケに参加して見た感じでは、同じ製作者と会話してモチベーションをあげたりと、
ユーザーよりも、製作者同士との交流の方が強い印象を持ちました。

ゲームを1つ世に送り出した事で出会えた人が大勢います。
それだけでも、姫百合の乱を作って良かったと言えますね。


■姫百合の乱でお世話になったサイト

同人の関係者と言う意味では、実際は姫百合を出した後の方が、色々な人と知り合いになれました。
しかし、今回は姫百合の一周年と言う事で、姫百合製作時に(凄く個人的に)お世話になったサイトを紹介します。

●TJSに挑戦!さん
猫ダマシにとっての神サイトであり、姫百合の産婆さんと言っても過言ではないサイト。
実際、姫百合のゲームシステムは、9割方TJSで出来ており、その基礎となったソースは、全てこのサイトの物だったりします。
解説もわかりやすく、上がっているプラグインも一級品! TJSを弄ろうと思ったら、まずはこのサイトを閲覧すべきです。

●犬と猫さん
紹介も何も、このサイトの1億倍くらい有名な同人作家さんのサイト。
実を言うと姫百合を作る際に、今更2Dゲーム作ってやって貰えるのか?と何度も悩みました。
そんな時に、こちらのゲームをやって、そのクオリティと評判を見て、2Dも3Dも関係ない!面白ければ良いんだと、凄く励みになりました。
因みに、私のお気に入りは、ミンティちゃんが主人公のハーヴェストグリーンです。
のんびりと農業を嗜む感じが凄く良かったです。

●錬電術師 -HexaQuarker- 製作日誌さん
人生初めてのイベントに出向く際に、イベント系記事で、レイアウトの参考にしたりと非常に心強かったサイト。
また、管理人の進行豹さんには、Mixiのコミュニティに入る際に、非常に丁寧な対応をして頂きました。

●社会人が0からノベルゲームを作るブログさん
どうやって見つけたのか忘れてしまったけど、歩1くらいから読んでいるサイト。
同じ社会人のど素人として、毎度ハラハラしながら読んでます。
ど素人の同人作家にありがちな、手探り感を隠すことなく記載するサイト姿勢には、思わず感情移入してしまって、1ヶ月くらいサイトが更新されないと、「駄目だったのか?!」と心配になって、毎日確認しに行ってましたw
この所は、ここまで続いたんだから完成まで行くだろうと、妙な安心感を持って見てます。
ご本人曰く、2~3年後に完成との事。楽しみです。

●ノスタルジアさん
コミティアで知り合った同人サークルさん。
つぶつぶ主人公と双方向リンクをさせて頂きております。
18禁ノベルゲームの最盛期の雰囲気を持った作品をリリースしています(個人的感想)。
コミティアで知り合った時は、共に1作品同士のサークルでしたが、あれよと言う間に2作品目をリリース。
サイトもかっこよくなって、すっかり背中も見えない状態ですw


■総括

姫百合を出してから、知り合った方にも、色々お世話になってます。
次回作のリリース後に、この人たちも紹介出来ればと思ってます。
これも、次回作のモチベーションとして頑張っていきたいです。





◆つぶつぶ主人公HP◆
2013.04.19 / Top↑
お疲れ様です。
やってもやっても作業が後から沸いてくる猫ダマシです。

今回は、いつかやろうと思っていた、TJSプラグインをセーブロードに対応させる方法です。
吉里吉里で動的ゲームを作成する場合、最も難易度が高いのが、このセーブとロード機能です。
というのも、吉里吉里に付いているセーブロード機能は、ノベルゲーム用のフレームワークであるKAGの機能であり、ノベル用に特化した形になっています。

そんな訳で、今回は2回に分けて「セーブ機能の説明」と「その実現方法」を解説していきます。

例によって、そのまま動くサンプルを用意しました。

■サンプルロード■
※解説用にちょっと特殊な作りになっています。
まずは、このブログを読んで下さい。


■KAGのセーブ機能でセーブされるもの

まずは、吉里吉里のセーブロード機能について、確認しておきましょう。
そもそも、吉里吉里のセーブとロードは何をセーブして何をロードするのか。

1.前景レイヤと背景レイヤの情報
2.変数の内、f.で始まるゲーム変数

これ以外に、画面をフルスクリーンにしているとか、既読のシナリオはどれか等の情報や、sf.で始まるシステム変数は、セーブロードとは別に保存されます。


■データ保存と読み込みの流れ

吉里吉里でのデータ保存方法は、かなり特殊な形をとっています。
まず、データは、セーブ可能なラベルを通った時に、その時のデータを保持します。
次に、saveタグなどで栞(セーブデータ)に上で保持されたデータが保存されます。

ロードまで含めると、こんな感じです

セーブ可能なラベルを通過
②上記時点の各種情報を保持
③saveタグで①のデータをセーブ
④loadタグで栞を読み込む
⑤保存さらた情報を元に、レイヤと変数が復元され、セーブしたラベルからスクリプトが実行される

セーブを実行した時点のデータを保存するのでは無く、セーブ可能なラベルを通過した時点のデータである点に注意です。
例えばですが、ノベルゲームを作って、セーブ可能なラベルを先頭におき、後は作らなければ、どこで保存しようと、ロードすれば最初に戻る訳です。

この仕様はノベルゲームにおいても、それなりに不便らしく、随時セーブ可能ラベルを自動てぶち込んでくれるスクリプトやプラグインが公開されています。
これで、セーブ可能ラベルを意識しなくて、セーブを実行した時の状態が保存されます。

ノベルゲームなら、これでめでたしめでたしなのですが、動的ゲームだとそうはいかない訳です。


■TJSスクリプトをセーブロードに対応させる

動的ゲームを作って、セーブデータを保存する場合、2つの壁が存在します。
1つは、TJSのプラグインをkag.addPluginでKAGに登録しても、レイヤも変数も保存しれくれない事です。
まずは、こちらを解決して行きます。

とはいえ、それ程難しくはありません、KAGPluginを継承しているので、セーブとロードが発生した場合、onStoreとonRestoreが呼び出されます。

と言う訳で、サンプルデータを見てください。
004_AroomPlugin
005_BroomPlugin
006_ItemWinPlugin
にセーブ処理と、ロード処理が入っています。

●セーブ処理
//------------------------------------
// セーブ処理
//------------------------------------
function onStore(f, elm)
{
  f.AroomPlugin = new Dictionary();
  f.AroomPlugin.close_flg = close_flg;
}

f.AroomPlugin = new Dictionary();
ここで、引数のfに自分のプラグイン名でデータ保存用の領域を確保してます。
f.で始まる変数。そうですゲーム変数ですね。
これが栞にセーブされる訳です。

●ロード処理
//------------------------------------
// ロード処理
//------------------------------------
function onRestore(f, clear, elm)
{
  if(f.AroomPlugin !== void)
  {
    //クローズフラグON
    if(f.AroomPlugin.close_flg == 1)
    {
      closeWin();
    }
    else
    {
      openWin("fore");
    }
  }
}


if(f.AroomPlugin !== void)
セーブデータに、自分の保存したデータがあるかチェックしてます。

if(f.AroomPlugin.close_flg == 1)
次にクローズフラグがONならば、今の状態に関わらず、クローズ。
OFFならばオープンします。
これで、保存時の状態に復元出来ます。

005_BroomPluginと006_ItemWinPluginには、取得したアイテム情報の取り扱いも行っています。
そちらも確認してみてください。


■動的ゲームにおけるセーブ処理

つづいて、2つ目の壁について説明したいと思います。
まずは、サンプルのこの画面を見てください。
セーブロード①
このサンプルでは、この鍵と●をクリックすると、アイテムを取得できる作りになっています。

セーブロード②
こんな感じですね。

セーブロード③

1回、このsavedataフォルダを消して、セーブボタンを押して見てください。
savedataフォルダが出来ましたね。
中を見ると、data2.kdtと言うファイルがあると思います。
これがセーブされた栞ファイルです。

では、試しに一旦吉里吉里を再起動して、ロードボタンを押して下さい。
どうですか、全くロードされませんね

次は同じ手順で、鍵と●を取った後、ラベルボタンセーブボタンを押してみて下さい。
そして、再び再起動してロードを実行してみて下さい。
どうですか?、今度はちゃんとロード出来ましたね

この問題が何故発生するかと言うと、
セーブ可能なラベルを通過
を行っていないからです。

ノベルゲームと違い、動的ゲームはセーブ可能なラベルを常に通る形にするのは難しいです。
ですので、今回の様に、セーブ直前にセーブ可能なラベルを通らせる必要があります。

実は、今回のサンプルには、TJSに挑戦!さんのセーブロードスクリプトを使用する予定でしたが、このスクリプトを動的ゲームで使うには、相当改造しないと無理そうだったので、諦めました。
次回は、セーブロード画面のサンプルを用意したいと思います。

因みに、当サークルのゲーム、「姫百合の乱」ではセーブロード機能も当然ついてます。
大規模な動的ゲームのサンプルが欲しい方は、こちらも如何でしょうか。
と最後は宣伝で締めさせて頂きます。





◆つぶつぶ主人公HP◆
2013.04.06 / Top↑