ページ 11

MOD(追加要素)が作れるゲーム

Posted: 2015年4月01日(水) 11:22
by Aozora0630
こんにちわ。
今回、ふと思ったことを質問させていただきます。

私は良く、C++のDxLibでゲームを作るのですが、マインクラフトなどのように、作ったゲームに第三者が新要素を追加できるようにする為には、どんな方法があるのでしょうか?
(つまりMODを追加できるゲームの作り方ということです。)

私が思いついたのは、
・ゲームの処理をDLLに任せて追加要素はDLLを摩り替える。(追加要素が一つしか入れられない。)
・アイテムなどのデータを別ファイルにまとめてゲーム実行時に読み込む。(ゲームを本格的に変更することは出来ない。(例えばUIを変える追加要素など。))

回答お願いします。

Re: MOD(追加要素)が作れるゲーム

Posted: 2015年4月01日(水) 14:32
by softya(ソフト屋)
俗にいうプラグイン方式ではどうでしょうか?
MOD用のAPIを用意して、APIに準拠したDLLをpluginファルダに入れてもらって起動時に読み込む方式です。

Re: MOD(追加要素)が作れるゲーム

Posted: 2015年4月01日(水) 14:54
by Aozora0630
softya(ソフト屋) さんが書きました:俗にいうプラグイン方式ではどうでしょうか?
MOD用のAPIを用意して、APIに準拠したDLLをpluginファルダに入れてもらって起動時に読み込む方式です。
むむっ!
初めて聴いた方式ですね。調べてみます。回答ありがとう御座います。

Re: MOD(追加要素)が作れるゲーム

Posted: 2015年4月01日(水) 15:02
by Aozora0630
すみません。プラグイン方式についてググって見たのですが、なかなか詳しく乗っているサイトが無いのでサイトを教えていただけますか?

Re: MOD(追加要素)が作れるゲーム

Posted: 2015年4月01日(水) 15:38
by softya(ソフト屋)
ツールなどでよくある拡張プラグインの方式ですよ。
LoadLibrary/LoadLibraryExを使います。
https://msdn.microsoft.com/ja-jp/library/cc429241.aspx

Re: MOD(追加要素)が作れるゲーム

Posted: 2015年4月01日(水) 20:23
by あごみつ
こんにちは
softya さんのおっしゃることを Minecraft を例に具体的に説明します
(俺は Minecraft の実装は知らないので関数などはかなり適当です)

例えば新しいブロックを追加したい時には、そのブロックの性質を記述する必要がありますよね
どのテクスチャを貼ればよいのか、どのくらいの硬さなのか、壊した時にどのアイテムをドロップするのか、などゲーム側で元々用意されているインターフェースを実装するのがこれに当たります

コード:

class MyBlock // 新しく追加したいブロック
	: public Block // Minecraft 側で用意されているクラス
{
public:
	MyBlock(void)
	{
		setHardness(1.0); // 恐らく硬さを設定する関数は Block に用意されている
	}

	int idDropped(void) override; // 壊した時にドロップするアイテムのidを返す
	int getTexture(int /* ブロックは6面あるので欲しい面の番号 */) override; // テクスチャのidを返す
};
そして、MyBlock を追加する MOD を登録するために、同様に MOD のインターフェースを実装していきます

コード:

class MyMod
	: public Mod
{
public:
	void load(void) // MOD の読み込み時に呼ばれる関数
	{
		addBlock(new MyBlock); // addBlock(Block*) 関数でブロックを追加できる
	}
};

Mod* getMod(void) // ゲーム側は dll を読み込むとこの関数を呼ぶ
{
	return new MyMod;
}
後はこいつを dll にコンパイルして決められたディレクトリ(plugins など)に配置してやります
するとゲーム側は起動時に plugins ディレクトリを走査して dll を読み込み実行してくれるという段取りになります

[hr]
参考になりそうなサイトを紹介しておきます
ガラクタ置き場: ここのプラグイン・プログラミングというシリーズをご覧ください

Re: MOD(追加要素)が作れるゲーム

Posted: 2015年4月01日(水) 21:38
by h2so5
いちおう補足しておくとMinecraftはMODに対応しているわけではありません。
MinecraftのMODはユーザーが勝手にJavaバイトコードを逆コンパイルして改造しているだけです。
MinecraftのMODの自由度が高いのは勝手に改造されてるからであって、Minecraftの機能とは関係ありません。

身も蓋もないですが、ユーザーに自由に拡張してほしいならソースコードを公開するのが手っ取り早いということになります。

Re: MOD(追加要素)が作れるゲーム

Posted: 2015年4月02日(木) 09:44
by Aozora0630
成る程・・・。
応えてくださった方、ありがとう御座いました。
今度作るゲームの参考にさせていただきます。
h2so5 さんが書きました:いちおう補足しておくとMinecraftはMODに対応しているわけではありません。
MinecraftのMODはユーザーが勝手にJavaバイトコードを逆コンパイルして改造しているだけです。
MinecraftのMODの自由度が高いのは勝手に改造されてるからであって、Minecraftの機能とは関係ありません。

身も蓋もないですが、ユーザーに自由に拡張してほしいならソースコードを公開するのが手っ取り早いということになります。
そうだったんですか・・・。
回答ありがとう御座いました。