daedalus_indiegame’s diary

インディーズゲーム開発の日々の進捗等について書き綴ります!

超絶ざっくり高速振り返り

過去を振り返ってみようじゃないか

さてさて、デジゲー博も終わりましたよ〜。
余韻というか、疲労感に浸っている今日この頃。歳かな?w
現在開発しているRogueライクなゲームを開発しはじめてから最初の一里塚まで到達した感がありますね。しみじみ。
というわけで、ここまでの開発の足跡ついて、いまいちど振り返ってみるとします。

1月

一年の計は元旦にあり!今年は何か作るぞ!何を作ろう?そうだ、Rogueライクゲームを作ろう!!決定!
くらいのノリで開発を決定。
1/2 から設計に着手し、1/3 には製造を開始。

ダンジョンの自動生成処理にほぼ1ヶ月を費やす。
シンプルに効率良く回れ過ぎるダンジョンでは、ダンジョンっぽさに欠ける。
ほどほどの複雑さを出すにはどうしよう?という点で悩み、結構時間がかかる。
この時点では、ダンジョンが分断されてしまい到達不可能なエリアができる、といった問題はあるものの、何となく動く程度の品質。

2月

SDユニティちゃんを投下!
生成したダンジョンにMainCharacterとしてご登場いただく。
動的に生成したダンジョンに対してNavMeshを動的にbakeして、タップした場所まで動くようにする。
この時点では、二次元のマス目構造の概念を無視して自由に移動できる。
(二次元のx,y座標のマス目構造に沿って動いて欲しいが、まだ先の話。)

次にA*による経路探索のアルゴリズムを実装し、タップしたマスまで探索した経路に沿って動くようにする。
むむ、経路探索自体は動くがマス目に沿って動かす、というのがどうにもやりにくい。。
というわけでDOTWeenの登場!NavMeshAgentによる移動方式は、泣く泣く捨てる。あぁ〜。悲し。
Rogueライクゲームといえば、こっちが動くと敵も動くというターンによる法則に支配されている。
このターン制御システムを実装する。

3月

8方向の矢印を主人公を中心とした位置に表示し、方向を指定することで移動する機能を実装。
フロアにランダムに階段を設置して触れると強制的に全てを再構築する。

4月

階段に触れると次のフロアへ進む、というのをUIも含めて作成する。
Subカメラによる簡易的なMiniMapを実装。
上空高くからフロア全体を見下ろして、画面の端っこに小さく表示する。
「敵」の概念を実装するが、まだまだ魂が入っていない。(動かないw)

5月

「敵」に魂を込める。思考ロジックを洗練させてゆくが、まだまだ未熟。
部屋の中を無意味に漂うのみ、壁も無視してすり抜ける。w
この時点では、まだ「攻撃」の概念が実装されていないので「移動」周りを中心に。
壁にめり込まないように、部屋の中に滞留せずに部屋間を積極的に移動するように、通路で詰まらないように、主人公を発見したら追いかけるように etc..
バグとの戦い。
下旬頃、「攻撃」、「ダメージ」、「死」の概念を導入する。

6月

メッセージ表示機能の追加。
(「〜を倒した。」、「〜ポイントのダメージを与えた。」のような。)
Swipeによる高速移動(ターンの高速再生といってもいい)を実装。
通路内では折れ曲がっていても道なりに高速する自動航行処理を追加。
ダンジョンの「壁」が見えるように建てる。(これまでは床しかなかった。w)
光と影の調整。

7月

ダンジョン自動生成処理を洗練させる。隣接リストを作りフロアが分断される問題を解決。
動的に生成するにあたりパラメータを追加。(部屋の大きさとか、通路の長さとか)
これでフロア毎に特徴のある自動生成が可能になる。
Subカメラによる簡易的なMiniMapを卒業。
はい、横着しないでちゃんと作ります。w
テクスチャにドットをポチポチと置いていく感じでMiniMapを実装。
今現在見えているところ、既に見たが今は見えないところ、まだ見てないところ、等々の制御に一苦労。
「休憩、待機」の概念を実装。

8月

デジゲー博に申し込んだのが、この辺りだったはず。
まだ抽選あるし〜、出れるかわからないし〜、と少し余裕がある。w

「道具」という汎用的な概念を実装。
一歩掘り下げて「武器」、「盾」、「矢」の概念を実装。
さらに掘り下げて具体的な武器、盾、矢のマスタデータを作成。(この時点ではベタ書き。)
「道具を拾う」、「道具の一覧を表示」、「道具の詳細を表示」、「道具を装備」、「道具を置く」、「道具を投げる」といった概念を実装。
「経験値」、「LV」の概念を実装。
マスタデータをScriptableObjectへ移行。

9月

9/14 デジゲー博当選のお知らせメールが届き、戦慄が走る。もう、逃げられない。w

マスタデータをExcelへ移行。ExcelImporterを導入。
ExcelデータをScriptableObjectへ変換してくれるツール。)

github.com

矢に「本数」の概念を実装。1スロットでn本の矢をまとめることが可能に!
アイテム落下ポイント探索の実装。例えば矢を撃って落ちた場所に既に何かが置いてあったら!?という処理。
敵をSpawnさせる処理を暫定的なものから作りかえ!
「金」の概念を実装。(店が欲しいね。)
「満腹度」の概念を実装。(食料が欲しいね。)
道具の種類を増やす。「食料」、「薬」、「オーブ」、「杖」の概念を追加。
ロジックが異なるアイテムで処理がごちゃごちゃしないようにOOPな感じでクラスデザイン。

10月

敵の種類を増やす。3DモデルはAssetStoreにて調達!
武器と盾を装備すると外観にも反映されるように実装!3Dモデルは(同上!)
外観やパラメータのみでなく、行動パターン、攻撃パターンも多様化する。
2回移動、2回攻撃の敵を実装。
「状態異常」の概念を導入。(モンスターハウス用に)
デジゲー博用にFirebaseのAnalytics & Realtime DatabaseのSDKを導入。
スコアランキング機能の実装。(前述のRealtime Databaseを利用して。)
モンスターハウス」の概念を実装。
「ダンジョンクリア」の概念を実装。
「トレジャーアイテム」の概念を実装。
ダメージ計算をなんとかする。
マスタデータを調整してゲームバランスを整える。

11月

デジゲー博に出展!
デジゲー博を終えて真白になる、動けない。w
ので、新調したMacBookProの環境セットアップ。
今更ながらPJ管理ツールの導入。AWSRedmine

まとめ

超絶ざっくりに高速で振り返って見ました!ざっくり高速に書いていますがバグとの戦いです。
新しい概念の実装直後は色々と未熟なところもあるので、その後も長い時間をかけて品質を向上させていく必要があります。
ゲームなので触り心地が大切!その辺には気を使いつつ。まだまだ要改善ポイントは多いので頑張ろう。

そして、設計がよろしくない箇所は思い切ってリファクタリングをする勇気も必要ですね。捨てる勇気。
デジゲー博出展が決定した後は、それ以前と比較して生産性が上がったと思います。
終了して反動もあり動けなくなっていますが。そろそろ復活の兆し!

難しい処理、アルゴリズムは先人達の知恵をお借りしましょう。車輪の再発明は時間が勿体無い。
今回、先人達の知恵を大いに拝借したのは、以下の3点です。

  1. 経路探索
     これはA*と呼ばれるアルゴリズムを拝借しています。
     最初、正しくC#化できていなくてバグってましたが。w

  2. グラフのデータ構造、隣接リストによる分断の検知
     動的に自動生成したダンジョンは分断されることもあります。
     (最初から分断しないように生成することは恐らく可能だが、そのようには作っていないので。)
     これを解決するために隣接リストという方法でグラフのデータ構造を構築し、深さ優先探索にて分断を検知するという処理を実装しました。

  3. ダメージ計算
     トルネコ不思議のダンジョンの計算式を大いに拝借致しました。
     どうやってあんな難しい式に到達したのだろうか、、、
     何を考え、何を思い、あの式に到達したのか聞いてみたいものです。
     数字に弱い私には理解できぬ。。。w

さて、完成するのはいつになることやら?

2018/11/4 Sun. デジゲー博2018

デジゲー博2018に参加してきた話

11月4日 Sun. 秋葉原にてデジゲー博2018に出展者サイドとして参加してきましたので忘れないうちに記録しておきます。
まず初めに、私のブースにて試遊してくださった皆様に感謝を!ありがとうございます!!
Unityを使ったゲーム開発者の方(小学生くらいのお客さんも!?)やトルネコ不思議のダンジョンをやりこんだ、という人に興味を持ってもらいやすかったようです。
好意的なご評価も多く、完成させるように頑張ろうというモチベーションになりました。
と、同時にゲームの課題、問題点も露わになりました。(直さなきゃなぁ〜。)

そもそもデジゲー博とは?

年に1回の頻度で開催されている同人ゲーム、インディーゲームの展示会です。
TGSのような国内大手のパブリッシャーさんが集まるイベントとは異なり、小規模のチーム、なんなら個人規模で開発されているゲームも出展されます。
(かくいう私も個人開発ですからね〜。)
今年は300サークルの応募があったところ抽選等で絞り、270サークルが参加したようです。
UDXも手狭になってきましたかね?

詳しくは、公式のWEBサイトをどうぞ!

デジゲー博 | 同人&インディーゲームオンリー展示・即売会

私が、このデジゲー博を知ったのは去年、2017年開催の時でした。
この時は「いつか、出展したいなぁ」などという明確な意図も持たずに興味本位でフラ〜っと立ち寄ってみた感じですね。
ひよこの2Dアクションゲーム、ドラゴンのシューティングゲーム、街を歩く女子を守るゲーム、有権者を集めるゲーム etc.. と
色々なゲームがあるものだと、良き刺激をいただきました。

何を出展したの?何故出展したの?

 開発中のローグライクゲームを出展しました!今の進捗だとβ版どころかα版程度!?
なお、このゲームは2018年1月2日から作り始めました。作るぞ!と決めたのは元旦ですね。一年の計は元旦にあり!
元々Unityは趣味程度で触っており、今年は何か作りたいなぁ、そうだ、ローグライク作ろう!くらいの勢いで。w
マーケティングも何もあったもんじゃないですね。でもまぁ、良しとしておこう。

 出展した理由としては2点、「なるべく早い段階でユーザーからのフィードバックをゲームに取り込みたい」というのと「士気を高め、生産性を上げたい」 というものでした。
 ユーザーからのフィードバックについては、直接的なご意見ご感想から、操作しにくそうにしているなぁ、という実際の行動から多くの情報を得ることができました。感謝です!また、好意的なご意見をいただけて士気も高まりました!感謝です!!
 生産性を高めたい!という点についても概ね効果はあったと思います。人はやはり守るべきもの(〆切)がある方が燃えますので。 このようなイベントに出展し、強制的に〆切を設定することで生産性を高める開発手法を「イベント駆動開発」と呼びますね。(ちょっと意味が違うような、、w)

ブースの様子

f:id:daedalus_indiegame:20181109211343j:plain

ざっくりどんな感じだった?

 お向かいさんが集客力の高そうなサークルさんだったこともあり、こちらのブースは閑古鳥状態になるかなぁ、、、
と思いきや、積極的に声を掛ければ結構お客さんは来てくれる!という事が判りました。
(逆にこちらから声を掛けずにグッタリしていると、あまりお客さんは来てくれない、という事も分かった。w)
声をかける際、最初から「試遊できます!」だとハードルが高いのですが「名刺だけでもどうぞ!」というと、足を止めてくれやすいようです。
するとそこから画面を観て興味を持ってくれ、試遊までしてくれる、という流れが多かったですね。
名刺は書かれている内容も大切だけど、コミュニケーションの入り口としても使える!積極的に活用していきたいツールです。

 アドレス:B-20a
 試遊してくれた方の数:28名
 最長試遊時間:15分くらい?(計測しときゃ良かった!)
 最短試遊時間:2~3分くらい?(同上!)
 配布した名刺の数:不明w

どんな人が試遊してくれた?

 試遊していただけた方は、ゲーム開発者の方、ローグライク上級者の方が多かったように思います。
プロの場合、タップの仕方が一味違うので一発で判ります。w
「え?動作確認されてる?」みたいな手付きなのです。w
ローグライク経験者の方は直感で遊んでいただける方が多かったようですが、ローグライクやったことありません!て人は操作に苦戦していた様子。
やはりチュートリアルは欲しかったが実装している余力がなく、人力チュートリアルでカバー!
紙に印刷した取扱説明書も持っていったけどテキストが多過ぎて出番なし!図で簡潔明瞭にしておけば良かったかも。
この辺、もうちょい効率よくできたかもしれない。

 試遊してくれたお客さんの中には小学生くらいの男子もいましたが、「ここの当たり判定は〜」とか専門的な用語が出て来て焦る。w
きっと将来有望なゲームクリエイターだろう。(彼は恐らくUnity経験者。)

どのような収穫があった?

 直接的なアドバイス、クレーム、実際の操作で難儀している点 etc..からアプリの課題、問題点が明確になり大変有意義なイベントであったと思います。
未完成で多少のバグがあっても個人開発者の方は積極的に参加してみることをオススメします。
打ち上げもあるので開発者の同士、横の繋がりも増えてモチベーションも上がりますし、良いことづくめの1日になることでしょう。

ゲームとしての改善点

  1. 操作性
     移動しにくい!タップしているのに移動できない、という事態が発生。 ある程度慣れてくると皆さん素早く移動できるようになってはいたものの、今のままではダメ!
    画面左下にバーチャルパッドを実装して、そこからでも操作をできるように改善したい。
    その場合、その場で方向転換、高速移動をどのように実現するかが工夫のポイントになりそう。
    高速移動は、移動方向へググ〜っとSwipeすることで実現できれば直感的かな。
    問題は、方向転換モードだ。
    ローグライクゲームでは移動せずに方向だけ変えたい、という場面が多発するので、ここが簡単にできないようだと厳しい。
    はい、何とかします。w (長押しで方向転換モードにするとわかりやすいかな。)

  2. 難易度
     28人もの方に試遊をしていただきましたが、何とクリアまで行った人はゼロ!w いや、簡単過ぎたら面白くないかなぁ、と思って微調整しまくった結果、難しくなり過ぎたようです。w
    もう少しでクリア!という方も何人かいらっしゃいましたが、食料が尽きたり、運悪く敵に囲まれたりしてアウト!
    そういえば一番強い盾はデジゲー博当日は一度も出現しなかったな。
    テストプレイでは出過ぎて困るくらいだったのに何故に本番で出ないかね。w

サークル参加としての反省点

  1. 地味
     でかいポスター、リーフレット etc.. 用意できれば良かったんですけれどもね。
    用意したのは名刺と試遊用のデバイスとプレイ動画のみ!
    お隣のブースが「PVを作る時間がなかったがプレイ動画は用意した!」というのを見て、その場で速攻でプレイ動画を録画、開場と同時にギリプレイ動画完成!
    Mac Bookで常に繰り返して再生していました。
    これは、そこそこ効果があったようで通路を行き交う人に結構観てもらえたと思います。
    「PVなんか作れねぇよ!」という方でも事前に録画しておいたプレイ動画を流すだけでも結構効果はありますので是非お試しアレ!

  2. ソロ参加はキツイ
     一人で参加したのですが思っていたよりも体力を使うことが発覚!
    休憩する時間も、他のサークルさんを観て回る余裕も無く終わりました。
    (隠れてランチパックを速攻で喰らう、くらいのことはできた。)
    二人体制で交互に休憩の時間を確保できるようならば理想的でしょうかね。
    ラスト30分、抜け殻状態になっていたのは勿体なかった。

さいごに

 試遊してくださった皆さま!ありがとうございます!
来年にはリリースできるように頑張って開発進めてゆきます!

 そして、フリーランスのデザイナーの方を探しておりますのでご興味ある方はご一報下さいませ!
(と言っても仕事の発注は来年中頃くらいになるかもしれません?)
来年には、キャラクターデザイン、UIデザイン、キービジュアルの作成、シナリオの作成と忙しくなる予感。
いや、その前にプログラムを完成させなくては!

ちなみに配布した名刺

f:id:daedalus_indiegame:20181109211304j:plain

f:id:daedalus_indiegame:20181109211322j:plain

2018/10/20 Sat. 進捗報告

デジゲー博まで、なんとびっくりあと2週間と1日しか無いってよ!?w
まだまだ実装したい機能が山積、直さねばならないバグも山積。
まぁ、焦っても仕方ない、地に足をつけて開発してゆきましょう。

そんなわけで本日の進捗!

1ターンで2回移動、2回攻撃できる敵キャラクターを実装してみたいと思います。
トルネコ不思議のダンジョンでいうところの、ゴーストや白い猿のような敵ですね。

ターン進行の処理はタイミングの制御が結構複雑で、手を加えるには特に慎重に考え適切な設計が求められます。
そもそもどういう処理になっていたか、このあたりの処理を実装したのも結構前なので読み返し、把握し、最適な追加方法を推敲します。

で、実装して出来たのが以下の動画!
とりあえずはちゃんと動いているような?
まだ厳密なテストを実施していないので顕在化していない問題点があるかもしれませんがざっくりとは動いているようです。

1ターンで2回移動できるイノシシの動画。
後ろからサボテンに攻撃されていて可愛そうに。w


2回移動

こちらは、1ターンで2回攻撃するキノコの動画。
1ターンで2回移動する処理と似たような感じでサクサクっと実装完了。


2回攻撃

ただ、今のロジックだと2回移動、2回攻撃可能な敵キャラクターを作った場合、期待した挙動にはなりません。 具体的には、1歩移動し射程範囲内に攻撃目標を捕捉した場合、さらに2回攻撃できてしまいます。
ここは、1歩移動後は1回のみ攻撃可能としたいところですが、その実装はまた後日。

2018/10/13 Sat. 進捗報告

むむ!デジゲー博2018まで、あと3週間と1日まで迫ってきているという事実に追い込まれつつある今日この頃。
この手のイベントに出展するのは初めての経験なのでブース設営にも苦労する予感。
テーブルに敷く布、配布する名刺、試遊していただくデバイスの置き方、見せ方などを考慮しつつ諸々をAmazonにて注文。
あと、お尻が痛くなると困るのでクッションも注文しました。お尻は大切に!

さて、本日の進捗報告

ここ最近、まとまった開発時間を確保できていなかったのですが細々とした処理を追加したりバグを直したりしていました。

新機能の追加

本日は、敵の行動パターンの多様化させるロジックを追加しました。
これまでは積極的にプレイヤーを追いかけて攻撃して来るタイプのみでしたが、それ以外にフラフラ漂う者、その場に留まり動かない者を追加。
この辺の思考ロジックを新設したInterface、AbstractClassをInherit、Implementsさせる形で別クラスとして切り出し多態性を持たせたクラス設計に。
ポリモーフィズムは大切!)

バグの改修としてー

部屋の四隅へ向けて発射する諸々の物が飛び出してしまう問題に対応しました。

明日の作業予定はー

明日は行きつけのコワーキングスペースにて1日じっくりと開発に取り組みたいと思います。

敵に遠距離攻撃の能力を付与したいと思います。
敵の多様性向上期間ですね。


2018 10 13 1

2018/10/1 進捗報告

台風一過!
京王線が運転見合わせで止まっており、コワーキングスペースまでの移動に一苦労。

さて、本日の進捗報告。

  • オーブの実装
     「トルネコ不思議のダンジョン」でいうところの巻物に該当するアイテムを追加!  部屋の地形が見えるアイテム、敵の気配を察知できるアイテムの2点を追加。  もっと増やしたいが、一旦ここまで!

  • 杖の実装
     「トルネコ不思議のダンジョン」でいうところの杖に該当するアイテムを追加!(まんまw)  振ると直線上に魔法の弾を飛ばし、当たった相手を部屋のどこかへ強制ワープさせます。  杖には使用回数があり、使い切ると何も出なくなります。でも投げて当たると効果が出ます。

どちらもとりあえず動くようにはなりましたが、外観、エフェクト的な要素が、、、
Daedalusでは、エフェクト作れる方も大募集です!

私はプログラムしか書けないのよ〜。絵心が欲しい今日この頃。

2018/9/30 本日の進捗

今日は食料(パイ)を食べる処理を実装!
そして、不思議のダンジョンでいうところの「草」に該当するアイテムを実装。
薬草、強力な薬草、ワープ薬の効果を持った3種類のみ実装。
自分で飲んで使えるし、投げてぶつけた相手に対して使うこともできます。

さて、台風が来たのでこの辺で!電車よ動け!!