HN 공개: 오픈 소스 Counter-Strike 유사 게임
(github.com/solcloud)- Counter-Strike: Football은 두 축구 팬 팀이 라운드 승수를 겨루는 경쟁형 멀티플레이어 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은 두 축구 팬 팀이 상대보다 더 많은 라운드를 이기는 것을 목표로 싸우는 경쟁형 멀티플레이어 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로 게임 개선에 참여할 수 있음
댓글과 토론
Hacker News 의견들
-
PHP 서버에 Electron 클라이언트라니 굉장함. 제대로 된 네임스페이스도 없던 시절 이후로 PHP를 오래 만지지 않았는데, 이건 정말 놀랍다
엄청난 노력이고, 여가 시간에 이 프로젝트를 돕고 싶어짐. 이런 미친 프로젝트가 더 많아져야 함- 재미있게 만들 수 있는 게임을 만들라는 말이 떠오름
- 나도 비슷하게 느낌. PHP로 작성된 실시간 게임 서버가 정말 흥미롭다
예전 PHP와 일부 CMS에서의 PHP만 알고 있었지, 실시간 프로젝트는 떠올리지 못했는데 놀랍다 - Electron이라면 난 패스
- 사실 15년 전에도 만들 수 있었음. 어릴 때 PHP와 Visual Basic 정도만 알아서 PHP로 CLI 서버를 만들곤 했음
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로 구현된 건가? 그렇다면 인상적임
“저폭력 게임”이라는 설명은 얼굴에 총을 쏘고, 폭탄을 설치/해체하고, 총 맞는 와중에 살아남는 게임치고는 웃김
덧붙여 OP가 축구장을 본 적이 있는지도 궁금함. 십자 표시와 어울리지 않는 선이 꽤 보이지만, 축구가 핵심은 아니니 크게 중요하진 않을 듯- 꼭 쏴야 한다고 정해진 건 아님. 카리스마 루트로 가서 테러리스트를 설득해 폭탄 설치를 포기하게 만들 수도 있음
- 폭력적인 비디오게임 자체를 도덕적으로 반대하진 않지만, 대형 예산 게임에 창의성이 더 많았으면 함
사회가 가진 가장 상호작용적인 매체 중 하나인데, 매년 수십억 달러가 또 다른 “총 쏘는 남자의 총쏘기: 총기 에디션”에 들어감
잠깐 샛길로 샜지만, 이 프로젝트는 여전히 엄청 인상적이고 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- 친구가 이 게임을 갖고 있었고, 같이 정말 재미있게 했음
- 사랑은 참 특정한 감정이라, 그 1위 자리를 두고 언제든 싸울 수 있음
-
오픈소스 코드는 좋지만, 게임에 정말 필요한 건 오픈 아트임. 대부분의 오픈소스 게임은 외형과 느낌에서 고전함
- 동의함. 하지만 프로그래밍과 아트를 둘 다 잘하는 건 꽤 드문 능력이고, 거기에 오디오와 애니메이션 영역도 따로 있음
-
라이선스 파일을 추가할 수 있나?
- 가능은 하겠지만, 변호사가 아니고 Gaben과 그의 변호사들과 데이트하고 싶지는 않음
Gabe, gooseman, Jess와의 데이트는 괜찮음. 제안이 있으면 공유해주면 좋겠음
- 가능은 하겠지만, 변호사가 아니고 Gaben과 그의 변호사들과 데이트하고 싶지는 않음
-
여러 사람이 라이선스를 넣으라고 한 지 몇 시간이 지났는데도 아직 오픈소스가 아님
오픈소스가 아닌 것을 오픈소스라고 부르는 건 정말 괜찮지 않고, 자유·오픈소스 소프트웨어에 해가 됨- 오픈소스가 맞음. 누구나 읽을 수 있게 저장소에 소스가 바로 있음
자유 소프트웨어가 아니어도 오픈소스일 수 있고, 라이선스가 없어도 오픈소스일 수 있음. 소유자가 코드를 세상에 열어 읽게 했다면 오픈소스임 - 그러면 뭐라고 불러야 하나? 소스 공개?
- https://github.com/solcloud/Counter-Strike/blob/master/LICEN...
- “제작자님, 오픈 소프트웨어에는 적절한 라이선스가 중요합니다. 그렇지 않으면 법적 문제가 생길 수 있어요”라고 말하면 됨
- 그래 그래, 내가 오픈소스에 해를 끼치고 있네. 오픈소스에 사과함
- 오픈소스가 맞음. 누구나 읽을 수 있게 저장소에 소스가 바로 있음
-
이걸 오픈소스로 공개한 건 멋짐. 3D 게임 개발을 해보고 싶은 사람들에게 훌륭한 출발점이 됨
-
오픈소스 에셋을 갖춘 Counter-Strike 1.6 버전이 있으면 좋겠음
Quake의 OpenArena와 비슷하지만 CS 1.6용인 느낌
https://github.com/Velaron/cs16-client 위에 만들 수도 있을 듯 -
정말 인상적인 오픈소스 게임들이 꽤 있음. 게임을 좋아하는 친구 그룹 덕분에 작년에 BAR(Beyond All Reason)을 알게 됐는데, 깊이와 그래픽, 최적화 면에서 정말 인상적임
이런 미래는 마음에 듦- 몇 주 전에 BAR를 알게 됐고, 이제는 딱히 게이머도 아니고 실시간 전략 게임을 좋아한 적도 없는데 벌써 게임 내 시간이 50시간을 넘었음
디테일 수준과 꼼꼼한 구현에 크게 감탄함. 제어 수준과 자동화 가능성이 높아서 기술 지향적인 사람들에게 꽤 잘 맞을 느낌임
같이 하고 싶다면 게임 내 사용자명은[ZWD]_jaan임. 친구 추가하면 기본 개념을 소개해줄 수 있고, 아직 초보지만 협동 게임을 하거나 초보 로비를 찾을 수 있음 - BAR는 정말 훌륭함. Total Annihilation/Supreme Commander 같은 게임을 좋아한다면 꼭 확인해볼 만함
Lua로 게임을 쉽게 수정할 수 있고, 자유·오픈소스 게임치고는 커뮤니티도 꽤 커 보임
- 몇 주 전에 BAR를 알게 됐고, 이제는 딱히 게이머도 아니고 실시간 전략 게임을 좋아한 적도 없는데 벌써 게임 내 시간이 50시간을 넘었음