다시 확인해보니 뇌피셜로 싸갈긴 내용들, 이해하기 힘든 내용이 많아서 모두 수정함.


이 가이드는 스카이림을 얼마 하지 않았거나 툴에 미숙한 초심자를 위해 쓴 글이니 마음놓고 따라오기만 하면 된다. 제군.


https://www.nexusmods.com/skyrimspecialedition/mods/104769?tab=description

찾아보니 접근성 좋게 psc파일을 만들어 배포하는 모더가 있다...

이 글 들어가서 그대로 따라하면 된다.

본문보다 훨씬 쉬울뿐더러 호환성도 좋음.







https://daisicmod.tistory.com/7

본론으로 들어가기전 이 글을 보며 cktool에 필요한 기본적인 것들을 적용시키도록. 

내 블로그가 아니지만 상관없겠지.

아래 파일에 포함되어 있던거 같긴한데 확실하지가 않으니 다운받아 적용시켜라.





https://arca.live/b/tullius/5232710

그리고 이 글을 한번 읽고온다.

내게 도움이 됐던 글이다.

그것조차 읽기 귀찮은 제군을 위해 약간의 긴빠이(싸제 단어로는 복붙을 의미한다)를 치자면


Hello는 가까이 가거나 대화를 시작할 때,(상호작용 없는 캐릭터들은 이 대사만 주구장창 친다.)


Goodbye는 대화가 끝났을 때,


Detection NormalToCombat은 평온상태에서 전투가 시작할 때,


Combat Hit은 맞았을 때,


Combat Attack은 어택을 할 때,


Combat PowerAttack은 파워어택을 할 때,


Combat Bleedout은 피가 닳아서 쓰러질 때 (npc들이 죽을때되면 빌면서 바닥에서 기어다니는 것을 생각하면 된다.)


ActorCollidewithActor는 플레이어와 부딪혓을 때,


Favors Agree는 명령이행 수락,


Favors Refuse는 명령이행 거절,


Favors ExitFavorState는 위와 같은 긍정, 부정 상태에서 빠져나왔을 때, (명령이행 상태에 들어갔다가 tab버튼을 누른다던지.)


PlayerShout는 플레이어가 포효를 사용했을때


Detection AlertToCombat는 경계 상태에서 전투로 돌입했을 때,


참고로 여기서 alert는 적이 주위에 있지만 시야 내에 들어오지 않아 어디 있는지 모르는 상태를 의미한다.


산적들 소굴 가면 맨날 들을 수 있는 허?거기 누구 있나? 분명 무슨 소리를 들은것같은데같은 대사를 치는 상태라고 보면됨.


그 상태에서 전투하면 그럴줄알았지! 같은 대사 칠때 있지? 그게 바로 alertocombat임.


Taunt는 전투 중 도발.


CombatToNormal는 전투가 끝났을 때,


AlertToNormal는 경계 상태가 끝났을 때,


AlertIdle는 경계 상태에서 평온상태로 바뀔때(경계상태가 지속될때?일거임 아마?)


DetectFriendDie 친구 또는 동료들이 죽은 것을 발견했을때.


이 정도는 기본적으로 알아두는 것이 좋다.



https://drive.google.com/drive/folders/16EOOM5R8oa6F-mVtI5BNfA5M61peLGbL?usp=sharing

또한 본인이 업로드해둔 링크의 파일을 다운받아 cktool이 설치된 폴더에 마구마구 덮어씌워라.

cktool은 !개병신! 프로그램이기에 유저 패치가 없으면 정상적으로 사용 할수 없다.

UCKP와 트윅, 그외 잡다한 패치 파일이다.

exe파일들은 백업과 ck 다운그레이드빼고 전부 실행해주어야 한다. 다운그레이드도 필요하면 설치 ㄱ

fonixdata의 경우 sound - voice - processing폴더 찾아서 내용물 덮어씌우면 됨.

폴더가없을시 ck툴로 보이스파일 하나 생성하면 어딘가에 만들어질거다. 







MO 기준임.

본 가이드에서 팔로워의 외형을 만드는 방법에 대해서는 다루지 않는다.

그건 이쪽으로.

https://arca.live/b/tullius/92046280?category=%EC%A0%95%EB%B3%B4&p=1

이 글도 그냥 따라하기만 하면 된다.


참고로 내 글은 23756자야.





이모션 수정은 ck툴에서는 수정하기 불편한 대신 음성 대사를 하나하나 들어볼 수 있다는 장점이 있고 세딧은 간편한 대신 음성을 들어볼 수 없다는 단점이 있음.

나같이 귀찮은거 싫은 사람은 마지막에 세딧으로 몰아서 수정하고, 장인정신 장착된 사람은 하나하나 들어보면서 수정하면 됨.




음성 파일을 분류할땐 대사로 제목을 지정해주는게 좋다. 아니면 나중에 하나하나 들으면서 생 노가다해야됨.

편집 시 audacity란 프로그램이 매우 편하니 적극 활용.

https://www.audacityteam.org/ 

필수 세팅이 있으니 무적권 다운 받을 것.

다른 프로그램 쓸 줄 아는 사람은 그거쓰셈.


효과 - 볼륨과 압축탭에서 찾으면 된다.

다운믹스는 여러 트랙 - 믹스 탭에서.



똑같이 따라하면 됨.


보이스 파일은 xwm이거나 wav여야 한다. 

위에 나온 것처럼 무조건 모노채널로 만들어야하고 앞뒤 0.2초정도 무음을 주는게 좋다.

안그러면 입술 잘 안움직임. 


폴더에 들어간 음성파일을 인식하게 만드려면 CK툴을 껐다가 다시 켜야되는데 매우 귀찮음.

따라서 립파일 생성은 맨 마지막에 하는게 편하다.


만드는 도중 ESL화를 할시 보이스 파일 경로 지정이 엉킨다. 따라서 퀘스트를 만들거나 하기전에 ESL플래그를 박자.

근데 난 어떤 문제가 생길지 몰라서 esp로 만듬. ESL로 한번 만들어봤었는데

내가 빙신짓한건지 뭔지는 모르겠지만 잘 안됐었다.

또한 툴에서 한글을 쓰고 싶은경우 시스템 로캘에서 UTF8을 킨 후 재부팅하는걸 잊지말자. 

참고로 슼림 한글패치가 안되어있다면 한글로 만들어도 인겜에선 네모박스로만 뜬다.


중간에 인겜 내에서 확인 하고 싶은 경우에도 SEQ 만들어주는걸 꼭 잊지말자.






시작하겠다.

만들어둔 팔로워를 active file로불러온다.

actor탭에서 새로 만드는 경우 이름은 왠만하면 Bozifart같은 특이한 이름이 좋다. 

나중에 찾기 편하기 때문이지.

이 esp네이밍은 캐릭터 이름과 아무 상관없으니 원하는 대로 짓도록 하자.

찾기 힘들면 왼쪽 상단에 활성화한 esp의 내용물만 보이게 하는 showonlyactiveform체크


id는 건들지말고 name은 한글이든 영어든 자유롭게 수정해주자.

unique체크해주고, essetial도 무적으로 만들고싶으면 체크.

스텔스 미터에 영향없게 만들고싶으면 왼편의 doesnt affect stealth meater을 체크.

근데 요즘 동료모드들은 은신지원기능 있는게 대부분이라 체크 안해도 그다지 불편하진 않을거임.


traits탭으로 가보자.

보이스 타입 지정을 해야된다.

탭에 자신이 만든 커스텀 보이스 타입이 이미 있다면 그걸로 지정하고

없다면 잠시 캐릭터 esp창을 끄고 왼편에 있는 character - voicetype 탭을 눌러 캐릭터 보이스를 하나 만들어준 후 

젠더는 성별에 따라 설정 해야 하지만 아래 체크박스는 체크안해도 된다.

참고로 이후부터 만들 모든것들은 (followername)블라블라로 이름을 짓는게 편하다.

찾기쉬움 ㅇㅇ

아무튼 만들었으면 

다시 캐릭터esp로 돌아가 그 보이스로 지정한다.


stats

대충 취향대로 만진다.

기본적인 전투방식은 대검일경우 human2hworriorboss였나? 이거 고르면 되고

쌍수는 프레아로, 궁수는  humanmissile을 넣으면 된다. 검방은 1hhumantank였나가 기본이고

메이지는 잘 모르는데 인겜에서 세보이는 애거를 대충 찾아서 넣어보자.

offset값,base값,class도 적당히 설정해주셈.

개인적으로 난 동료가 너무 세면 게임이 재미가 없어져서 적당히 나약하게 만드는 편이다.



factions탭

currentfollowerfaction -1

potentialfollowerfaction 0

potentialmarriagefaction 0  <-이름만 봐도 알 수 있듯이 결혼태그다. 기능 필요없으면 안넣어도 됨.


relationship탭

new를 눌러 하나 만들어준다.

이미 있으면 내용이 똑같은지만 확인하고 패스.

parent npc (followername)

child npc player

level ally

assossiate none







완료 했으면

캐릭터 esp를 끄고 좌측의 Quest 탭으로 간다.


여기서부터 조금 어려워보일수 있지만, 관찰력을 발휘해라 제군.

CK툴이 아무리 욕을 쳐먹어도 베데스다에게 애용받는 이유는 직관성과 편의성덕분이다.


new를 눌러 새 퀘스트를 만든다.


generic(followername)follower

범용대사 탭을 만든다


start game enabled 체크

run once 체크

type none

event none

priority 0


퀘스트다이얼로그 탭에 new를 눌러 새 항목을 만든다.

getisid (followername) = 1

모든 박스부분은 영어로 치기만 하면 검색이 된다.

참고할것.





(followername)generic

커스텀 대사탭이다. 이 커스텀 대사탭에는 playerdialogue 탭에 별도의 스크립트가 필요한 대사를 넣으면 된다.

참고로 별도의 스크립트가 필요한 대사는 명령, 이별, 소집, 동료의 인벤토리 오픈등 결과값이 특정 행동일때의 대사들이다. 

각각의 스크립트마다 브랜치를 새로 만들어줘야한다. subtype은 커스텀이다. 브랜치 이름은 구분하기 쉽게 알아서 짓도록.

dismissed,follow등으로 직관적으로 만드는게 세딧 만지작거릴때 편하다.

favor 대사는 동일 탭내 playerdialogue부분에 스크립트를 써서 브랜치를 박은다음 favor 부분으로 건너뛰어가 agree(수행) refuse(거절) show(favor상태 대기대사라고 생각하면 됨)를 각각 설정해주면 된다. 


start game enabled 체크

run once check 체크

allow repeated 체크

type none

priority 0

event none


펑션탭에 add를 눌러 새 항목을 만든다.

getisid (followername) = 1 and 



퀘스트 엘리아시스 지정

우클릭후 new reference alias를 누른다

동일하게 만들면 된다.


확인 후 닫고 저장 한번 해주자.

이제 대사를 넣을 차례다.

player dialogue탭으로 가서

브랜치 부분에 스크립트에 맞는 각각의 주제를 만든다. 

topic탭에 new를 누를시 간략화된 response창이 뜨는데 취소를 눌러 topic info창을 킨다.

subtype은 custom, 그 옆 토픽 부분에는 플레이어의 대사를 넣으면 된다.

나와 함께 가지 않겠나? 이런식으로.

토픽인포창 프롬프트 부분에는 대사마다 다른 플레이어의 반응이나 대사를 넣을 수 있다.


아래에 기입된 스크립트를 보고 

필요한 스크립트 지정하자.

엔드세션에 넣어주어야 한다.


스크립트를 컴파일하고 오류가 뜰시 줄마다 앞에 세미콜론 붙이고 확인을 누른 후 냅두자. 


; don't dismiss the follower again if I've already dismissed them

;If !(akspeaker.IsInFaction(DismissedFollowerFaction))

;  (pDialogueFollower as DialogueFollowerScript).DismissFollower(0, 0)

;EndIf


이런식으로.


이따 해결법 알려줄거임.


필요한 스크립트는 아래에 모아두었다.


눈치껏 보고 복붙하도록. 그 다음 compile을 누르면 된다. 알고 있겠지만 한글은 복붙하면 안된다.


한글은 대사나 캐릭터 이름을 쓸때 말곤 필요 없다.


같은 상황에서 다른 대사를 치는 경우에만 브랜치 내에 대사를 추가한다.


문제가 없다면 ck툴이 에러를 내뿜지 않겠지.


아니, 생각해보니 내뿜을수도 있겠군. 하지만 악으로 깡으로 버티는거다 제군.


이별, 동행스크립트는 세미콜론 없을경우 오류뜨는게 정상이니 안심하도록.


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ팔로워 스크립트ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ



(pDialogueFollower as DialogueFollowerScript).SetFollower(akspeaker)

팔로워 동행




; don't dismiss the follower again if I've already dismissed them

If !(akspeaker.IsInFaction(DismissedFollowerFaction))

  (pDialogueFollower as DialogueFollowerScript).DismissFollower(0, 0)

EndIf

팔로워 이별




akSpeaker.SetDoingFavor(false)

명령 상태 돌입 실패



akspeaker.SetDoingFavor()

명령 상태 돌입 성공




(GetOwningQuest() as DialogueFollowerScript).FollowerFollow()

대기종료

토픽인포 컨디션내에

getactorvalue waitingforplayer=1를 추가.




(GetOwningQuest() as DialogueFollowerScript).FollowerWait()

대기시작

토픽인포 컨디션내에 

getactorvalue waitingforplayer=0를 추가.



akspeaker.OpenInventory()

동료의 인벤토리 오픈




기본값은 참이므로 True를 넣을 필요는 없다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


그 후 모든 토픽 인포 탭내 컨디션에

getisid 동료고유id = 1

getinfaction currentfollowerfaction = 를 추가

팔로워가 동료상태일때 출력하고싶은 대사에는 1

아닐경우 0을 넣어주면 된다.

우클릭해서 copy condition을 누른 후 paste condition으로 땜빵해주자.


동료영입 토픽 컨디션에는

getinfaction currentfollowerfaction값을 *넣지말고*

getinfaction faction potentialhireling = 0

getglovalvalue playerfollowercount 

바닐라 팔로워 인원 제한이다. 넣고싶은 값을 넣자. 0명일때만 영입 가능하게 두고 싶으면 = 0 and을 두면 됨.

근데 이것도 동료관리 모드에 덮어씌워지는 조건이라 안넣어도 상관없긴하다.

getinfaction potential follower faction  1

이 순서 그대로 넣어준다

마지막으로

대사마다 random플래그를 박는다.

대사의 끝에는 random과 random end플래그를 박는다.

대사 후 대화가 끊기게 만들고 싶으면 goodbye도 체크해준다.





잘 따라왔나?

뭣, 무슨 개소린지 모르겠다고? 이런...위에 가서 차근차근 다시 따라해보도록 하자.


여기까지 잘 따라온 나머지 제군들을 위해 알려주자면 ck툴은 가끔 오류가 없음에도 에러를 내뿜으며 튕기는 경우가 있다.

메모리가 부족하다든지 그런 잡다한 이유로 말이야. 그렇기에

!CK 툴이! !병신 프로그램! 임을 절대 잊지말고 저장을 생활화하는 습관을 가지도록.


봤으면 당장 저장하도록 하자.




이상의 내용을 모두 완료 했으면


아래 예제 사진을 보고 따라할 것.


커스텀 대사 전용 퀘스트탭을 열어 scripts탭에 가


add script를 눌러주고, favordialogueScript를 추가해준다.


auto fill all을 눌러 프로퍼티를 자동으로 채워주고,


채워지지 않은 부분은 edit value버튼을 눌러












빠진 부분이나 위 사진의 항목이랑 다른 부분이 있다면 똑같이 바꿔준다.


중간에 다른 오류가 뜬다면, 스크립트 폴더로 가서 만들었던 스크립트를 모두 삭제하고 ck툴을 껐다 켜 처음부터 다시한다.


모두 이행했으면 ok버튼을 누른후 저장해준뒤, 다시 커스텀 전용 대사 퀘스트탭을 열어 에러가 떴던 토픽을 연다.


방금 전, 찐빠가 낫던 스크립트 부분을 고쳐줄것이다.


오류가 난 부분은 동행과 이별 스크립트 이 두가지여야 한다.


그 외에 오류가 떴다면, 스크립트를 잘 복붙했는지 확인하거나 다른 새로운 문제일지도 모르니 구글링한다.


동행 토픽부터 봐보자.


생선된 깡통 스크립트를 우클릭하여 edit property를 누르고 add property를 누른다. 


이 창에서 수정을 하면 된다.


타입은 quest로 두고, 이름을 pdialoguefollower로 프로퍼티를 하나 추가한다. 값은 자동지정 되어있어야 한다. 안될시 auto fill 클릭, 

클릭 후에도 변경이 없다면 이름 확인할 것.


이별 토픽으로 넘어간다.

방금이라 똑같이 스크립트에 프로퍼티를 추가한다.

타입 퀘스트 pdialoguefollower(value는 dialoguefollower), 타입 팩션 dismissedfollowerfaction(value는 dismissedfollowerfaction)을 추가 후

auto fill all을 눌러준다.


이제 줄 앞에 붙여두었던 세미콜론을 때고 컴파일을 누른다.


에러가 뜨지 않는다.


(pDialogueFollower as DialogueFollowerScript).SetFollower(akspeaker)


; don't dismiss the follower again if I've already dismissed them

If !(akspeaker.IsInFaction(DismissedFollowerFaction))

  (pDialogueFollower as DialogueFollowerScript).DismissFollower(0, 0)

EndIf


귀찮으면 복붙 ㄱ







이제 추가하고 싶은 다른 범용 대사를 넣어준다.


그리고 아까 말했다시피 범용대사 전용으로 만든 퀘스트에 넣어야한다. 


여기서 더 심화하면 대화를 연이어서 할 수 있다거나,

 

다이얼로그 내에서 복수의 응답이 가능해진다거나, 팔로워가 퀘스트를 준다거나등이 가능하지만


귀찮기도 하고 나도 잘 모르기에 생략하겠다.


그 부분은 제군들이 ck툴을 잘 살펴보도록.


대사 추가가 끝났으면


이제 대사에 맞는 보이스 파일을 폴더에 넣고 립 파일을 생성해야 한다.



이 창에 나온 voice filename부분이 보이는가?


음성파일이름을 저런식으로 한화한화 바꿔주면 된다. 확장자는 건들면안댐.


똑같이 바꿔줘도 여전히 립파일 생성 버튼이 눌리질 않는데,


무시하고 폴더에 넣은 파일들의 이름을 알맞는 이름으로 모두 바꿔준다.


모두 바꿨으면 창을 끈 후 저장한번 사악 해주고 다시 저 edit response창을 열어준다.


generate lip file버튼이 활성화 됐을것이다.


그래도 안보이면 처음에 써놨듯 ck툴 껐다키셈


이제 저 버튼을 대사마다 하나씩 열나게 눌러주면 끝이다.


노가다 ㅅㄱ


생성하고 확인창 누른다음 파일이 만들어졌는지, !경로! 지정이 잘 됐는지만 (음성파일과 립파일 모두 Y가 뜨는지) 보면 된다.

인식을 못하면,

저장하고 ck툴을 껐다키면 인식이 된다.


마지막으로 대사마다 이모션 지정하는 것을 잊지말자.









완료 했으면 저장을 하고 ck툴을 꺼준다.

 

특수한 상황에서 대사를 치게 하고싶다면...


세딧으로 타인의 커스텀 팔로워와 자신의 팔로워모드를 불러와서 ck툴에서 건드렸던 컨디션 부분을 찾아


조건을 복사 붙여넣기 한다.


여러번 만들어봤으면 어떤 조건이 필요한지 대충 감이 오지만,


우리는 아직 아무것도 모르기에 남이 해놓은거 대충 벅벅 긁어다 쓰면 된다.


이거는 본인이 하나하나 찾으면서 하는 수 밖에 없음.


https://ck.uesp.net/wiki/Condition_Functions


여기 참조. 


and or같은것도 신경써서 사용해보자.


이 부분에 대해 더 알려주고 싶지만...조건이 노무 많고 나도 모르는게 많다.


암튼 바꾸고자 하는 내용들을 shift 클릭해 복수선택 한다음, 


필요한 내용이 담긴 항목을 ctrl로 클릭한 후 우클릭을 눌러 메뉴를 호출하고 compare 버튼을 누르면 된다. 


좌클릭으로 항목을 끌어당겨 쉽게 붙여넣을 수 있으니 참고하도록.


세딧 사용법이 어렵다거나하면 구글링 해보는걸 추천한다.


그 외에 여러가지가 더 있긴하지만, 지금은 이 정도만 알아두도록 하자.


개인적으로 ck툴은 복수의 새 컨디션을 만들때, 세딧은 복수의 같은 컨디션을 복사할때 쓰는것을 추천한다.


조건을 대충 넣었으면 세딧을 끄고


필요한 파일들만 뽑아 정리해야한다.


립파일을 생성한 사람들은 이미 립파일 경로를 알것이고,


스크립트 파일은 아까 만지작 거렸던 퀘스트탭 토픽인포 스크립트 부분에 이름이 쓰여있다.


새폴더를 만들어 동료의 esp파일과 텍스쳐, 메쉬 폴더를 넣고


Voice와 Scripts폴더를 만든 후 각각 그 안에 동료의 보이스 폴더와 립파일, 그리고 스크립트 파일들을 넣는다.


모든 것이 끝나면 세딧을 켜서 모드의 SEQ파일을 생성한다.


MO 오버라이트 폴더에 생성된 SEQ 폴더를 


동료 폴더에 넣고


그 폴더 내의 내용물들을 모두 묶어 압축하면 배포 준비 완료다.



여기까지 잘 따라왔다면...축하한다. 제군도 이제 당당한 모더다.



이상이 커스텀 보이스 팔로워 제작의 골자다.

다른 제작 가이드들은 너무 오래되고 내용도 길거나 어려워서

팔로워를 제작하며 만들었다.

내용이 난잡하다고 느낄 수 있지만, 원래 까먹지 않으려고 메모장에 써갈겨놓았던 글을 다듬은 것에 불과하니 이해하도록. 


켜놨던 UTF8은 다른 프로그램에서 오류 뜨는 경우가 있으니 작업 후에는 다시 꺼놓는 것도 까먹지 말자.


https://www.youtube.com/watch?v=oJB7eLcCo0c


유튜브로 천천히 하나하나 배우고 싶다면 이 강좌를 추천한다. 내게 매우 도움이 됐었음.

친절한 양남이 자막도 넣어뒀으니, 애국자라면 자동번역 기능써서 보셈. 

개인적으로 이렇게 만들시 모드가 조금 무거운 느낌이 있는 것 같다.

아?님말고.



https://www.creationkit.com/index.php?title=Complete_Example_Scripts

이곳에 가면 도움이 되는 예제 스크립트들을 볼 수 있다.







따라 오느라 수고한 제군들을 위해 메스가키보추좋아행보관이 꿀잠을 경험시키게 해준다는군.


이상으로 본인은 진짜 가보도록 하겠다. ㅂㅂ


본문과 똑같이 할시 대기명령이 작동안하는 문제점 발견함.


추후에 수정.