← 프로젝트 프로젝트 케이스 스터디

Q3DM17FFA2D

저작권을 정면으로 존중하며 "퀘이크의 손맛"을 되살린, 파일 0개의 브라우저 아레나

공허 위 부유 데크로 이루어진 틸트 탑뷰 아레나에서 관전 모드로 경기를 지켜보는 인게임 화면
역할
1인 개발 — 기획·레벨/시스템 디자인·클라이언트/서버 개발·라이선스 리서치 전반
기간
2026년 7월, 약 3일 집중 개발 (킥오프 → 실기기 피드백)
스택
Three.js/WebGL · Node.js 60Hz 권위 시뮬 · WebRTC(werift)+WebSocket 폴백 · 델타 스냅샷+deflate · node:sqlite·WebAuthn · Web Audio·speechSynthesis · Cloudflare Tunnel/TURN/Turnstile

배경과 목표

Quake III Arena의 전설적인 FFA 맵 “Q3DM17 — The Longest Yard”를 브라우저에서 8~16인이 실시간으로 겨루는 트리뷰트입니다. 목표는 세 가지 제약을 동시에 만족시키는 것이었습니다. (1) 원작의 손맛과 레벨 흐름을 진하게 환기할 것, (2) 무료·소스 비공개로 배포하되 법적으로 문제 여지가 거의 없을 것, (3) 링크만 열면 즉시 관전·참여되는 웹 접근성을 확보할 것. 이 셋은 서로 당기는 힘이라, 프로젝트의 거의 모든 결정이 그 긴장 위에서 내려졌습니다.

디자인 축

저는 이 프로젝트를 세 축의 교차점으로 설계했습니다. 원작 고증은 공개 영상·위키 스크린샷·레벨 디자인 문헌만으로 비율과 위상을 측정하는 “거의 클린룸” 재구성으로 접근했습니다 — 원본 .bsp/pak0.pk3는 열지 않는다는 원칙을 불변으로 두고, 딥리서치로 확정된 사실(무기고는 Shotgun/Rocket/Railgun뿐, “Railgun porch” 저격 거점, 다리 중앙 텔레프래그 등)과 미확정 추정을 좌표 주석에서 구분했습니다. 웹 접근성은 관전을 기본 상태로 두는 온보딩(클릭=시점 전환, 봇 게이트 통과 후 난입)으로 풀었고, 절차적 생성은 라이선스 리스크를 구조적으로 낮추는 축이자 초경량 다운로드라는 부가 이득을 겸했습니다.

핵심 시스템과 설계 결정

  • 맵 재현 충실도: 다리+허리높이 커버, 하층 5패드 복합체, 텔레포터 3개소 수렴, 원작 특유의 “가장자리 스폰”까지 반영했습니다. A/B 측정으로 림 스폰이 밸런스 비용 없이 원작 감성을 준다는 것을 확인했습니다.
  • 무기 밸런스: Q3 원전 8종 수치는 손대지 않고, 셀프플레이 시뮬(120 봇매치-분)로 상대 효율 서열이 Q3 통념과 일치함을 검증했습니다. 유일한 이상치 Void Cannon은 수치 대신 **희소성(리스폰 30초)**으로 잡았습니다.
  • 조준 보정: 틸트 탑뷰는 커서 하나로 pitch를 줄 수 없다는 구조적 난점이 있었습니다. 이를 원작 훼손이 아닌 “조작계 번역”으로 규정하고, 커서 자석·히스테리시스(coyote aim)·수직 오토피치·발사체 도달 마커를 전부 클라이언트에만 넣어 서버 판정을 불변으로 유지 — 밸런스를 건드리지 않고 체감만 올렸습니다.
  • 8~16인 실시간: 부팅 시 봇 8명 상시 FFA, 사람이 오면 최저 점수 봇을 대체하고 16명까지 확장, 이탈 시 백필합니다.

기술 하이라이트

런타임 로드 파일이 0개입니다. 지오메트리·텍스처·사운드·아나운서를 전량 코드로 생성(절차 지오메트리·캔버스 텍스처·Web Audio 신디시스·TTS)했습니다. 넷코드는 권위 60Hz 시뮬 위에 예측+조정, 지연보상 되감기, ack 기반 델타 스냅샷, WebRTC를 얹었고, 전송은 직결 UDP→TURN 릴레이→터널 WS 3단 폴백으로 방화벽 뒤에서도 연결됩니다.

현황

공개 배포되어 실기기 QA를 거쳤습니다. 프로젝트는 id Software/Bethesda/Microsoft와 무관한 비공식 팬 오마주이며, 에셋 0·원작 파일 미사용을 유지합니다. 게임명에 남는 상표 근접 리스크는 로딩·메뉴의 비제휴 고지문으로 완화하고, 공개 확대 시 재고 대상으로 문서에 기록해 두었습니다.

← 프로젝트로 돌아가기