muratsubo のパズル日記

あそんでいるパズルについて書きます

Thinky Puzzle Game Jam 2 - 開発日誌 (2)

引き続きパズルを作っています。 前回は作業が終わった後にまとめてやったことを書き起こしていましたが、今回は作業中にいま取り組んでいることをメモしていく形式で書いています。

ところで仮タイトルが『A Magical Hat』なんですけど、このままだとひねりが無さすぎる

帽子の内部表現

現在、帽子の中身を表現する方法として、帽子の上にいま中がどんな状況かを表すメタデータ(「空」「プレイヤー」「ブロックが 1 個」「ブロックが 2 個」……)を乗せて識別するという手段をとっているのですが、この方式だと新ギミックを増やすのが厳しいことに気づきはじめました。 新ギミックを帽子の中に入れることを考えると、帽子の中身が取れる状態数が爆発的に増えていきますからね~~

そこで、ステージの端に「帽子の中身」を表す幅 1 の空間を隠しておき、その中で帽子の中身をシミュレーションすることにしました。

こういうかんじ

高さ 2 のブロックの下半分が収納されている様子です。 内部表現にパズル盤面を使っているため、「無限の深さを持つ帽子」というコンセプトは表現できなくなりますが、深さが 1 マスより大きい時点で十分 magical hat なのでまあいいでしょう。 なんなら、深さが有限であることが効いてくるステージも作れるようになりますしね

ところでさ、だんだん Patrick's Parabox に見えてきてしまって困っています

見えない盤面

ところで、最終的に帽子の中身は見えている(帽子にいま何が入っているかをパズルプレイヤーが記憶しておかなくていい)ほうが thinky puzzle game の精神に即しているだろうか? このまえ sokobond express の体験版が出ましたが、アレ実際に動かしてみるまで分子がどの位置を通るかが可視化されないんですよね。複雑な形の分子が移動する過程でどの領域を占領するのかがを頭の中で考えるのがかなり難しかった覚えがある

今回作ってるパズルは、見えない部分が線型でわかりやすい(幅 1 マスの)構造しか取らないので、まあ見えなくてもそんなに不便は感じなさそう? 表示しようと思うと「帽子の中」感がある UI にしないといけなくて、そこを面倒くさがっています

ここまで書いて気づいたんですけど、作業時間とこのメモを書く時間が混ざって区別できなくなるので、作業時間の制限がある中でこういうちゃんとした形のメモを取るのはあまりよくないのでは? 以降はもっと雑に書きます

スパゲッティコード

歴史的経緯により、ブロックは「隣のブロックと連結しているか」、壁は「隣の壁と連結していないか」という形で連結情報のデータを持たせてしまったので、とても統一感の感じられないコードができあがっています。壁(動かない)とブロック(動く)の違いによる処理の分岐の多さもあいまって、そろそろコードが読めなくなってきました。ジャムのいいところでもあり悪いところでもある「短期間だけ読めればいいコードを書ける」という性質が強く出ていますね

「不可能」のチュートリアル

ある操作が できない ことをパズルプレイヤーにうまく伝えるのって難しいですよね~~

それができないことを逆手に取ったテクニックが存在するならば、それを想定解として用意してやればいいんですけど、そうでない場合が特に大変です。想定解にたどり着く前に、ある操作が不可能であることを気づかせる "間違った試行" へと、うまくパズルプレイヤーを誘導しなければいけないですからね。

でも、ある操作が できる ことを伝えるのもそれはそれで難しさがあるか じゃあ全部むずいわ

結論:いいチュートリアルを作るのは難しい

特に、いままでとは全く異なるタイプの仕様とか、突飛な発想を要求する(thinking outside the box)タイプのギミックを初登場させるときのチュートリアルにはいつも苦心させられます。

それにしても、A Monster's Expedition の初航海はめちゃめちゃよくできてるよな~~~~~

折り返し

作業時間がトータル 24 時間になったところで、現在 19 ステージが完成しました。 登場ギミックごとに 6 セクションに分かれていて、それぞれ 4, 5, 4, 2, 4, 2 ステージが揃っています。 余裕があればもう少しセクション数も増やしたいですが、まずはセクション 6 のギミックのバグ取りとステージ作成だ……

処理順問題

これが生じたということは、ゲームルールが相応に単純ではないものになってきたということです。

ある 1 マスブロックが帽子のつばがあるマスに横から移動してきて、その上のマスに下向き接着ブロックがあった場合、ブロックの接着処理とつばが折れるかどうかの判定の順番によって、つばが折れるか折れないかが変わってきます。

むずかしいね

これでプレイヤーが左に動いたとき、つばは折れるのか? ということです。どっちにしよう……

ちなみに、現行の実装だとこれは折れるようになっているんですが、ちょっと変えた以下のパターンだと折れません。

ほんとむずかしい

ある意味「見た目通り」なんですが、この 2 パターンの結果が違うのはけっこう混乱を招きそうですね…… ということで、どっちかに統一したいんですが、どっちに統一するにしても実装がめんどくさいよ~~

あれ、何もしてないのに統一された(?????)

バグとの闘い

正確には何もしてなくはなくて、コードを少し入れ替えた結果なんですが、これ狙ってできるものじゃなくないですか?? バグをひとつ直すためにコードを入れ替えることで別のバグが出てくる可能性もありますし、やっぱ puzzlescript むずかしい気がしてきた

勝利

バグをなだめることに成功したので、ステージを増やしています。 29 時間が経過した現在、5 時間前から 7 個増えて 26(4 + 5 + 4 + 3 + 4 + 6)ステージになっています。 あと 19 時間、まだまだギミックを増やすのに十分な時間がありますね

まとめ

セクション 7 とその 5 ステージを追加したところで残り 15 時間です。 やっぱり後半のステージはそれまでのギミックとのかけ合わせで色々できて楽しいですね~~


つづく