Penguin Down Everest — 절대 다치지 않는 펭귄으로 실제 에베레스트 지형을 내려오는 3D 타임어택 웹게임.
플레이: https://dorodo786-lang.github.io/everest-penguin/
저장소: https://github.com/dorodo786-lang/everest-penguin
GitHub Pages에 배포된 공개 릴리스입니다. 별도 설치나 계정 없이 최신 데스크톱·모바일 브라우저에서 바로 플레이할 수 있습니다.
에베레스트 정상부에서 출발해 발코니, 사우스 콜, 로체 페이스, 웨스턴 쿰, 캠프 I, 쿰부 아이스폴을 지나 베이스캠프까지 내려갑니다. 코스는 실제 지형과 OpenStreetMap의 Everest South Col 경로를 바탕으로 만든 약 13.09 km의 순차 체크포인트 타임어택입니다.
펭귄에게 HP, 산소, 추위 또는 사망은 없습니다. 추락과 충돌은 튕김, 회전, 감속과 체크포인트 복귀 시간으로만 기록됩니다. 지형 밖으로 나가거나 오래 끼이면 마지막 안전 지점으로 자동 복구되며 8초가 추가됩니다.
주요 기능:
- 4 m Pléiades 원본 DEM을 2×2 평균해 만든 실제 8 m 게임 지형
- 8개의 순차 게이트와 구간 기록 검증
- 눈·얼음·바위별 마찰, 60 Hz 고정 물리 스텝, 점프와 공중 조향
- 절차적으로 만든 펭귄, 바위, 점프대, 눈 입자, 그림자와 고도별 대기
- 한국어/영어 UI, 키보드와 터치 조작, 가로·세로 화면 대응
- 품질, 해상도, 그림자, 입자, 카메라 흔들림, 감도, 음량과 모션 감소 설정
- Web Audio로 실시간 합성하는 바람·활강·충돌·체크포인트 효과음
- 최고 기록, 최고 구간 기록, 최근 10회 기록, 설정과 6시간 내 이어하기를
localStorage에 저장 - 결과 텍스트와 현재 플레이 URL 복사
| 동작 | 키보드 | 터치 |
|---|---|---|
| 방향 조절 | A / D 또는 ← / → |
왼쪽 방향 버튼 |
| 제동·마찰 증가 | W 또는 ↑ |
제동 버튼을 누르고 있기 |
| 몸 낮추기·가속 | S 또는 ↓ |
가속 버튼을 누르고 있기 |
| 짧은 점프 | Space |
점프 버튼 |
| 체크포인트 복귀 | R |
복귀 버튼 |
| 일시정지 | Esc |
화면 상단 일시정지 버튼 |
터치 조작 중에는 페이지 스크롤과 확대가 차단됩니다. 세로 화면에서도 실행되지만 더 넓은 시야를 위해 가로 화면을 권장합니다.
- 고도 데이터: Étienne Berthier, Pléiades DEM of 23 March 2017 – Khumbu region, Nepal, Zenodo, DOI 10.5281/zenodo.6979691, CC BY 4.0
- 원본/게임 해상도: 4 m 원본 셀을 유효한 2×2 표본끼리 평균하여 8 m 셀로 변환
- 경로: OpenStreetMap relation 17822898, Everest South Col, © OpenStreetMap contributors, ODbL 1.0
- 범위: 86.8378729°E–86.9422365°E, 27.9513343°N–28.0187974°N
- 좌표계: WGS 84 / UTM zone 45N; 원본 고도 단위를 유지
저장소에는 원본 GeoTIFF를 넣지 않습니다. 재현 가능한 전처리 스크립트가 출처 파일의 체크섬을 검증하고, 코스 주변만 잘라 결측값·고립 스파이크를 검사한 뒤 little-endian UInt16 타일과 64 m 원거리 LOD를 생성합니다. 세부 처리, QA 수치, 재배포 조건은 DATA_SOURCES.md에 기록했습니다.
- TypeScript 5, Vite 8
- Babylon.js 9 / WebGL2
- HTML·CSS 기반 반응형 UI와 Web Audio API
- Vitest, ESLint, Playwright
- Python, NumPy, Rasterio, PyProj, Pillow 기반 DEM 전처리
- GitHub Actions와 GitHub Pages
서버, 데이터베이스, API 키 또는 유료 서비스는 사용하지 않습니다.
요구 사항:
- Node.js 22 이상과 npm 10 이상
- WebGL2를 지원하는 최신 Chrome, Edge, Firefox 또는 Safari
- 지형을 다시 생성할 때만 Python 3.11 이상
npm ci
npm run dev개발 서버는 기본적으로 http://127.0.0.1:4173/에서 실행됩니다.
프로덕션 빌드와 로컬 미리보기:
npm run build
npm run previewGitHub Pages와 같은 하위 경로를 로컬에서 확인하려면 다음처럼 Actions 환경으로 빌드하고 http://127.0.0.1:4173/everest-penguin/을 여세요.
GITHUB_ACTIONS=true npm run build
GITHUB_ACTIONS=true npm run previewnpm run terrain:verify
npm run typecheck
npm run lint
npm run test
npx playwright install chromium webkit
npm run test:e2e한 번에 실행하려면 브라우저를 설치한 뒤 npm run test:all을 사용합니다. 단위 테스트는 고정 타임스텝, 체크포인트 순서, 기록·설정 저장, 지형 파일 경로와 체크섬을 검사합니다. Playwright는 데스크톱 Chromium과 모바일 WebKit에서 로딩, 조작, 상태 전환과 브라우저 오류를 점검합니다.
지형 전용 검증기는 타일 크기·해시·경계 이음새, LOD, 8 m 해상도, 고도 범위, 경로 도달 가능성과 체크포인트 순서를 독립적으로 확인합니다.
원본은 약정된 공개 Zenodo URL에서 필요할 때만 내려받아 data/raw/에 보관되며 Git에서 제외됩니다.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r scripts/requirements-dem.txt
npm run terrain:build
npm run terrain:verify생성물은 public/data/everest/, 시각 검수용 미리보기는 docs/terrain-preview.webp에 기록됩니다. scripts/process_dem.py의 입력 해시나 전처리 상수를 바꿨다면 데이터 출처 문서와 변경 기록도 함께 갱신해야 합니다.
vite.config.ts는 GitHub Actions에서 base를 /everest-penguin/으로 설정합니다. 따라서 번들, CSS와 지형 타일 모두 프로젝트 사이트의 하위 경로에서 로드됩니다.
저장소의 Settings → Pages → Build and deployment → Source를 GitHub Actions로 설정합니다. 이후 main에 푸시하거나 Actions 탭에서 수동 실행하면 .github/workflows/deploy.yml이 다음 순서로 동작합니다.
- 잠금 파일로 의존성 설치
- 지형 무결성, 타입, 린트와 단위 테스트 검증
/everest-penguin/base로 프로덕션 빌드- Chromium·WebKit Playwright 테스트
dist/를 GitHub Pages artifact로 업로드하고 배포
배포 상태:
gh run list --workflow deploy.yml
gh run watch
gh api repos/dorodo786-lang/everest-penguin/pages| 경로 | 역할 |
|---|---|
src/game/ |
게임 상태, 고정 스텝 물리, 체크포인트와 진행 |
src/rendering/ |
Babylon.js 장면, 지형, 펭귄, 카메라와 효과 |
src/terrain/ |
manifest 로딩, 타일 스트리밍과 고도 표본화 |
src/input/ |
키보드·포인터 입력 |
src/ui/ |
화면, HUD, 설정과 결과 |
src/audio/ |
Web Audio 기반 절차적 오디오 |
src/storage/ |
버전이 지정된 로컬 기록·설정·이어하기 |
public/data/everest/ |
배포용 8 m 높이 타일, 64 m LOD와 manifest |
scripts/ |
DEM 생성과 독립 무결성 검증 |
tests/ |
Vitest와 Playwright 테스트 |
docs/ |
데이터 시각 검수 자료 |
- WebGL2와 Web Audio를 지원하는 최신 브라우저를 대상으로 합니다.
- 온라인 계정과 전 세계 리더보드는 제공하지 않으며 기록은 현재 브라우저 프로필에만 저장됩니다.
- 브라우저 저장소를 지우거나 시크릿 모드를 종료하면 로컬 기록이 사라질 수 있습니다.
- GitHub Pages는 정적 호스팅이므로 서버 권한이 필요한 기능은 포함하지 않습니다.
- 고도 표면은 실제 DEM이지만 설원 재질, 바위, 게이트, 점프대와 펭귄은 웹 성능을 위해 절차적으로 생성한 게임 요소입니다.
소스 코드는 MIT License로 배포합니다. 지형 데이터, OSM 경로와 제3자 라이브러리는 각 원 라이선스를 유지하며 MIT로 재허가되지 않습니다. 전체 고지 사항은 THIRD_PARTY_NOTICES.md를 확인하세요.
