- 직전 b27edb3 = 외곽선 없는 귀 조각을 머리카락으로 메움 → PD 반려(귀가 없어 어색)
- 이번 = front_action 의 귀(붉은 면 + 안쪽 음영 + 둘레 검은 외곽선 9 px)를 좌우 반전 · 눈 간격 비율 ×1.126 으로 맞춰
원래 귀 자리(중심 649,357 → 오른쪽 6 px) 머리카락 위에 얹음 · 생성 0(같은 원화의 다른 자세에서 오려 붙임)
- 크기 표(눈 간격) 변화 없음 · console error 0 · 테스트 = 그림만 바뀌어 미실행(직전 118/118)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- PD 「완벽한 비율 아니어도 됨(게임적 허용) · 기마는 보병·창병보다 조금 크게 · 너무 커지지 않게 조금 줄여」:
BalanceConfig.mountedArtMaxTop = 1.3(크기 표 mounted = 1 의 그려진 머리 끝 상한 = 표준 키 × 1.3) →
조운·조조군 기병 ×1.56 · 여포 ×1.82 · 장비 ×1.43 · 황건 기병 ×1.38 → 모두 ×1.3(탄 사람 = 보병의 약 0.8~0.9)
· 영웅 목록 카드는 그대로(머리 크기 같음)
- PD 「관우 옆얼굴이 깨진 것처럼 보임」: 원인 = front_idle 오른쪽 귀(붉은 조각 3,795 px)가 외곽선 없이 머리카락 사이에 끼어 있음
→ 그 조각만 둘레 머리카락으로 메움(cv2.inpaint TELEA · 검은 외곽선·얼굴 유지 · 재생성 없음) · ready·action 은 귀에 외곽선이 있어 그대로
- 테스트 118/118(기마 머리 끝 = 표준 키 × 상한 · 보병 < 기마) · console error 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1. 카드 축소 = 한 줄 4명(기준 1080 폭 · 칸 246 · 간격 16)
2. 해상도 대응 = UiAutoGrid(열 수 = round((폭 + 간격) ÷ (목표 칸 + 간격)) · 최소 3 · 칸 = 폭 ÷ 열 · 카드 = 원래 320×431 을 배율로) · 본문 = 화면 폭 전체 · 실측 1080×1920 = 4열 · 1536×2048 = 5열 · 1080×2400 = 4열 · 1080×2520 = 3열
3. 카드 유닛 20 % 작게(UnitPx 450 → 360)
4. 진영 = 원 배지 위·촉·오·군(UiKit.FactionBadge · 색 = 테마 fbadge_* · 촉 녹 · 위 청 · 오 적 · 군 짙은 회색) — 구 세력 깃발 대체(목록 · 편성 카드 공용)
5. 병과 = 단색 심볼(말 · 검 · 활 · 창 · 깃털부채) = Assets/UI/Symbols/cls_sym_*.png · 만든 법 = Tools/class_symbols.py(확정 납품 메달의 원본 투명 사물 그림 = 아트 R&D seed 21 의 형태 → 베이지 채움 + 안쪽 선 + 테두리 · 새로 그리지 않음) · UiKit.TypeSymbolId · 임포터 Symbols 폴더 Sprite
- 캡처 도구: 영웅 목록 1536×2048 · 1080×2400 · 1080×2520 + 열 수 로그 · 진영 확인용 위·오·군 영웅 1명씩(메모리 세이브만)
- 테스트 118/118(다른 세션 미커밋 전투 변경 포함 상태) · console error 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- PD 「영웅 리스트 캐릭터 크기 동일 · 말 탄 유닛도 보병·창병과 비슷한 비율」: 원인 = 그림마다 몸 키(bodyHeightPx)를 같은
높이로 맞춰 와서, 말까지 한 그림에 든 기마는 탄 사람이 절반 크기(눈 간격/키 0.09~0.12 vs 보병 0.14~0.20)
- 크기 표 Assets/Resources/Units/art_size.csv(SOT) = 눈 간격 자동 측정(Tools/unit_art_size.py · 얼굴 피부 안 어두운 구멍 2개)
÷ 말 안 탄 14종 중앙값 0.1687 → size_px(머리 크기가 표준인 유닛의 키) · mounted 열만 수동(장비 · 조운 · 여포 = 1)
- 게임: FrameAnimator 배율 = size_px 기준(기마 x1.38~1.82) · TopHeight = 실제 머리 끝 → Unit.ArtHeight(HP 바 · 머리 위 표시)
- 영웅 목록 카드: 같은 px 배율 → UnitPx 450 / size_px(머리 크기 같음 · 머리 끝 위치 그대로)
- PD 「화풍이 전혀 다른 유닛 폐기」 = Resources/Units/wei_* 5종 삭제(사마의 영웅 · 위군 = 도형 대체 · heroes.csv art id 유지)
- 테스트 118/118(+1 UnitArt_SizeTable_SameHeadSize_MountedRiderLikeFoot) · console error 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 보물 상자: 카드 뒤 무대(문양 흰 5 % + 바닥 그라데이션) · 카드 680×760 · 상자 320 + 흰 금빛 600 · 확률 칩 h60 글자 30 · 내용물 줄 = 카드 아래 어두운 띠 위 흰 글자 · 상자 행 선택 = 흰 테두리 깜빡 + 1.08 배 · 비선택 어둡게 25 % · 기본 선택 = 보유 > 0 인 첫 상자(직접 고르기 전까지)
- 연무장: 「이벤트」 = 카드 안 꼬리 칩(돌출 0) · 일일 던전 입장 칩 아이콘(달력) · 아이콘 칩 글자 왼쪽 정렬(InfoChip 공통)
- 내정: 게이지 800(명세) · 누적 시간 = 게이지 아래 줄
- 전투 HUD: 스킬 상태 = 한 줄 짧게(사용 가능 · 예약됨 · 쿨 n턴 …) · 뒤 금빛 560 · 위 안내 문장 = 어두운 칩 위 칸 맞춤(잘림 제거) · 유닛 판 y 150 · 칩 h56 글자 30 · HP 28
- 결과: 금빛 안쪽 한 겹 추가
- 검수 결함 1(내정 「전 규격 55~70 % 축소」)은 원본 1080×1920 캡처 실측(제목 띠 ≈ 69 · 수확 버튼 128)으로 축소 그림 환산 오류 판단 · 게이지 길이만 실제 차이 → 반영
- 테스트 117/117 · console error 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 보물: 목록 바탕 · 서브탭 · 보유 칸 = 보물 아이콘(납품 tre_* 없으면 기본 스탯별 팩 임시 tre_stat_* · 미보유 흰 25 % 실루엣) + 이름 띠 CardFrame01_Bottom · 등급 범례 칩 Round10 · 효과 줄 칩
상자 탭 = 포인트 띠 BannerFrame05 + 가는 주황 바 + 보상 상자 · 상자 카드 CardFrame03(상자 색 + 안쪽 + 광택) + 상자 300 + 뒤 금빛 · 등급 칩 + % 한 줄 · 화살표 아이콘 · 열기 Primary 노랑 + 보유 칩(없으면 회색) · 상자 행 ItemFrame 150 + 수량 칩 + 선택 FocusLine 깜빡
상자 색 = 코드 상수(ChestColor) → 테마 chest_<id> · 칸 색 chest_<id>_bg/deco/light/glow(C45)
- 연무장: 목록 바탕 · 카드 = 일러 자리(픽토그램 256 흰 25 % · 임시) + 요약 한 줄 + 어두운 판 칩 2줄(입장 아이콘 + 값 · 보상 칸 76) + 상태 칩 · 규칙 문장 → ⓘ 팝업 · 적장 토벌 「이벤트」 뱃지
- 내정 순찰: 목록 바탕 · 서브탭 · 섹션 「순찰」(레벨형 게이지 군량색 + 배지 「7h」) · 「시간당 수확」 스탯 칸 4(아이콘 64 · 값 44 Sen) · 「쌓인 보상」 타일 4 + 수량 칩 · 수확 Primary 녹 · 광고 2배 Secondary 하늘 + 횟수 · 즉시 Secondary 보라 + 보옥 비용
- 전투 HUD: 유닛 판(초상 원 마스크 + 이름 · 병종 원 · 체력 바 색 단계 · 공/방 칩 · 슬링/사거리 칩 · 상태) · 수 칩 = 아군/적 아이콘 + 숫자 · 스킬 사용 가능 = 뒤 금빛 호흡 · 기본 조작 문장 삭제(상황 안내 유지)
- 공통: Sen 에 「×」 글리프가 없어 수량은 「x」 · 회색 버튼 글자 흰 외곽선 · 금빛 틴트 α 1(Glow_Circle01 가운데 α 0.5 실측)
- 테스트 117/117 · console error 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 진행 띠(어두운 둥근 판 + 지도 핀 + 「제n장 이름」 + 진행 바 n/m) · 위 비네트(Glow_Panel01) · 아래 버튼 뒤 어두운 띠
- 좌우 세로 버튼 열(Button_Round03_Dark 166×150 · 아이콘 92 · 라벨 28): 임무 · 우편 · 동맹(준비 중 = 흐림 + 자물쇠) / 상점(거래 상점) · 상자(보물 상자 + 보유 수 알림) · 이벤트(준비 중)
- 아래 버튼 행: 편성 · 연무장 = Button_Circle122 원(진남) + 아이콘 76 + 라벨 30 · 출정 = Button_Tapered_White1/2/3 3층(붉은 옻칠 + 광택 + 하이라이트) 「출정」 64 + 칩 「챕터 n · n-m」
- 테마 행 17
테스트 117/117 · console error 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 영웅 목록: 「출전」 = 깃발 아래 왼쪽 가장자리 · 빈 카드 = 팩 CardFrame01_Empty 원본 그대로(Bg #303146 마스크 안 Bg_d_Pattern 타일 #2D2F42 · 테두리 #1A1B27 · 얼굴 #252738) — 이전엔 바탕을 #2E2F43 로 바꿔 무늬가 안 보였음
- 편성: 바탕·헤더 = 영웅 목록과 같음(진남 · 사선 칸 「출전 n/5」) · 프리셋 = 팩 서브탭(Button_Round10 + 광택 · 선택 붉은 옻칠) · 자리 5 = 영웅 목록 카드 × 0.70(빈 자리 = 빈 카드 + 「+ 빈 자리」 · 고른 자리 = 노란 테두리) · 자리 판 #282A3E · 전열/후열 평행사변형 칩 · 보유 목록 = 같은 카드 × 0.72 · 4열 · 레벨 높은 순 · 「장수 ▼」 전환 · 출전 칩
- CollectionCards.CardIn / EmptyIn(원래 크기 카드를 배율로 넣기)
- 테마: card_empty · card_empty_face 원본값 · formation_field · 서브탭 스킨 · subtab_off · row_front/back · select_line
테스트 117/117 · console error 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 일러 = 전 유닛 같은 배율(원본 px × 0.56) · 머리 끝(발 + bodyHeightPx · 무기 제외)을 카드 위 50 px 에 맞춤 → 머리 크기 같음 · 다리·말은 아래 띠 뒤 · 메타 없으면 칸 맞춤
- 왼쪽 위 = 진영 깃발 66(flag_<진영>) · 그 오른쪽 = 이름 45(긴 병사 이름 = 자동 축소 26~45) · 이름 아래 = 「출전」 꼬리 칩 · 오른쪽 위 = 병종 원 · 성장 가능 점 = 레벨 배지 오른쪽 위
- 진영 깃발 4장(蜀 · 魏 · 吳 · 群) = 아트 R&D 폴더 C:\ArtRnD\samguk_ui\flag_rank 원본(확정 영웅 상세 목업이 쓰던 그림 · 납품 json 아직 없음 → 정식 납품 시 apply_delivery 가 덮어씀) → Assets/UI/Samguk/flag_rank · 테마 신규 제작 치환 44 → 48
테스트 117/117(알림 점 위치 이동 전 실행 · 이후 변경 = 아이콘 위치만) · console error 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 3열 세로 카드 320×431 · 간격 22/20(팩 프리팹 GridLayout 값) · 보유 = 레벨 높은 순 · 미보유 자리 = 빈 카드(문양 + 얼굴 실루엣)
- 카드 = CardFrame01 바탕(등급색 · 마스크) + 그라데이션 + 빛 226 + 일러(전신 SD 를 키워 상반신이 카드를 채움) + 아래 띠 + 테두리 · 이름 45(왼쪽 위) · 병종 원 #35374E 58×60 · 레벨 배지 Icon_Badge03(최고 = 노랑) · ★ 42×45 오른쪽 아래 — 수치 = 팩 프리팹 RectTransform
- 헤더 = 제목 + 장수/병사 고르기 「장수 ▼」(팩 Property ▼ 자리) + 사선 칸 PanelFrame03_Oblique #D8E8FF 「보유/전체」 · 화면 바탕 #34374F(레퍼런스 실측) + 재화 바 뒤 띠
- 도감 버튼 삭제(미보유 = 빈 카드로 목록에 포함 · 도감 팝업은 영웅 상세 「정보」 안에 유지) · 「출전」 칩 삭제(레퍼런스에 없음)
- 테마: 스킨 oblique · 아이콘 arrow_down · lv_badge_max · 색 list_bg · oblique · count_text · card_empty_face · card_empty #2E2F43
- 캡처 드라이버: 목록 카드 등급색 확인용으로 메모리 세이브의 시작 영웅 등급을 다르게 둠
테스트 117/117 · console error 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 테마(설계서 §2-2 · §2-1): bg #033FA4 · paper #343549 · ink #FFFFFF · ink_soft · slot · dark 교체 + band_top(재화 바 뒤 띠) · 카드 스킨 7 · 카드 등급 색 18 · 보물 등급 색 25 + 미보유 5
- 영웅 카드(목록 · 편성 보유 행 · 도감 공용): 바탕·그라데이션·초상 뒤 빛·이름 띠·테두리 · 병종 원 · Lv 배지 · 세력 깃발 · 출전 꼬리 칩 · 등급 칩 · 미보유 = 빈 카드 문양 + 초상 어둡게
- 보물 칸: ItemFrame 5층(희귀 청 · 영웅 자 · 전설 주 · 신화 적 · 명장 금) + 아이콘(납품 없으면 첫 글자) + ★/조각 바 + 이름 판 · 미보유 = 진청 빈 칸 · 등급 색 = 테마 tre_*
- UiKit.Layer · ItemSlot · DropShadow · 헤더 부제 삭제(영웅 목록 · 보물)
- 밝은 하드코딩 바탕 → 테마 색(내정 7 · 연무장 2 · 거래 4 · 편성 1 · 보물 세트·상자) · 보물·내정 선택 탭 = 붉은 옻칠
테스트 117/117 · console error 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 영웅 상세: 등급 색 바탕(글로우 + 문양 타일 · 화면 전체) · 전투력 칩 · 일러(빛 원 · 그림자 · 좌우 밀기 80 px = 영웅 전환) · 장비 6칸(ItemFrame 5층 · 장비 등급 색 · 장착 체크 / 가방 초록 화살표 / 없음 흐림) · 레벨 행(배지 · 바 · 레벨업 녹 + 골드 · 승급 하늘 장비 n/6) · 이름 띠(세력 · 병종 원 · 등급 칩 · ★) · 스킬 패널(액티브 + 쿨 칩 · Lv 칩 · 행마다 레벨업 = 스킬서 · 골드 · 상한 = 회색 최대) · 메뉴 4버튼(정보 = 상세정보 + 도감 · 진화 = 조각 팝업 + 알림 점 · 각성 · 외형 = 준비 중) · 헤더 오른쪽 보유 n / 전체 칩 · 1080 폭 틀 가운데 고정
- 공통 크롬: 재화 바 띠 없앰(칩 · 아이콘 84 밖으로 · 재화별 + 단추) · 헤더 PanelFrame03 + 왼쪽 붙은 뒤로 · 하단 탭 TabFocus 솟음 판 + 광택 · 아이콘 104/118 · 라벨 = 선택 탭만
- UiKit.TypeKey · 캡처 드라이버 = 영웅 상세 등급 변형(그 영웅 장비 세트 등급) · 테스트 HeroDetail_Redesign_SkillRow_Swipe_Menu(117/117)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 데이터: Assets/Data/Gimmicks/stage_gimmicks.csv 455행(143 스테이지 · 1-1·1-2 없음 · 샘플 5 스테이지 16행 그대로) = 기획 tables/ 사본(생성·사전 검증 = 기획 tables/_stage_gimmicks_gen.py) → TKS/Import Gimmicks → StageGimmickTable(455)
- 테스트: Tests/PlayMode/StageGimmickPlacementTests 2 — 145 스테이지 GimmickLayer.Build · 편성 좌표 보정 이동 0 · 아군 스폰 반경 2 비움 · 해로운 지대 위 적 스폰 0 · 파괴 불가 장애물 사이 폭 2 통로 · 강마다 다리 · 기믹 많은 5 스테이지 적 턴 결정 ≤ 1.5 초
- 캡처: GimmickImporter.Capture -gimmickStages 1-10,2-10,… = 그 스테이지 시작 화면(전장 전체)만
- 실측: 컴파일 0 · 임포트 OK(정의 16 · 배치 455) · PlayMode 115/115 · console error 0 · AI 적 턴 132~299 ms
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 데이터: Assets/Data/Gimmicks/{gimmicks,stage_gimmicks,tutorial_tips}.csv + Assets/Data/AI/ai_weights.csv(기획 tables/ 사본) → 메뉴 TKS/Import Gimmicks(검증 · 오류 시 자산 불변) → Resources/Gimmicks/GimmickDb(16)·StageGimmickTable(16 + 팁 3) · Resources/AI/AiWeights(32)
- 레이어: GimmickLayer(전투 시작 = 스테이지 배치 · 배경 위 유닛 아래 · 원/사각/다각 · 색 도형 + 글자 · 내구 핍 · 강 콜라이더 = 다리 구간 제외 · 겹친 유닛 보정) · 장애물 = 병종별 내구 피해·튕김·창 목책 밀기·바위 굴림·기병 정지 · 투사체 pass/block/destroy · 폭약 광역(아군 포함)+밀기+불 · 책사 광역 덤불 제거 · 강 낙하
- 지대: 경로 스윕(독 1→2→3 % · 늪 ×2 · 불 10 % · 빙판 미끄러짐 · 고지 · 안개 · 군기 · 함정) · 양 진영 턴 시작 훅
- 규칙 개정: 보병 튕김 중 다른 적과 연쇄 1회 · 창병 반작용(spearRecoilRatio · 밀며 전진 폐기) · 기존 테스트 기대값 갱신
- 적 AI: Runtime/AI(Sim 가상 실행 · TacticalAI 후보·점수·난이도·턴 운영 · 1부 보스 액티브) · 조준선 = 가상 실행 예상 궤적·기믹 반응·지대 띠 · TKS/Gimmick Painter · 캡처 GimmickImporter.Capture
- 검증: 컴파일 0 · 플레이모드 113/113(신규 26) · console error 0 · 적 10기 턴 결정 62 ms
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Resources/Units/liubei·guanyu·zhangfei·zhaoyun·huangzhong: 3 클립 × 1장 · 공통 pivot · bodyHeightPx(대기 기준)
- 뒷모습(back_*)은 2차 납품 대기 → 위를 봐도 앞모습 대체 · 장비 3장·기병 출발 자세 수정본은 도착 시 덮어쓰기
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- UnitView.SetCharging(on) · Charging · 돌진 중 PlayAttack/피격 클립 무시(색만) · SetFacing 세트 전환 시 돌진 포즈 유지
- ActionResolver.Resolve: 루틴 전 SetCharging(true) · 끝나면 false(생존 시 대기)
- 테스트: 출발 자세·돌진 포즈·피격 포즈 유지·종료 뒤 대기 단언
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Resources/Units/liubei·zhangfei·zhaoyun·huangzhong = 스켈레탈 B단계 export(QA B 0) · guanyu = 정지 그림 유지(뒷모습 등판 B 1 → 수정 중)
- Resources/Units/cc_infantry·spear·cavalry·archer·boss_caocao · wei_infantry·spear·cavalry·archer·boss_simayi = 원화 세션 3·4차 납품(QA S4 PASS)
- UnitArtMeta.bodyHeightPx(리그 export = ppu · 정지 그림 = 불투명 폭 ≥ 30 % 행 범위) → UnitArtData.CharHeightWorld 우선 사용 — 스켈레탈 세션 안내(charHeightPx 는 무기 포함이라 긴 무기 인물이 작아짐) · 기존 meta 24개 갱신
- CLAUDE.md 아군 아트 설명
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- UnitView: FacingBack/FacingLeft · SetFacing(세로 성분 → back/front 세트 · 가로 성분 → flipX · 거의 0 인 축은 유지 · 세트가 바뀌면 같은 동작을 새 보기 클립으로 이어 재생) · 시작 = 아군 ↗ · 적군 ↘
- ActionResolver: Face() · Move/MoveStraight/Push/Bounce/플로우/기병 돌진/궁병 사격/밀린 아군 공격에서 호출 · 기병 복귀 Move(face:false)
- 테스트 Facing_FourWays_FollowsLastMoveDirection_BounceTurnsAround(유비 아트 4방향 + 튕김 뒤 아래 보기 + 밀린 적 위 보기)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>