프로젝트 소개
Stellar Abyss는 Babylon.js, TypeScript 및 Vite로 구축된 데스크톱 지향 브라우저 실행 3D 우주 전투 프로토타입입니다. 함선, 환경, 우주 및 오디오는 독창적이고 절차적으로 생성되었으며, README에는 기존 프랜차이즈의 보호받는 함선, 캐릭터, 로고, 음악 또는 음향 효과를 사용하지 않았음이 명시되어 있습니다.
**스토리 및 설정**
이 게임은 독창적인 스페이스 오페라 설정을 배경으로 합니다. Order of the Threshold에서 추방된 항해사가 신호를 따라 Náris Belt로 들어가며, 그곳에서 이름 없는 군사 세력이 고향으로 돌아가는 통로를 지키고 있습니다. 시작 시 플레이어는 Arthur Comet과 Gael Ray 두 척의 함선 중 하나를 선택합니다. 정찰 비행은 전투기 편대와의 전투로 확대되며, 최종적으로는 대형 주력함인 Obelisk와 맞붙게 됩니다.
**제어 및 전투**
비행은 마우스로 조종하며, 화면 중심에서의 거리가 회전 강도를 결정합니다. 마우스를 중심으로 되돌리면 직진하며, 포인터 락(pointer lock)은 사용되지 않습니다. 키보드 바인딩은 크루즈 속도(W/S), 롤(A/D), 스트레이프(Q/E), 듀얼 레이저 펄스(마우스 왼쪽), 해금 후 플라즈마 캐논(마우스 오른쪽), 해금 후 에너지 럽처(R), 충전식 부스트(Left Shift), 짧은 무적 상태와 3초의 쿨다운이 있는 회피(Space), 타겟 선택 및 순환(F, Tab), 일시정지(Esc), 음소거(M) 및 진단 토글(F3)로 구성됩니다. 플라즈마는 범위 피해를 입히며, 에너지 럽처는 8초의 쿨다운을 가진 빠른 어뢰입니다. 창이 포커스를 잃으면 미션이 자동으로 일시정지됩니다.
**미션 구조**
총 6단계로 진행되며, 정찰 및 정찰병 요격에서 시작하여 더 큰 순찰대와 돌격 전투기를 거쳐 플라즈마 캐논 해금, 엘리트 전투기 상대 및 에너지 럽처 해금, 증원군 제거 순으로 이어집니다. 마지막으로 Obelisk의 하위 시스템(방어 포탑, 쉴드 제너레이터, 이온 엔진, 리액터)을 하나씩 파괴한 후 연쇄 반응을 일으켜 미션을 완료합니다.
**규칙 및 피드백**
쉴드는 피해를 입은 후 5초 뒤에 재생성되지만, 선체 무결성은 재생성되지 않습니다. 전투기를 파괴하면 쉴드 7포인트가 회복됩니다. 소행성과 주력함은 충돌 피해를 입히지만 즉사하지는 않습니다. 테스트 비행(Test Flight) 옵션을 사용하면 이동, 무기, 피해 및 쿨다운은 그대로 유지한 채 미션 시간만 4배속으로 진행할 수 있습니다.
**인터페이스 및 현지화**
게임은 영어로 시작하며 메뉴와 일시정지 화면에서 EN / PT-BR 선택기를 제공하고, 선택 사항은 브라우저에 저장됩니다. 설정상의 고유 명사는 번역되지 않은 상태로 유지됩니다.
**실행 및 빌드**
로컬 개발에는 Node.js 22.12+ 또는 Node.js 24가 필요합니다. 문서화된 흐름은 `npm install` 후 `npm run dev`이며, `http://127.0.0.1:5173`에서 서비스됩니다. `?renderer=webgl&debug`를 추가하면 WebGL2가 강제 적용되고 진단 기능이 활성화됩니다. 프로덕션 빌드는 `npm run build`와 `npm run preview`로 서비스할 수 있습니다. `.github/workflows/deploy.yml`의 GitHub Actions 워크플로우는 `main` 브랜치에 푸시될 때 `dist/`를 빌드하여 GitHub Pages에 게시하며, README에는 해당 워크플로우가 GitHub Pages에 필요한 읽기, Pages 쓰기 및 배포 ID 권한만 요청한다고 명시되어 있습니다.
**아키텍처**
코드는 코어(엔진, 루프, 입력, 에셋), 플레이어(비행 및 체력), 적(AI 및 진형), 무기(풀링된 투사체 및 충돌), 월드(우주 환경), 이펙트, 오디오, 진행도, 보스 및 UI 모듈로 구성되어 있습니다. 게임플레이 상수는 `src/config.ts`에 있으며, 전투 및 진행도 테스트는 `tests/`에, 브라우저 스모크 테스트는 `scripts/`에 있습니다. `AssetManager.ship()`은 임시 프리미티브 모델을 생성하며, `AssetManager.loadModel(url, parent)`는 향후 시각적 교체를 위해 glTF/GLB를 로드합니다. 모델은 로컬 +Z 방향을 향하며, 플레이를 위해 외부 모델이 필요하지 않습니다. WebGPU를 우선 시도하며 실패 시 자동으로 WebGL2로 폴백합니다.
**검증**
문서화된 확인 절차는 `npm test`, `npm run build`, `npm run dev` 및 `node scripts/browser-smoke.mjs`입니다. 스모크 테스트는 로컬 서버와 Chrome이 필요하며 시작, 가속, 부스트, 사격 중 조종, 실제 처치, 일시정지, 재개, 재시작 및 브라우저 오류를 다루며 스크린샷을 임시 경로에 저장합니다. README에 따르면 6개의 로직 테스트를 통과했으며, Chrome/WebGL2 검증을 통해 사격, 사격 중 조종, 점수 포함 3회 처치, 일시정지, 재개, 재시작 및 런타임 오류 없음을 확인하고 프로덕션 빌드를 통과했습니다. 다만, 해당 환경에서 WebGPU 및 주력함 전투의 전체 브라우저 플레이through는 검증되지 않았음을 명시하고 있습니다.
**상태 및 제한 사항**
프로토타입은 승리, 패배, 재시작 상태가 포함된 하나의 완전한 미션을 가지고 있습니다. 함선과 오디오는 기능적인 절차적 플레이스홀더로 설명됩니다. 예술적 텍스처, LOD, 터치 제어 및 게임패드 제어는 아직 구현되지 않았으며, 메인 번들 크기는 약 6.3MB(gzip 시 1.38MB)로 로딩 최적화가 대기 중입니다. 목표 성능은 적절한 데스크톱에서 60 FPS이며, WebGL2를 참조 진단 경로로 사용하고 Google Fonts에 대한 로컬 폴백을 제공합니다. 진단 기능으로는 FPS, 위치, 속도, 활성 적, 투사체, 활성 메시 및 미션 시간을 표시할 수 있습니다.
**기여**
기여는 `jeffotoni/deathstar`에 대한 포크 및 풀 리퀘스트(PR)를 통해 가능합니다. README에서는 기여자가 공식 저장소에 기능 브랜치를 직접 푸시하지 말 것, Conventional Commits를 사용할 것, PR에서 무관한 리팩토링을 제외할 것, 그리고 시각적 또는 게임플레이 변경 사항에 대해 검증 명령과 스크린샷 또는 녹화본과 함께 플레이어 관점의 결과를 설명할 것을 요청합니다. 또한 `main` 브랜치 보호, Actions 권한의 기본 읽기 전용 유지, 신뢰할 수 없는 포크 코드 내 비밀 정보 포함 금지, 자격 증명 또는 생성된 빌드 출력물 커밋 금지, `SECURITY.md`에 따라 취약점을 비공개로 보고할 것을 권장합니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.