FrontLine Corpsの技術的な事について

先日公開したゲーム「FrontLine Corps(https://njf.jp/?p=1951)」で使っている技術についての簡単な説明です。

RTMFP

このゲームの通信部分はFlashのクライアント同士をP2PでつなげるRTMFPと言う機能を使って実装しています。対戦者同士のマッチングを行うロビー部分ではPlayer10.1より実装されたグループ送信の機能を使っています。P2Pで通信を行いサーバーを通さないため、非常にスケーラビリティのあるシステムになっています。しかし、ロビーなどはどこかにデータを集中的に管理する場所があった方がシンプルな構造になるので、RTMFPを使うのはあまり向いていないかも知れません。実際このゲームでもロビーの処理は複雑でそのせいか少し不安定なようです。もしビジネス用途などでより信頼性のおける設計にするなら、ロビー部分はサーバーを通して管理し、残りの対戦通信部分はP2P、しかし、うまくつながらないユーザーはその部分もサーバーを仲介させるなどという方法が良いと思われます。
とはいえ、サーバーを管理することなくかなりのスケーラビリティのある対戦ゲームを気楽に作れるところはなかなか魅力的です。

Google App Engine

リプレイの保存はGoogle App Engineを使用しています。Google App EngineはGoogleの提供するクラウドサービスで、一定のリソースの範囲内なら無料で使うことが出来ます。日々膨大な検索をさばくGoogleが提供しているだけあってまず落ちることはありませんし、何より非常に使用料が安いです。個人制作のゲームで使う程度なら大抵は無料の範囲に収まるでしょう。プログラム言語はPythonとJavaが使用可能です。
FrontLine CorpsではPythonでAMFによる通信を行うライブラリであるPyAMFを使っています。AMFはFlashなどで扱うデーターを送受信したり保存したりする形式で、クラスのデータなどをコンパクトに直列化してくれます。そのため、クラスのインスタンスをバイナリのまま送信することが可能になります。このゲームではリプレイデータを一度ByteArray形式にして、さらにByteArray.compressメソッドでzip圧縮して送信しています。そのため、1ゲームあたりのリプレイデータの容量は平均3キロバイトと軽量になっています。PyAMFはまだバージョン0.6と開発途中のライブラリのため、企業などで実務で使うのはどうかと思いますが、個人で使うには非常に便利です。

Mochi Ads

対戦ゲームでは対戦相手がいないとそもそも遊べないため、今回は少しでも多くのユーザーにゲームに触れてもらうために英語版を作ってMochi Adsのディストリビューションプログラム(swfの配布を手助けしてくれる機能)に登録しています。これによって海外の複数のゲームサイトでもこのゲームは公開されています。そしてプレイしているユーザーは全て同じロビーに入室するようになっています。また、Mochi Adsにはswfをの差分を動的に適用してくれるライブアップデート機能があるので、これを使うとMochi Adsに新しいswfをアップするだけで世界中にちらばったswfが更新されます。通信対戦ゲームの場合、swfを全てアップデートしないと新しいswfと古い物で齟齬が発生する可能性があるので、この機能は大変助かります。
またプリローダーの広告料も入ります。ただし、今のところあまり収益は良くありません。

まとめ

このゲームは多分に実験的で対戦と言っても1対1ですし、今のところさほど沢山の人がプレイしているわけでもありませんが、上で紹介したような機能を使うと個人でもかなり大規模なFlashの対戦ゲームを作れる、ということをある程度示せている物であると思います。MMORPGのような正統派オンラインゲームを個人で作るには技術よりも分量的に難しいでしょうが、たとえば従来のミニゲームなどをMMO化するといったアイデアを形に出来るかも知れません。その時にここで書いたようなことが一助になればと思います。

Google App Engine
http://code.google.com/intl/ja/appengine/

PyAMF
http://www.pyamf.org/index.html

Mochi Media
http://www.mochimedia.com/

Share

コメントする