ユーザの誤解とエンジニアの良心と

 ユーザと言うのは誤解に基づいて凄い要求をしてくることがある。

 ゲーム内の絶対時間はフレーム数だよ - プログラマーの脳みそではプログラム的観点から何が起きているかを推測した。もちろん、僕はモンハンの中の人ではないから推測にすぎないけど、この説より事実をうまく説明できる説があるならblogにでも書いて公開するといいと思う。議論が深まるんじゃないかな。*1

 さて、件のエントリではゲーム内時間とリアル時間は別物だっていった。ゲーム内での絶対時間はフレーム数だ。通常ゲームは秒間60フレームで動作しているけど*2処理落ちや通信のディレイで遅れることがある。1クエストのフレーム数を固定すると1クエストが終わるまでのリアル時間がぶれる。処理落ちなどでスローがかかればリアル時間ではより時間がかかるわけだ。

 今時のゲーム機は時計を内蔵しているから、時計を利用してリアル時間にそろえることができる。1クエストをリアル時間側に揃えるとゲーム内でのフレーム数は増減する。処理落ちでスローがかかると、1クエストでのフレーム数は減る。フレーム数が減るということはゲーム内でやれる行動が減るということだ。

 アニメをスローで見ようが早送りで見ようが1本終わりまで見るならリアル時間が何分かにかかわらず見た内容は一緒。アニメをスローで再生して30分で見るのをやめたら最後まで見ることはできない。

 リアル時間が増減すると「不公平感」が出る。リアル時間が長い方が長く遊べた感があるし、短いと損したように感じるかもしれない。ゲーム内時間=1クエストのフレーム数が減ると「不公平」になる*3途中で上映打ち切りなんだから最後まで見せろってことになる。まぁそもそも最後がどこなのか時間でしか計測してないなら不公平感はないかもしれないけどね。

 リアル時間に合わせろ!ということは「不公平感」を解消するために「不公平」にしろ!という要望なわけだ。

 こうした要望を突き付けられた時に、エンジニアは悩む。

出来ることなら銀の弾丸

 モンハンの件では時間を「分」というリアル時間の単位で言ってしまったことがまずかった。

 スーパーマリオのタイマーのようにリアル時間の「秒」とかとは進みの違う「マリオのタイム」みたいな単位不明の値にしておけば、「残りタイム100かよ!」とは言うものの「あと100秒かよ!」とは言わないので「実際の秒とずれてるじゃないかよ!」というクレームにはならない。*4

 単位を言わなければ「不公平感」はさほど強くならなかったかもしれない。それでもやはり時計で測ってディレイの少ないソロプレイの方が早く終わる!と騒ぐ人は出てきたかもしれないけど。なかなか全てを解決できる銀の弾丸というのはないものなんだ。

複数の選択肢

 ゲームの設計上、いくつかの選択肢があったはずだ。*5

1クエストのフレーム数 1クエストのリアル時間 不公平感 公平さ
フレーム数を固定 フレーム数消化まで。ディレイによって延びる あり 公平
リアル時間まで。ディレイによって減る リアル時間を固定 少ない 不公平

 モンハン3ではフレーム数を固定にして公平にしているようだ。ここで時間をどう表現するかにまた選択肢がある。

リアル時間との関連
オレオレ時間 リアル時間との換算がしにくい。時計で測るとやっぱりズレるが「そういうもん」と思ってもらえるかも
一切ディレイがない場合にリアル時間と同じになるように設定 ディレイによって長引く。実時間の尺におさまらないから遅刻するかも
ディレイを見込んで短めに設定 ディレイがかかっても実時間の尺におよそ収まる。短いと文句を言うユーザが出た

 モンハンの場合は時間が貴重なゲームだから、リアル時間で計測した時に伸びる側の方が「お得感」があったのかもしれない。もちろん、ゲーム内のフレーム数は同じだから実際にはややスローがかっているだけで可能な行動は一緒。サッカーのロスタイムみたいなもんで、ロスタイムが2分あったとしても、それはもともと試合が停止していた時間の累計分なだけだから、正味の試合時間が伸びているわけではない。

 業務システムの場合は、そのシステムを使うユーザが最初からわかっていることが多い。使う社員らが「これでいい」と納得しているなら「では、そうしましょう」ということになる。が、ことゲームのようなB2Cシステム*6だと事前に承認を取れない。承認を取ったからいいだろとは言えなくて、人間心理を読んで後はえいやっと出してみるしかない。*7

エンジニアの良心

 エンジニアとしてはユーザからの要望だろうと、その要望をそのまま受け入れるとマズイことが起こると予見できるなら、そのままユーザ要望を受け入れるわけにはいかない。やさぐれてて「ユーザの言うとおりにしておけばいいんだよ。それで悪いことが起きてもそう要望したユーザのせいさ」という人もいるかもしれないが、良識あるエンジニアならそういうことは言わない。

 ユーザが誤解に基づいて妙な要望を出してきたら、ユーザの誤解を解くのが第一ステップ。件のエントリではゲーム内の絶対時間は公平なハズだから、安心して狩りにいそしめばいいと言った。でも、「納得できない」というユーザはやはりいるわけで、そうしたユーザとどう向き合うのか考えなくてはいけない。

 ユーザに押し切られてシステムの改悪を迫られたとき、それは改悪なんだと言えるかどうか。それはエンジニアの良心だと思う。言い訳はいいからどうにかしろというユーザもいるし、原理的に無理な要求をするユーザもいる。そうしたユーザに振り回されてシステムがずたずたになってしまわないように、ポリシーを持ってユーザの無茶振りはかわさないといけない。

*1:僕はあまり未来方向へのスキップはやらないだろうと思っていたのだけど、プログラマ仲間では未来方向スキップをガンガンやるだろう派もいた。だとしたら時間のずれの合理的な説明を失うわけだが、それで真実に近づくならそれもいい

*2:モンハンは秒間30フレームらしい

*3:未来方向スキップも僕は実質的なフレーム数減だと考えている。リアル時間でぶつ切りにするよりはマシだけど。

*4:文句付ける人もいるかもしれないが

*5:推測に基づくから、現象が推測と違っていればこれらの選択肢も外していることになる。そのときはその前提の下でまた選択肢があることだろう。悩まないでいいことは少ない

*6:ビジネスtoコンシューマ。つまり一般消費者向けのシステムのこと

*7:そして叩かれる