# 환세취호전 Web Port Work

원본 1999년 PC 게임 자산과 실행 구조를 브라우저 런타임으로 옮기는 작업 폴더다. 현재 작업은 수동 검토/개선 모드이며, 특정 영역에 매몰되지 않도록 확정된 자료와 보류 자료를 분리한다.

## 빠른 시작

```bash
python3 tools/extract_fld.py
python3 tools/extract_wlk.py
python3 tools/extract_mlk.py
python3 tools/build_web_assets.py
python3 tools/verify_web_assets.py
python3 tools/serve_utf8.py 8013
python3 tools/verify_runtime_http.py --base http://127.0.0.1:8013
```

- 테스트 웹 포트는 `8013`으로 고정한다. 이미 사용 중이면 `fuser -k 8013/tcp`로 정리한 뒤 같은 포트로 다시 실행한다.
- `.md`, `.json`, `.js` 한글 응답은 `python3 tools/serve_utf8.py 8013`을 우선 사용한다.
- 단순 fallback은 `python3 -m http.server 8013`이지만 Markdown UTF-8 헤더가 빠질 수 있다.

## 현재 기준

- 기본 관리 홈은 `web/index.html`이고, 실제 게임 런타임은 `web/game.html?game=1`이다.
- `web/assets.html`은 전체 자산 목록, `web/map_review.html`/`web/map_gallery.html`은 필드 맵, `web/battle_background_review.html`은 전투 배경, `web/monster_review.html`은 몬스터/프레임 검토 화면이다.
- 필드 맵 CNS는 40-row 0-based, planar `layer0[]`/`layer1[]` 구조로 본다. `layer0`는 바닥, `layer1` low 4비트는 충돌, high bits는 캐릭터를 가리는 전경 occlusion mask다.
- 전투 배경은 정적 tilemap으로 조립하며 필드 맵처럼 layer1 전경을 덮지 않는다.
- 맵 전환 trigger, spawn 좌표, 필드 애니메이션, 이벤트/상호작용은 CNS가 아니라 EXE/event VM 해석 과제로 남아 있다.

## 확정 자산

- `PCMDATA.WLK`: 54개 PCM 효과음. 고정 오프셋/샘플레이트/비트뎁스 기준으로 추출한다.
- `MIDDATA.MLK`: 20개 SMF MIDI. 웹 재생은 GM soundfont 기반 MIDI 플레이어를 사용한다.
- `GENSE.FLD`: 377개 CNS. 이미지 CNS와 tilemap CNS를 분리해 리뷰 페이지에서 확인한다.

## 저장 데이터 보류

원본 `savedat*.dat` 분석은 현재 active 작업에서 제외한다. 이유와 재개 조건은 `docs/SAVEDATA_PARKED.md`에 둔다.

- 웹 런타임에서 public savedata/sample 로딩, URL query 로딩, 드래그앤드롭 로딩, slot scan은 비활성이다.
- `web/savedata_review.html`, `data/public_savedata/`, `data/targeted_savedata/`, 직접 savedata coverage/scan 산출물은 제거했다.
- 실제 EXE 이벤트/전투/상태 writer/reader가 먼저 잡히기 전까지 savedata offset이나 route proof를 다시 추적하지 않는다.

## 엔진화 계획

확정된 웹 구현은 추후 `web/engine/`으로 모듈화한다. 데모나 실제 게임 페이지는 리뷰 HTML의 임시 코드가 아니라 엔진 API만 사용하게 만든다. 기준은 `docs/ENGINE_EXTRACTION_PLAN.md`에 둔다.

## 검증

```bash
python3 tools/verify_web_assets.py
python3 tools/verify_runtime_http.py --base http://127.0.0.1:8013
python3 -m py_compile tools/verify_web_assets.py tools/verify_runtime_http.py
git diff --check --
```

브라우저 smoke가 필요하면 `xvfb-run -a python3 tools/verify_*.py --base http://127.0.0.1:8013` 형태로 각 리뷰/런타임 검증 스크립트를 실행한다.
