# 피해 증가 연계 분석

대상: 게임 26.102.018 / Unity 6000.3.24f1의 검증된 working 복사본. 정적 데이터·그래프를 조사했다. 아래의 “설정”은 클라이언트에 들어 있는 값이며, 서버 실행 결과와 구분한다.

## 파쇄 → 화염 분출

파쇄는 독립 공격 스킬 이름으로 확인된 것이 아니라 버프 `120009003`이다. 설정 지속시간 `LifeMillis=5000`, 중복 정책 `StackLifeReset`, 최대 중첩 `1`, 그룹 `120009003`이다. 이름대로라면 재부여 시 지속시간 갱신 방식이지만, 실제 갱신 시점과 만료 경계는 본문을 확보하지 못해 미확인이다.

화염 분출 `1070014`의 그래프에는 다음 연결이 저장되어 있다.

| 순서 포트 | 노드 | 근거 |
|---|---|---|
| 4 | Delay, 값 330 / false | 노드 14 |
| 5 | AddTargetInCircle | 노드 10 |
| 6 | DamageToTarget, Damage 항목 후보 1 | 노드 11 |
| 7 | Branch | 노드 4 |
| 조건 연결 | HasTargetBuffMark, 값 34 | 노드 7 |
| 분기 연결 0 | ApplyBuffToTarget, 120009102 | 노드 12 |
| 분기 연결 1 | ApplyBuffToTarget, 120009203 | 노드 13 |

`34=Crush`는 메타데이터의 enum(이름과 숫자의 대응 목록) 기본값에서 확인했다. `120009102`는 받는 피해 증가 버프이다. `120009203`은 `ReduceBuffId=120009003`, 지속시간 100ms의 별도 설정이다. 따라서 **파쇄를 검사하고 받는 피해 증가를 부여하며 파쇄를 감소/소비하는 경로**로 해석된다. Branch의 참/거짓 처리와 ReduceBuffId의 정확한 동작은 미확인이다.

효과 `120009102`의 설정:

| 항목 | 값 | 출처 |
|---|---|---|
| 지속시간 | 10000ms | fbdatabuff.bytes, 테이블 오프셋 26972 |
| 중복 정책 / 최대 중첩 | Replace / 1 | 같은 행 |
| 그룹 | 120009102 | 같은 행 |
| 효과 | ApplyAttr | fbdatabuffaffect.bytes, 오프셋 14500 |
| 속성 / 원시 값 | DamageDown / -500 | 같은 행 Param |
| 속성 보정값 | 약 0.0001 | fbdataattributelist.bytes, 오프셋 2136 |

`-500 × 0.0001 ≈ -0.05`이다. UI 정의도 `UiFormatDivisor=100`이며 설명은 “받는 피해 증가”를 가리킨다. **표시상 5% 증가**라는 해석은 여러 데이터가 일치한다. 그러나 현재 피해 감소 값에 가산하는지, 별도 배율로 곱하는지, 상한·다른 효과와 어떤 순서로 결합하는지는 확인하지 못했다. 모든 상황에서 최종 피해 ×1.05라고 고정해서는 안 된다.

그래프에는 피해 노드 뒤에 신규 증가 효과의 조건·부여 노드가 놓인다. 보통의 순차 실행 의미라면 화염 분출의 이번 타격은 **이번에 새로 부여하는** 증가 효과를 받지 않고 후속 타격이 받는다. 이미 존재하던 증가 효과 적용과 서버 처리 순서는 별도 검증 대상이다. 이 해석은 그래프 구조 기반이며 실행 관찰은 아니다.

`BuffInfoForPreview(120009422)`는 연결된 실행 노드가 아닌 설명용 노드로 저장되어 있다. 설명용 ID 120009422를 실제 효과 ID 120009102와 중복 적용하면 안 된다.

## 파쇄를 부여하는 경로

확보된 그래프 범위에서 다음 경로를 찾았다. 목록은 전체 게임의 모든 파쇄 발생원을 보장하지 않는다.

| 스킬 | ID | 그래프 | 파쇄 부여 노드 |
|---|---|---|---|
| 휘둘러 내려치기 | 1030020 | combo_skill_swingstrike | 7 |
| 회전 난격 | 1030060 | combo_skill_spinningstrike | 추출 그래프 참조 |
| 휘둘러치기 | 1040030 | smash_skill_hammerswing | 13 |

화염 분출·낙뢰 두 스킬의 확인된 그래프에서는 파쇄 120009003을 직접 부여하는 노드를 찾지 못했다. 두 스킬만 넣고 파쇄 연계를 상시 활성화하는 계산은 현재 근거와 맞지 않는다.

## 관통 → 낙뢰

낙뢰 `1070012` 그래프에는 `DamageToTarget(노드6)` 이후 `Branch(노드10)`가 있고, `HasTargetBuffMark(노드12, 값40)`와 효과 부여 순차 노드15가 연결된다. enum에서 `40=Penetration`, 이름표에서 관통 `120009007`을 확인했다.

| 적용 후보 | 설정 |
|---|---|
| 120009100 | DefencePer=-500, 보정값 약0.0001, 표시상 방어력 5% 감소 |
| 120009100 지속·중복 | 10000ms, Replace, MaxStack=1 |
| 120009207 | ReduceBuffId=120009007, LifeMillis=100 |
| 설명용 미리보기 | 120009420, 실제 효과 120009100과 구분 |

관통 생성 경로의 예는 삼단 찌르기 `1010020`, `assassinate_skill_triplethrust`의 노드8이다. 파쇄와 관통은 별개 조건이다. **낙뢰는 확보된 그래프에서 파쇄 대신 관통을 검사한다.**

방어력 5% 감소를 최종 피해 5% 증가로 치환하면 안 된다. 방어력의 피해 환산식이 미확인이다. 화염 분출의 받는 피해 증가와 낙뢰의 방어력 감소는 그룹도 다르다. 함께 존재할 가능성이 있지만 결합 공식은 미확인이다.

## 파멸 계열 게이지

별도의 중요한 경로가 있다. `fbdatamechanic.bytes`의 ID1070000은 GaugeMax200, `cataclysm_gain`, `cataclysm_synergy_affect`를 참조한다. `fbdatamechanicgaugeevent.bytes`의 ID10은 SkillCast / GaugeValue25이다.

`fbdataskillstylemechanicaffect.bytes`의 fullgauge / MinGauge200 그룹에는 버프 120001100·120001102·120002255 부여 설정과 `SkillCoolTimeReduceRemainRatio`, Param `["9990","all"]`가 있다. 120002255의 효과에는 DamageUp1000, PreCastingSpeedUp5000, MechanicGaugeClearOnRemove가 있으며 정의 지속시간은 20000ms이다.

이 설정은 게이지와 버프가 재사용 대기시간·피해·시전 속도에 영향을 줄 수 있음을 보여 준다. 그러나 유효 시전의 범위, 부여 성공·게이지 초기화 시점, 9990의 실제 해석, 효과 재발동 간격은 미확인이다. 시작 게이지0, 매 시전25, 다른 변화가 없다는 조건에서는 8회가 200이 되는 계산만 가능하다. 실제 8회마다 쿨타임이 완전 초기화된다고 단정하지 않는다.

## 근거와 다음 검증

- `skill-data.json`: 버프·효과·속성 보정·게이지의 원시 값과 필드별 출처.
- `resources/graphs/*-parsed.json`: PGRF 행동 그래프(행동과 연결을 저장하는 파일)의 노드·포트·바이트 오프셋.
- `metadata/buff-mark-enum.json`: Crush34, Penetration40의 상수와 원시 바이트.
- `resources/target-localization.json`, `localized-strings.json`: 설명 ID와 효과 참조.
- FlatBuffers 필드명은 메타데이터 접근자 선언 순서 기반 복원이다. 원시 값·참조의 일관성은 확인했지만 getter 본문은 확보하지 못했다.

사용자가 일반 플레이에서 기록할 수 있는 다음 검증은 파쇄 유무에 따른 화염 분출 후 버프 생성·소비, 첫 타격/후속 타격 피해, 동일 효과 재부여 시 타이머, 두 디버프 동시 존재, 게이지 가득 참 전후 쿨타임 비교이다. 이번 작업에서는 게임 프로세스 연결이나 조작을 수행하지 않았다.
