프로젝트 소개

singedTerra는 TypeScript로 처음부터 개발된 브라우저 기반 턴제 포격 게임으로, Wendell Hicken의 Scorched Earth(1991)에 대한 오마주입니다. 각도를 선택하고, 바람을 읽고, 파워를 설정하여 발사하며, 지형에 그 결과가 기록되는 클래식한 루프를 유지합니다. 단일 브라우저에서 2~4인 핫시트 매치로 플레이하거나, 공개 및 비공개 Supabase 룸을 통해 온라인으로 플레이할 수 있습니다. 핵심 메커니즘: 지형은 픽셀 단위 비트맵으로 구성됩니다. 폭발은 실제 구멍을 파내고, 지지되지 않는 지면은 붕괴하며, 탱크는 분화구 속으로 가라앉고, 흙 타입 무기로는 새로운 엄폐물을 구축할 수 있습니다. 각 라운드는 시드(seed) 기반이며 각 턴에는 결정론적인 바람 벡터가 부여되어 모든 클라이언트가 동일한 비행 경로를 계산합니다. 16종의 무기는 직사화기, 공중폭발, 도탄 폭발물, 네이팜, 지형 구축, 터널링 및 방어를 포함합니다. 이동 시 연료가 소모되며, 피해를 입히면 크레딧을 획득하여 여러 라운드에 걸쳐 탄약, 쉴드, 배터리 및 연료에 분배해야 합니다. 시각적 요소로는 제작된 탱크, 황혼의 전장, 탄도 측정 도구, 충격 조명, 화면 흔들림 및 합성 오디오가 포함됩니다. 탱크 차고: 모든 플레이어는 차고를 가집니다. Foundry, Ranger, Bulwark 또는 Jackal 섀시로 시작하여 기동성, 선체, 포탑 및 포신 부품을 조합해 커스텀 실루엣을 만들 수 있으며, 이는 로스터 미리보기에 표시되고 매치에 적용됩니다. 모드 및 넷코드: 컴퓨터 제어 캐릭터는 인간 플레이어와 동일한 결정론적 물리 엔진을 사용하며, 핫시트와 온라인 모드 간의 물리 엔진 차이는 없습니다. 핫시트는 HotSeatClient를 통해 브라우저에서 공유 엔진을 직접 실행합니다. 온라인 플레이의 경우, 모든 브라우저가 동일한 엔진 복사본을 실행합니다. Supabase가 룸 액션을 검증하고 시퀀스 번호를 할당하며, 정렬된 로그를 저장하고 Realtime을 통해 확정된 행을 브로드캐스트합니다. 정식 온라인 매치는 시드와 정렬된 액션 로그의 조합으로 이루어집니다. 게임 상태는 틱 서버에서 스트리밍되는 것이 아니라 로컬에서 재구성되므로, 고정 타임스텝, 시드 기반 랜덤성 및 리플레이 일관성이 설계 계약의 일부가 됩니다. 조작법: 화살표 키로 포신 각도와 파워를 조절하고, A와 D로 이동하며 연료를 소모합니다. Q는 선택된 무기를 순환시키며, Space 또는 Enter는 발사 또는 선택된 쉴드를 활성화합니다. G는 궤적 가이드를 토글하고, M은 합성 오디오를 음소거하거나 복구하며, F를 길게 누르면 현재 샷을 로컬에서 빨리감기 합니다. 터치 레이아웃은 키보드 덱을 조준, 파워, 주행을 담당하는 그룹화된 커맨드 덱으로 대체하며, 무기와 메뉴는 유틸리티로, 발사, 저장, 연료 및 무기고는 전술 레일에 배치됩니다. 데스크톱에서는 활성 탱크에서 바깥쪽으로 드래그하여 발사 없이 각도와 파워를 설정할 수 있습니다. 실행 및 검증: 이 프로젝트는 Node 24 LTS 라인의 Node 24.15 이상 버전과 npm이 필요합니다. npm install 후 npm run dev를 실행하면 localhost:5173에서 Vite 클라이언트가 제공되며, 핫시트 플레이는 백엔드 설정이 필요 없습니다. 온라인 플레이는 client/.env에 VITE_SUPABASE_URL 및 VITE_SUPABASE_ANON_KEY가 필요합니다. anon 키는 공개 클라이언트에 포함되지만, 행 수준 보안(RLS)과 Edge Function 검증이 서버 측 데이터를 보호합니다. 검증 명령어로는 npm run check(타입 체크 및 결정론적 엔진 하네스), npm run test:client(Vitest 클라이언트 및 DOM 테스트), npm run check:edge(Supabase Edge Functions용 Deno 테스트), npm run test:e2e(프로덕션 Chromium 레이아웃 및 게임플레이 체크) 및 npm run build가 있습니다. CI는 모든 풀 리퀘스트에 대해 동일한 핵심 게이트를 실행하며, shared/src/engine/ 하위의 변경 사항은 결정론적 리플레이를 유지해야 합니다. 저장소 구조 및 문서: client/는 Vite 앱, Canvas 렌더러, HTML HUD, 입력 및 로비를 포함합니다. shared/는 결정론적 엔진, 리플레이 로직 및 공유 타입을 포함합니다. supabase/는 Postgres 마이그레이션과 상태 없는 Edge Function 심판을 포함합니다. scripts/checks/는 결정론적 엔진 및 계약 하네스를 포함하며, e2e/는 프로덕션 브라우저 게임플레이 및 레이아웃 가드레일을 포함합니다. docs/는 플레이어, 아키텍처, 개발 및 프로젝트 기록을 포함합니다. 문서는 플레이 방법, 아키텍처, 개발 및 운영, UI 시스템 및 현재 사양을 다룹니다. 이 프로젝트는 MIT 라이선스로 배포되며, 원작 Scorched Earth 제작자와는 아무런 관련이 없으며 보증을 받지 않았습니다.