2016年2月23日火曜日

トイレの使用の実装

今回はトイレの使用を実装します。
これまでは開発中のため、ずっとトイレが使用中になっていて、おもらしを余儀なくされていたぬいちゃんですが、これからはおトイレでおしっこできるようになります。


さて、思ったよりも長い実装になりました。
大まかに説明しますと、以下のような処理になります。

暗転
待機
尿意が100%に達していた場合、個室内おもらし処理に以降
尿量減少開始
尿量が0になるまで待機
待機
暗転解除

※但し、尿意が無い場合は使用しない

尿量減少はおもらしと同様に通常の尿量処理内で放尿中フラグを参照することによって実装しています。(以前は「おもらし中」というフラグ変数名称でしたが、トイレイベントと兼用にするため、「放尿中」に改めました)

尿意変動やおもらしとの兼ね合いの中でイベントを制御するため、通常変数に「おトイレ中」というフラグを作ることにしました。トイレに入ってから出てくるまでの間だけ、このフラグが立ちます。

尿意もおもらし時と同じように、自然変動に任せる仕様にします。そのため、イベント中の尿意更新停止の例外として「おトイレ中」フラグが立っている場合を追加します。

尿意更新停止の例外とする以上、このままではイベント中におもらしが発生する可能性があります。色々とバグの温床なので、「おトイレ中」フラグが立っている間はおもらしチェックをスキップするようにすることで、通常のおもらしは発生しないようにします。


尿意の更新を停止しない以上、トイレ使用コモンイベント中に尿意が100%に達するケースが発生します。暗転後の待機時間はトイレに入ってから着衣を脱ぎ便器に跨るまでの間をイメージしているので、この待機が終了した時点で尿意が100%に達していた場合は、トイレ個室内で便器を目前にしておもらししてしまったものと見做し、トイレ使用コモンイベントから専用おもらしイベントを直接呼び出すことにしました。

個室内おもらしコモンイベントの実装です。
おもらしコモンイベントをベースに作っていますが、別物です。
台詞や表現の違い、および先のバージョンにおいて通常のおもらしと違う影響を実装するために分けました。


さて、実装の紹介はこのくらいにして、ゲーム画面を紹介します。

まずは尿意が無いケースです。
メッセージが表示されるだけでイベントは終了します。

続いて通常のトイレでの放尿です。
暗転した後、尿量が減少していきます。

最後に、ぬいちゃんの外尿道括約筋が便器を目の前にしながら最後の数秒を耐えきれずに力尽き、はち切れんばかりに溜まったおしっこの奔流が哀れなぱんつの裏側のクロッチを打ち付けることを許してしまった場合です。
状況の再現のため、おもらし寸前までおしっこを我慢してからトイレに入ります。

暗転後に尿意が100%に達し、個室内おもらしが始まります。
基本的には通常のおもらしと同じです。



さて、これをもって晴れてぬいちゃんはトイレでおしっこできるようになりました。
尿ゲーとしての基本的な部分は、今バージョンでの仕様としては一通り完成かと思います。

次回はマップを作成します。次回こそは。

2016年2月22日月曜日

いろいろ細かいの

前回、次はマップ作るって言いましたが、ちょっと後回しにしてます。
どうにもマップエディタの機能が不十分で、効率的じゃないんですよね。
例えば地面を3マス分隆起させるとして、壁を3マスと、その上の高台下端を配置して、地形を見ながら壁を中央、下、左右などと配置仕分けるとかを手作業でやらなくちゃいけない。
これはどう考えても人がやる作業じゃない。自動化したい。
そういうツールがあれば使うべきだと思うけど、無かったらマップファイルのバイナリ解析するしかない。
それはちょっと、なるべくやりたくない気がする…

そういうわけで、マップの作製のほうは様子見ということで先延ばしにしています。
とはいえ、進捗は欲しかったので、細かい機能を色々実装しました。


<宿泊>

宿泊のコモンイベントを作りました
このダイアログ自体はコモンではなく、イベントのほうで出しています。
「休む」を選ぶと、宿泊コモンイベントが実行されHP、SPが全快します。
利尿度はリセットされますが、尿量は変化しません。

尿意がある状態で宿泊しようとすると、メッセージが出て宿泊できないようにしました。
この切り分けは宿泊コモンイベント内で行っています。

<おまけ>
内部で立ち絵付き会話のコモンイベントを呼び出しているので、尿意による立ち絵の切り替えが自動的に行われます。



<おしっこ我慢カットイン>

尿意が一定以上のときに前押さえすると、一回だけカットインが入るようにしました。
カットインイラストは1秒程度表示され、自動的にすぐ消えます。
表示中も移動することができます。

メッセージ表示の機能を使うと、プレイヤーの入力を待って停止するモードになってしまうので、ここでは「お手軽ウィンドウ」機能と「文字列をピクチャとして表示」の機能を利用しています。
通常のメッセージ表示とレイアウトが微妙に異なるのはそのためです。レイアウトは、同じにする必要は無いと思っていますが、それにしても少し改善したいですね。

なお、カットインが再度表示されるための必要条件は、トイレの使用(未実装)かおもらしです。



<ゲームオーバー>

ゲームオーバーを実装しました。
タイトルに戻るとか、あるんですね。あと、宿屋でも使ってますが、暗転とかも。

今バージョンではおもらしするとゲームオーバーなので、早速そこに実装してみました。
なお、実際には、ゲームオーバーイベントとして多少の会話などを挟む予定です。



<トイレの接近による尿意誘発>

おしっこを我慢してトイレのすぐ近くまで辿りついた時、おしっこができるという安堵と、すぐ近くにある便器のイメージが尿意を加速し、幼気な少女の外尿道括約筋に最後の試練を与えます。
この現象を再現するコモンベントを作りました。

トイレに設置するイベントから呼び出すコモンイベントです。
専用の通常変数を用意しています。
デフォルトでは、尿量が80ml増えた場合に相当する尿意誘発になります。
一般的なトイレにはこのデフォルト状態で設置します。

尿意変動の中で通常変数を参照して加算し、元に戻すようにします。


イベントからは呼び出すだけです。
但し、起動条件は「イベント接触」にします。「プレイヤー接触」にすると、プレイヤーが立ち止まっている間は尿意誘発が起こりません。

なお、このコモンイベントは領域拡張をしたイベントに実装することを想定しています。
こんなもんでしょうか。大きい赤い四角がトイレ(右の小さい建物)による尿意誘発の範囲です。
この範囲内にプレイヤーがいる間、毎フレーム専用通常変数に値がセットされます。



さて、今日はこんなもんです。細かいものが片付くと進んだ感ありますね。
最初のバージョンに向けた残タスクは、マップが大きいほか、イラスト制作が多いですね。
絵はあまり得意ではないので、どうしても時間が掛かりますね…

2016年2月21日日曜日

おしっこ我慢とおもらし

さて、また絵を描いたり別件の用事が入ったりしているうちに更新間隔が空いてしまいました。
今回はついに、おしっこ我慢の立ち絵とおもらしを実装します。




まずは絵です。
こんな感じに描けました。


おもらし立ち絵のおしっこは別レイヤーに分けて乗算で描いています。
おしっこ無しの立ち絵と、レイヤ属性を通常にしたおしっこを別に書き出します。
おしっこの染みの出現をコード側で制御するためです。


さて、コードの実装です。
まずはおしっこ我慢立ち絵の切り替えです。
既に実装した立ち絵付き会話のコモンイベントに、数行足すだけです。チョロいですね。
なお、尿量と前押さえ中であるかどうかに関わらず尿意の程度のみを判定基準とするようにしました。


ぬいの登場する立ち絵付き会話で、自動的に立ち絵が切り替わります。
ちょっと色味が違うとか、会話用にしては表情が不自然とか、思うところは色々あるので、多分そのうち多少の修正をします。



さて、続いておもらしのコモンイベントです。
おもらし自体は以下の通りです。
立ち絵を表示した上に、不透明度0の乗算でおしっこの絵を表示し、台詞を表示した後に、不透明度を上げていきます。
おもらし中のみ、「おもらし中」のフラグが立ちます。


おもらし中は、尿量がどんどん下がっていくという仕様にしたいので、尿関連のパラメータの更新コモンイベントを修正します。

尿意は特に弄らず、尿量が下がるにつれて自然と低下するのが良いと思いましたが、おもらし中に尿意がすごい値になって下がり切らず、おもらし終了直後に再びおもらしイベントが発動するという現象が発生したので、尿意の上限を設けました。
尿意がマイナス値になった場合に0にする処理と同じ位置に、100を超えた場合に100にする処理を加えました。


しかし、ここでおもらし中に尿意の変動が起こらないというバグが発生しました。
尿意の更新を行うフレームであるかどうかをチェックする並列実行コモンイベントが呼び出されていないようです。
このコモンイベントです。イベント実行中は尿意が変動しないように制御していますが、おもらしだけは例外とするようにしています。しかし、そもそもこれが実行されません。

色々調査したところ、コモンイベントの呼び出し構造に原因がありました。
おもらしイベントは以下のようなシーケンスで呼び出されています。

尿意更新フレームチェック
尿意更新
おもらし

おもらしイベント中に尿意フレームチェックが呼び出されないのは、同じコモンイベントが既にスタックに乗っていることが原因でした。

別プロセスであってもスタックに乗っているコモンイベントが並列実行されないのはウディタの仕様でしょう。なお、この仕様が無ければおもらしイベントが多重に呼び出されるというバグになっていたと考えられます。いずれにせよ、無意識に危うい実装をしてしまっていました。

そこで、尿意の変動直後に尿意をチェックしておもらしを呼び出す仕様をやめ、おもらしチェック専用の並列実行コモンイベントを作りました。
これだけです。おもらし中にスキップする処理は、先述のウディタの仕様のため不要です。



さて、できました。
尿意が100%になった瞬間、一瞬動けない状態で間が入ります。

立ち絵と台詞が表示されます。

ぬいちゃんがおもらしします。尿量が減っていき、おしっこの染みが濃くなっていきます。

おもらししてしまいました。
尿量が0ではないのは、この時点でおもらしが終了しており、既におしっこの増加が始めっているからです。
尿意が0ではないのは、前述の通り尿量に応じて自然に下がる以上の処理をしていないためです。この時点で下がり続けています。

おもらし終了後、通常の状態に戻りました。
尿意は尿量に従って下がり、0に戻ります。尿量は増加が始まっています。利尿度も尿意同様、自然減少以外の変動はありません。


おもらしゲー作成開始から、早くも2週間が経ちましたが、ようやく主人公がおもらししました。

さて、次回はマップを作るあたりを進めようと思います。
構想としては、ワールドマップという概念が無く、エンカウント率の低い広大なマップを速めの移動速度でズンズン歩いていくゲームを考えています。
オープンワールドに似た趣の楽しさのあるゲームになればと思っていますが、コンテンツ量が多くなるため、効率化と管理のための工夫がなければ実現は難しいでしょう。
その辺の具体的なことを考えつつ、ver.0.1公開に向けて実際のマップを作っていきます。

2016年2月15日月曜日

タイトル画面の作成

今回はタイトル画面を作っていきます。


まずはタイトル画面用の絵を描きます。
はい、こんな感じにできました。

続いてタイトル画面イベントを実装します。
基本的にサンプルゲームの丸コピで実装できるはずです。
まずは空のマップを作成し、ゲーム開始地点を設定します。

サンプルゲームのタイトル画面表示イベントをコピってきます。
チョロいですね。
あとは、表示する画像を今作った画像ファイル名に指定を変え、ゲーム開始時の主人公の位置を書き換えるだけです。

なお、別のゲームからイベントをコピってくる方法ですが。

右クリックメニューからイベントコードをコピーして貼り付ければ良いようです。
まあ、最初知らなかったんでコモン書き出し経由したんですが…
さっさと調べれば良かったですね。


ともあれ、ちゃんと表示されるようになりました。
今まではゲームを開始するといきなり主人公がマップ上にいましたが、メニュー画面が出るようになりました。

スタートを押すとマップに切り替わります。初期位置は先述の書き換えた位置になります。

メニューに「コンティニュー」があったので、現段階でセーブが機能するか確認しておきましょう。

こちらがロード直後の画面です。
尿量や利尿度などのオリジナルプロパティもきちんと保存されています。


というわけで、メニュー画面が実装できました。
コーディングは簡単で詰まるところもありませんでしたが、絵の作成にかなり時間がかかってしまいました。

次回は…
うーん、何から手をつけようか…
まあ、尿ゲーだしおしっこ我慢・おもらしの立ち絵差分およびイベントにしようかな