Just $ A sandbox

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

『Normalize Human Communication のまひゅ』 感想

http://mukiryokukan.sakura.ne.jp/NormalizeHumanCommunication.htm

以下, ネタバレ注意.

ずっと前から友人から勧められていたのでやりました.
プレイしてから多少時間が空いてしまったので記憶が少し曖昧ですが感想を述べることに.
一言で言うと「緩やかな死(色んな意味で)」って感じの作品です.

まずストーリーについて.
話が全体的に緩やかに死に向かって進んでいて, 終盤にどんでん返しとかビックリ展開がない分, 作者の意図というか作品のメッセージ性がより浮き彫りになっているのが良いです.
逆にアレでほんわかハッピーエンドだったら戦犯ものだけれど.
じわじわ死に向かって進むのがなんとも言えない心持ちにさせられますが, 不思議と冗長さはあまりなかったです.

次にキャラクターについて.
ヒロインの鈴乃というキャラだけ良くも悪くも目立ちます.
全キャラで一番冷めているというか, 他の人たちのようなフィクションのキャラクターという雰囲気が一切ない.
主人公がよくいる判子ノベルゲーム主人公的思考で, 芝居がかったこととか希望をもてそうなセリフを吐くくせに, 鈴乃がそれに全く釣られないところや, 逆に主人公に現実の厳しさを突きつけるようなセリフがたくさん.
そういう対比された二人の会話はすごく惹かれるものがありました.
鈴乃のセリフは考えさせられるものが多いですが, つらい感じではなく, かといって諦めきった人の発言とも思えないなんとも言えない感じがあります.
それだけに, 話がだんだん進んでいくに連れて発言の重みが増すところはよくできています.
最後の最後になって, 日記とモノローグ(というか走馬灯?)で初めて鈴乃の本心が分かるという演出も好きです.
最後まで読み進めて初めて, 彼女のつらいとか悲しいみたいな歳相応の弱い部分が垣間見えて, そういう苦しみに耐えてきた, しかもそれを主人公に伝えることはしなかったという強さには胸を打たれるものがありました.

彼女とは対照的にお父さんは変わっているけど裏がなさそうな感じが好印象でしたね.
個人的に, 初佳さんの立ち位置はよく分かりませんでした.
鈴乃の本心をある程度汲み取れる程度には親しい立場だったはずなのに彼女の思いとは全然違う反応ばかりしているような気がして(鈴乃が死んでから泣いてるところとか, お墓のところで未来に向けてみたいなことを言うところとか), その割に主人公とは違って心情が細かく描写されることがなかったので.
サイトのシナリオ裏話にあった, 初佳さんのアイスピックヤンデレエピソードは普通に入れてよかったんじゃないかなと.
その方が彼女の感情は理解できる気がするし, あと単純に見てみたかったし.

最後に形式的なことを.
操作性は少し難ありで, 個人的には文字送りの時にクリックすると「ページ末まで表示」ではなく「次ページに進んでしまう」のがつらかったです.
ふとしたところの演出がとても丁寧に作られていたので没入しやすかったのはとてもよかったと思います.
アプリ化したとき(?)にキャラクター絵が一新されたみたいで, ググるとめっちゃ可愛い絵がヒットしますが原作プレイした身から言うと原作絵の方がこの作品には合っていると感じました.

プレイしているときはもっと色々感じるところがあったはずだけど, 時間が経ったので忘れました.
また再プレイして, 感想もついでに書き直したい.

ノベルゲーム「人形劇が終わる夜」をリリースした

もう2週間近く前ですがノベルゲームをリリースしました.

www.freem.ne.jp

反省会を兼ねてその話.

企画

前のノベルゲームをリリースしたのが2年近く前ということもあり, そろそろなんとなくノベルゲーム作りたいなと思ったこと.
諸般の事情で現実逃避先として「新作ゲーム作ろう, 目の前のつらいことから目をそむけてゲームを作ろう」という経緯で作ることにした.

今回も前回同様に, スクリプトとキャラとシナリオはそこそこ頑張って背景やらBGMやらSEやらシステム画像やらはよさ気な素材を引っ張ってきた.

シナリオ

最初は心の安らぎを求めていたためか, すごく優しくて甲斐性があって可愛いお姉ちゃんがプレイヤーを甘やかしてくれる話にしようと思って話を考え始めていたのに終わってみるとあまりそういう話にはならなかった. (部分的にそういう要素はあるけど)
今まで作ったことのあるノベルゲームは, 大抵途中から書くスピードが失速するのでエンディングは今まで書いたものをつぎはぎしながら何とか辿り着く感じの書き方をしていたけれど, 今回はなぜかそうはならず, むしろ予定通り書き上げたのに説明不足では?という感じが最後まで拭えない感じに.
自分にしては珍しく最後まで使わなかった設定や小ネタ的なものがいくつか余ったけれど, 余計な継ぎ足しは話の流れを妨害しそうだったので諦めてとりあえず完成とした.

最後にテストプレイした時は, 全然説明されてなくてこれはプレイヤーには伝わらないのでは?と悩んだけれど, 結局あまり加筆せずにそのままにした気がする.
なんというか, 今回のオチに関しては下手にごちゃごちゃと説明するのは良くない気がしたので.
説明不足だったらごめんなさい.

個人的には割と好きなタイプの(?)結末になったと思います.

立ち絵

女の子3人分用意したら力尽きたのはもったいないことをしたなという気も.
絵を描くのって(自分があまり上手くないこともあって)結構精神的に消耗するので事前に描いておくべきなのでは????ってすごく思った.
次は2〜3キャラ分の立ち絵を先に用意してから始めるほうがいいかも.

スクリプトとエンジン

今回はなんとなくKAGじゃなくてKAGEXを使った.
発言者の名前表示がデフォルトでできる, 行末改行+クリック待ちタグを自動付与するモードがある, バックログがデフォルトでスクロールバーついてる等々, 挙げ出したらキリがないほど気が利いていて本当にすごい.
反面, 標準の機能に手を入れようとするとドキュメントとかが全然なくて不親切だったり, KKDEのKAGEXサポートがよく分からないことになっていたりという少し困った所も.
総合的に見れば慣れれば超優秀だと思うから今後ももしかしたら使うかも?

背景

いつものように背景画像を加工したけれど, 画像の加工をする前提なら元画像がどれくらい綺麗なものかというのは非常に重要ということを身に沁みて理解した.
今回はいくつかのサイトで, 2000px~程度のサイズの写真素材などをとってきて加工する感じでやった.
前回はあまり気にせず800pxくらいのやつを使っていたのだけれど, 加工のしやすさがまるで違うので.

BGMとSE

よさ気なやつがたくさん見つかったこともあって, 今回は非常にBGM選びとSE選びが楽しかった.
インターネットはすごい.

タイトルとED

タイトルは最後まで悩んだ気がする.
何をつけてもしっくりこなくて, そもそもジャンルとかあらすじも自分でも上手く説明できないような作品(いつもそういう話ばかり書いてる気がする?)なのでどういう方向性でいけばいいかも分からず….
結局, 比喩方面に逃げました. (作品中に人形劇は出てきません)

ED演出も割と楽しくやったつもり?
いつも通りの本編補足演出だけど, 今回は裏設定が結構余ったりしていたので作りやすかった記憶が.
特に今回はED2の後にもエピローグが控えているのでそれを踏まえて文章を書きました.

リリースしてから

リリースはいつも通りにふりーむへ.
気がついたらプレイ動画が上がってたりしてて嬉しかったです.
でも怖いのでまだ見てません. 最後まで上がったら見ようかと思います.

製作期間は, シナリオを本格的に書き始めてから多分3週間くらい?
短編とは言え結果的にすごく短期間で完成してしまった.
もしも次があるなら, 次は今までとは少し方向性を変えた話を書きたいなー. (今回も作り始める前は同じことを言っていた気がする)

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代数の場合だとどうだろう?という疑問.