Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
ba6bd67
곤충게임: 스토리 영상(mp4) 재생 경로 신설 + 11편 편성 — 1막 ch2~5·2막 ch8~12는 컷신이 하나도 없었다
kimsungsugit Sep 9, 2026
344c318
곤충게임: 스토리 영상 audit — 프리즈 타이머가 준비 시간을 안 셌다(23s > 20s) + P2 5건
kimsungsugit Sep 9, 2026
8accf36
곤충게임: 오프닝 다시보기가 컷신·스토리 영상 위에서 시작될 수 있었다 — CanReplay에 모달 가드
kimsungsugit Sep 10, 2026
725a373
곤충게임: 스토리 연출 보강 — 오프닝 영상·대사 무대·전투 컷인·라온 라이벌·수문장 배지·챕터 영상 11편
kimsungsugit Sep 28, 2026
ea7d281
곤충게임: 전투 액션감 — 히트스톱·넉백·연출 카메라·외침·합성 울음, 레이드 합체공격 재연출
kimsungsugit Sep 28, 2026
15225ab
곤충게임: .gitignore — QA 캡처 산출물·로컬 압축본·테스트 결과 사본 제외
kimsungsugit Sep 29, 2026
ed5092d
곤충게임: 마을 이야기·필드 비주얼 개편 + 필드 개체군 영속(시간 리젠)·리전 공통 희귀도·빌드 셰이더 변형
kimsungsugit Sep 29, 2026
ed617bb
곤충게임: 캐릭터·의상 개편 — 몸체·얼굴·머리, 의상 입체 형태+패턴 텍스처, 조건 해금, 의상 창·생성 화면·상점
kimsungsugit Sep 30, 2026
d18f746
곤충게임: 캐시샵 상자 탭 잘림·의상 창 하단 띠 정리
kimsungsugit Sep 30, 2026
515acec
곤충게임: 나의 섬(개인 섬 하우징) + 포획 레벨 제한·캐릭터 EXP·훈련 가격 개편, 필드 UI 정리
kimsungsugit Oct 2, 2026
b17e60a
곤충게임: 기기 보고 3건 — 섬 안내 배너 가림, 상대 버프 이펙트 위치, 초원 울타리 통과
kimsungsugit Oct 2, 2026
52d1ee1
곤충게임: 본편 목표 `!` 표식 — 머리 위·지도·미니맵
kimsungsugit Oct 2, 2026
0176879
곤충게임: 포획 미니게임 3종(무작위) + 도입부 개편 — 숙제 빼기·미리 세기·라온 내기·확정 조우·연출
kimsungsugit Oct 2, 2026
f7925b5
곤충게임: 「챔피언의 꿈」 프롤로그 — 챔피언전 → 꾸며진 섬 걷기 → 깨어남
kimsungsugit Oct 2, 2026
83ce1d6
곤충게임: 낮·밤·날씨(눈 포함) + 조건부 서브 퀘스트·외전 + 꿈 도입 영상 + 스토리 대사 다듬기
kimsungsugit Oct 3, 2026
2c7310f
곤충게임: 스토리 쉽게 다시 쓰기 + 이야기 전투 + 전투 체감 + 그림책 영상 15편 + 진짜 치명타
kimsungsugit Oct 5, 2026
1b28a5e
곤충게임: 마을 이야기 48장면 쉬운 말로 다시 쓰기 — 본편과 같은 규칙(초등 고학년)
kimsungsugit Oct 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .claude/agents/architect.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,4 @@ GameConstants → 전체 (상수 변경 시 밸런스 전체 영향)
## 구현 순서 (의존성 기반)
## 리스크/주의사항
```
`Assets/Editor/GamePlayEntry.cs` - Hub로 연 에디터의 기본 Play 시작 씬과 개발용 실행 메뉴
34 changes: 33 additions & 1 deletion .claude/agents/battle-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,27 @@ tools:
### Battle 모듈 (전체)
- `Assets/Scripts/Battle/InsectBattleController.cs` - 1v1 턴제 배틀 로직
- `Assets/Scripts/Battle/BattleCaptureChanceCalculator.cs` - 1v1 승리 후 포획 확률·롤 판정
- `Assets/Scripts/Battle/SandboxBattleRules.cs` - 샌드박스(챔피언의 꿈) 전투 규칙 — 피해 배율·HP 하한·3~4턴 길이. 컨트롤러 쪽 `StartSandbox`/`IsSandbox`가 이걸 건다
- `Assets/Scripts/Battle/InsectBattleStats.cs` - 스탯 계산/데미지 적용
- `Assets/Scripts/Battle/InsectBattleUIController.cs` - 배틀 UI 브릿지
- `Assets/Scripts/Battle/RaidBattleController.cs` - 5v1 레이드
- `Assets/Scripts/Battle/BattleArenaController.cs` - 배틀 아레나 ※비주얼은 visual-dev
- `Assets/Scripts/UI/BattleScreenUI.Impact.cs` - 1v1 연출용 타격 정보(HitCue: 세기·마무리·빗나감)를 전투 결과에서 만든다 ※연출은 visual-dev
- `Assets/Scripts/UI/RaidBattleUI.Impact.cs` - 레이드 타격 정보·보스 예고 호출·3D 좌표 변환 ※숫자 배치는 ui-dev, 연출은 visual-dev
- `Assets/Scripts/Battle/RaidRoundResolver.cs` - 레이드 동시 라운드 판정(순수 정적). 1v1과 달리 버프 만료가 없다 — 의도된 divergence, 상한은 `MaxBuffStacks`
- `Assets/Scripts/Battle/RaidRoundModels.cs` - 레이드 라운드 결과 모델(순수 데이터). 슬롯 피해 배열에 세터를 만들지 말 것 — 컨트롤러가 따로 합산해 이중 가산이 된다
- `Assets/Editor/LedgerDuelProbe.cs` - 장부 압박이 실제 보스전에서 도는지 배치모드 확인 ※순수부는 테스트가 잡고, **배선 누락은 무증상**이라 이쪽이 필요하다
- `Assets/Scripts/Battle/RaidBossForms.cs` - 체력에 따라 모습을 바꾸는 레이드 보스 표(순수). 바뀌는 건 속성·기술(`CombatData`)뿐, 정체(`Data`)는 그대로 — 이겨도 잡히는 건 원래 종이고 스토리도 원래 종으로 센다
- `Assets/Scripts/Battle/LedgerPressure.cs` - 명부회 보스전 「장부」 압박 순수 계산부 ※임계값(누가 얼마나 빨리 적는가)은 `NpcBossDuels` 표가 든다 — 여기에 인물 ID를 두지 않는다
- `Assets/Scripts/Battle/RaidSupportPlanner.cs` - 비-리더 팀원의 스킬 선택 AI(순수 정적, **난수 미사용** — 동점은 최저 인덱스라 결정론 테스트가 성립한다)
- `Assets/Scripts/Battle/BattleEnvironment.cs` - 낮·밤·날씨 전투 보정 순수부(`BattleEnvironmentNote` 배수·칩 문구, `Applies` 적용 범위). 배수는 `InsectHabits.BattleStatMultiplier`가 단일 출처 ※칩 그리기는 ui-dev
- `Assets/Scripts/Battle/BattleEscapeRules.cs` - 도주 확률 순수 규칙(`Chance`) — 1v1 `TryEscape`와 습격 곤충 도망(capture-dev)이 함께 읽는다
- `Assets/Scripts/Battle/BattleReadPacing.cs` - 읽는 단계(진입 인트로·컷인·상대 교체·그림자 변신·수문장 등장)의 배속 하한(`ClockScale`·`StagingSeconds`)과 결과 화면 닫기 규칙(`BattleResultRules` — 0.6초 잠금·뗄 때 닫기·꿈 챔피언전만 4초 자동). 순수
- `Assets/Scripts/Battle/ElementMatchup.cs` - 상성 등급 `Matchup`(Super·Good·Neutral·Weak·Resisted)과 `Describe(배수)`. 경계 1.05/0.95는 「효과가 굉장했다」 문구와 같은 값. 순수 ※아이용 문구는 ui-dev
- `Assets/Scripts/Battle/SignatureSkills.cs` - 전용기 판별(`IsSignature(owner, skill)`·`IsUnlocked`) — 1v1 표지·레이드 보스 기술 고르기·전용기 연출이 같은 기준. 순수
- `Assets/Scripts/Battle/BattleKind.cs` - 1v1 전투 종류(`BattleKind`·`BattleKinds.Classify`)와 전투 곡 고르기(`BattleMusic` — 수문장 레이드·간부·라온). 순수 ※곡 등록은 visual-dev
- `Assets/Scripts/UI/BattleScreenUI.Flow.cs` - 1v1 화면 흐름 partial — 결과 닫기(`ResultCanClose`·`ResultShownSeconds`)·읽는 단계 시계·진입 인트로(`IntroProgress`·`EntryIntroProgress`)·`CurrentBattleKind` ※그리기는 ui-dev
- `Assets/Scripts/UI/RaidBattleUI.Flow.cs` - 레이드 화면 흐름 partial — 결과 닫기(실제 시간)·인트로/변신 시계·`BossTransformStagingSeconds`·`GuardianIntroClockScale` ※그리기는 ui-dev
- `Assets/Scripts/NPC/NpcDuelController.cs` - 곤충잡이 아이 1v1 대결(듀얼 진입·보상) ※아이 상태·상대 배정은 capture-dev

### Core 배틀 관련
Expand Down Expand Up @@ -61,7 +73,22 @@ HP×5, ATK×1.5, DEF×1.3

### 도주
```
escapeChance = clamp(0.5 + (playerLv-enemyLv)×0.05, 0.1, 0.9)
escapeChance = clamp(0.5 + (playerLv-enemyLv)×0.05, 0.1, 0.9) // BattleEscapeRules.Chance
```

### 읽는 단계 배속 하한 · 결과 닫기 (BattleReadPacing)
```
단계 시계 += DeltaTime × ClockScale(길이, 최소 실제 초, 배속) // = clamp01(길이 / (최소 × 배속)), 1배속이면 1
진입 인트로 1.4초(실제 시간) → [컷인 3.2 (실제 ≥2.0) | 평범한 인트로 나머지 0.6]
상대 교체 1.2 (≥1.0) · 그림자 변신 1.5 (≥1.0) · 수문장 레이드 등장 2.6 (≥2.0) · 일반 레이드 인트로 2.0 (≥1.4)
결과: 0.6초 잠금 → 탭·클릭·Space/Enter → 손을 뗄 때 닫음(0.5초 넘게 누르면 그냥 닫음). 자동 닫힘은 꿈 챔피언전(4초)만
```

### 낮·밤·날씨 보정 (야생 실외 전투만)
```
ATK·DEF × InsectHabits.BattleStatMultiplier(habit, GetWorldState(regionId)) // 1.10 / 1.00 / 0.90, HP 제외
제외: 수문장 · NPC 대결 · 샌드박스 · 레이드 · 실내 서브에리어(섬은 적용, 세계 날씨)
표지: InsectBattleController.PlayerEnvironment / EnemyEnvironment — BeginBattleCommon이 매번 None으로 끈다
```

### 1v1 승리 포획
Expand All @@ -83,8 +110,13 @@ captureChance = clamp(0.90 - rarityIndex×0.07 - clamp01(captureDifficulty)×0.5
경계 밖 수정이 필요하면 변경하지 말고 메인 모델에 보고하여 적절한 에이전트에 재위임.

## 설계 원칙
- `Assets/Scripts/Battle/BattleRandomSource.cs` — 연출과 분리된 전투 난수
- 이벤트 기반: BattleUpdated, BattleEnded, PlayerFainted
- UI는 이벤트 구독으로만 갱신 (직접 참조 X)
- 스탯은 InsectBattleStats에 집중, UI 모놀리스에서 읽기만
- GameConstants.Battle 상수 활용
- 스킬 쿨다운은 턴 단위, 버프/디버프는 duration 턴 후 해제

### 전투 지속시간 회귀 테스트
- `Assets/Tests/EditMode/BattlePacingTests.cs` - 일반전 라운드 분포 및 보스 계수 분리
- `Assets/Tests/EditMode/BattleEnvironmentTests.cs` - 낮·밤·날씨 보정(노트·적용 범위·능력치·컨트롤러 배선·다음 전투 상속 금지)과 도주 규칙
50 changes: 38 additions & 12 deletions .claude/agents/capture-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,34 +15,52 @@ tools:
## 담당 파일
- `Assets/Scripts/Capture/CaptureController.cs` - 포획률 계산 핵심
- `Assets/Scripts/Capture/CaptureChanceCalculator.cs` - 포획 성공 확률 순수 계산
- `Assets/Scripts/Capture/CaptureMinigameController.cs` - 3단계 타이밍 미니게임
- `Assets/Scripts/Capture/CaptureMinigameController.cs` - 포획 미니게임 껍데기 (게임 고르기 · 조작 수집 · 그리기 · 포획 판정 연결)
- `Assets/Scripts/Capture/CaptureMinigame.cs` - 미니게임 3종의 순수 규칙 (살금살금·가두기·던지기, 결과 0~3점, 포획마다 무작위)
- `Assets/Scripts/Capture/CaptureMinigameProbability.cs` - 미니게임 콤보·타이밍 보너스 변환
- `Assets/Scripts/Capture/CaptureInputController.cs` - 포획 입력
- `Assets/Scripts/Capture/CaptureInputController.cs` - 포획 입력 + 습격 판정 훅(`InsectEntity.AmbushGate`)·교전 종료 시각(쿨다운)·닿으면 습격 창 열기
- `Assets/Scripts/Capture/CaptureProximityTrigger.cs` - 근접 감지 (8m 반경)
- `Assets/Scripts/Capture/CaptureRaycastTrigger.cs` - 레이캐스트 감지
- `Assets/Scripts/Capture/CaptureTriggerModeController.cs` - 감지 모드 전환
- `Assets/Scripts/Capture/CaptureFeedbackController.cs` - 포획 연출
- `Assets/Scripts/Capture/CaptureTriggerOptionsUI.cs` - 트리거 설정 UI
- `Assets/Scripts/Spawning/InsectSpawner.cs` - 월드 스폰 (최대20, 리전별 최소5)
- `Assets/Scripts/Spawning/SpawnPoint.cs` - 스폰 포인트 (반경5m, 로컬최대2)
- `Assets/Scripts/Spawning/InsectEntity.cs` - 곤충 엔티티 (프로시저럴 3D 모델)
- `Assets/Scripts/Spawning/InsectSpawner.cs` - 필드 개체군 (리전별 슬롯 기록 · 시간 기반 재생 · 45m 실체화/55m 회수 · 서브에리어 슬롯)
- `Assets/Scripts/Spawning/FieldSpawnRules.cs` - 필드 스폰 순수 규칙 (전역 등급표 · 등급 대체 · 레어 부스트 · 레벨 · 슬롯 수 · 재생/수명)
- `Assets/Scripts/Spawning/FirstShinyEncounter.cs` - 도입부 확정 조우 (세 번째 포획 앞에서 근처 개체 하나를 색다르게 — 계정당 1회)
- `Assets/Scripts/Spawning/FieldPopulation.cs` - 슬롯 기록부 + 상태 전이 (게임플레이 퇴장 vs 거리 회수)
- `Assets/Scripts/Spawning/FleePath.cs` - 도주 방향·거리 순수 판정 (벽 관통 방지)
- `Assets/Scripts/Spawning/AmbushRules.cs` - 습격 순수 규칙 (거절 조건·전역/개체 쿨다운·알아채는 반경·접근 속도·다가갈 길·"왜 덤벼들었나" 한 줄 — `InsectEntity` AI와 `CaptureInputController` 판정이 읽는다, 규칙은 `rules/world-environment.md` 「습격」)
- `Assets/Tests/EditMode/AmbushRulesTests.cs` - 습격 거절 조건 하나씩·쿨다운 경계·싸울 곤충·접근 속도/길·진짜 DB 시간대×날씨 깨어남 표(로그 `[Ambush]`)
- `Assets/Scripts/Spawning/SpawnPoint.cs` - 리전/서브에리어 스폰 표 (풀 · 레벨 대역) — 자리는 정하지 않음
- `Assets/Scripts/Spawning/InsectEntity.cs` - 곤충 엔티티 (프로시저럴 3D 모델) — AI(경계·도주·습격 접근)는 capture-dev
- `Assets/Scripts/Spawning/SimpleObjectPool.cs` - Get()/Return() 오브젝트 풀
- `Assets/Scripts/Spawning/DistanceCulling.cs` - 거리 컬링 (25m/20m)
- `Assets/Scripts/Spawning/CaptureItemSpawner.cs` - 아이템 스폰
- `Assets/Scripts/Spawning/CaptureItemPickup.cs` - 아이템 획득
- `Assets/Scripts/Data/InsectSpawnCondition.cs` - 시간/날씨 조건
- `Assets/Scripts/Data/InsectHabits.cs` - 곤충 시간·날씨 성향 순수 규칙 (주행/야행/무관 · 좋아하는/싫어하는 날씨 · 습격형 → 스폰 배수·궁합 Fit·전투 보정·습격 판정)
- `Assets/Scripts/Data/InsectHabitTable.cs` - 성향 표 (종마다 한 줄, 계통별 곤충학 근거 주석 — 종을 늘리면 한 줄 추가, `InsectHabitsTests`가 DB와 맞춰 본다)
- `Assets/Scripts/Data/CaptureItemData.cs` - 포획 아이템
- `Assets/Scripts/Core/WeatherSystem.cs` - 날씨 (Clear/Rain/Fog/Wind)
- `Assets/Scripts/Core/WeatherSystem.cs` - 날씨 (Clear/Rain/Fog/Wind/Snow)
- `Assets/Scripts/Core/WeatherForecast.cs` - 날씨 예보 순수 규칙 (다음 날씨·지속·지역 기후 — 설산은 비→눈, 사막·화산은 눈→센바람)
- `Assets/Scripts/Core/GameClock.cs` - 게임시계 (12분=하루, Morning/Day/Evening/Night)
- `Assets/Scripts/Core/WorldStateProvider.cs` - WorldState(시간+날씨) 제공
- `Assets/Scripts/Core/PlayerMovement.cs` - 플레이어 이동 (월드 탐험)
- `Assets/Scripts/Core/PlayerStartPlacement.cs` - 플레이어 시작 위치·방향 계산
- `Assets/Scripts/Core/WorldInteractionTypes.cs` - 월드 상호작용 종류 정의 ※프롬프트 UI는 ui-dev
- `Assets/Scripts/UI/CaptureChoiceUI.cs` - 포획/배틀/레이드 선택 허브 ※UI 레이아웃은 ui-dev
- `Assets/Scripts/UI/CaptureChoiceUI.cs` - 포획/배틀/레이드 선택 허브 + 「습격!」 창([싸우기]/[도망치기], ESC=도망) ※UI 레이아웃은 ui-dev
- `Assets/Scripts/NPC/NpcManager.cs` - NPC 스폰/디스폰/배치
- `Assets/Scripts/NPC/CatcherKidNpc.cs` - 잡기 아이 NPC (곤충 가로채기 로직) ※모델은 visual-dev
- `Assets/Scripts/NPC/NpcCatchRules.cs` - NPC 곤충 가로채기 규칙
- `Assets/Scripts/NPC/VillagerNpc.cs` - 마을 주민 NPC 개체/상호작용 ※모델은 visual-dev
- `Assets/Scripts/Core/IslandWorldBuilder.cs` - 나의 섬 드나들기(분리 서브에리어 진입·이탈·복귀 좌표), 밟는 땅·경계·물건 차단 콜라이더, 방목 곤충 세우기, 꾸미기 미리보기·카메라, 본 마을 나루터 ※모양은 visual-dev(`IslandTerrainBuilder`·`IslandObjectBuilder`)
- `Assets/Scripts/Core/IslandInsectWalker.cs` - 섬 방목 곤충의 배회(빈 칸 사이 이동, 건물 통과 금지, 시간·날씨 기분 적용)
- `Assets/Scripts/Core/IslandInsectMood.cs` - 방목 곤충 기분 순수 규칙 (성향 → 활동도 0~1 → 쉬는 시간·속도·나는 높이, 보통 0.6 = 예전 배회)
- `Assets/Scripts/Core/IslandGuestRules.cs` - 섬 손님 곤충 순수 규칙 (수=BonusSlots · 해금 풀 합집합 · 등급 희귀까지 · 종의 가장 낮은 해금 리전 대역 · 화면 밖에서 떠남 · 빈 칸 위 도주)
- `Assets/Scripts/Core/IslandWorldBuilder.Guests.cs` - 섬 손님 기록·몸(야생 경로 `Initialize`, 작은 풀) + 방목 곤충 기분 전달 — `IslandWorldBuilder`의 partial
- `Assets/Tests/EditMode/IslandGuestRulesTests.cs` - 손님 수 표·들어설 곳·종 고르기(초원만 해금)·등급 상한·레벨 대역·떠나기·빈 칸 도주·들어설 칸
- `Assets/Tests/EditMode/IslandInsectMoodTests.cs` - 야행성 밤 활발·낮 쉼, 주행성 반대, 날씨 취향, 시간 무관 종은 예전 그대로
- `Assets/Tests/EditMode/IslandIntegrationTests.cs` - 실제 PlayScene에서 섬 진입·이동·구경·퇴장(서브에리어 빌더 비개입, sticky 해제, 끼임 복구 좌표, 복귀 자리)

## 핵심 공식

Expand All @@ -63,11 +81,18 @@ rarityFloor: Common30% / Uncommon22% / Rare14% / Epic8% / Legendary4%
커서 가속: 1 + |pos-0.5|×0.6 (가장자리에서 빨라짐)
```

### 스폰 레벨
### 필드 스폰 (FieldSpawnRules가 단일 출처)
```
level = lerp(min, max, pow(random, power))
서브에리어: power=2.0, 메인필드: power=3.5
레어도 보정: Uncommon+0.5, Rare+1.5, Epic+3.0, Legendary+5.0
등급 = 전역 표 C .60 / U .25 / R .11 / E .035 / L .005 (리전과 무관, 레어 부스트는 R+에만 ×)
→ 풀에 없는 등급은 가까운 아래 → 위로 대체 (안전망)
종 = 그 등급의 (리전 풀 ∩ 시간·날씨 후보) 안에서 spawnWeight × 성향 배수 가중 (상태는 리전별 — GetWorldState(regionId))
→ 성향 배수 = InsectHabits.SpawnWeightMultiplier: 야행성 밤 ×2.5·낮 ×0.35 / 주행성 낮 ×1.8·밤 ×0.4 / 좋아하는 날씨 ×1.5·싫어하는 ×0.6, [0.15, 4] clamp — 0 불가(후보가 안 빈다), 등급 분포는 그대로
보너스 슬롯 = 밤 +1 · 비·안개 +1 (합 최대 +2, FieldSpawnRules.BonusSlots) — RegionCap이 보너스를 먼저 더한 합에 오염 감소(MaxActiveFor)를 얹는다
시간대 전환 = GameClock.DayPhaseChanged → 잠들 시간의 종은 만료를 5~60초로 당김 (25m 규칙·스토리 목표종 면제는 순환 쪽이 그대로 지킨다)
레벨(메인) = 리전 대역 [requiredLevel, +GetRegionLevelRange] 안 pow(random, 1.5), 등급 보정 없음
레벨(서브에리어) = min~max 균등
슬롯 = 설 수 있는 땅 / 550㎡ (8~40) → BlightPolicy.MaxActiveFor
재생 60~120s (서브에리어 45s) · 수명 4~7분(플레이어 25m 밖에서만 교체) · 새 개체는 플레이어 20m 밖
```

## 공유 파일 수정 경계
Expand All @@ -80,5 +105,6 @@ level = lerp(min, max, pow(random, power))
## 설계 원칙
- WorldState 기반 스폰 필터링 (시간+날씨 조합)
- 오브젝트 풀 필수 사용 (Instantiate 최소화)
- 60m 이상 자동 디스폰, 8초마다 스폰포인트 재배치
- 기록(슬롯)이 개체다 — 멀어지면 몸만 풀로 돌리고(Recall) 기록은 남긴다. 리전 이동으로 리롤하지 않는다
- 사라지는 방식 둘: 게임플레이 퇴장(Despawn 콜백 → 재생 지연) vs 스포너 회수(Recall → 개체 유지)
- 포획 아이템은 speedMult/zoneMult/timeMult/captureBonus 4가지 효과
13 changes: 12 additions & 1 deletion .claude/agents/data-architect.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ tools:
- `Assets/Scripts/Core/PlayerInsectData.cs` - 개별 곤충 인스턴스 데이터
- `Assets/Scripts/Core/InsectSizeCalculator.cs` - 개체 크기·무게 계산 ※기준값·배율 튜닝은 game-designer
- `Assets/Scripts/Core/GameConstants.cs` - 전역 상수
- `Assets/Scripts/Core/CharacterOutfitData.cs` - 의상 데이터 모델
- `Assets/Scripts/Core/CharacterOutfitData.cs` - 의상 데이터 모델 ※`OutfitPart` 스키마(OutfitShapeLibrary.cs)는 2026-09-30에 `shape`/`shapeArgs`·`hasAnchor`/`anchor`가 늘었다 — 전부 기본값이 기존 동작(Primitive·레시피 앵커)이라 세이브·기존 레시피에 영향 없음
- `Assets/Scripts/Data/StarterInsectCatalog.cs` - 첫 파트너 곤충 선택지 + PlayerPrefs 오버라이드 ※ResolveChoice의 화이트리스트는 조작 방어다(빼면 임의 곤충을 1레벨에 받는다). 지급은 여전히 ch1_intro 비트가 한다
- `Assets/Scripts/Data/CharacterAppearanceConfig.cs` - 캐릭터 외형 SO(색 팔레트·프리셋). 선택적 오버라이드이며 에셋이 없는 게 정상 경로 — 코드 폴백을 반드시 유지
- `Assets/Scripts/Core/CharacterPresetLibrary.cs` - 생성 화면 프리셋의 단일 출처(코드 기본값 + SO 오버라이드) ※인덱스는 Character.OutfitPreset으로 저장되므로 순서 불변
Expand Down Expand Up @@ -76,6 +76,17 @@ tools:
- `Assets/Scripts/Story/StoryProgressData.cs` - 스토리 진행 세이브 모델
- `Assets/Scripts/Story/CutsceneData.cs` - 컷신 샷 데이터 모델 + 타임라인 순수부(CutsceneTimeline)

### 나의 섬 (세이브·데이터)
- `Assets/Scripts/Core/IslandData.cs` - 섬 데이터 모델(물건 정의·`IslandSave`·공개용 `IslandSnapshot`) ※수치는 game-designer(`IslandCatalog`)
- `Assets/Scripts/Core/IslandManager.cs` - 섬 상태·세이브(island.json)·구매·배치·방목·수확·가이드 진행 + 세이브 자가 복구(`IslandSaveRules`) ※가격·생산 수치는 game-designer, 퀘스트 통지 호출부 포함
- `Assets/Scripts/Core/IslandGrid.cs` - 섬 격자 순수 규칙(차지 칸·경계·겹침·도착 칸 보호·빈 칸)
- `Assets/Scripts/Core/IslandShareClient.cs` - 섬 공개·방문·좋아요 서버 통신(`socialPvpApi` 액션) + 받은 스냅샷 정리 ※서버는 `functions/island.js`
- `Assets/Scripts/Core/FirestoreDocParser.cs` - Firestore REST 문서 필드 파서(공백 없는 형식·들여쓰기 형식 둘 다) — `CloudSaveManager` 복원이 쓴다
- `Assets/Tests/EditMode/IslandGridTests.cs` - 격자 규칙(경계·도착 칸·겹침·옮기기·확장 후 좌표 유효)
- `Assets/Tests/EditMode/IslandManagerTests.cs` - 섬 상태 흐름(변경 전 정산·수확 소수점 보존·상한·방목 슬롯·유령 id 정리·안내 첫 선물 1회·스냅샷에 instanceId 없음)
- `Assets/Tests/EditMode/IslandSaveRulesTests.cs` - 섬 세이브 호환(빈 JSON·자가 복구·모르는 id 보존)·방문 스냅샷 정리·안내 단계
- `Assets/Tests/EditMode/FirestoreDocParserTests.cs` - 클라우드 문서 파서(두 형식·이스케이프·블롭 안 동명 키)

## 세이브 파일 구조
| 파일 | 내용 | 서비스 |
|------|------|--------|
Expand Down
Loading
Loading