2015年07月12日の日記です


実装の苦労  2015-07-12 11:23:59  業界記

世界初、というのは何気ないことで苦労するものです。

ファイナルアーチの場合、モーションデータをどのように使うか、でメインプログラマーの人が悩んでいました。


普通の野球ゲームなら、ボールが飛んできて、野手のスプライトにぶつかったら「捕った」という判定で構わない。

でも、3Dでこれをやると動きが不自然です。手を動かしてないのに、いきなりボールを持っていることになる。


ぶつかってから「捕った」モーションデータを再生するのも不自然。


どうしたものかなぁ…と相談を持ち掛けられたので、「ボールが2つある」というアイディアを出しました。


内部計算のために、ボールを飛ばします。あたり判定はこちらのボールに、かなり大きめにとっておきます。

野手に「当たった」ら、当たった位置に応じてモーション開始。


そのボールを追いかけるように「表示されるボール」が存在していて、たとえばジャンプキャッチするモーションがあると、丁度飛びついたところにそのボールがぶつかる…という寸法。


ボールの処理は結構ややこしいのだけど、2個計算するの? と言われたので、実際は内部バッファを持っておいて、グラディウスのオプションのように追いかけてくる。1秒遅らせて表示するだけで計算はしない…と提案。


実際には捕球動作ごとにモーションデータの長さが違うなどの問題もあり調整が必要だったようですが、この方式は採用されました。


3Dのスポーツゲームはまだ珍しく、応用も利くだろうということで特許出願もされました。

(すでに20年たって失効しているはずです。)



実は、「グラディウスのオプションのように」と表現しましたが、Cometの尻尾を思い出して提案したのだったりします。

「後ろをついてくる動き」って、フリッキーのころから好きで、ファミベでもよく作っていたし、Comet もそういう動きの試作から生まれたゲームなので。





当初は、打ったタイミングにより角度などを計算して打球を飛ばしていました。


でも、これだと慣れないとうまく打てないのね。

逆に、慣れると簡単になってしまう。


業務用では、一定時間楽しんでもらう、というのが前提です。

ユーザーの操作にゲームの流れを任せていると、時間調整ができない問題があります。


そこで、途中で手心を加えるようになりました。

ゲームの流れを見て、まだ時間があればもう少し楽しんでもらえるように、取られにくいところに落ちるように打球を「微調整」します。

逆に、そろそろ終わって欲しければ、Out になるところに微調整します。



金をとるために難しくしていると取られると心外なのですが、下手なプレイヤーに対してはサポートする方向に働きます。

また、当たり具合で調整の確率を変えるようにもしているので、腕前はそれなりにゲームに反映されます。




このような「手心を加える」プログラムが入ったことで、解決した問題がありました。


インフィールドフライ問題。


ゲームが作成される少し前、1991年にプロ野球で起こっていました。

プロ選手のほとんど誰もが知らない、非常に複雑なルールでプレイが混乱し、勝敗が決した珍事。


これを企画の人が資料を漁っている最中に発見。ちょっとした議論になったのです。


#ちょうど、昨年も24年ぶりにこのルールが適用されて話題となった試合があったようですね。



そのルールとは、次のようなものです。


ランナーが1・2塁にいる状態(満塁含む)で、アウトが2ではない際に、内野フライを上げた瞬間に打者はアウトになります。


この規則が無いと守備側は確実に2アウト取れてしまいます。

(フライが上がったので走者が塁にとどまった場合、わざと落球して3・2塁と送球すれば2アウト。

 それを避けるため1・2塁走者が走った場合、確実に捕球してから2・1塁に送れば3アウト。)


このルールを知った時点で、どう処理するか議論になりました。

結論は「プロも知らないルール、お客さんも知らんだろう。その状況にならないようにした方がよい」ということで、該当条件を満たすと内野フライが上がらないようになっています。


インチキかも知れません。

でも、野球シミュレータを作っているのではなく、楽しんでもらうためのゲームを作っているのです。




ルールと言えば「反則投球」問題。


選手の動きは、本当の野球選手(無名の、2軍選手だったと思います)に頼んでモーションキャプチャしていました。

これをポリゴンに与えて「再生」することで、動かしています。


まぁ、普通の作り方。何もおかしなところはないし、みんな「あぁ、ちゃんと動いている」という反応。


ある時、企画の人が気づきました。

投球動作の最中に、ピッチャーの足がプレートから離れてしまっている。


野球では、投球動作中はピッチャーはプレートを踏み続けなくてはなりません。

「既定の距離から投げる」ことを徹底するためのルールね。


これを怠ると、反則投球となって打者は1塁に進みます。


キャプチャ時には、もちろん選手は正しく動いてくれていました。

しかし、キャプチャって万能ではないのね。かなり誤差が出るので、「参考」程度にしかならなくて、デザイナーの人が補正する必要がある。


でも、デザイナーの人、野球のルールに詳しくありませんでした。

投球動作中の足の動きが、本来とは少しずれてしまった。このずれが「プレートから離れる」動きになってしまったのです。


そして、プログラマも野球のルールに詳しくなかったので、その動きを見ても問題だとは思わなかった。

周囲の人も、誰一人詳しくないため、誰も問題だと思わない。


唯一ルールを知っていた企画の人は、ゲーム全体の流れなどを見る必要があってそんな細かな部分を見ていなかった。


最終的に企画の人が気づいたわけですが、誰一人野球に詳しくないから、こんな基本的なことを見逃していたのです。



同じテーマの日記(最近の一覧)

業界記

別年同日の日記

02年 納得?

16年 Chromebook購入

16年 Chromebook で子供ができること

17年 ジョージ・イーストマン 誕生日(1854)

18年 メモリアドレス


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -