Mad Games Tycoon 2のMOD開発記

Mad Games Tycoon 2というUnity製のゲームが大好きなので、MODを制作中、その備忘録。

"ゲームのMod作成でプログラミングを学ぶ"という在り方

正直なところ、私はそもそもプログラミングというものを、専門学部などで学んだことはありません。

今でこそちょっとしたModを作ってはいますが、C#のCの字は聞いたことすらないレベルでした。

 

今のところ、私は「ゲームのMod」作成を通して、日々勉強しつつ、それをさらにModへ還元しています。

こういうことしている人、他にどのくらいいるのかな?

元々Modを作っている人はプログラマなのかな…?

 

ちょっと疑問に思ってきたので、Modで本当にプログラミングを学べるのか?と思ってGoogle先生に聞いてみたら、

MinecraftのMod作成でJavaを学ぼう!

とか、

有志のフレームワークを使って、Python、Scratch、RubyLua…好きな言語でMinecraftを好きに弄ってみよう!

などの企業が出していそうなサイトが乱立していました。

Google先生に尋ねたら、まるで小中学生の夏休みの宿題みたいな、プログラミング教育のサイトがずらり。時代は変わってますね、

私が子供の頃は夏休みは虫取りだったのに。

 

ある意味、かなり効率的な学び方?

世の中にはたくさんの勉強法、学び方が出てきています。

だけど、研究も進んで、人によって「学び方」によって効率が違うらしいのです。

 

nlp-coaching.or.jp

 

優位感覚というものがそれぞれ3つ決まっているというのですが、

その中で、

【K:体感覚優位の特徴】

体感覚優位の人は、触感や動きを通じて情報を得ることを好みます。自分自身の身体感覚を通じて世界を理解しようとします。

例えば、新しいスキルを学ぶとき、実際に行動を体験することで最も効率的に学びます。また、物事を理解するためには実際に試してみることを好む傾向があります。これは、自分自身の経験を通じて最も深く学ぶからです

>例えば、新しいスキルを学ぶとき、実際に行動を体験することで最も効率的に学びます。

>また、物事を理解するためには実際に試してみることを好む傾向があります。

>これは、自分自身の経験を通じて最も深く学ぶからです

 

これ、明らかに自分なんですよね。

あまり人に聞きたくない、ただのコミュ障気味な性格の問題な気もしますけどね(笑)。

 

ただいずれにせよ、私の場合どんな時でも実際に体験したことは、どんな学び方よりも応用が効くし、飽きずにできるんです。

 

「Modの作成」というのにも同じことが言えるとかねてから考えています。

ーーーーー(長文です)ーーーーー

※これは個人的見解かつただの架空の物語です。

 

ある体感覚優位の人「Aくん」がいました。

MGT2というゲームの、こういうところが気に入らない!というゲームの「体験」から得た強い衝動及び、どうしてもすぐに改善したい!という強い欲求が生じます。

そして、ゲーム開発者がやらないなら、俺が直接弄って作ってやる!と意気込み、早速ゲームのファイルを逆コンパイルしてソースコードを見るAくん。

……うっ。

めちゃくちゃ難しそう。そもそも、一つの関数を解読するのすら厳しい。

ああっくそ。ここまでか。

……でも。ゲーム改善したいなぁ…やるか…。

しぶしぶソースコードをしげしげと見始めるAくん。

だけど、なんのことやらやっぱりさっぱり。

もどかしくなったので、次は、Modの作り方をググる

Unityゲームには、BepInExという優秀なMod用フレームワークがあるみたいです。

ガイドを見ると、HarmonyというAPIを使用し、メモリにインジェクションするようです!おお!

でもね…分からない。どうやって使うんだよ、これ…。

 

Harmonyを解説している動画を見ます。…全く出ない。

色々探して、中国人が喋ってるのとか、dnSpy使ってCharp-Assembly.dllを直接いじっている動画がありましたが、依然として良質なHarmony解説動画が見つからない。

そんな悪戦苦闘の中、こちらを見つけました。

youtu.be

 

おお!なるほど、こうやってソースコードを解析しながら、HarmonyPostfixとか使って色々変えていくのか。

やり方はわかった。仕組みはわからないけど。

 

とりあえずAくんはVisual Studioをインストールし、BepInExをMGT2にぶち込みました。

見様見真似で頑張ってコードを書きます。

謎の継承とかいうやつで、classの名前に:を付けて、BaseUnityPluginやMonoBehaviourを付けるようです。さっぱり意味が分かりませんが、なんやかんやで生まれて初めて.dllプラグインを作成。MGT2を起動させます。

 

「……(ゲーム)のゲームデザイン数値+999%」


Aくんは歓喜しました。

動いた。動いたぞ。俺の作ったMod(?)が動いた。

まるで、受験合格したかのように飛び跳ねて喜びます。

ここから、Aくんは10時間トイレ以外にはいかずぶっ続けでPCにかじりつきました。

よ、よし!次はこのMenu_GameUpdateをharmonyのこれで動かしたらどうなる…?

あ、あれ!?このinstanceを拾ったらエラー?なんで?えーと…"NullReferenceException"は、取得使用した値がない時に起きちゃうのか。よくわからんけど嫌な事が起こるから改善しよう。

じゃあここで…えーとどうやれば良いんだろう?

そういえば、エラーハンドリングって奴どこかで聞いたな?…は?try、catch、finally?意味わかんねーけど使ってみよう。

なんかよく分からんけど便利そうだったな、今後も使っていこう!

ーーーーーーーーーー

 

…と、このような体験になるかと思います。若干の脚色をしました。

今の普及している勉強法は、専門学部で学んだり、動画で学んだり、本で学んだり、サンプルコードを打ち込んでみたり等、数多の勉強できる環境が整っているかと思います。

ですが、このように、"ゲームのMod作成でプログラミングを学ぶ"ということも、一つの手段になり得るのではないかな?と思います。

既製品に改造を施すということは、わざわざテストコードをせずともすぐに結果がわかることですし、他者のソースコードの解析を行い、それにうまく組み込むようにしなければ、Modとして機能を果たせません。

 

一つの手段として、もっと流行ればな、なんて思った次第です。