main의 5개 PR(#62 exhaust+tooltip, #66 dex/thorns, #67 캐릭터 덱버튼 제거,
#68 스크롤바, #69 표창카드)을 모듈화 브랜치에 병합.
충돌은 tools/deck/gen-slaydeck.mjs 한 파일 — main이 그 단일체를 콘텐츠 변경
(구조/emit/top-level 상수는 불변)한 반면 본 브랜치는 모듈로 재구조화.
해결: main 버전(theirs)을 취해 **콘텐츠 마커 기반으로 재모듈화**(라인인덱스 X,
이름 자동 파생) → lib/data·lib/ui-helpers + hud/*.mjs 16종 재생성.
검증(손실 0): 재모듈화 생성기 출력이 origin/main 산출물과 **바이트 동일**
(diffcheck: ui/DefaultGroup.ui·SlayDeckController.codeblock IDENTICAL).
common.gamelogic은 origin/main 그대로 채택(유일 차이는 main의 stale `.0` 정수표기
— origin/main 원본 생성기도 정수를 만듦을 확인). 미러 테스트 sim-balance·rogue-map 통과.
RULES.md는 §1(모듈구조)+§4/§7(main) 자동 병합.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
DeckHud/DeckInspect/DeckAll/Combat/Reward/Map/Shop/Rest/Treasure/JobChoice/
JobSelect/Lobby/Board/SoulShop를 각 build 함수로 분리, upsertUi는 emit 한 줄로.
전문 상수(PANEL_BG·TYPE_KO)는 해당 블록에 포함. 산출물 무변경(diffcheck IDENTICAL).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- data/characters.json 신설(전사/법사/도적 초상화 RUID 단일 소스), 생성기 로드·검증
- CharacterSelectHud: 단색 박스 → 카드 전체 캐릭터 이미지(Art 풀블리드 258×318)
+ 하단 이름 배너(NameBanner), Portrait/Desc 제거
- RenderCharacterSelect: 선택 시 카드 테두리 금색(Art 6px 인셋 뒤로)
- BackButton 추가 + BindMenuButtons 바인딩 → ShowLobby(로비 복귀), prop CharBackHandler
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
회귀: 로비 follow(ConfineCameraArea=false)로 푼 공유 카메라가 전투맵에서 플레이어 중심으로 보임 — MapCamera의 1회성 true-set으론 재confine 안 됨. StartCombat에서 플레이어가 전투 위치(-6) 정착 후 false→true '킥'(0.2s)으로 재confine해야 StS2(플레이어 좌·몬스터 우) 복원(맵 로드 시점엔 텔레포트/낙하 중이라 바운드 오계산). data/camera.json 값 사용, 로비 follow 불변.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
로비 루트에서 script.MapCamera 제거(고정 framing 억제 해제) + LobbyMobility가 진입 시
ConfineCameraArea=false·ScreenOffset(0.5,0.5)·Zoom 90으로 플레이어 추종 카메라 설정.
MSW 카메라는 기본 follow이고 ConfineCameraArea=true가 그걸 억제하므로 false가 핵심.
검증: 로비 우측 이동 시 플레이어 중앙 유지+배경 스크롤, 런 시작→map01 Confine=true 고정, 복귀→follow 복원(누설 없음).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- OnBeginPlay: 공격 키(Ctrl, 로비 한정) 바인딩
- ShowLobby→GoLobbyMap: 월드 시작·런 종료 시 로비 맵 텔레포트
- OnLobbyNpcInteract(id): 월드 NPC→기존 기능 패널 디스패치
- StartRun: 1막 진입 시 map01 물리 텔레포트(BuildMonsters CurrentMapName 필터 대응)
- LobbyHud: 버튼-행 제거, 투명·비레이캐스트화(맵 노출·클릭 통과), 영혼/승천 미니 정보바만 유지
- BindLobbyButtons: NPC 바인딩 제거
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
로비에서 푼 이동(WalkAcceleration)이 텔레포트 후 전투맵에 누설돼도 PlayerLock이 맵 로드 시 0으로 재설정해 확실히 잠금. 정찰로 WalkAcceleration이 실제 이동 레버임을 확인.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>