Runimal은 러닝 경험을 두 층으로 분리한다.
실시간 동행러닝 종료 후 남는 운동 데이터 코어
둘은 연결되지만 같은 것이 아니다.
러닝을 시작할 때 선택한 동행은 함께 달리는 대상이다.
역할:
- 워치 화면의 시각적 동행
- 심박 / 케이던스 / 페이스 / 지형 / 야간 구간에 대한 반응
- 라이브 피드백과 순간 이벤트의 감정적 주체
- 유대, 공명, 시즌/변이 적합 보너스의 기준점
중요:
- 실시간 동행은 러닝 중 반응을 만들지만, 러닝이 끝났다고 해서 결과 데이터가 자동으로 쓰이지는 않는다.
러닝 종료 후 남는 운동 데이터는 운동 기록으로 저장된다.
구성:
- 거리
- 시간
- 심박 / 케이던스 / 페이스
- 고도
- 환경 신호
- 경로 / 지도 흔적
- 월드 / 에피소드 반응
역할:
- 인벤토리에 남는 성장 재료
- 아무 동행에게나 먹일 수 있는 기록
- 알 생성 / 알 인큐베이트 / 동행 성장에 공용 사용
- 외부 HealthKit / FIT / 기타 가져온 운동 데이터와 같은 규칙으로 취급
중요:
- 운동 기록은
자동 귀속되지 않는다. - 플레이어가 누구에게 먹일지 선택한다.
이 분리는 세 가지 이유 때문에 필요하다.
데리고 나간 동행은 러닝 중 반응하는 존재여야 한다. 그래야 “함께 달린다”는 감각이 살아난다.
러닝 후 남는 데이터는 특정 동행에 잠기면 안 된다. 그래야 플레이어가 전략적으로 다른 동행, 알, 변이 루트에 재료를 배분할 수 있다.
외부에서 가져온 러닝 데이터도 같은 성장 재료로 써야 자연스럽다.
그래서 워치 실러닝 / HealthKit 가져오기 / FIT 가져오기가 모두 같은 운동 기록 규칙으로 모인다.
- 워치 선택 동행은 라이브 반응과 연출에만 직접 영향
- 완료 러닝은 항상 미할당
운동 기록으로 저장 - 미할당 운동 기록만 먹이 / 알 생성 / 인큐베이트에 사용 가능
- 성장 반영은 항상 수동 선택 액션으로만 발생
- 외부 운동 데이터도 동일하게 미할당 운동 기록으로 저장
- 함께 달린 동행에게는 자동 성장 대신
잠재 성장치를 저장하고, 나중에 그 동행에게 먹일 때 일부가 보너스로 붙음
- 워치 대표 선택은
함께 달릴 동행에 대한 실시간 컨텍스트를 보낸다. - 완료 러닝은
CompletedRunRecord로 저장된다. - 성장은
feedActiveCompanion(with:)호출 시점에만 일어난다. - 알 생성은
forgeEgg(from:), 알 인큐베이트는incubateMainEgg(with:)호출 시점에만 일어난다. - 함께 달린 동행은 러닝 중 반응량에 따라 작은
잠재 성장치를 따로 쌓는다. - 현재 잠재 이벤트는
페이스 유지,고케이던스,오르막 반응,야간 감응,경로 안정,현장 이벤트,변이 공명,월드 신호계열로 명시한다. - 즉 현재 구조는 자동 귀속이 아니라
수동 배분형 운동 기록 + 저장형 잠재 성장치에 가깝다.
- “대표 선택”은 누구를 기본 대상으로 둘지 고르는 화면에서만 사용
- “함께 달린 동행”은 라이브 반응 문맥에서만 사용
- “지금 선택한 동행 / 지금 선택한 알”은 운동 기록을 실제로 나눠 쓰는 문맥에서 사용
- “운동 기록”은 저장 / 성장 반영 / 새 알 만들기 / 부화 준비 문맥에서 사용
- “자동 성장”, “자동 흡수” 같은 표현은 사용하지 않음