HN公開:オープンソースのCounter-Strike風ゲーム
(github.com/solcloud)- Counter-Strike: Footballは、2つのサッカーファンチームがラウンド勝利数を競う対戦型マルチプレイヤーFPSゲーム
- チームはAttackersとDefendersに分かれ、DefendersはAttackersのgraffiti bomb ballからfan base sanctuaryを守らなければならない
- ラウンドの勝利条件は、排除、爆弾設置、解除、時間切れまでの生存の有無に分かれ、爆弾が設置されるとラウンドのカウントダウンは40秒に設定される
- 実行ファイルは最新リリースからOS別アセットとして入手でき、ソースから直接ビルドするにはElectronクライアントとPHPサーバーをそれぞれ実行する必要がある
- プロジェクトはhtml/css/js/phpと3Dモデリング・テクスチャリング・アニメーションの貢献者をpull requestで受け付けている
ゲーム概要
- Counter-Strike: Footballは、2つのサッカーファンチームが相手より多くのラウンドに勝つことを目指して戦う、対戦型マルチプレイヤーFPSゲーム
- ゲームのダウンロードはDownload gameで提供されている
- README上部のバッジでは、テスト、Code coverage 100%、**Mutation score 100%**が表示されている
チームとラウンド目標
- チームはAttackersとDefendersで構成される
- Defendersの目標は、各ラウンドでAttackersがgraffiti bomb ballによってfan base sanctuaryを損なうのを防ぐこと
勝利条件
- Defendersは次の条件でラウンドに勝利する
- 爆弾が設置される前に、すべてのAttackersプレイヤーを排除する
- 爆弾が爆発する前に解除する
- ラウンド時間の終了時に少なくとも1人が生存しており、爆弾が設置されていない
- Attackersは次の条件でラウンドに勝利する
- ラウンド時間が終わる前に、すべてのDefendersプレイヤーを排除する
- ラウンド時間が終わる前に爆弾を設置し、Defendersに解除させない
- Attackersがラウンド時間終了前にgraffiti bombを配置すると、ラウンドのカウントダウンは40秒に設定される
- Defendersが爆弾を解除するには30秒が必要
- defuse kitを使う場合、解除時間は35秒
インストールと実行
- OS別の実行ファイルはlatest releaseから入手できる
- クライアントは
electron/フォルダでnpmコマンドを使って実行するcd electron/ npm install npm run dev - サーバーはComposerの依存関係をインストールした後、PHP CLIで実行する
composer install -a --no-dev php cli/server.php 2 # will start server waiting for 2 players to connect
貢献方法
- プロジェクトはhtml/css/js/phpを知っている貢献者を探している
- 3Dモデリング、テクスチャリング、アニメーションのスキルがある人も、pull requestでゲーム改善に参加できる
1件のコメント
Hacker Newsのコメント
PHPサーバーにElectronクライアントとはすごい。まともな名前空間すらなかった頃以来、PHPは長いこと触っていなかったけど、これは本当に驚きだ。
とんでもない労力だし、余暇にこのプロジェクトを手伝いたくなる。こういうぶっ飛んだプロジェクトがもっと増えるべき。
昔のPHPと、一部CMSでのPHPしか知らなかったので、リアルタイムプロジェクトは思い浮かばなかった。驚きだ。
socket_select()を使えば非同期サーバーを作れたし、この関数はPHP 4.1で追加された。https://www.php.net/manual/en/function.socket-select.php
15年前にもPHPにスレッドを追加するサードパーティ拡張はあったが、バグが多かった。
参考までに、クライアント側は
www/assets配下にある。https://github.com/solcloud/Counter-Strike/tree/master/www/a...threejs以外の依存関係はなく、TypeScriptもビルドパイプラインもない。ただコードを読むのが楽しい。
start.jsから見るとよい(https://github.com/solcloud/Counter-Strike/blob/master/www/a...)。サーバー側のエントリポイントは
server.php(https://github.com/solcloud/Counter-Strike/blob/master/cli/s...)。GitHubの言語統計を見ると**PHP 82%、JS 15%**にHTML/CSSが少し混ざっているけど、実際のクライアントは何で作られているのか気になる。
別のリポジトリにあるのか、それとも全部PHPで実装されているのか? もしそうなら印象的だ。
「低暴力ゲーム」という説明は、顔に銃を撃ち、爆弾を設置・解除し、撃たれながら生き残るゲームにしては笑える。
ついでに、投稿者がサッカー場を見たことがあるのかも気になる。十字マークや合っていない線がかなり見えるけど、サッカーが核心ではないので大きな問題ではなさそう。
社会が持つ最もインタラクティブなメディアの一つなのに、毎年何十億ドルもがまた別の「銃を撃つ男の銃撃ち:銃器エディション」に注ぎ込まれている。
少し脱線したが、このプロジェクトはやはりものすごく印象的だし、CSを何千時間もプレイしてきたので、こういうものを見るのは素晴らしい。
wwwで見られる: https://github.com/solcloud/Counter-Strike/tree/master/wwwクライアントはJavaScriptが多く、グラフィックにはThree.jsを使っている。
動物破壊の説明に自分は少し興奮してしまった。
十字マークへの指摘は気に入った。ユーモアの感覚が少し変なのかもしれないし、ヨーロッパで育ちながらヘルメットをかぶったアメフト選手が出てくるアメリカ映画を見ていたせいかもしれない。
さらに冗談寄りに言うと、PHP CLIインターフェースもある(https://github.com/solcloud/Counter-Strike/blob/master/cli/c...)。
ただし、ターミナルエミュレーターにかっこいいMatrix風フォントがないと、競技場に横たわる赤いドレスの女性は見えない可能性が高い。
とてもクール。余談だが、少なくともスクリーンショットは90年代のPCゲームExtreme Paintbrawlをかなり思い出させる。
子どもの頃は本当に好きだったが、数年後に「史上最悪のビデオゲームの一つ」と評価されていると知った。
https://en.wikipedia.org/wiki/Extreme_PaintBrawl
オープンソースのコードは良いが、ゲームに本当に必要なのはオープンなアートだ。ほとんどのオープンソースゲームは見た目と感触で苦戦する。
ライセンスファイルを追加できる?
Gabe、gooseman、Jessとのデートなら構わない。提案があれば共有してほしい。
複数の人がライセンスを入れるよう言ってから何時間も経っているのに、まだオープンソースではない。
オープンソースではないものをオープンソースと呼ぶのは本当に良くないし、自由・オープンソースソフトウェアに害を与える。
自由ソフトウェアでなくてもオープンソースではあり得るし、ライセンスがなくてもオープンソースではあり得る。所有者がコードを世界に開いて読めるようにしたなら、それはオープンソースだ。
これをオープンソースとして公開したのは素晴らしい。3Dゲーム開発をやってみたい人にとって、優れた出発点になる。
オープンソースのアセットを備えたCounter-Strike 1.6バージョンがあるといい。
QuakeのOpenArenaに似ているが、CS 1.6向けという感じ。
https://github.com/Velaron/cs16-clientの上に作ることもできそう。
本当に印象的なオープンソースゲームはいくつもある。ゲーム好きの友人グループのおかげで昨年BAR(Beyond All Reason)を知ったが、奥深さ、グラフィック、最適化の面で本当に印象的だ。
こういう未来は好きだ。
ディテールの水準と丁寧な実装に大いに感心している。操作の自由度と自動化の可能性が高いので、技術志向の人にはかなり合っている感じがする。
一緒にやりたいなら、ゲーム内ユーザー名は
[ZWD]_jaan。フレンド追加してくれれば基本概念を紹介できるし、まだ初心者ではあるが協力ゲームをしたり初心者ロビーを探したりできる。Luaでゲームを簡単に改造でき、自由・オープンソースゲームとしてはコミュニティもかなり大きそうだ。