2016年2月21日日曜日

おしっこ我慢とおもらし

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




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


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


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


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



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


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

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


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

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

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

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

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

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



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

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

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

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

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


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

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

0 件のコメント:

コメントを投稿