Spelunky Classic のゲーム本体とソースコード


2009 年に発表されたゲーム Spelunky のフリーウェア版がソースコード込みで一般公開されている。

参考:Spelunky World

Spelunky とは

GM:Studio 製の横アクションゲーム。2012 年に HD 版として発表された Spelunky 製品版がコンソールや Steam でも遊べる。

フリーウェア版の GM:S 用ソースコードを開いてみたが、かなりエライことになってる。

当然だけど多くの動作定義は GML を使って書かれていて、大量のユーザ定義関数に大量の断片化されたコード、スプライト……労力が……すごい。開くのすらめんどうで簡単には解析できない。でも公開してあるソースなだけあって書式は綺麗に整形されてる。

コードの内容は古いせいかあまり推奨されないブロックステートメントを省く書き方もあったり、案外互換性を意識してきっちり書いた感じじゃない。if else 多用だけど、その当時 switch case が実装されてなかっただけかもしれない。switch case 使ったほうがすっきりする記述が多い。event_inherited ( );はあちこちで利用されている。Alarm も利用が多い。

with other { instance_destroy(); };
こんな書き方あるんかと発見。パーレンが省略されているけど、ブロックは省略されてなかった。

変数は結構躊躇なくグローバルを使っている。むしろなぜこんなにグローバル使うのか理解し難い。

インスタンス変数も当然多用されているけれど、ローカル変数がほとんど使ってない。この位の規模になってしまうと、GM:S は IDE がインスタンス変数の定義箇所を教えてくれない仕様があるから、作った本人でないと変数の意味が分からない場合が多い。それにしてもローカル変数を全く使わないのもよくわからない。

その他、シェーダやタイムラインやパスを使ってない。定数はマクロも定義が一個しか無い。かなりシンプルな手法で作ってある。ただしすごく手間をかけてバリエーションを豊富にした感じ。よくここまで作り込んで完成させたと感心。

ビルドするだけでもそれなりに時間かかるのだけど、どうやってデバッグしたんだろうとか、色々まだ謎。結構参考になった。


Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です