Cards·시작덱·적 정의를 data/cards.json·data/enemies.json으로 분리, gen-slaydeck가 로드·검증·주입.
- data/cards.json: 카드 정의(name/cost/kind/damage|block/desc) + starterDeck
- data/enemies.json: 적 정의(name/maxHp/intents) + activeEnemy
- 생성기: JSON 로드 + fail-fast 검증(미존재 카드/적 id) + Lua 직렬화 헬퍼
- StartCombat·EnemyMaxHp·카드 미리보기·CombatHud 초기텍스트를 데이터에서 생성
- codeblock 출력은 기존과 동일(순수 리팩터), ui 미리보기는 카드 종류 순환 표시
- 검증: 데이터 1장 수치 변경→재생성 반영 확인, 결정성, fail-fast(exit1), 메이커 Play 정상
- 수치는 임시 placeholder, 추후 메이플 IP대로 카드/적 확장 예정
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
런타임 검증에서 발견된 시각 결함 2건 수정.
- 적 텍스트(이름/HP/방어/의도)를 EnemyBg 패널(y=300) 위로 정렬 (기존 center 배치로 패널과 분리됨)
- HP/방어/에너지 등 codeblock number Property를 string.format("%d")로 정수 표기 (Lua tostring의 .0 제거)
생성기 단일 소스에서 재생성. 메이커 Play로 정렬·정수 갱신 확인.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PlayCard가 토스트 대신 실제 효과를 적용하도록 통합.
- 카드 데이터에 damage/block 수치 필드 추가 (desc 파싱 폐기)
- 전투 상태: 플레이어 HP/Block, 적 HP/Block/의도(결정적 사이클)
- PlayCard: Attack→적 HP 감소(방어 우선 차감), Skill→플레이어 Block 증가
- EndPlayerTurn→적 턴(의도 실행)→다음 플레이어 턴, 승패 판정
- CombatHud UI: 적 패널(이름/HP/방어/의도)·플레이어 패널(HP/방어)·결과 텍스트
- 수치(플레이어80/적45/의도10·6·방8)는 임시 placeholder (D에서 캐릭터/몬스터별 외부화)
생성기 단일 소스(tools/gen-slaydeck.mjs)에서 생성. 결정적 출력 확인.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
기존 guid() prefix+4hex는 8-4-4-4-12 형식이 아니어서 Maker가 적용 거부(LEA-3054).
네임스페이스 바이트 기반 hex GUID로 변경하고, 기존 자식 id도 재생성 시 정규화.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MSW가 AlignmentOption으로 앵커를 결정하는 점을 반영해 컨테이너를 BottomCenter(6)로,
카드 내부 텍스트는 Center 기준 오프셋으로 교정. 카드 배경은 단색 채움으로 변경.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>