#1 https://gall.dcinside.com/game_dev/125331
#2 https://gall.dcinside.com/game_dev/125369
어제(*5월 6일)까지만 해도 지피티와의 상담만 했지만, 오늘부터는 조금씩 만들어가면서 아이디어를 뽑아보기로 했다.
사실 아이디어라는 건 커피를 마시거나 밥을 먹다가, 혹은 욕조에 들어가면서 얻어진다기 보다는, 그와 관련된 행위를 할 수록
점층되는 것에 가까웠다. [하드보일드팜]의 플레이어 행동 방식도 마찬가지였다.
그게 뒤늦게 알아보기로는 어떤 알고리즘의 일종이었던 것 같은데? (행동 스위치? 행동트리, 검색해보니까 행동트리가 맞는듯?)
워크래프트3의 유닛 움직임을 거의 복붙해서 만든 거였다. 스위치로 attack, move, stop, hold 이런 식으로 나눠서 행동하게끔 하고,
워크 유닛의 행동을 프레임 단위로 분석하면서 행동트리라는 알고리즘을 따라해본 것 같다.
사실 워크를 따라해보기 전, 나는 그냥 마우스로 바닥을 클릭하면 그곳을 캐릭터의 Navmesh destination으로 지정하는 아주 간단한 모양을 했었는데,
적을 만들고서는, 적을 클릭하면 그냥 붙어서 공격하게. 그런 간단한 모양으로 3개월 정도를 그냥 뒀다가, 1주일 정도 머리를 싸매고 워크를 따라했던 것 같다.
따라해서 됐으면 쉬벌 잘 한 거지.... 0년차 ㅈ밥이...
어찌됐든. 9할의 아이디어는 필요와 불편에서 나오므로. 나는 일단 아이디어를 얻기 위해 Empty Object들에 이것저것 스크립트를 붙여가며 첫발을 내딛었다.
이름은 어북으로 했다. 왜냐면 스토리의 컨셉이 플레이어가 책에 갇혔다는 내용이기 때문이다. 물론, 스토리가 그렇다는 거지
플레이어가 책에 갇혔다~! 같은 언급은 없을 예정이다.
소설가 출신으로서, 세계관을 지리멸렬하게 구상해두었는데.
사투 끝에 마왕을 처치한 용사 파티 6인에 대한 이야기이다.
다만, 마왕이 사망한 직후, 용사파티원 중 하나에게 마왕의 영혼이 숨어 들어갔고, 용사의 몸에 플레이어가 깃들어버렸다.
마왕은 플레이어의 영혼을 먹어서 힘을 회복하고 하고, 플레이어는 마왕에게 들키지 않고 마왕을 찾아야하며, 파티원들을 설득하여
마왕의 몸에 깃든 파티원을 처단해야 한다.
쉽게 말해 마피아 게임이다.
그런 이야기인데. 나는 게임의 모든 서술, 대사가 자연스럽고 한 편의 소설처럼 완성되는 것을 원했기에
대화 생성 알고리즘에 대해 생각해보았었다.
일단은 하드보일드팜에서 아이템 만들기에 응용했던, 엑셀로 데이터 만들어서 spilt으로 가로세로 나누어서 딕셔너리에 넣는 방식으로
클릭하면 대화문이 하나씩 뜨게 했었다.
특히 저 첫번째 열의 '반가운 발견', '최악의 상황'은 '세계선'의 이름인데,
세계선은 특정 조건을 갖추었을 때 엔딩의 방향성을 강제하는, 멀티유니버스의 아주 기초적인 변수였다.
우선은 가장 큰 틀인 세계선으로 먼저 나누고, 저 대사들을 그때그때 변화시키는 게 좋겠다!
라고 생각을 했었는데.
방법 1: 세계선을 기준으로 대화를 나눠보자! |
그래서 근본적인 고민을 먼저 해봤다. '저 서술과 지문은 어떻게 변하는 걸까?' 진짜 장난 안 치고 어젯밤(*5.6)부터 오늘(*5.7) 저녁까지 결론을 쉽게 내지 못했다.
결론부터 말하면 마땅한 게 없었다.
방법 1 실패! |
여태 고민했던 건, '어떻게 단순화를 할 수 있을까?'였다.
우선은 내 게임에서 캐릭터의 대사가 변하는 요인은 다음 다섯가지다.
1. 세계선 2.성격 3.스테이터스(의심/신뢰), 4. 개연성(무엇을 알고 있는지) 5. 상황
개연성과 상황이 무엇이 다른지 의문이 들 수 있는데, 개연성이란 'Clue'라는 요인으로 변화하는 캐릭터만의 행동 변수다.
말이 존나어려워지네.
가령 예를 들어, '두번째 밤, 궁수는 - 전사가 - 밤에 - 마법사의 집으로 갔다' - '는 사실을 들었다' 라는 단서를 들었다고 치자.
그러면 진짜 전사가 마법사의 집으로 갔는지 안 갔는지는 중요치 않고, 해당 정보를 알고 있다는 사실이 곧 'Clue', 단서가 된다.
이 단서는 개연성이라고 바꿔 말할 수도 있는데, 어떤 행동이나 대사를 하기 전에 '그럴 만했다'라고 생각이 들게 하는 요인이기 때문.
해당 정보를 알고 있는 궁수 앞에서 전사가 "나는 어젯밤 그냥 잤다."라고 하는 걸 본다면? 궁수는 거짓을 알아챘기에, 다음 대사가 바뀌게 된다.
상황은 말 그대로, 그때가 아침인지, 점심인지. 혹은 자신이 무언가를 변호해야 한다든가 하는 상황 그 자체를 말한다.
그래서 나는 이 5차원 4차원에 해당하는 이 변수를 놓고 어떻게 효율적으로 타이핑할 스크립트를 줄여나갈지 고민했던 것이다.
모종의 이유로 5월 6일에 쓰던 일지가 5월 10일로 미루어졌다. |
어찌됐든, 위에 쓴 고민은 한 줄로 요약할 수 있는데,
경우의 수를 최대한 줄여놓지 않는다면 나는 조-온나 많은 대사를 타이핑해야한다.
최적의 경우의 수는 무엇일까? 나는 문과생으로서 정말 많은 고민을 해보았지만,
결국 가장 적은 수의 대사를 뽑아내는 방법은 첫 선택지부터 모든 대사를 쳐보는 것밖에 없었다.
그리고 캐릭터 대사의 가짓수도 확 줄일 수 있었는데,
대사의 내용을 결정하는 데에는 여러 요소의 복합적인 힘이 작용하는 것은 맞지만, 그에 순서가 있음을 알아냈기 때문이다.
1. 상황 | 아침인사인지, 오후에 플레이어와 1:1로 대화하는 것인지, 기타 실질적 상황이 가장 먼저 전제된다. |
2. 개연성 | 대화의 주제. |
3. 의심/신뢰 스테이터스 | 대화의 주제에 대한 화자의 태도를 정한다 |
4. 성격 카드 | 주제와 태도가 정해진 다음, 그것을 화자가 어떻게 표출할지 정한다. 표출하지 않는 것도 표출의 방법이 될 수 있다. |
그리고 이 모든 요소가 정해졌음에도, 세계선은 어떠한 대사를 강요할 수도 있다.
5. 세계선 | 특정 대사를 강제로 송출할 정도로 강력한 개입을 할 수도 있으나, 성격, 스테이터스에만 영향을 주어 직접적인 참여는 안할 수도 있다. |
이렇게 두고, 실험을 한 번 해보자.
(Script01: 첫 번째 밤이 지난 후, 다음날 마법사는 오후에 플레이어와 만나게 된다. 마법사는 다른 캐릭터는 변화가 없지만, 이상하게도 성직자에게만 의심 스테이터스가 상당히 높게 책정되어 있는 상태. 또한, 플레이어도 신뢰하지 않고 있다. 여기서, 마법사가 신뢰도가 높지 않으면 그 어떤 단서도 공개하지 않는, 임시의 성격 카드를 가지고 있다고 생각해보자.) 나무 의자가 삐걱인다. 그녀는 말했다. 마법사: 밤중에 별 일은 없었나봐. 플레이어 선택지1: 밤중에 누군가 돌아다니는 소리가 났어. 선택지2: 성직자가 무언가 숨기는 것 같아. 선택지3: 너 어젯밤에 뭔가 하지 않았어? 선택지4: 집어치워. 너도 내 몰골이 웃겨서 조롱하러 온 거지? |
이상하다.
선택지가 이상한 게 아니라, 마법사가 저 간단한, 아주 간단한 인사치레 한 마디를 띄웠다는 것 자체가, 위의 모든 규칙을 위반하고 나온 것이다.
그래서 나는 수 년 전 배운 국문학과의 의미론, 화용론을 떠올려 보며,
첫 번째 변수, '상황'을 조금 더 세분화하기로 했다.
상황. 상황은 모든 '어휘 선택'에는 선행하지만,
지금 캐릭터들이 해야 할 건 '어휘 선택'이 아니라, '태도/행위 선택'이기 때문에, 꽤나 후행할지도 모른다는 생각이 문득 들었다.
캐릭터가 지금 무슨 말을 꺼내야 하는 상황인지. 그런 의미의 상황으로 바꾼다면,
캐릭터는 (사실 이것 말고 많지만) 대략 8가지 정도의 선택을 할 수 있다.
[동의], [비난], [거절], [옹호], [소개], [인사], [부정], [침묵]
세상 모든 대화로 따지면 당연히 엄청 적은 거지만, 추리게임에서? 추리게임에서는 이 8가지면 떡을 치지 않을까?
그러면 이제 순서가 뒤바뀐다.
'어휘 선택'의 순서가 아닌, '태도 선택'의 순서로 다시 캐릭터의 대화 시스템을 구축해보자.
1. 개연성 | 캐릭터가 선택할 수 있는 대화 주제의 가짓수를 한정한다. |
2. 의심/신뢰 스테이터스 | 특정 주제를 선택할 기준과 태도를 결정한다. |
3. 성격 카드 | 특정 주제를 선택할 기준과 태도를 재검토한다. ( = 2번을 강제할 수 있다 = 2번에 후행한다) |
4. 상황 | 동의, 비난, 거절, 옹호, 소개, 인사, 부정, 침묵 중 위 3가지에 해당하지 않는 선택지는 모두 파기한다. 여러 선택지가 동시에 결정되었을 때는, 2, 3번의 특성을 다시 검토한다. |
마지막으로,
5. 세계선 | 위와 동일. 성동일. |
이런 기준으로 다시 써보자.
(Script01: 첫 번째 밤이 지난 후, 다음날 마법사는 오후에 플레이어와 만나게 된다. 마법사는 다른 캐릭터는 변화가 없지만, 이상하게도 성직자에게만 의심 스테이터스가 상당히 높게 책정되어 있는 상태. 또한, 플레이어도 신뢰하지 않고 있다. 여기서, 마법사가 신뢰도가 높지 않으면 그 어떤 단서도 공개하지 않는, 임시의 성격 카드를 가지고 있다고 생각해보자.) 나무 의자가 삐걱인다. 그녀는 말했다. [ 1: 상황: 아는 것은 없다. = [동의], [비난], [거절], [옹호], [부정], [소개(=아는 것을 공표함)] 파기. [인사], [침묵]이 남는다.] [ 2: 스테이터스: 플레이어는 신뢰도도 0, 의심도도 0이다. 아무 것도 파기되지 않는다. [ 3: 성격 카드: 아무 것도 파기되지 않는다.] [ 4: 2가지가 남았지만, 부정적인 감정(=의심)이 없기에 [침묵]을 파기하고 [인사]를 선택한다] [ 5: 제시된 세계선은 없다. 강제로 송출할 대사가 없다.] 마법사: 밤중에 별 일은 없었나봐. 플레이어 선택지1: 밤중에 누군가 돌아다니는 소리가 났어. 선택지2: 성직자가 무언가 숨기는 것 같아. 선택지3: 너 어젯밤에 뭔가 하지 않았어? 선택지4: 집어치워. 너도 내 몰골이 웃겨서 조롱하러 온 거지? |
이런 느낌으로. 대화 선택기를 만드는 것이다.
-
다음에는 더욱 더 '마피아게임'처럼 될 수 있도록, 게임의 룰이 훨씬 더 플레이어의 목을 조일 수 있도록 디자인하는 걸 해야겠다.
챗 지피티와 함께 구상하는 작업이다 보니, 일부러 기획 단계에 여유를 많이 두고 잡았다.
다음은 룰 자체를 더 빡빡하고, 스릴있게끔 만들기로 하고,
글이 너무 많아서 미안하다!
요약: 대사 선택하는 방법론은 만듬. 근데 시작부분부터 나뭇가지처럼 뻗어나가면서 타이핑할 예정.
너는 다 계획이 있구나.
이게 한국의 그거 입니까?
멋진 계획표인거에요