Xbox Live Arcadeのランキングなんかを見ていると、オンラインスコアボードもいいねっていう感想を持つのだが、こういった機能って簡単に実装できるの?クライアントもサーバもオープンソースで、比較的チートに強いという条件で。
いわゆるオンラインゲームのチート防止機能(Anti-Cheat)は世の中にいろいろあるんだけど、どれも結構おおげさだ。
- Cheating in online games(http://en.wikipedia.org/wiki/Cheating_in_online_games)
- PunkBuster(http://en.wikipedia.org/wiki/PunkBuster)
PunkBusterってのがこの業界では結構有名っぽいんだけど、クライアントのメモリをスキャンしてチートのデータベースと照合したり、ファイルのMD5を随時チェックしたり、相当大掛かりだ。あとPunkBusterが送信するデータ自体が偽装されないように、PunkBusterのアップデートを頻繁に行ったりしているらしい。大変すぎる。つうかハイスコアボードはオンラインゲームではないので、こんな大仰なことはしたくない。
リプレイをサーバに送信して、それをサーバ側で検証するってのが比較的コストが低くてまあまあいい手なんだろうけど、これはサーバ側でクライアントと同じ環境が動く必要があるってのがネックだね。レンタルサーバとかだと特に。
あとはそのリプレイを他の参加者から見られるようにして、不正な点を見つけたらブラックリスト送りするっていうソーシャルな解法もあるんだろうけど、これもいろいろと問題が起きそうだなあ。技術的にではなく人間関係的に。
リプレイ検証系は、フレームレートを低下させたプレイとかには全く無力なのも欠点だね。こればっかりは人間が見ても検証不可能だし。人外のスーパープレイと凡人のチートプレイを完璧に見極めるアルゴリズムとかあればねえ。
あとオープンソースとチートの関係については、昔QuakeのソースがGPLでリリースされる時に話題になっていて、
- Open Source Quake Causes Cheating?(http://games.slashdot.org/article.pl?sid=99/12/26/1255258)
オープンソースであることとチートができることには何の関連もない、とかいう論調が幅を利かしている。まあスラドだからねえ。実際的には関連あるよね、少しは。