トップページに戻る


愛原様のたわごと(15年1月4日)






愛原「明けましておめでとう。いやあ、今年は久々に充実感のある正月だった。3が日の大半をウディタ漬けで過ごしたわ。」

鼎「製作は、モチベーションが上がってるときに一気に進めると効率がいいよね。」

逆沢「つうか日数を開けると、どこまで作ったかとか、このスイッチは何に使ったかとか、すぐに忘れてしまいかねないしねー。」

鼎「3が日製作漬けって事は、かなり進んだと考えて良さそうだよね。」

愛原「うーん。そう言われると、非常に心苦しい。製作に集中はできていたのは確かだが、前に進んだかと言われるとだな。」

逆沢「なんか壁にぶつかったのか?」

愛原「いや。思考ルーチンについて色々試行錯誤していたら、色々堂々巡りで時間が過ぎていたという感じだな。」

鼎「思考ルーチンというと、いわゆるAIのようなものだったかな?」

愛原「AIと呼べるほど立派なものではないが、まぁニュアンスとしては間違ってないかな? 今回は前置き抜きで【NPCの選択判断ルーチン】について軽く触れてみることにしよう。」

逆沢「NPC。つまりプレイヤー以外のキャラクターが、どのように選択して判断するか?について語ってみよういう事か?」

愛原「そう。たとえば古いRPGで、HPが満タンのキャラクターが自分に対して回復呪文を唱えたりするシーンがあるが、これについてお前ら、どう思う?」

逆沢「アホルーチン以外の何物でも無いわね。まぁランダムで行動するルーチン組んでたら、そうなるのは当たり前の話ではあるんだけど。」

鼎「【サイコロで1が出たら回復呪文を唱えて、2が出たら逃げ出して、3以上は通常攻撃を繰り出して】みたいなルーチンだと、一定確率でHPが満タンでも回復呪文を唱えてしまう事になるだろうし、一定確率で味方優位でも逃げ出したりしちゃいそうだよね。」

逆沢「既にMPが枯渇してるのに、アホみたいに呪文の空撃ちしまくったりする事もあるわね。空撃ちを避ける為に、チートレベルのMPを最初から持っているパターンも多そうだけど。」

鼎「けど昔のゲームは、そんなゲームが多かった気もするかも。」

愛原「作り手としたら、楽だからな。自分のHPがどのくらい減っているのかを判断して、適切な回復呪文を唱えるルーチンにしようと思うと、ランダムルーチンの数倍は手間もかかる。」

逆沢「HPがいくら以下に減ったら、強制的に回復呪文を唱えるというルーチンを組めばいいんだろうけどね。毎ターン、HPを参照する処理と、そのルーチンに基づいて行動を分岐させる処理の両方が必要になってくるけど。」

鼎「けどあと一撃で敵が倒せそうな時だったら、回復呪文を唱えるのではなく、あえて攻撃を選んだ方が良い事もあるよね。」

逆沢「とすると、敵の残存HPを参照する処理と、自分の残存HPを参照する処理と、それを比較して、差や比率がいくら以上だったら攻撃を選び、それ未満だったら回復呪文を選ぶみたいなルーチンが必要になってくるか?」

鼎「けどいつも同じパターンでも面白くないよね。いつも同じタイミングで回復呪文というのも味気ないというか。」

逆沢「だったら、ランダム要素もある程度は復活させないとダメね。この残存HPの時は、何%の確率で回復呪文を唱えるとか。でもそうすると関数処理も必要か?」

鼎「もちろん残存MPも考慮して、回復呪文を唱える必要もあるよね。MPが枯渇しつつあるのに頻繁に呪文を唱えまくるのは頭悪そうだし、とかいって惜しみすぎて倒されたらもっと頭悪そうだし。」

逆沢「うーん。残存MPを考慮して、呪文を唱える頻度を変更したり、調整する処理も必要か?」

鼎「あとキャラクターの性格も反映させたいと思ったかも。攻撃的なキャラと守備的なキャラとでは、回復呪文を使う比率も違うだろうし。」

逆沢「性格を表現するパラメータを別途用意して、その値を随時参照しながら、関数処理にさらに修正値を加える作業が必要になってくるわね。つうか、どこまでやらせるつもりなのよ!! たかが回復呪文一つ使うだけのために!!」

愛原「とまぁ、こんな具合に、思考ルーチンに対するこだわりは蟻地獄そのものだ。たった一つの呪文を唱えるか唱えないか、その二者択一の選択をさせる為だけのために、どこまでも複雑な内部計算を余儀なくされる例は珍しくない。」

逆沢「遊ぶ側からしたら単純そうな処理でも、作り手からしたらなかなか大変だと思ったわ。呪文を唱えるか唱えないか? 単純な二択処理でしかないのに。」

愛原「これが3択4択と増えていくと、もっととんでもない事になる。攻撃するか? 回復呪文を使うか? それとも逃げ出すか? 別の呪文を唱えるか?みたいに。」

逆沢「うーん。頭痛くなりそう。これならバカルーチンと言われても、完全ランダム処理にした方がよっぽどマシだわ。作り手に要求される作業量的に。」

鼎「そう考えると、国盗りSLGとか、すごく処理が大変そうだよね。敵国に攻め入るか否かという単純な二択処理ですら、双方の国力を参照したりとか、膨大な判断材料を用意した上で確率計算する必要があるだろうから。」

逆沢「そのせいか、昔のゲームには、フリーズしたんじゃねえのかと心配になるくらい、思考時間が長すぎるゲームも珍しくなかったわね。本格を謳うゲームほど。」

愛原「個人作者さんが作ったSRPGなどでも、フリーズ状態とまではいかなくとも、思考時間が長いと感じさせる作品はたまに無くもない。まぁ何十個もある移動可能マスの中から、適切な移動先マスをNPCに選択させて、そこにユニットを移動させて、さらに適切な行動手段(どの方角にいるどのキャラに攻撃を仕掛けるかとか、攻撃を仕掛けずに待機したり回復するとか)を選ばせるというのは、想像するだけでも恐ろしい難作業だ。」

逆沢「そういう話をされるだけで、簡単に見えて全然簡単じゃないゲーム作りってのが実によく分かるわ。」

愛原「いつ話しかけても【○○の街にようこそ!】しか言わないNPCとかなら、どれだけたくさん配置しても苦労はないんだけどな。あるいは通常攻撃しかしないモンスターとか。あと完全ランダムなら、回復魔法だのクリティカルだのといった要素を混ぜても、作り手的には全く苦にならない。」

逆沢「いつも同じ行動をするだけとか、常にランダムとかなら処理的に楽勝なんだけどねー。けれどそれでは満足できずに、状況に応じて適切な行動を取るようなルーチンを組もうとした途端に、作り手の難易度が一気に跳ね上がるのが悩ましいというか。」

愛原「ところがこの適切なルーチンというのもくせ者だ。たとえば学習AIを搭載したジャンケンゲームを作ったとしよう。そして学習AIは過去100回の対戦成績から、人間は45%の確率でグーを出し、35%の確率でパーを出し、20%の確率でチョキを出す事を統計的に導き出したとする。この場合、AIは次に何を出してくるかは、当然読めるよな?」

逆沢「パーを出してくるわね。統計結果と学習ルーチンからして明らかに。」

愛原「そう。適切なルーチンだからこそ、逆に読めすぎたり、ワンパターンになるケースも多い。【HPがいくらに減ったから、NPCの次の行動は確実に回復呪文】と先読みできてしまうようなものだな。」

逆沢「先読みできたら、こちらも楽に戦えるわね。次のターンに攻撃が来ないとわかりきっていたら、防御に専念してるキャラも、全力で攻撃に参加できたりもできるようになるし。」

鼎「けど適切な思考ルーチンにランダム要素が入ってくると、厄介さがアップするよね。普段は回復呪文を唱えるタイミングだけど、20%の確率で全体攻撃を仕掛けてくるとか。」

逆沢「PCがチョキを出してきた時だけ、グーに切り替えてくるとか♪」

愛原「それは後出しジャンケンと同じで、さすがに反則だ。つうかそれは単純な条件反射処理であって、思考ルーチンと呼びたくないレベルだな。」

逆沢「あくどい課金ゲームとかなら、そういうインチキ処理をやってても不思議はないけどね。」

愛原「あいにく俺が究極の理想としているルーチンは、PCの裏をかく賢いルーチンではなく、人間っぽいルーチンだ。極論を言えば、チェスの世界王者を倒すような思考ルーチンには、必ずしも興味は無い。人間らしく、時に間違えるルーチンであって欲しいというか。」

逆沢「間違えるルーチンにしたいなら、HP満タンの時に回復呪文を唱えるようなランダムルーチンにしとけば事足りるんじゃないの?」

愛原「そうじゃなくて、人間の場合は、正しいと思って行動したつもりでも、結果的に間違えてしまう事があるだろう。そういうルーチンを目指してるというか。」

逆沢「そういうの難しくなくね?」

愛原「今作っているゲームの基本処理の一つに、【X(NPC)の依頼を断るY(NPC)】というものがある。XとしてはYに受託してもらえるという目算なり願望があってYに依頼したのだが、にも関わらずXの思惑に反してYは断った。そういった一連の流れを再現したいのだ。」

逆沢「だから、ランダム処理すればいいんじゃねえの? 一定確率でXはYに依頼する。一定確率でYは依頼を断る。ただそれだけの話で。」

鼎「けどそこに好感度とか、他の要素を入れると、ややこしくなるよね。好感度が高くなるほど、依頼を受託する確率が上がるとか。」

愛原「しかし、俺が目標とするのは、ずばりそこなのだ。それを単にランダムだけで片付けるのではなく、仮に断るのなら、断る理由が欲しいというか。」

鼎「現実の人間の場合は、行動にちゃんとした根拠がある事が多いよね。それが結果的に正しいかどうかは別として。」

愛原「そう。結果的に間違っていても構わないのだ。現実の人間がそうであるように、ただ行動に根拠が欲しいというか。」

逆沢「あいつの事が好きだから引き受けたとか、嫌いだから断っただけでもいいから、とにかくNPCに行動の理由を持たせたいって事ね。」

愛原「そう。依頼をする側も同じ事だな。他人ではなくなぜYに依頼する事にしたのか? なぜ依頼そのものをしようと思ったのか? そこに理由を付けたいのだ。単なるランダムではなく。」

逆沢「なる程。理由をつければ、確かに人間くさくはなるかもね。現実の人間も、実際は単なる気まぐれや衝動や欲望の結果であったとしても、色々自己正当化したり、言い訳したりしたがる生き物だからねー。」

鼎「犯行には必ず動機があるはずだという思い込みもそうだけど、人は全ての行動に理由があるはずと思い込んだり、理由付けをしたがる傾向が強そうだよね。」

愛原「欲望や衝動も理由として含めれば、まぁ人の行動には全て理由があるのかも知れないけどな。理系的発想になるが。」

逆沢「【欲望のままに行動しました】というのでは人間としてあまりに出来が悪すぎるから、大抵の人間は、よりもっともらしい理由をつけて自己正当化を図ろうとするけどね。」

愛原「まぁ細かい理由付けは、プレイヤーの脳内補完に任せるとして、プレイヤーからみてあまりに人間離れした行動を取らないよう、ルーチンを煮詰めてみたいと思っている。その試みの一つが【X(NPC)の依頼を断るY(NPC)】なのだ。いわゆる【賢いルーチン】を搭載すれば、Xは【YがXの依頼を断らない】条件(たとえば好感度が一定以上とか)を整えてから依頼をするようにできるだろう。しかし現実の人間が相手の心を完全には読めないように、Xにもそうであって欲しいと考えている。だからXが意に反して依頼を断られてもいいと思うし、そうであって欲しいとも考えている。もちろんXがYを依頼相手に選んだのは、単なるランダムだけではないという根拠も備えた上でな。」

逆沢「【XがYを選んで依頼したのにはちゃんと理由がある。しかしXとてYの全てが理解できている訳ではないから、思惑に反して断られる事もある。】。そういう要素を詰め込みたいという訳ね。」

愛原「うん。それを実現するキーワードとして、自分目線というのを考えてみた。【もしも自分がYの立場なら絶対にこの依頼は断らないだろう】みたいな感覚だな。けどこの自分目線というのは、しばしば思い込みの主因となる。自分ならきっと喜ぶと思っても、実は相手はそうでなかったりとか。」

逆沢「そういう内部パラメータがあるって事か?」

愛原「今の所、内部パラメータで最も面白い動きをするのが、嫉妬系だな。普通なら相手に謝意や敬意を抱いたりする場面でも、逆に憎しみを募らせたり。」

逆沢「ツンデレ系とかクール系とかニヒル系とか、素直になれない系は、割といい味だせそうなんだけどねー。」

愛原「そんな高度な処理は、今の俺には不可能だ。今の所、憎たらしいだけなので、手に余りそうなら嫉妬系パラは無くそうかとも思っている。」

逆沢「嫉妬は人間らしさの象徴そのものだろ。それを外すのか?」

愛原「大長編ドラえもんの【のび太と鉄人兵団】の終盤に出てくる博士の心境だな。あの博士も人間らしい心を持ったロボットを作ったのはいいものの、その子孫達が博士の意に反する弱肉強食的な行動を取るのを知って、植え付けた競争本能を外す改造をする事で未来を変えてハッピーエンドとなるのだが。」

鼎「競争本能も、人間らしさを演出する重要な要素の一つだよね。」

愛原「【のび太と鉄人兵団】に登場する博士も、人間らしさを再現する為にロボットに競争本能を付けたのかも知れないけどな。しかし結果的にはひどいことになって、それを反省した博士が【他人を思いやる温かい心】を重視するルーチンにロボットを改造する事でハッピーエンドを迎えるようになる。」

逆沢「嫉妬心や競争本能は、人間らしさを出すには最適の要素かもしれないけど、殺伐とするというか、人間の負の要素なのが困りどころなのよね。」

愛原「思考ルーチンの練り込み作業は、そうでなくとも手間がかかるし、嫉妬心が不快な挙動の元にしかならないようなら、博士にならって薄めるか削除してしまう事にしよう。」

逆沢「まぁ精神パラメータなんてものは、無闇に増やすものじゃないしね。某SLGでも、義理と野望と相性とあと一つか二つあれば十分みたいだし。処理が混乱してややこしくなるから。」

鼎「嫉妬なんてパラメータがあるゲーム自体あまり無いし、嫉妬で爆弾を爆発させるゲームくらいしか使い道もないだろうから、私も邪魔になりそうなら外してもいいかなと思ったかも。」

逆沢「他はまともなパラメータばかりなんだろうな?」

愛原「あとはまぁ、今の所は不快な挙動をするものは無いな。構想段階では同調圧力なんて、ややこしい要素もあったけど。」

鼎「同調圧力って何?」

愛原「みんなに迎合したくなる心理のこと。構想段階ではリアリティーというか、“みんな”に弱い日本人らしさを再現する要素として考慮に入れていたが、処理がかなり面倒くさそうな事と、ゲーム的に退屈を誘引しやすいことと、各キャラの個性が死にそうな事から要素から外した。」

逆沢「みんなと同じ行動を取るというのは、ゲーム的にやはりまずいのか?」

愛原「自律心の強いキャラやカリスマ性の高いキャラがAに向かうと決断した時、他のメンバーがゾンビの集団みたいにぞろぞろとAに一斉移動するシーンを想像したら、色々と寒くなってしまったからな。」

逆沢「それは気持ち悪い。それに各キャラの個性も何もないわね。」

鼎「やっぱり各キャラが、おのおの自由に行動する方が華やかでいいよね。みんなが一斉に同じ行動を取るよりも。」

愛原「嫉妬同調圧力を組み合わせた場合、出る杭は打たれる光景しか想像できなくなり、やがて目立たず他人の目線を伺うだけの受動的なキャラだけが生き残った場合、箱庭はどうなるんだと考えた。あまりに寒い光景しか思い浮かばず、それで同調圧力なんていう不毛な要素は、構想段階でさっさと姿を消した。」

逆沢「それが利口だわ。そもそもゲームなんてものは、理想の世界を投影するものでもあるんだから、リアリティーを追求しすぎて楽しさが損なわれたら何の意味も無いわけで。」

鼎「キャラクターが立っている事が何よりも重視されるのに、それと逆行する同調圧力なんてのは、マイナス要素にしかならないと思うよ。」

逆沢「個性的かつ魅力的であるはずのキャラクター達が、同調圧力なんかに屈してゾンビの集団になったら、ホラーにしかならんわ。他の誰とも違う個性を各キャラクターが発揮してこそ、キャラゲーなのに。」

愛原「別にキャラゲーである必要は無いけど、他の誰でも代用できるようなキャラを複数配置しても悲しいだけだから、しっかり留意はしておこう。」

鼎「考えてみれば、同調圧力にしても、嫉妬にしても、各キャラの個性を潰す要素でしかないんだよね。特定のキャラが個性を発揮する機会を潰したり、自ら集団の中に溶け込んで目立たなくしている振る舞いでしかないわけだから。」

愛原「まぁ目立たないというのも、嫉妬深いというのも、それ自体が個性と考えれば面白くもあるけれど、それぞれ一人いれば十分だな。大体、俺が思考ルーチンにこだわりたい理由の一つに個性の発揮があるわけで、個性が失われるなら、俺的には思考ルーチン自体いらない事になる。」

鼎「【あの人と私が違う】からこその思考ルーチンだよね。同じシチュエーションでも、逃げ出すキャラもいれば、突撃してくるキャラもいたり、回復してくるキャラもいるからこそ、人間味のあるルーチンになりえる訳で。どのキャラも同じシチュエーションだと同じ行動しか取ってこないなら、それは予定調和であって、個性でもなんでもなくなるし。」

愛原「チェスで世界チャンピオンを倒すようなルーチンなど俺的にいらないというのは、各キャラの個性で魅せられないからだ。全キャラが最適の解を出すルーチンではなく、バカでもいいというか、本人なりに正しい選択をしたつもりでも結果的に裏目に出るくらいでちょうどいいというか、とにかくそのキャラらしい行動を取って欲しいと考えている。」

鼎「正しさではなく、そのキャラ“らしさ”を出したいって事かな?」

愛原「そう。だからMPが枯渇しているにもかかわらず呪文を連発するというシチュが、必ずしも悪い訳ではない。もしもそいつが【パニックになりやすい】個性の持ち主なら、それでも構わないのだ。回復呪文ばかり連発するようなキャラでも、そいつが【極端な臆病者】個性の持ち主なら、別に構わない。ただどのキャラも同じようなマヌケな行動を取るなら、それはちょっと残念だと思うだけで。」

逆沢「まぁ頭が良いという触れ込みのキャラまでもが、あまりに頭の悪そうな行動ばかり選択するようなら、さすがに残念な気持ちになるからねー。」

愛原「まぁツッコミ要素としては、知的な触れ込みのキャラにアホな行動を取らせるのも一興ではあるけどな。ただそれは、わざわざ狙ってやらずとも、どうせどこかで起こる。少なくとも俺としては、完全ランダムだけに頼るのではなく、思考ルーチンという手段で何とか人間らしさや個性を出してみたいのだ。深く詰めすぎると蟻地獄にはまって前に進めなくなるから、パラメータの数をなるだけ限定して、切り捨てる部分や割り切るラインを常に自覚しながら、試行錯誤もしていきたいと思う。という訳で今年もよろしく!」

逆沢「今年は、たわごとだけで終わらない一年にしたいわね。」

愛原「年始からいきなりプレッシャーかけてくれるなよ。」
















トップページに戻る