★ 사전 준비 : D2RSME와 첨부파일1번(교보재)를 다운받아 주세요. 
     ※ CascViewer를 이용 하시거나 모드폴더의 구조를 아신다면 교보재는 패스하셔도 OK

◆ D2R State Machine Editor
------------------------------------------------------------------------------------------------------------------------


오늘은 어제 제가 공유한 State_machine 편집기(일명 D2RSME)를 이용해 원하는 무기로 외형/모션을 바꾸는 

방법에 대해 설명해드리겠습니다. 간단한 예제를 순서에 따라 설명하는 방식으로 하겠습니다.


------------------------------------------------------------------------------------------------------------------------


《 착용무기를 타입 상관없이 클레이모어로 변경 》


캐릭터가 착용한 싸이드의 외형과 모션을 클레이모어에 맞도록 변경하는 과정을 다룹니다.


[0. 시작 환경]

일단 예제를 위해 스탠에 버려져 나뒹굴고 있는 제 소서리스 하나를 가져왔습니다.

무기슬롯 1에 싸이드, 무기슬롯 2에 크리스탈 소드 + 모너크를 착용하고 있습니다.
(스왑템을 어떻게 처리할 지도 마지막에 다루겠습니다.)



그리고 모드 폴더에 필요한 파일들이 없는 분들의 경우를 가정해 모드를 바닐라(순정상태)로 돌렸습니다.
                     ↑ 교보재를 첨부한 이유



네... data 폴더 안이 텅텅 비어있습니다.


먼저 처음에 안내드린 두 파일을 모두 받아서 사용할 수 있도록 따로 챙겨 두도록 합시다.


[1. State_Machin.json(모션 설정파일) 수정하기]


먼저 현재 사용중이신 모드 폴더를 확인합니다.

Diablo II Resurrected → mods → 모드명 폴더 → 모드명.mpq 폴더 → data → hd → character  player


※ 만약 변경하고자 하는 캐릭터의 .json과 .frontend가 있다면 꼭 기억해둡니다(중요!).
    // 이미 다른 스킨이 적용되어 있을 경우 덮어 씌울 위험이 있어서 필수로 확인


이어서 다운받은 교보재 폴더를 열면 hd폴더가 보입니다. 

이것도 마찬가지로 hd → character  player 순으로 들어가줍니다.



익숙한 캐릭터명의 폴더들이 쭉 뜨실텐데요, Amazon 폴더에는 amazon_state_machine.json, Paladin 폴더

에는 paladin_state_machine.json과 같이 각 캐릭터의 모션 파일이 하나씩 들어있습니다. 

☞ 임의로 넣어야하는 것이 아닌, 우리가 사용하는 모드나 블리자드의 순정 폴더도 모두 같은 경로에 

state_machine.json이 있습니다.

이어서 나중에 사용할 무기코드.txt각 캐릭터.json이 있습니다.

Q. 제 모드의 data/hd/character/player에는 저 폴더들과 파일이 없는데요?
A. '파일이 모드폴더에 없음 = 디아블로2 레저렉션 원본 파일을 호출'을 기억하시면 됩니다! 가령 애드온ㆍ
   모드 게시판에서 검은색 크리스탈 소드를 받아서 hd/items/weapon/sword에 내용이 수정된 crystal_sword.json
   이 있다고 칠 때, 원본으로 돌리려면 crystal_sword.json을 삭제하면 됩니다. 즉 mods에 있는 걸 우선 로드하고
   없다면 순정이 나오는 방식입니다.



(1) 교보재 속 hd/character/player 폴더 안의 바꾸려는 캐릭터.json, 무기코드.txt, 캐릭터 폴더를 제외하고 
    모두 삭제해줍니다.
     // 만약 팔라딘이 오심을 두손으로 들고 있도록 변경되어 있는데 순정파일을 덮어 씌우면 낭패겠죠?

※ 앞서 확인한 모드폴더에 이미 수정하려는 캐릭터.json이 있었을 경우 json 파일도 삭제해줍니다.
   → 제 경우 모드 폴더에 sorceress.json이 없는 상태이기에 위와 같이 삭제하지 않은 겁니다!



(2) 교보재의 hd 폴더를 본인의 'Diablo II Resurrected/mods/모드명/모드명.mpq/data' 안에 넣어줍니다. 

보통 hd폴더가 있으실텐데 겹쳐서 덮어씌워줍니다. 이제 더 이상 교보재는 신경 안 쓰셔도 됩니다.



(3) D2R_State_Machine_Editor.exe를 실행합니다.



(4) 창의 좌측 상단의 열기(Ctrl+O)의 아이콘 혹은 키보드 단축키 Ctrl+O를 누릅니다.



(5) 모드 폴더로 가서 data/hd/character/player/sorceress 폴더의 sorceress_state_machine.json을 엽니다.



(6) 왼쪽에 AnimationState 목록이 쭉 뜹니다.

AnimationState란? (필독!)
state_machine에서 캐릭터의 동작별로 무기의 실 착용상태마다 보여질 모션을 지정하는 문단입니다.
죽음과 관련된 문단인 거 같고, 어떤 데이터에 '같은 종류의 데이터_동작'을 할당하는 구조로 보이죠?
1hs, 1js, 2ht 등... 처음보면 외계어처럼 보이지만 사실 이건 장비 장착상태를 의미합니다.

- hth : 주먹
- bow : 활
- xbw : 석궁
- 1hs : 한손 휘두르는 무기
- 1ht : 한손 찌르는 무기
- stf : 양손 스태프 & 폴암
- 2hs : 양손 휘두르는 무기
- 2ht : 양손 찌르는 무기
- 1js : 쌍수_왼손 찌르는 무기 + 오른손 휘두르는 무기
- 1jt : 쌍수_왼손 찌르는 무기 + 오른손 찌르는 무기
- 1ss : 쌍수_왼손 휘두르는 무기 + 오른손 휘두르는 무기
- 1st : 쌍수_왼손 휘두르는 무기 + 오른손 찌르는 무기
- ht1 : 한손 클러
- ht2 : 쌍수 클러

빨간색(1js, 1jt, 1ss, 1st)바바리안만 가능한 조합이라 다른 캐릭터의 경우 모션 자체가 없습니다. 따라서 
   바바리안이 아닌 캐릭터의 모션을 저 네가지로 변경하면 T-Pose(캐릭터가 십자로 굳어버리는 증상)가 발생
   하니 넣지 않도록 합니다. 물론 ht1ht2도 어쌔신만 쓸 수 있겠죠?

많아서 헷갈려도 두려워 하실 필요 없습니다. 막상 쌍수나 클러 모션을 변경하는 일은 드물고 hth, 1hs, 2hs, 
   stf 정도만 만지는 경우가 대부분이더라구요 ㅎㅎ 그리고 h : hand / j : jab / t : thrust / s : swing임을 알 수 
   있으므로 봤을 때 뭔지는 파악하기 어렵지 않습니다.



(7) AnimationState 목록의 death를 눌러봅니다. 오른쪽에 내용이 쭉 뜨는데, 이제 이게 무엇을 호출하는 지
    아실겁니다. 바로 조금 전 설명했던 메모장의 State_death 중 무기타입과 모션부분만 수정할 수 있게 만든
    것이죠.



(8) 테스트를 먼저 해볼건데, death는 바꿔도 확인하기 번거로우니 목록에서 neutral을 눌러줍니다. neutral은
    전투 대기모션입니다. 그리고 싸이드를 장착하고 있으니 stf를 변경해야겠죠? 클레이모어는 양손검이므로 
    양손 휘두르는 무기 모션인 2hs로 바꿔야합니다. 저렇게 stf_neutral 부분에 2hs_netral를 적고 창 왼쪽
    상단의 저장(Ctrl+S)을 누릅니다.


                              <Before>                                                             <After>

게임을 켜서 필드에 나가보니 싸이드를 양손검처럼 잡고 서있는 걸 볼 수 있습니다!

하지만 오늘 소개드릴 방법에선 저렇게 유형을 콕찝어 바꿀 필요가 없습니다!
          // 무기를 강제로 캐릭터의 손에 붙일 거라 모든 애니메이션을 양손검으로 바꿀겁니다.



(9) 다시 D2RSME로 돌아와 위의 순서대로 일괄적용하면 이제 내가 뭘 끼고있던 양손검 모션을 취합니다. 
     이제 D2RSME의 기능적인 부분도 익혔고, 모션 수정방법도 알았습니다. 

    아직은 전투 대기모션만 양손검이므로 왼쪽의 항목들을 이런식으로 바꿔주면 되겠죠?

★ 하지만 AnimationState의 항목 중 어떤 것을 바꿔줘야 할까요? (중요!)



D2RSME 왼쪽에 떠있는 소서리스의 AnimationState 목록입니다.

[AnimationState별 설명]
- Death : 죽어가는 모션. 쓰러지는 자세입니다. 거의 대부분 캐릭터에 있고 잘 볼일은 없지만 바꿔주는 게 
             그래도 디테일 측면에서 어쩌궁...
- Neutral : 전투 대기 모션. 위에서 다뤘듯 필드에서 가만히 있을 때 자세입니다. 무조건입니다.
- Walk : 걷는 모션. 무조건입니다.
- Run : 뛰는 모션. 무조건입니다.
- Hit(또는 Gethit) : 피격 모션. 웬만하면 바꾸는 게 안 어색합니다.
- TownNeutral : 마을 대기 모션. 무조건입니다.
- TownWalk : 마을 걷기 모션. 무조건입니다.
- Attack1 : 공격 모션 1. 무조건입니다.
  // Tip : 자세변경만 언급했는데 동작을 바꿔도 작동합니다. stf_attack1을 hs2_kick으로 변경하면 싸이드를 들
            고있지만,  평타 시 양손검 들고 발차기를 합니다. 예전에 올린 축구아마의 평타가 발차기일 수 있었
            던 이유입니다.
- Attack2 : 공격 모션 2. 보통 1, 2번은 있는편이고 가끔 3, 4가 있기도 합니다.
  // 3, 4가 있다고 해서 4종류의 평타모션이 있다고 보기는 힘들고, 액트5 바바리안 용병처럼 쌍수와 양손을
     구분하는 트리거 등으로 활용되는 경우가 많습니다. 이런 건 직접 해보셔야 알 수 있겠네요 ㅜㅜ
  ※ AnimationState의 Attack1, 2와, 변경하는 자세로 들어가는 Attack1, 2 (중요!)
     방금 언급한 Attack1, 2는 캐릭터가 Attack1, 2를 발동해야겠다고 판단하는 상황을 설정하는 겁니다. 가령
     Attack1에 2hs_kick을 할당했다면 Attack1을 참조하는 평타를 발동할 때 발차기를 하겠죠. 그런데, 2hs_kick
     을 Attack1에 할당했으니 Cast에 2hs_Attack1을 넣는다? 발차기가 아닌 평타가 나갑니다. 즉, AnimationSt
     ate실제 행하려는 행동이고 입력하는 Animation직접 보여줄 행동이라고 보시면 됩니다.
- Block : 막기/회피 모션. 볼 일 없는 캐릭터들도 있지만 그냥 하는 김에 바꿔주긴 합니다.
- Cast : 스킬 시전 모션. 주문 시전 시 동작입니다. 소서리스 같은 경우 모든 공격에 이 모션을 쓴다고 보면 되
           겠죠? 아마존 처럼 공격이 Attack/Throw로 이루어지는 경우 텔레포트, 함성 등의 모션을 바꾸는 용도
           입니다. 이 또한 다른 모션으로 응용이 가능합니다. 만약에 소서리스로 제 광선소총을 쓴다고 하면
           xbw_Attack1를 넣어줘야 스킬 쓸 때 총을 쏘는 모션이 됩니다.
- Throw : 투척 모션. 자벨마나 투척바바는 필수로 바꿔줘야 하고 다른 캐릭터들은 애초에 투척할 일이 잘 
             없긴 해서 자유입니다.
- Kick : 발차기 모션. 통 때문에 모든 캐릭터는 발차기 모션을 보유하고 있습니다. 발차기할 때도 무기별로 
          파지방식이 다르니 바꿔주는 편이 좋습니다.
- Skill1~4 : 특정스킬 모션. 대부분 Attack1, 2, Cast, Throw선에서 스킬도 모두 표현되지만 간혹가다 특정 스킬
                은 해당 모션으로 발동됩니다. 거의 못 본 거 같긴 한데 혹시 몰라 늘 바꿉니다.
- Dead : 사후모션. Death가 죽는 순간이라면 이건 죽은 후 쓰러져있는 모습입니다. 자세가 다르긴 할 텐데 
            알아 볼런지 잘 모르긴 합니다;
- Knockback : 넉백(밀어내기) 모션. gethit과 비슷하지만 이건 더 강한 모션입니다. 패힛모자랄 때 자주 보는 
                    게 hit이라면 이건 우르다르 같은 대형 몬스터가 밀칠 때 나오므로 바꿔줍시다.
- Fidget : 꼼지락거리는 대기모션. 오래 서 있을 때 어깨를 푼다거나 뒤척이는 모션입니다. 바꿔줍시다.
- TownFidget : 마을에서 꼼지락거리는 대기모션. 마을과 필드의 Neutral이 달라 이것도 바꿔줘야 합니다.
--------------------------------------<여기부턴 없는 캐릭터도 있습니다>-----------------------------------------
- Sequence : 연속동작 모션. 잽이라던가 훨윈드 등 특정 반복스킬의 모션입니다. 여러 캐릭터가 아이템을 
                  통해 사용할 수 있다거나 할 경우에는 매끄럽게 동작하지만, 대부분 모션이 없기 때문에 Attack 
                  같은걸 할당해서 캐릭터가 모션이 없어 굳는 걸 방지하는 정도로 합니다. 대표적으로 액트2 용병
                  수정할 때 공격을 안하고 멍 때리는 문제를 겪는다면 이걸 설정 안 해서 그렇습니다.
- SKILL_XXX : 캐릭터 전용 스킬. 변경하는 캐릭터가 전혀 안 쓰는 스킬이면 스킵하셔도 되고, 쓰는 기술이라면 
                   모션을 할당 해줘야합니다.
- CharSel_XXX : 캐릭터 선택 시 모션. 극강의 디테일을 위해서라면 바꿔줘도 될텐데 그럴 필요까지 있을까요.. 
                      안 써봐서 무기별로 모션이 다 있는지는 잘 모르겠습니다.
- FrontendNeutral : 대기실 대기자세. 이건 메인 캐릭터 선택창이 아닌 방생성/참가 가능한 대기실인 거 같습
                            니다. 모딩하고부터는 방 안파고 그냥 냅다 켜서 들어가느라 잘 모르겠네요 ㄷㄷ
- Run_XXX(Stop, Start, Turned 등) : 캐릭터 달리기 전환모션. 달리다가 방향을 틀거나 멈추거나 뛰기 시작하
                                                 는 등의 세부 모션입니다. 바꿔줘야 합니다.
- Aim / Headaim : 두리번거리는 모션. 대부분 무기 타입 구분 없이 한가지 모션만 존재해서 바꿀일 없습니다.
  
  ※ 순정 자체가 이렇게 되어있는데 2hs라고 2hs_additive_aim_up_down을 넣는다면 구현이 안 되어있겠죠.

- ShieldadditiveLayer : 방패장착 모션. 방패를 착용하는 가지수가 1hs, 1ht 뿐이므로 이 둘 외에는 신경 쓸 
                                필요가 없습니다. 대부분 한 가지만 구현되어 있습니다.

※ 특이한 예외 상황

▲ 이렇게 원본임에도 가끔 하나만 다른 이름인 경우가 있는데, 이 때 임의로 이름을 통일시키면 안 됩니다.
    위 예시의 경우 같은 스킬이지만, 2hs만 2hs_inferno_loop입니다. 그렇다고  1hs_inferno_loop나 2hs_skill2
    로 바꾸면 정상 작동하지 않습니다. (인페르노 안쓰는데 예시로 든거고 실제로 저런 케이스가 꽤 있습니다)

----------------------------------------------------------------------------------------------------------------------

AnimationState 결론 
 
   * 열었을 때 무기타입별로 따로따로 나뉘어 있다? = 변경 O
     (예시 - "hth" :  [ "hth_run" ], "1hs" : [ "1hs_run" ], "1ht" : [ "1ht_run,..." ])

   * 순정임에도 값이 모두 통일되어있거나 사용하지 않는 타입 한 가지뿐이다? = 변경X
     (예시 - "hth" : [ hth_fe_neutral_selected" ] 하나 뿐이거나 타입은 모두 존재하나 값이 하나일 경우)

----------------------------------------------------------------------------------------------------------------------


(11) [1] Death ~ [19] KnockBack, [32] Run_turn_180_Cw ~ [41] Fidget를 D2RSME로 변경한 결과 싸이드를 
      들고있지만 모두 양손검 동작이 되었습니다!


[2. 무기 외형 변경하기]

거의 다 왔습니다. 이제 무기를 생성해서 강제로 오른손에 쥐어줄 겁니다.

Q. 그냥 claymore.json을 scythe.json으로 대체하면 되지 않나요?
A. 아쉽게도 디아블로2 레저렉션의 무기 부착지점은 외형이 아니라 실제 무기의 분류에 따릅니다. 즉, json을 
   대체함으로써 외형이 클레이모어가 되더라도 클라이언트는 싸이드로 인식해 모델의 Pivot(0,0,0위치, 손잡
   이)을 싸이드에 맞춰버립니다.

▲ scythe.json을 claymore.json으로 대체하면 각도를 제대로 못잡고 180도 왔다갔다 하는 문제가 생깁니다.
    // 모션의 문제가 X


(1) data/hd/character/player 폴더로 들어가 무기코드.txt와 Sorceress.json(수정할 캐릭의 json)을 실행
    합니다.



(2) 무기코드.txt의 내용을 위와 같이 모두 선택해서 복사한 다음 



(3) Sorceress.json 마지막 줄로 이동해서 저 위치에 붙여넣습니다.



이렇게 되었는지 꼭 확인하시고 저장합니다.

※ 클레이모어가 아닌 다른 무기를 착용하고 싶다면 "filename": "원하는 무기의 경로"로 변경하시면 됩니다.
   // 경로를 모르실 경우 네이버 코드모리님의 블로그(https://codemori.tistory.com/14)의 json 파일 게시글
      을 참조하시거나 구글에 CascViewer를 검색하여 설치하신 다음, 디아블로 설치 폴더를 지정해 열어 확인 
      가능합니다.



클레이모어를 양손 모션으로 들고 다니는 걸 볼 수 있습니다만, 싸이드랑 같이 들고 있습니다 ㄱ-

대망의 마지막 작업은 바로 원본 무기를 없애버리고 스왑용 콜투&모너크를 이펙트로 대체(스왑 확인용)하는

것입니다. 스왑 확인을 다른 요소(스왑 확인 패널이라던가)로 하실 경우엔 아래 안내에 따라 크리스탈 소드와 

모너크도 싸이드처럼 지워주면 됩니다.

Q. 크소&모너크는 왜 바꾸나요? 모션 1hs로 주고 살리면 안 되나요?
A. 겉보기에 클레이모어를 장착한 것 같지만, 사실 아이템은 숨기고 클레이모어의 외형을 캐릭터 자체에 신체
    일부처럼 붙인 상태입니다. 따라서 스왑을 해도 클레이모어가 출력됩니다. 
    대부분 유저분들은 스왑으로 콜투(소집)을 쓰실 텐데 역시 구별이 문제가 될 수 있어 이펙트를 추가하는 방
    법을 추천드리는 겁니다.



(4) data/hd/items/weapon/polearm에 들어가면 scythe.json이 있습니다. 열어줍시다.



(5) 그냥 열어서 내용을 모두 지우고 저장합니다.
     // 파일을 지우면 순정파일을 호출하지만, 빈 파일으로 남아있다면 빈 파일을 불러오려다 아무것도 출력
        하지 않는 점을 이용합니다.



마침내 싸이드가 완전히 클레이모어로 모션까지 완벽 적용되었습니다!

2, 4번 이미지는 스왑 콜투+모너크인데, 예전에 엽굵님이 올리신 이펙트를 적용시켜 보았습니다.

------------------------------------------------------------------------------------------------------------------------

소서 무기 룩변 및 이펙트

------------------------------------------------------------------------------------------------------------------------

해당 무기 스킨의 items 폴더를 빼고 적용시킨 후 

dragon_stone.jsondata/hd/items/weapon/sword/crystal_sword.json
kite_shield.json data/hd/items/armor/shield/kite_shield.json

으로 넣어줬습니다.


END...

p.s 거의 다 쓰고 컴퓨터 다운되서 멘붕왔는데, 켜놓고 좀 자다가 일어나니 살아남았네요 ㅜㅜ
    스킨 생활에 조금이나마 도움이 되시길 바라겠습니다.