ニートが頑張るブログ

ニートが現実逃避するために創作活動など色々とカオスに頑張ってみる
ニートが頑張るブログ TOP  >  自作ゲーム開発 >  最高のパズルゲームとは

最高のパズルゲームとは



もう無視して
「今作ってるゲームのぼやき」 を、結局書いておきます。



・なぜこの程度のゲームがいつまでたっても完成しないのか

・というか一体毎日何をやっているのか

『内部的には変わった内部的には変わった』とか毎回言っているが、
 実際何が変わっているのか


・・・
などなどのことを、ちょっと分かりやすく説明してみる話。






サンプルを貼ってみます。

まぁ例えば今回

↓これが



↑こうなったワケです。


具体的にどういう部分が変わったか。
次のようなことを考えながら、箱とかをドラッグで弄ってもらえれば一目瞭然です。


例えば
・箱の上に箱を乗せて、その状態で下の箱をドラッグしたときの挙動

・箱の上にアイテムを乗せて、その状態で下の箱をドラッグしたときの挙動

・箱の上に人を乗せて、その状態で下の箱をドラッグしたときの挙動


(要は下の箱に合わせてスライドしないという問題があった)
(そしてそのスライドを作ろうとしても、
 3段重ねにしたときは一番上に乗せた箱や人間が「二倍の速度」でスライドしちゃうとかの怪現象も起きた )


・箱の上にアイテムを乗せて
 その状態で下の箱を、人間が壁際に向かって押した時のアイテムの挙動とか

(これがかなりの問題だった)
(上のアイテムだけが壁にむかってズリズリ滑って行き、最終的に壁にめり込むという・・・)

・箱でアイテムを壁際に押し出して行った時の挙動
・箱で人間を壁際に押し出して行った時の挙動

(高いところにブニュっとワープしてしまうバグがずーっと直せずにいた)


・箱の上にアイテムや人を乗せた状態で箱をベルトコンベアスイッチに乗せた時の挙動とか


・・・
そういう、根本に関わるような物理挙動が、少しずつ「マトモ」になってるのが分かるかと思います。


つまりはまぁ、未だにそういうレベルのことをチビチビやっているんですね。


でもこういうのって当然ですがイチイチ設定しなければ上手く動かないのです。


何か物凄く便利な物理エンジンに丸投げしているとかでなくて
物理挙動から何から、全部ゼロから自分で作っているので、

(アイテムが)
・今自分はこの高さにいる

・自分のxz位置からして自分にとっての影の高さはここである

・その高さはここの箱の上部の高さと同じである

・その箱は前のフレームとこれだけの差で移動している

・だから今自分は下の箱に合わせてこれだけ移動するべきである。

・だがその際、自分が壁際の場合はもうそれ以上移動しないようにする。


・・・みたいなことを全部考えて、記述していかないとイカンわけです。


まぁ当たり前なんだけど。
そういう当たり前のことだけど、条件によっては意外とおろそかにしていたことに
あとからドンドン気づいて行くんです。


「これでまぁ行けるだろう」と思っていたような部分が問題を起こします。

箱を3段重ねにしただけでおかしくなるとか、
箱を二列にならべて押した時に、片方の方向から押したら押せるけど片方の方向から押したら押せないとか、
そういうことも日常茶飯事でした。


で、
「こんな挙動はおかしい」
「これはあってはならないことだ」

というのは見ればわかりますが、

それをプログラム的にすぐに直せるかどうかというと、それはもう自分の脳味噌にかかっているわけで
そういうのを一つ一つ見つけて潰してくのには本当に時間がかかるのです。



「直すべきである」ことはわかっていても

じゃあそれを具体的にどう直すのかというと
マジで直し方に頭を抱えるようなことが盛り沢山なのです。


最近直したバグ

(問題)
・敵が落とした武器を拾った時に、「武器チェンジ」が1フレーム内にそれぞれ連続で発生してしまうことがあるので
 結局拾おうとした武器が拾えなかったりする。 

・敵に武器を拾わせようとしたときも同じようなことが起こるので、敵に武器を拾わせることが謎解きの鍵になるような場合、
 普通に問題である。


(なぜ直しづらいのか)
・アイテム側に、毎フレーム、「全人間」との当たり判定を計算させている。
 そのアイテム達が同時に計算をするが、その際の他のアイテムへのフラグ立ては、どうにも1フレーム中に優先度とかなく発生するらしい。
 これはもうスプライトに記述したスクリプトの挙動の仕様としか言いようがない。
 どうやって直せというのだ。
 (人間側に、毎フレーム、「全アイテム」との当たり判定を計算させるようにするか?)
 (いやだがそれをやったところで今度は・・・)

(どうやって直したか)
・結局条件をゴニャゴニャかえた。
・アイテム全てを毎フレームで計算させるんじゃなくて
 アイテムに降ったIDと 「プレイ時間」の末尾の数字が一致した瞬間のときだけ計算させるようにする?
 (これは無理やりすぎるので却下)
 (大体これだと10分の一の確率でまだバグが発生する余地があるし)



・・・みたいなね


一つ一つのバグに関して
こういう「直したいのにどうにもすぐには直せない!」というのが切実なのです。
そういうのがもう今、すんごいのです。


最近直したバグ・続き


・敵が死んだ時に手から離した武器が、敵の死んだ時の姿勢によっては壁にめり込んでしまう。 どうやって直すのか

・自分が地雷で死んだ時はいいけど敵が地雷を踏んで死んだ時におかしなことになる。原因不明すぎる。

・箱の大きさを変えられるようになったせいで地形との衝突判定が一筋縄ではいかなくなってしまった。やりなおし。

・箱をダッシュしながら押そうとしたらゴリ押しできてしまうことが判明。箱回転謎解きが正しく解かれない。
 どうやって直すのか。

・装飾破壊をしたあとでマップエディタなどから戻ってきた時、基本の地形の高さが何故か置き換わっている。どういうことだ。

・リアルタイム地形変更、リトライ、マップ間移動での保存すべき情報・・・
 これらが組み合わさって意外なほど複雑なことになっちまった。

・・・
・・・


最終的に
あまりにプログラムを記述しすぎて
ParaFlaのスクリプトエディタひとつ分に記述できる分量をオーバーしてしまった。
このままでは物凄くおかしなことになる。
どうやって短くするのか。

とか

マップのデータの宣言も一回の命令では終わらなくなってしまった。
イチイチ配列をくっつけるのか?面倒くさい。

とか

そういうことまで起きるようになってきました。
本当に「ParaFlaの限界」に挑戦している気分です。


・・・とかまぁそういう風に問題が山積みなのですね。

こんなシンプルそうなゲームなのに、バグだらけなのです。


前に「カマキリゲー」作った時だって、ここまでバグには悩まされなかったとは思います。


そこはやはり、オールマイティーな3Dアクションをベースにした上で
パズルゲームを作ろうとしているから、ここまで大変なことになっているのでしょう。


このパズルゲームのエディターを改造すれば、ゆくゆくはちょっとしたアクションRPGぐらい作れるようになるような、
そんなモノすら想定しながら作っているからです。 

(これで)
(こんなので 一応)


で、
敵とか敵のAIとか
箱の種類とか
アイテムの種類とか
装飾の種類とか
スイッチの種類とか
罠の種類とか
・・・
そういう様々な要素が急増で組み合わさった結果、本当にえらいことになってしまっています。


前に「これ」とかを作ってた時とは、本当にバグのレベルが違います。


何故かと言うと
「これ」のときとは「キャラの歩き方」のシステムからして根本から違うからです。

(まぁそういうのを頑張っているからこそ)
リアルタイム足もげのシステムとかがいつでも使えるようにはなっているのですが)


もう
「箱と人間の衝突」
「地形と人間の衝突」程度の、「一対一の条件」だけで済むような話ではありません。


やはり「アニマルメーカー」の延長のシステムなので、
「胴体」があり、そこから手足が生えており、その手足が地面を蹴った結果、実際に胴体が進むということになっています。


じゃあその生えてる足の足元に箱があったら、衝突条件はどうなるのか?

そういう問題が一気にややこしくなってくるのです。

そして、箱に乗った上でその箱が横に動いたりしようものなら、
その箱に接地している足をスライドさせれば済むような問題ではありません。
では胴体をスライドさせればいいかというと、それでもおかしくなるのは想像つきますよね。


つまり全身を、今の「歩き挙動」を阻害しないようにして、スライドさせなければならないのです。

それが出来て初めて、横にスライドする箱の上をリアルタイムで歩けるようなゲームが作れるようになるのです。



そういう部分を作っていると、色々他のゲームの中にある「暗黙の制限」と言うものに気づくようになりますね。


例えば、
ソウルシリーズには、「上下に動く箱」 (その中でキャラがリアルタイムに動けるようなモノ = つまりエレベーター
はたくさん用意されていますが、
「左右方向に動く箱」となると、一気に存在が姿を消すことに気づきます。


そうやって考えると、「左右に動く箱の上をリアルタイムで動けるアクションゲーム」というのは
一気に減ると思うのですよね。


(なぜかこのことを考えるときに、いつも頭に浮かぶのは
 ベイグラントストーリーでの「フィクセント」の魔法を進んで進んでいく場所だ)



・ジャンプ要素があるか無いかで3Dゲームの作成難易度は一気に変わる。

・箱上でのリアルタイムな上下移動要素があるかどうかで3Dゲームの作成難易度は一気に変わる。

・箱上でのリアルタイムな左右移動要素があるかどうかで3Dゲームの作成難易度は一気に変わる。

・リアルタイム地形変化要素があるかどうかで・・・



で、まぁこれは泣き言とか自虐風自慢?だけではないです。


そういうのをイチイチ直していくのが実は物凄く面白いのです。


まず、見えている問題というのがある。

で、問題だとわかっていてもプログラム的に直ちに直すのは困難である。難解である。 もう無理だろ!と思ってたりもします。

でも、いつかはなんとかしなければなりません。



そういう問題について延々と悩んで考えて、

ある日、パッと解決策が浮かんだりします。

それで、ずーっと直せなかったゲームのバグがやっと直るのです!


これほどの「開放のカタルシス」はないではないですか!!!!!


ずーっと頭を悩ませていた問題が、苦労の末、やっと解決する。

これこそ本当に、文字通りの「パズル」です。


つまりゲームのデバッグというのはそれ自体が最高品質のパズルゲームなのではないか?と思うくらい、
正直、クソ面白いのです。  (ずっと直せないでいるとムカつきもするけど)


で、今普通にチュートリアル10面が完成したので、

本編の問題をちょぼちょぼと作っているのですが、

それも面白いですね。



やっぱり、パズルゲームを解くのと作るのとでは難易度が3倍くらい違ってくると思います。
作るのクソむずいです。


・簡単に安易な抜け道が出来てしまうような謎解きを作ってはいけない

・適度なひねり要素を加えたい

・見やすさとか、目的の分かりやすさも考える その上で悩ませたい

・あと普通に、謎解きのネタを思いつき捻り出すのが、純粋に難しく面白い

(今はまだ全然だけど、難易度のエスカレーション具合というのを考えるのも大変そうだ)


・・・・


本当に面白いですよ
パズルの問題自分で考えるのは。


既に作った問題を改善させていくのも面白いですね。

調整前の穴掘りパズル

調整前の穴掘りパズル

↑例えばこれ。

上の状態だと、別解があるし、ひねりも少ない感じの謎解きでした。
それをちょっと弄っていくことで、別解もなくなり、難易度というか「意外性」が出てきます。
パット見、どう考えても真ん中あたりから掘っていくのが一番の近道に見えるのに、答えはそうじゃありません。
そんで、全てのスコップをフル活用する必然性も出てきます。

バナナを吊ることで、「最後に一手残す」必要性も出たし、「見やすさ・わかりやすさ」もアップしました。


逆に言うと許容性とかは減って、解が一本道に絞られてしまってはいるんだけど、
やっぱりこういう「問題の改善」を考えるのも超面白い!



というわけで、色んな意味で、「パズルゲームを作るのはそれ自体が最高のパズルですね」という

そういう話でした。

報告。

関連記事
[ 2016/02/01 18:29 ] 自作ゲーム開発 | TB(0) | CM(6)
前の元ネタの話ですが、siren2のマニアックスには流血鬼のってました( ´ ▽ ` )ノ
[ 2016/02/02 01:30 ] [ 編集 ]
デバックがまさかのパズル感覚とは…

私はゲーム制作で一番嫌いなのはデバックなんです。
ゲーム会社にいた頃はそもそもグラフィックがメインで
プログラムはほとんどやってませんでした。

ひとりでゲームを作ろうとした場合、
実に様々なスキルが要求されるんですよね。
どれか一つでも苦手な物があるとたちまち
制作が滞ってしまう…。

私の場合、計算とか数式とかそういうのが大の苦手で
思うようにキャラの動きやイベントが作れず、
絶望的な気分の連続でした。

誰かに丸投げしたい気分でいっぱいでしたが
社会との接点や人間関係を極力回避したい
ひきこもりとしてはやはり全部自分でなんとか
するしかなく地獄のデバックタイムに
膨大な時間を費やしてきました。
蛇蝎の如く忌み嫌うという表現がありますが、
私にとってはバグがまさにそんな感じ。

そこでもう発想を180°変えることにしました。
会社で中途半端にかじったプログラムのスキルを
捨てることにしたのです。

で、既存のゲームエンジンを模索しました。
RPGツクールから始めてウディタ、LiveMaker、Unity…
う~ん、Unityは本当に素晴らしいんですが、英語が苦手で
泣く泣くあきらめ、結局、CF2.5に落ち着きました。

CF2.5の制作自由度は衝撃的でした。
習得難易度はやや、高めですが、
一からプログラムする苦労を考えたら
児戯も同然。物理エンジンなんかも使い放題で、
(アレを一から組むとか勘弁してください)
ほぼ、どんなゲームでも作れてしまいますね。
この神ソフト、stormのセールで2000円で買えました。
今はほぼ、これ一本で作ってます。

それでもデバックの苦労からは解放されません。
もちろん、格段に楽にはなりましたが、
どんなゲームエンジンを使っても結局のところ
プログラム的な思考とスプリクター的な脳みそは
絶対に必要ですね。
そういう意味で中途半端にとはいえ、
習い覚えたプログラムスキルはまったく
無駄になっていませんでした。

私も早くニートさんみたいにバグ潰しを
パズル感覚で楽しめるようになりたいものです。
本当に羨ましい…(泣)
[ 2016/02/03 08:33 ] [ 編集 ]
やっぱりデバッグはチマチマしますよね
僕も3dソフト用の便利ツールとしてスクリプトなど作成していましたが
親子付けをしているorしていない 自分以外の人に試してもらうと
考えもしなかった操作をする など想定外の条件で破綻することがわかり
それらを解決するときにかなり発想の転換が必要で
解決できたときの快感がとても共感できます。
[ 2016/02/06 17:15 ] [ 編集 ]
コメント返信
> くるす さん


> 前の元ネタの話ですが、siren2のマニアックスには流血鬼のってました( ´ ▽ ` )ノ

あ、まじですか! 情報どうもです。

しかし2のマニアクスですか! これはとんだ盲点でしたね。 (1のしか持ってない)


にしても、2はあんま流血鬼関係ないような気もしますけどね。

やっぱり、自分みたいな奴で「なんで流血鬼を元ネタとして紹介しないんだ!!」って怒る人がいっぱいいたから、

2の方に無理やり載せる形になったんでしょうかねぇ。

[ 2016/02/08 17:00 ] [ 編集 ]
コメント返信
> 藻屑 さん


> 私はゲーム制作で一番嫌いなのはデバックなんです。
> ゲーム会社にいた頃はそもそもグラフィックがメインで
> プログラムはほとんどやってませんでした。


グラフィックメインというのも楽しそうな気はしますけどね。
でもそんな想像は甘っちょろいのでしょうね。


> CF2.5の制作自由度は衝撃的でした。
> 習得難易度はやや、高めですが、
> 一からプログラムする苦労を考えたら
> 児戯も同然。物理エンジンなんかも使い放題で、
> (アレを一から組むとか勘弁してください)
> ほぼ、どんなゲームでも作れてしまいますね。
> この神ソフト、stormのセールで2000円で買えました。
> 今はほぼ、これ一本で作ってます。

ほーそんなよさ気なソフトもあるのですねぇ。

CF2.5、イメググッて見た感じとしては2Dのゲームが多そうですね。
いや関係ないですか。自分もパラフラで無理やり3Dのゲーム作ろうとしてるし。



> 私も早くニートさんみたいにバグ潰しを
> パズル感覚で楽しめるようになりたいものです。
> 本当に羨ましい…(泣)


まぁこれも、半分くらい自分を騙して前向きに考えようとしてるようなもんでもありますね。

でもずっと直せなかったバグが直った時の開放感は本当に凄いし嬉しいのですね。


これは物理挙動の根っこの部分から、全部携わってるからこそなのかもしれませんが。


[ 2016/02/08 17:08 ] [ 編集 ]
コメント返信
> ガキななしさん さん


> 自分以外の人に試してもらうと
> 考えもしなかった操作をする など想定外の条件で破綻することがわかり

これありそうで怖いですね。

ずーっと作って触ってる自分だからこそ当たり前にやってることが
いきなり触る人には全然分かってもらえないということが普通にありそうです。


今作ってるゲームだと、
スペースでダッシュするのがデフォルトな感じとか、
シフトで武器投げるのが当たり前な感じとか、
武器の回転攻撃で箱を好きな方向に投げ飛ばすのとか、

そういうテクニックが当たり前にあって、
それ前提の謎解きが結構入っちゃってます。
これはいきなり触る人には分からんのではないかと不安ですね。



> それらを解決するときにかなり発想の転換が必要で
> 解決できたときの快感がとても共感できます。


やっぱとんでもなく嬉しいですよね。

これはもうゲーム作ってる人にしか共有されない思いですかね。


で、そうやって「このゲームは『もっともっとダメな状態』から何度も良くなってきたんだ」という愛着があるから

自分のゲームが、今、客観的に見てどれくらいダメダメなのかが冷静に判断できなくもなっちゃうんですよねw


ずーっと直してきたゲームというのは愛着がすごいです。

[ 2016/02/08 17:25 ] [ 編集 ]
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

月別カレンダー
09 ≪│2017/10│≫ 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -