投稿記事

satofumi 2022/09/13 20:00

NPC をコーディングして領地運営するゲーム開発(ゲームで行う操作について)

ゲーム中でのコーディングと結果確認の流れは前回の記事で記述したので、今回はそのゲーム中で何を目的にコーディングするかについて記述します。

ゲームのクリア条件

まず、ゲームはステージを選択してプレイする方式になっていて、ゲームのクリア条件はステージごとに異なります。
最終的なステージでは「敵の最終ダンジョンを攻略せよ」がクリア条件になる予定ですが、チュートリアルを兼ねた序盤のステージでは「麦を5回収穫しろ」とか「パンを3つ作成しろ」なんかがステージのクリア目標になります。

ゲームで NPC に行わせること

NPC とは、ゲーム中でフィールドで行動する味方キャラクターのことです。


このキャラクターの行動をプログラミングして、各種タスクを行うことになります。
そして、キャラクターが行えるタスクの例を挙げていくと
  • 収穫用の大鎌を装備して畑で作物を「収穫」する系
  • フライパンを装備してキッチンで材料を料理に「変換」する系
  • 武装してダンジョンに移動して敵を倒しつつ「探索」する系
  • 敵が大群で押し寄せてきたときに弓を装備してタワーに移動して「防衛」する系

になります。改めて列挙すると「収穫」「変換」「探索」「防衛」ですね。
これらの「収穫」「変換」「防衛」は、適切なアイテムを装備した上で所定の場所に移動すればよく、この行動を Lua スクリプトで記述します。

例えば、城塞にある大鎌を装備するまでの Lua スクリプトは、こんな感じになります。

-- 城塞(Keep)に移動させて Items.Scythe を取って装備させる
local keep = world:keep()
character:move(keep)
character:get(Items.Scythe)
character:equip()

こういう「戦術」に近い基本的な行動をコーディングしたり、より効率よく収穫や運搬を行う「戦略」に近い要素のコーディングを楽しめるゲームを目指しています。

まとめと今後の予定

今回は、キャラクターにどういう行動を行わせる必要があるかについて記述しました。キャラクターが行動することで「料理アイテム」や「装備アイテム」が生産できるようになるわけですが、そのアイテムがどう使われていくかは次回の記事にまとめようと思います。

satofumi 2022/09/06 20:00

NPC をコーディングして領地運営するゲーム開発(どういうゲームなのか)

今回は、どういうゲームを作っていて、それがどう楽しいか(予定)についての記事です。

ゲームの流れ

Lua 言語でコーディングをして NPC の行動を自動化するゲームなので、当然のようにコーディングを行います。そして、そのコーディングの結果であるキャラクターの動きを見ながら、期待する動作になるまでコーディング内容を修正していきます。

流れをスクリーンショットで説明すると

チュートリアルでは未完成のコードが用意されているのでそれを動かしてみて、

どういう記述が不足しているか理解した上でコーディングして、

期待する動作になるまで API やサンプルコードを読み直してコードを修正する。


という流れになります。

どう楽しいのか

簡単に書くと、ゲームにおいて楽しさにつなががる「今はこういう状況だ(現状把握)、こうすれば良いはずだ(計画)、やってみよう!(実行)、できた!(報酬)」のサイクルをコーディングを通して提供しようとしています。

とはいえ、コードが適切に動作するまでに理解することは多いため、人によっては楽しさを感じる前にコーディングを苦痛に思ってしまうかもしれません。そうならないように、適切な難易度上昇のチュートリアルを用意しようと考えています。

ゲームで提供する必要がある機能

コーディングするとキャラクターがどう動くのかは次回の記事にまとめようと思います。
ただ、その仕組みの実装を別にしても

  • 記述したコードに従って動くゲーム画面
  • コーディングするためのエディタ
  • Lua 言語についてのドキュメント
  • 提供する API についてのドキュメント
  • 適切な難易度上昇のチュートリアルステージ
  • 記述したコードにエラーがあったときの適切な対処

などを実装する必要があり、正直大変です。初心者向けのコーディング講座の資料を書くのよりも、もう少し大変なくらいかなと思います。
このゲームを作っていて「遊ぶ人少ないだろうに、こんなに大変なの割に合わないのでは…」と思いかけることはありますが、なるべく考えないようにして開発しています。

今後の予定

次回は Lua 言語で NPC のどういう行動を制御して領地経営するのかという、ゲームのより具体的な内容について記述していきます。がんばります。

satofumi 2022/08/30 20:00

NPC をコーディングして領地運営するゲーム開発(はじめに)

NPC をコーディングして領地運営するゲームを開発しています。影響を受けたゲームとしては Screeps: WorldAutonauts vs Piratebots, 7 Billion Humans があり、これらのゲームを遊んでいて「コードを直接記述したい」とか「システムや API をもっとシンプルにしたい。私が理解しきれないので」という想いがつのって、ゲーム開発の気分転換として着手しました。

どういうゲームなのか

シンプルなクラフトベース街づくりゲームにおいて、Lua 言語でコーディングした NPC に運搬やクラフトをさせるゲームです。

NPC にコーディングして行うタスク

  • アイテムの収穫
  • アイテムのクラフト
  • パーティを組んで探索する
  • タワーに籠もって防衛する

ゲームサイクル

  • NPC の動作を Lua スクリプトで記述する
  • NPC がコードに従って動作するのを眺める
  • 問題点を理解してコードを修正して再実行する

開発中のゲーム画面


今後の予定

このゲームは自分でも「誰が遊ぶんだこれ」という内容ですが、そこは気にせず開発していきます。
しばらくは、どういうゲームにするかのアイディアや開発予定について週1回のペースで記事投稿します。よろしくお願いします。

satofumi 2021/09/15 20:00

Bonsai Castles 2(その27)

やったこと

敵サイズについての検討


↑FPS 視点で敵が押し寄せる様子を確認したもの。

敵が積み重なって壁を乗り越えてしまうのは「敵サイズが大きすぎるからかも」と思ったのと「それはそれとして敵が大きすぎる」と思ったので小さくしました。


↑修正前(左)、修正後(右)
FPS で見たときには敵は小さくていいんですけど、見下ろし視点のときには敵が大きくないと視認しづらくて悩ましいと思いました。またいつか考えます。

城下町まわりの実装開始


↑Japanese Old Town アセット付属のデモシーンより。

こういう城下町が半自動で生成される仕組みを作っていきます。
今回は建物のサイズ調整をしていました。


次回は「ここは町の区画」と定義したエリアに建物が自動的に配置されるあたりを実装っしたいです。

今後の予定

次は城下町が育つあたりのデモを作成します。がんばります。

次回の更新: 金曜日の20時

satofumi 2021/09/13 20:00

Bonsai Castles 2(その26)

Flow Field という仕組みで敵を移動させる仕組みの続きです。

やったこと

Flow Field の仕組みで敵を動かしました。


いい感じです。
ただ、このくらい小さい敵だと、積み重なって段差を乗り越えてしまうのが確認できました。これはこれで楽しそうなのですが、城郭を作るゲームなので敵は人と同じくらいの移動能力にします。
細かい敵の調整はもっとゲーム全体が動作しはじめてからでいいとは思うのですが、とりあえずは、敵の当たり判定を上方向に伸ばすことで積み重ならないようにします。

今後の予定

建物が配置できて敵の移動が作れそうなのもわかったので、次は「城郭を作って、その城郭に敵が攻め寄せてくる」というあたりを目指します。
また、城下町の発展もこのゲームの楽しさを実現する要素なので、城下町が育つあたりも動作デモを作ってみようと思います。がんばります。

次回の更新: 水曜日の20時

1 2 3 4 5 6 7

月別アーカイブ

限定特典から探す

記事を検索