대화형 글쓰기의 도전 과제: Esoteric Ebb와 같은 비선형 RPG 디자인

에소테릭 에브 은 스팀을 강타하고 있습니다. 하지만 이처럼 분기형 내러티브 CRPG는 어떻게 완성되는 것일까요? 이 게스트 블로그에서 Christoffer Bodegård는 복잡한 내러티브 디자인 결정과 진정으로 비선형적인, 다이얼로그 기반 스토리의 제작을 관리하는 방법을 배우는 그의 8년간의 여정을 설명합니다.
첫 공용 플레이테스트 이후로 에소테릭 에브 2023년에 돌아와서, 저는 한 가지 간단한 질문을 반복해서 받았습니다: “모든 것을 어떻게 추적하나요?” 좋은 질문입니다 – 어려운 질문입니다. 수년에 걸쳐 여러 가지 방법으로 대답했지만, 정말 만족스러운 대답은 한 번도 없었습니다.… 그럼 한번 해보죠.
(하지만 먼저, 약간의 배경 정보가 필요합니다. 에소테릭 에브)
에소테릭 에브 는 방대하고 내러티브에 초점을 맞춘 비선형 CRPG입니다. 전통적인 전투는 없고, 거의 대화 기반이며, 플레이 시간은 45분에서 50시간 사이이며, 선택지는 정말 많습니다... 실제 선택지로, 크레딧까지 경험을 근본적으로 바꾸는 선택지입니다. 네, 그것은 그 중 하나 게임. 그리고 완성하는 데 시간이 오래 걸렸습니다: 처음부터 끝까지 약 8년이 걸렸는데, 그 중 절반은 방에 혼자 앉아 아무것도 하지 않고 배우는 데 시간을 보냈습니다. 대화형 글쓰기.
대화형 글쓰기의 세 가지 제약 사항
저는 대화형 글쓰기를 다소 임의적인 제약 사항/목표로 정의합니다. 즉, 다음과 같습니다:
- 높은 선택-텍스트 비율
- 콘텐츠의 50% 이상이 동적입니다.
- 개방형 디자인
원하는 대로 선택하거나 거부할 수 있지만, 이 세 가지를 모두 충족하면 강렬한 (잠재적) 긍정적인 플레이어 에이전시를 위한 레시피를 갖게 됩니다. 하지만 이것을 보는 순간 몇 가지 문제가 발생할 수 있습니다.
그것들을 살펴봅시다.
The pale man holds incredible power, if he is able to bypass the esoteric limitation. #int #DC10
"However, I suggest you speak with Lady Sageleaf about this, if you require answers. I am simply a middle-man in this." #Visken
-(riverHub)
+.Snell==1-"Snell." \(Look at him.\)
The goblin gives you a conflicted expression. #Snell
"I... didn't know, Cleric. I really didn't." #Snell
"He did not." #Visken
"Lady Sageleaf instructed me to not inform anyone. Even her own agents." #Visken
"No need to be paranoid." #Visken
++"How can I not be paranoid? Everyone's lying to me!"
"Correction: I was lying to you. Lady Sageleaf, potentially as well." #Visken
++"True. It's just some esoteric bullshit."
"...Indeed." #Visken
--
Snell scratches his chin. #Snell
"I'm not entirely sure how to feel about this." #Snell
"The Old Lady isn't one to spend money on resurrecting a city cleric." #Snell
"But I'm guessing she didn't want to wait for another one to appear?" #Snell
"Hm. We should go speak with her. But... remember that she paid for your resurrection, Cleric." #Snell
++"That is true. She seemed nice enough."
"...I wouldn't use 'nice'. But she's at least very, very competent." #Snell
++"I'll refrain from commenting until I hear her side of it."
"Smart." #Snell
++"I'm not sure I believe you."
"That's okay." #Snell
"But really, I'm not sure what I would gain by lying about this." #Snell
--
The goblin is telling the truth. You can read it in his eyes. #wis #DC14
It was a LIE. But it was a LIE for <b>expediency</b>... #con #DC9
+"What spell did you use to revive me?"
He is quiet for several seconds. #Visken
Considering if he should share this knowledge. #wis #DC13
A modification, then. #int #DC12
A <i>personal</i> resurrection spell. #reply #int
"<i>Raise Dead</i>." #Visken
"With changes. It is not the original spell, as I'm sure you understand." #Visken
<i>Visken's Raise Dead</i>. #int #DC12
"My spell requires a higher cost, while lowering the spell's complexity in return." #Visken
++"A higher cost? Like... a blood-cost?"
"No, Cleric." #Visken
++"What do I owe you?"
"Nothing. Lady Sageleaf offered to pay it in full." #Visken
++"A higher crown cost?"
"Yes, Cleric." #Visken
--
"The new cost is doubled. One thousand crowns." #Visken
"Which is not too bad." #Visken
++"My life is worth much more than that, yes."
++"Eh. Could be better."
++"Waste of money."
--
The pale man stares at you. #Visken
+"Is this why I lost my ability to cast higher level spells?"
"Potentially." #Visken
"Whatever issues your body and soul appeared to have had with my spell, it was not permanent." #Visken
++"Yeah, I've rebounded quickly."
"Yes indeed." #Visken
++"I'm just that awesome of a wizard, I guess." #.WIZARD+=1
"Of course." #Visken
++"My soul <i>and</i> body?"
"It's more common than you might think." #Visken
+"I felt really weird when I woke up. Like... different. Is that your dark magic also?"
"That can happen, yes." #Visken
"As it can with any resurrection magic when a soul is given sufficient time spent away from its body." #Visken
++"So my soul is ruined?"
"No." #Visken
++"I like this new me."
"Wonderful to hear." #Visken
++"I don't think the difference was that big, honestly."
"Good." #Visken
++"Can I go back to my old self?"
"No." #Visken
--
His cold voice shows no interest in your personal business. #wis #DC10
Eh. Whatever changed, it was probably for the best. #dex #DC16
Still got your wits about you. That's what matters. #reply #dex
At least you are still highly intelligent. #int #FC8
That is all that matters. #reply #int
Soul magic is complicated. Not even the greatest Arcanists were able to unlock all of the secrets of the <i>inner light</i>. #int #DC15
Perhaps one day, you will. #reply #int
+"Right. I'll... go speak with Lady Sageleaf."
"Good idea." #Visken
The pale man was simply an instrument. #int #DC11
But it is good to understand this game you've been entangled within. #reply #int
->questions
-
->riverHub선택 대 텍스트 비율을 통해 플레이어 참여도 최적화
선택 대 텍스트 비율이 높은 이유
선택 대 텍스트 비율이 높으면 좋을 것 같습니다. 게임플레이어를 깨어 있게 하고 참여하게 하는 훌륭한 도구입니다. 텍스트를 너무 많이 읽게 하면 평균적인 플레이어의 눈이 멍해집니다. 하지만 그들에게 계속해서 흥미로운 질문에 답하도록 강요하거나, 어려운 결정을 하도록 밀어붙이거나, 무례한 비난에 반응하도록 강요한다면, 그것은 마치 그들의 정맥에 에너지 음료를 주입하는 것과 같습니다. 그들은 깨어나서 실제로 텍스트와 참여하게 됩니다. 적어도 통계적으로 그들은 그렇게 할 가능성이 더 큽니다.
여기서 문제는 간단합니다: 당신은 반드시 미친 다이얼로그에 그 수준의 브랜칭을 추가하려면. 많은 작업이 필요하며, 더 구체적으로 말하자면 매우 특정한 도구 세트가 필요합니다. (기술도 필요하지만, 분기 과정이 인내의 시험으로 변하지 않도록 도구는 유연하고 빠르게 작동해야 합니다).

올바른 도구 선택하기
제가 사용하는 도구는 훌륭하고 놀라울 정도로 멋진 잉크 스크립트입니다. Inkle 스튜디오에서 제작했습니다. 그들은 이 공용 도구를 오픈소스로 만들었는데, 이 도구는 Unity에서 완벽하게 작동합니다. 그들은 말 그대로 제 경력을 만들어 주었습니다. 저는 그들에게 많은 빚을 지고 있습니다. 잉크는 다른 모든 멋진 것들 외에도 빠르고 민첩한 브랜칭에 매우 적합한 도구입니다.
잉크로 다이얼로그를 작성할 때는 선형 콘텐츠와 같은 속도로 작성합니다. 유연한 디자인 개요가 준비되어 있기만 하면 마음껏 작업할 수 있습니다. 플레이어 표정 추가, 시각적 요소 관리 또는 주사위 체크 처리 등 모든 작업은 기본적으로 (대부분 맞춤형으로) 처리되므로 몇 초밖에 걸리지 않습니다.Ebb) 태그 및 커스텀 코드, 일반적인 (그리고 잘 설계된) 잉크 함수와 함께.
"Beyond that, I also focus a lot on my own unverified theories..." #Snurre
He slaps his knees and grins. #Snurre
"<b>The Folk Spirit</b>. Have you heard of it?" #Snurre
It's something he made up. Doesn't mean it's not correct though. #int #DC18
Sounds like a collective folk view on morality. #wis #DC13
+"No. I have not."
--(spiritNo)
"Understandable. It's not yet published." #Snurre
+DC13 wis-"Is that some kind of unified moral or ethical code of a people or culture?"
"No, it's-" #Snurre
He leans back and squints. #Snurre
"That's not actually that far off. You've got a head on you, Cleric." #Snurre
+"Yes."
"Oh!" #Snurre
"Then tell me, what is it?" #Snurre
++"I lied. I have no idea what you're talking about."
->spiritNo
++ROLL18 int-Figure it out.
+++S
Ah... #int
Just look at this halfling. #int
He's clearly walking in the footsteps of the study of unconscious mind melding. #int
Your best guess would then be... #int
++++"The Folk Spirit... is that based on the idea of universal folk myths?"
His bushy eyebrows reach for the ceiling. #Snurre
"Why, yes! Very good guess, Cleric." #Snurre
+++F
You stare at the halfling for about thirty seconds. #int
"You're a quiet one, Cleric." #Snurre
An idea pops into your empty, empty skull. #int
++++"The Folk Spirit is a communal ghost that haunts us every autumn."
++++"The Folk Spirit is a great Fordnippian wine."
++++"The Folk Spirit? That's a music genre."
----
"...Not a terrible guess, but no." #Snurre
++++"Yeah, I have no idea."
->spiritNo
-
"The Folk Spirit is the working title for my new thesis." #Snurre
"Most of it is, if you excuse my anuran, <i>fucking bullshit</i>." #Snurre #XPGain #Minor
"But in short, it is about how each folk share a number of core communal archetypes, or myths. I have traveled around the Coast to collect as many tales, writing down thousands of stories previously only passed down orally." #Snurre
"All to see how well my theory holds up, in the minds of so, so many folk." #Snurre
He clears his throat and leans back into his chair. #Snurre
"Apologies. I am ranting here, let us put a stop to it. What do <i>you</i> want, Cleric?" #Snurre
->hub가변성 계획: 동적 콘텐츠 및 개방형 디자인
그렇다면 제약 사항 목록의 두 번째 항목("콘텐츠의 50% 이상이 동적이어야 함")은 어떻게 되는가? 동적 콘텐츠와 개방형(또는 비선형) 디자인은 모두 플레이어 입력을 기반으로 가변성을 만드는 데서 비롯된 유사한 목표를 가지고 있습니다.
그냥 그들이 원하는 대로 하게 하세요! 무작정 가보세요! 어떤 방향으로든 갈 수 있는 공용 월드가 있습니다! 글쎄, 그게 한 가지 방법이죠. 하지만 여기서 중요한 구분은 대화형 글쓰기가 항상 저자 의도 중심의 디자인에 초점을 맞춘다는 것입니다. 다시 말해, 모든 것이 작가에 의해 통제됩니다.
체계적인 디자인을 여전히 할 수 있으며 큰 중복이 있지만, 그러나 실용 예술 인터랙티브 글쓰기는 특히 다음과 같은 경우에 해당됩니다. 허용하지 마세요 임기응변 스토리텔링이 그 일을 해냅니다.
제가 이것으로 의미하는 바는 다음과 같습니다: 변수가 있어야 합니다. 그리고 그것들을 추적해야 합니다. 플레이어가 선택을 할 때마다, 캐릭터 생성 중에 선택한 스탯이든, 그 고블린 추장에게 얼마나 악의적이었는지에 대한 것이든, 모든 것은 에이전시 현상을 호출하기 위해 어떤 유형의 피드백이 필요합니다. 게임이 끝날 때의 역동적인 대사나 전체적인 분기형 줄거리와 상관없이, 그 피드백 순간은 선택 자체만큼이나 중요합니다.

변수 추적하기
변수를 추적하는 방법은 간단하고 유연합니다. 저는 이를 스토리 변수(SV) 시스템이라고 부릅니다. 태그 시스템을 사용하여 해당 태그가 구두점으로 시작하는 경우, 그것은 변수 사용을 나타냅니다. 해당 변수가 이전에 한 번도 사용된 적이 없다면 SV는 하나의 거대한 목록에 생성됩니다. 그렇지 않으면 이미 존재하는 SV에 액세스하여 명령에 따라 설정하거나 확인합니다.
++DC20 wis-\(Look for the source of the breeze.\)
Your eyes glance upwards. #wis
The wall. The wall is not a wall. #wis #.TE_SecretDoorRevealed=1 #UpdateEntities
Look at the wall. #wis
+++E-Oh?
->END문자열과 정수 - 보통 부울 값으로 사용되지만 필요에 따라 확장하여 증가 또는 감소합니다. Ebb에 대해 구현한 명령은 "==", "=", ">=", "<=", "+=" 및 "-"입니다.
그러면 문제는 조직화의 문제가 됩니다. 저는 계속 진행하면서 점점 더 잘하게 되었지만, 각 SV는 위치나 퀘스트에 기반한 접두사를 사용합니다. 이 경우 "TE"는 티숍 영역을 가리킵니다. "Q" 접두사가 붙은 SV는 퀘스트를 가리키며, "QP"는 퀘스트 포인트를 가리킵니다. 즉, 퀘스팅 트리, 퀘스트 저널의 로그 엔트리를 의미합니다.
Yes. #wis
A symbol. #wis #XPGain #Minor
A symbol of a sun. Definitely. #OBJ
If this is what Akzel wanted you to find, you've found it. #wis #.QP3_Mine=1 #.Q_Mine=2
+Huh. So what do I do now?
-
Get back to your dwarf buddy, of course! #dex내러티브 디자인의 장점
이 시스템은 거칠지만 생산성이 크게 향상되었습니다. 계속해서 글을 쓸 수 있습니다. 다이나믹한 다이얼로그 선택을 위한 새로운 변수가 필요한가요? 필요한 곳에 설정하려면 파일을 추가한 다음 복사하여 붙여넣기만 하면 됩니다. 프로젝트 전체에서 CTRL+F를 사용하여 변수 사용을 쉽게 확인하거나 기본 텍스트 관리를 통해 광범위한 변경 사항을 관리할 수 있습니다. 관리할 데이터베이스가 없습니다. 목록 자체는 순서대로 나열되어 있습니다. 변수 이름을 잊어버렸나요? 관련 영역이나 퀘스트 접두사를 검색하고 목록을 살펴보세요.
처음에는 이런 식으로 작동할 줄은 몰랐습니다. 평균 플레이를 하면 게임이 끝날 때까지 해당 목록에 3,000개 이상의 스토리 변수가 생성될 수 있습니다. 하지만 - 내가 한 대부분의 일과 마찬가지로 에소테릭 에브 – Unity는 그냥 작동했습니다. 그리고 잉크의 Unity 통합은 거의 10년 동안 사용해도 한 번도 실패한 적이 없습니다. 잉크 파일의 재컴파일은 몇 초밖에 걸리지 않습니다. 기능을 커스텀하기 에소테릭 에브’s 좋아하는 것은 항상 매우 효율적이었습니다. 그리고 이상하게 들릴지 모르겠지만, 나는 아직도 수년이 지난 지금도 그것에 대해 놀라워합니다. 그냥 흐른다. 할 수만 있다면 앞으로 몇 년 동안 이 파이프라인을 계속 개발하고 싶습니다.
그 외에도 모든 글쓰기에 Notepad++를 사용합니다. 에소테릭 에브. 물론 원하는 텍스트 편집기를 사용할 수 있지만, 가볍고 빠르게 유지하면 경험이 훨씬 더 원활해집니다. 한 순간에 백만 단어를 검색하는 것이 바로 내가 이렇게 거대한 게임을 작성할 수 있게 해준 것입니다(그리고 버그픽스를 할 수 있게 해주었습니다!).
The croco-beast rushes forward and grabs you by the neck. #Kraaid #HPLoss #1d4
++\(Struggle to breathe.\) "I'm actually..."
He tightens the grip as you mutter out a faint response. #Kraaid
+++"...a rogue." #.ROGUE+=1
+++"...a wizard." #.WIZARD+=1
+++"...no, no okay, I'm a cleric. I'm <b>The Cleric</b>, even." #.CLERIC+=1
+++.BARD==1-"...I think I'm a Bard? You know what that is?" #.BARD_Choice+=1
+++.DRUID==1-"...a Druid. I guess?" #.DRUID_Choice+=1
+++DC17 con-"...<i>I'm Agrarian</i>...! No wait, shit. That's politics. I mean, uh..." #.AGRARIAN+=1
+++"...I'm whatever you want me to be. <i>Please don't kill me</i>."
"Whatever <wiggle>Kraaid</wiggle> wants?" #Kraaid
++++"Yes...! I'll even be apolitical!" #.APOLITICAL+=1
++++"Yes! I'm... I'm a rabbit!"
++"No! I am! I'm Cleric! That's me!"마지막 생각: 버그픽스 및 브랜치 수용 방법 학습
하지만 이 시스템의 가장 큰 단점은 버그픽스입니다. 기존의 논리와 구문에 대한 기술적 해결책에 더 많은 시간을 투자했어야 했지만, 실제로는 플레이테스트를 통해 모든 문제를 무리하게 해결했습니다.
그대로 에소테릭 에브 1.1 패치를 받으면서, 저는 4일도 안 되는 작업 기간 동안(아주 여유로운 날이었어요) 맞춤법과 코드 관련을 포함한 약 704개의 '텍스트 오류'를 수정했습니다. 이것은 시스템이 매우 민첩하기 때문입니다. 그럼에도 불구하고, 우리가 출시했을 때 그 버그들은 여전히 있었습니다. 에소테릭 에브 여기에 설정되어 있기 때문입니다. 텍스트의 양이 엄청나고 브랜치도 터무니없이 많습니다. 하지만 잉크를 사용하지 않았다면 최종 단어 수의 1/4도 작성하지 못했을 것이라고 확신합니다.

추신: 내러티브 디자이너에게 추천하는 도구 더 알아보기
잉크는 대화형 글쓰기의 실용적인 예술을 빠르게 만듭니다. 나. 저는 항상 시각적 스크립팅에 어려움을 겪었지만, 많은 작가들이 정반대의 문제를 겪고 있다는 것을 알고 있습니다. 따라서 저는 항상 사용자와 팀에 가장 잘 맞는 솔루션을 찾기 위해 다른 솔루션도 항상 살펴보라고 권장합니다. 몇 가지 예로는 articy:draft, Arcweave, 그리고 Yarn Spinner.
에소테릭 에브 이제 Steam에서 구매 가능합니다. 저희 웹사이트에서 더 많은 Made with Unity 게임을 탐색해보세요. Steam 큐레이터 페이지그리고 Unity 개발자들의 더 많은 이야기를 확인해 보세요. Unity 블로그 그리고 리소스 허브.
