폴아웃 4 바닐라에서 제공하는 동료 스크립트에 대해 알아보도록 하자





1. 구성



바닐라 동료는 이렇게 다섯가지 스크립트로 구성


똑같이 달아주면 그대로 작동하지만 설정을 해줘야함


companionactorscript 가 호감도 관련


CompanionCrimeFactionHostilityScript 이건 아마 퀘스트 진행이랑 관련있을텐데 플레이어가 특정 팩션 인물을 살해해서 전투가 시작됐을 때 그 팩션 편을 드는지 마는지 관련임


CompanionPowerArmorKeywordScript 이건 동료가 파암타면 버티버드 탈 때 탑승 위치가 달라지게 하는 스크립트


teleportactorscript 는 인스티튜트 진입시 텔레포트 관련


workshopnpcscript 는 정착지 npc 스크립트인데 이거 없으면 헤어질 때 정착지로 못보냄


머 딴건 손봐줄거 없이 바닐라 동료꺼 뜯어오면 되고 문제는 companionactorscript임


2. 동료 호감도 스크립트


이게 사실 FO4Edit으로 봐서 그렇지 크킷에서 Properties로 열어보면 변수마다 설명을 다 적어놨음


CompanionActorScript는 동료 기능중에서도 호감도에 관련한 동작을 설정하는데


그럼 다른 동료 기능들은 어디있냐? 동료를 영입할 때 FollowersScript가 붙음. 이건 TMI고


FO4Edit 기준으로 순서대로 변수를 설명해주겠음


CA_Event_Murder - 건드릴거 없음.


ConsideredMurderFactionList - 선량한 사람을 살해한걸로 취급되는 리스트임. Form list 붙여주면 되고 이 리스트에 있는 팩션 인물을 살해하면 살인으로 처리되서 강제 대화랑 뭐 살해 관련 코멘트 이런게 나옴


DislikesEvent - 말 그대로 싫어하는 이벤트. 이건 대화 이벤트에 쓰이는 키워드임. 인물 성향에 따라 퀘스트라인에 특정 대사를 하면 호감도 변화가 생기는데 그걸 정해주는 키워드임. 퀘스트 Topic Info에 CA_DialogueBump_TopicInfoScript 를 추가하고 여기에 정한 키워드를 보내주면 그 동료가 싫어한다고 뜨면서 호감도가 소폭 감소함.


DismissScene - 이거 쓰진 않는 것 같던데 동료 대화 Scene에서 헤어지는 장면 선택해주면 됨


EventData_Array - 사실 커스텀 동료는 이게 핵심임. 퀘스트라인에 호감도 변화를 하나하나 다 넣어준다는건 보통 애정이 아니고서야 불가능하잖아? 그래서 좀 광범위한 반복이벤트에 호불호를 표시해줄 수 있음.

Array of struct 타입으로 되어있는데, 이건 struct의 묶음 그러니까 데이터 묶음의 묶음임

Disposition_Global -> 이 이벤트에 대한 동료의 반응. Likes, Loves, Dislikes, Hates, Indifferent(안씀) 이렇게 다섯가지 있음

Event_Keyword -> 어떤 이벤트에 반응할건지

Message_to_Display -> 알림에 뜨는 메세지

쉽죠? 뭐 CA_Event 쳐서 나오는 이벤트랑 반응 대충 집어넣어주면 됨


Experience - 건드릴거 없음.


HasItemForPlayer - 건드릴거 없음.


HatesEvent - DislikesEvent와 동일한 부분인데 이건 호감도가 좀 더 많이 떨어짐.


HomeLocation - 보통 동료를 영입하고 정착지로 보내면 이 홈 로케이션도 정착지로 변함. 근데 만약 정착지로 보낸 적도 없는데 지혼자 드러눕고 치료안해줘서 동료가 떠나게 됐다? 그럼 여기로 갈거임


IdleTopic - 내생각엔 이것도 안쓰는 변수같음 걍 대충 Idle 다이얼로그 잡아주셈


InfatuationPerk - 호감도 꽉채우고 로맨스 성공하면 주는 퍽


InfatuationPerkMessage - 따로 메세지 박스 떠서 뭐 호감도가 최대로 도달하여 어떤 퍽을 얻었습니다 하는 메세지


InfatuationRomanticMessage - 로맨스 성공해서 호감도 증가시 메세지


InfatuationThreshold - 호감도가 이 수치를 넘어야 로맨스가 유지됨. 이게 연인의 포옹 효과를 받기 위한 최소 호감도고 이 호감도 수치를 넘어야 플레이어가 침대에서 잤을 때 동료도 그 침대에 같이 잠


ItemToGive - 가끔 동료가 뭐 줄거있다면서 주는 아이템 목록 (레벨드리스트임)


KeywordsToAddWhileCurrentCompanion - 동료 영입시 부여할 키워드. playerCanStimpak 키워드가 기본으로 없다면 이거 달아줘야 부상시 스팀팩으로 치료 가능함


LikesEvent, LovesEvent - 알죠?


MQComplete - 건드릴거 없음


MurderThreshold_Array - 쓰이지는 않는데 플레이어가 살인을 저질렀을 때 강제 대화 이벤트를 정해줄 수 있음. 여기에 정의해준 struct의 갯수가 허용 세션의 숫자고, 이 세션이라는건 살인을 처음 시작하고 최대 허용치까지, 또는 특정 시간 내에 몇 명을 살해하든 그게 하나의 세션이 됨. 세션 당 최대 살인 허용치를 넘으면 다음 세션으로 바로 넘어갈 수도 있는데 바닐라 동료는 프로그래머랑 각본가랑 말이 안맞았는지 이건 MaxVictimsAllowed = 1000 으로 사실상 막혀있음. (갑자기 다음 세션으로 넘어가더니 "전에도 말했듯이" 라는 대화를 하면 이상하다는 이유)

QuestToSet - 대화 퀘스트

StageToSet - 스테이지

AffinityPenalty - 이걸 정해주면 해당 세션에 도달했을 때 이 숫자만큼 호감도 변화가 생김. 웃기게도 변수명은 패널티인데 음수로 줘야 호감도가 깎임 (바닐라 동료들은 두번째 세션에 -5000이 박혀있음)


MurderToggle - 이게 위의 데이터가 쓰이지 않는 이유임. 원래 동료는 살인 세션 2번이면 호감도가 운지하면서 떠나는데 이게 너무 가혹하다 판단됐다고 기능 자체를 이 변수를 통해서 꺼놨음. 만약 따로 켜주고 싶으면 이걸 다른 글로벌 값으로 해서 0이 아닌 값을 주면 됨.


NotConsideredMurder_Array - 이 팩션에 소속된 NPC는 살해해도 이 동료가 살인으로 간주하지 않음


ShouldGivePlayerItems - 이거 끄면 플레이어한테 아이템 주는 이벤트 발생 안 함


StartingThreshold - 처음 만났을 때 호감도.


TemporaryAngerLevel - 건드릴거 없음. 만약 플레이어가 이 동료가 싫어하는 행동을 하면 잠시동안 여기 설정된 avif가 1이 되는데 뭐 다른 용도에 쓰고싶으면 써도 될듯?


ThresholdData_Array - 호감도 관련에서 가장 중요한 데이터. 여기서 호감도 단계를 정하고 그 단계에 처음 도달하거나 관계가 나빠졌다가 다시 회복됐을 때 재생될 대화 Scene, 추가 조건같은걸 걸어줄 수 있음.

보통 바닐라 동료들은 처음 호감도 단계에 도달했을 때 대화는 각각 다 있고, 반복 대화는 호감도 하락시에 있음 (갑자기 말걸어선 요즘 행동이 이상하다, 마음에 안 든다 이런거 말해주는거). 

특별히 최대 호감도 단계는 다시 도달했을 때 재도달 대화가 있음. (요즘 너 다시 돌아온 것 같아 같은느낌)

AffinitySceneToPlay_FirstTimeReached - 처음 이 호감도 단계에 도달하면 발생할 대화에 대한 글로벌 변수

AffinitySceneToPlay_Repeat_GoingDown - 호감도가 하락해서 이 단계로 돌아왔을 때 발생할 대화에 대한 글로벌 변수

AffinitySceneToPlay_Repeat_GoingUp - 호감도가 상승해서 이 단계로 돌아왔을 때 발생할 대화에 대한 글로벌 변수

ConditionalGlobal - 호감도 증가를 퀘스트나 다른 조건으로 막고싶을 때 쓰는 글로벌 변수

Controlling_Quest - 대화 퀘스트

Controlling_Quest_Stage - 퀘스트의 Stage

ThresholdMessage - 호감도 도달 메세지

Threshold_Global - 호감도 기준치

IsMajorAffinityThreshold - 기본값 true인데 이게 켜져있으면 동료 avif 중 CA_HighestThreshold 랑 CA_LowestThreshold 가 업데이트되서 나중에 대화문같은데에 조건으로 쓸 수 있게 된다고 함. 복잡한 대화문까지 만들고 싶으면 건드리지 말 것.

ThresholdHasBeenPreviouslyReached - 스크립트 내부 변수니까 건들지마셈.


TraitPreference_Array - 이건 CA_Event_어쩌고가 발생했는데 동료 호감도 이벤트 목록에 그게 없을 때 대사로만 뭐 좋은 일 하고있네 나쁜 일 하고있네 이런 첨언을 하는 경우 있잖음? 그걸 발생시킬 때 씀. CA_Trait_Selfish, CA_Trait_Generous 이런걸로 잡아주고 그게 호 인지 불호인지 설정해주면 퀘스트에 설정된 대사를 하고 필요에 따라 호감도 증감도 발생함


Tutorial - 건들거 없음



폴4는 동료 호감도 스크립트를 아에 템플릿 형태로 주기 때문에 생각보다 호감도 증감 이벤트나 그에 따른 대화는 만들기 쉬운편인 것 같음


아니라고? 아님랄로 ㅋ