Just $ A sandbox

プログラミングと計算機科学とかわいさ

ListのT代数の非自明な射は何か?

ListのT代数の非自明な射は何か?という感じの話.

List Monad, T-Algebra

以下のようなmonoid free functorとforgetful functorの随伴がある:
free functorは集合を自由モノイド(wordの集合, 演算は結合)に飛ばし, forgetful functorはモノイドを底集合に飛ばす.

$ F \dashv G : \mathbf{Mon}(FX,Y) \cong \mathbf{Set}(X, GY); h \mapsto h |_X $

ここから標準的に得られるモナドはList Monadに一致する:

$ TC = GFC = | C^* | \cong [C] $
$ \text{unit}_C : C \hookrightarrow TC $
$ \text{join}_C = G \epsilon F C = \text{concat} : T^2 C \to TC$

ListのT代数とは$(C,h : TC \to C)$であって以下の条件を満たすもののこと:

1. $ h \circ \text{join}_C = h \circ T h $
2. $ h \circ \text{unit}_C = 1_C $

あるいは, 元を明示して書くと,

1. `forall xs : [ [a] ]. h (concat xs) = h (fmap h xs)`
2. `forall x : a. h [x] = x`

ともかける.
例としては, `head, last : [a] -> a`や`sum, product : [Int] -> Int`などがそう.

$(C,h), (C', h')$がともにListのT代数のとき, この間のT代数の射$f : (C,h) \to (C',h')$とは, 射$f : C \to C'$であって以下を満たすもののこと:

1. $ f \circ h = h' \circ T f $

T代数の射の手頃で非自明な例は作るのが難しい, というのも型aが一般的だと例えばheadとlastの間には射はないので, 上に挙げた例の間に射をのばそうとしても上手くいかない.
idでない例としては, 例えば`length : ([a], h) --> (Int, h)`などがあるが, これは型が違うとはいえdomとcodに現れている射が同じものなのでほぼidと変わらない.

ListのT代数で非自明な射というのはどういうものがあるだろう?
もしくは他のモナドのT代数の場合だとどうだろう?という疑問.

ノベルゲームシナリオ論

※ 以下は全て個人の感想です。

長さは「正義」

長いゲームは飽きられやすいけれど、その点さえ解決できれば長さは完全に正義である。
長時間プレイしてくれたプレイヤーは大抵どのキャラにも相応の愛着が沸いているので、キャラクターらしささえ損なわなければどんなエンディングでも(ヒロイン死亡とかそういうのじゃない限り)そんなに文句はおきない。
あとはどうやって長時間飽きさせずにプレイさせるかというところで、若干邪道な方法に、ノベル部分以外にミニゲーム的な要素を加えてそっちをめちゃくちゃ面白くする(場合によってはそちらをメインにしてノベル部分がむしろおまけでもよい)というやつ。
商業ゲームではこの方法のものをたまに見る。ミニゲームが面白いからついやっちゃう的な。アレとかアレとか。

安易な選択肢の導入

ノベルゲームというからにはゲーム性がないといけないということで選択肢を導入しているゲームは割とよくある。
けれど、選択肢によってシナリオが分岐し、それによってエンディングまで変わる必要性はどこにあるの、っていいたくなることはよくある。
選んだ選択肢でTRUE ENDとかBAD ENDとか別れてしまうのであれば、実質製作者の決めた選択肢を選ぶことを強要されているので自由度が増してる感じが全くしない。無駄に周回プレイを強要させるのは基本的に悪手だと思う。
あとは、どうでもよさそうな選択を1回間違えるだけで結末が大きく変わったり事実がねじ曲げられる系とか。プレイヤーからしたら意味不明だと思う。

ただし例外的に選択肢を導入することに意味のある場合が少なくとも3つはあると思う。もしかしたらもっとあるかも。
1つ目は、選択肢を選んだ結果が平等になる場合。商業のいわゆるキャラゲー(ストーリーよりキャラクターとの会話とかキャラクターに関するエピソードを楽しむやつ)ならこういうのは結構よくある。要はプレイヤーはどのキャラとくっつくかが選べるだけで、それ以外にシナリオ的な差異は発生しない。この場合は周回プレイを強要しないし、どれを選んでも望んだ結末(選んだキャラとくっつく)が得られるのでそういう意味ではエンディングが平等なので平和だ。
2つ目は、選択肢にメタ的な意味がある場合。一番安易なものとしてよくある「ループもの」ノベルゲームなら、周回プレイをさせることにすら意味がある場合がある。そういう感じで選択肢を選ばせることにも意味を持たせられれば十分選択肢を出す理由になる。ただしこれもシナリオの書き方の問題で、何度も何度も似たようなエンディングを通らないと真のエンディングに到達しないみたいなのはそれはそれで問題な気がする。
3つ目は、選択肢を選ぶ行為がシミュレーション要素を含んでいる場合。シナリオ攻略のために選択肢があるわけじゃなくて、プレイヤーの行動コマンドとして選択肢が使われている場合。アレとかね。これはちゃんとゲーム性があるのでいいと思う。この方針で真面目に遊べるものを作るのはかなり大変だと思うけどそれはまた別の話だ。

いずれにせよ、本当にこのゲームには選択肢がいるの?というのは作る側にとっては結構大事な問だと思う。
あとはエンディングは本当にそれだけ必要なの?BAD ENDになった後は最初からやらせる必要性があるの?とか。
製作者の自己満足を「プレイ自由度」とか「ゲーム性」って言葉でごまかしてないかと。

説明セリフ

慣れの問題だと思うけど説明セリフがどうも気になるので気をつけたい。(自戒を込めて)
そもそもそのイベント自体、キャラクターの性格を説明するためのものだよね?ってのがプレイヤーに伝わってしまっているやつ。
主人公とクラスメイトが謎の三文芝居をやったあと、ト書きで「こいつはいつもこんな調子だ。」とか説明するやつ。
キャラギャルゲーとかに顕著。アレとかね。

会話の発散

会話の進みは2人の時と3人以上の時で全く違うという気がする。
2人会話は、会話イベントの目的が決まっていると一直線な会話になりやすい。のであまりコレばかりだと単調になりやすい。
3人以上のキャラクターがいると、各人が好き勝手しゃべるので全然話が目的の方向に収束しない。ので、ページを稼ぎたい場合は無理にでも人を増やすのはかなり効果的だと思う。

情景描写

ノベルゲームでの情景描写は絵との乖離が発生しやすいので注意が必要だけれど、人間には五感があるので視覚以外の情報をプレイヤーに伝える意味での情景描写は結構重要だと思う。
特にその場所の匂いと現在吹いている風の様子を描写するのは強力だと思う。
割とどこでもやりやすいことと、適当書いても他の記述と矛盾しにくいので。

ループものも飽和している

上の記述と矛盾しているような気もするけどループものは正直すでに飽和しているので、このジャンルで斬新さで勝負するのはもう難しい気がする。
というかループ設定持ち出すと他のループものと比較されやすいので安易に使うのは危険かもしれない。
時系列がバラバラの話が1つにまとまるみたいな手法をループ以外で実現できると、同じような方向性でもまた印象が変わりそう。


終わり。
意見は人それぞれだと思います。