홈으로 돌아가기

cURL Doom: 터미널에서 HTTP를 통해 실행하는 Doom 게임

cURL Doom 프로젝트는 ANSI 반블록으로 터미널에서 HTTP와 cURL을 통해 Doom 플레이 가능. 두 가지 실행 모드 설명, raw 입력의 기술적 뉘앙스. cssDoom 및 Doom Over DNS와의 비교.

cURL을 통한 Doom 실행: 서버와 터미널
Advertisement 728x90

cURL을 통한 Doom: 의존성 없는 터미널 서버사이드 게임

개발자 Sawyer X가 cURL Doom 프로젝트를 공개했습니다 — Doom 프레임을 ANSI 반블록으로 렌더링하는 HTTP 서버로, 네트워크를 통해 cURL로 터미널에 전송합니다. 소프트웨어를 설치할 필요 없이 curl과 bash만 있으면 됩니다. 두 가지 실행 모드를 지원합니다: bash 스크립트로 간단한 버전과 순수 스트리밍 cURL.

간단한 실행 메커니즘

간단한 버전에서는 curl -sL http://localhost:3000 | bash 명령어를 사용합니다. 루트 경로에 대한 GET 요청은 SERVER 호스트가 대체된 play.sh 스크립트를 반환합니다. 이 스크립트는 루프를 설정합니다:

  • 각 키 입력마다 /tick에 요청.
  • raw 입력을 위한 stty 처리.
  • 대체 화면으로 전환.
  • 커서 제어 및 터미널 지우기.

같은 URL의 브라우저에서는 한 줄 코드로 된 최소 페이지가 보입니다.

Google AdInline article slot

쉘 없는 스트리밍 모드

"마조히스트적" 접근법: stty -echo -icanon min 1 time 0 && curl -sN -X POST -T - localhost:3000/play. 이는 양방향 스트림입니다:

  • 키 입력이 POST 요청 본문을 통해 위로 전송됩니다.
  • ANSI 프레임이 응답을 통해 아래로 내려옵니다.

중간 루프 없이 하나의 TCP 연결입니다. 표준 터미널 문제:

  • Enter까지 stdin 버퍼링.
  • 프레임 위에 입력 에코.

해결책: stty로 raw 모드 전환. 끝날 때 reset으로 복원.

Google AdInline article slot
# raw 모드 터미널 예시
stty -echo -icanon min 1 time 0
curl -sN -X POST -T - localhost:3000/play
reset

특이한 Doom 포트의 맥락

이 프로젝트는 비표준 프로토콜에서 Doom을 실행하는 실험 시리즈에 속합니다.

  • cssDoom (Nils Lenheer): canvas/WebGL 없이 CSS로 렌더링. 로직은 JS, 기반은 원본 id Software 소스 (GPLv2). 그래픽: 3D 공간, 스프라이트, 텍스처, 효과를 위한 transform과 preserve-3d를 사용한 div 요소.
  • Doom Over DNS (Adam Rice, 2026년 3월): Cloudflare DNS TXT 레코드를 통한 .NET 버전. WAD를 ~1964개의 레코드로 압축, PowerShell에서 실시간 압축 해제. 디스크 쓰기 없음, DLL을 메모리에 로드. RFC 1035 기대를 위반하지만 캐싱으로 전 세계에서 작동.

| Project | Protocol | Dependencies | Features |

|--------|----------|-------------|----------|

Google AdInline article slot

| cURL Doom | HTTP/cURL | curl, bash | ANSI 반블록, 양방향 |

| cssDoom | CSS/JS | Browser | transform을 통한 3D |

| Doom Over DNS | DNS TXT | PowerShell | 디스크 쓰기 없음, 글로벌 캐시 |

서버 기술 세부 사항

서버는 Doom 프레임을 실시간으로 생성해 터미널용 ANSI 반블록으로 변환합니다. 지연 없는 입력 처리를 지원합니다. 코드는 오픈소스로, 네트워크 렌더링 실험을 위해 포킹 가능합니다.

주요 포인트:

  • 최소 의존성: curl/bash만, 컴파일이나 라이브러리 불필요.
  • 두 가지 모드: 편의성을 위한 스크립트 모드, 프로토콜 순수성을 위한 스트리밍 모드.
  • ANSI 반블록으로 80x24 터미널에서 제법 괜찮은 렌더링.
  • 맥락: 네트워크 프로토콜에 대한 Doom의 유연성 시연.

이 프로젝트는 저수준 네트워크 상호작용, 터미널 프로토콜, 미니멀리스트 게임 개발을 공부하는 데 유용합니다.

— Editorial Team

Advertisement 728x90

다음 읽기