-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
#7 описывает нужный формат диалоговых файлов. Необходимо реализовать парсер для такого формата, который позволяет превращать строку этого формата в стейтмашину, по которой можно перемещаться согласно правилам диалога.
Для тестов можно сделать консольную программу, которой нужно скормить диалоговый файл, а она в консоли запустит данный диалог.
Для разработки можно создать дополнительный репозиторий, так как игра, скорее всего, будет на Rust, желательно реализовать парсер тоже на Rust в виде библиотеки, но прототип алгоритма и консольную программу можно сделать на чём угодно, лишь бы работало :)
Описание функциональности парсера
Парсер должен уметь вынимать из файла:
- персонажей и их состояния (для каждого персонажа)
- метки, указанные в файле
- все реплики персонажей, каждая реплика должна знать персонажа, который её произносит
- меню выбора и то, куда они ведут
- все переменные в пределах диалога и их начальные значения (пока не в приоритете)
Пример:
@
Алиса, зевая, заходит в комнату Боба
@alice:yawning
Привет, Боб!
@:happy // настроение обновляется у Алисы, поскольку предыдущее изменение состояния относилось к Алисе
Сегодня такой хороший день!
С самого утра я чувствую воодушение и радость! // две строки, не разделённые пустой строкой, воспринимаются как одна реплика
А как у тебя настроение?
:menu Что ей ответить?
:opt(#happy_mood) Отличное, спасибо!
:opt(#sad_mood) Не очень радостное...
#happy_mood
@bob:happy
У меня сегодня нет никаких планов, хочешь, пойдём погуляем?
:end // конец
#sad_mood
@bob:sad
Я хочу побыть один...
:end // конец
Эти буквы надо распарсить в структуру такого вида:
characters:
- alice: yawning, happy
- bob: happy, sad
lines:
-
type: line
author: harrator
text: "Алиса, зевая, заходит в комнату Боба"
-
type: line
author: alice
state: yawning
text: "Привет, Боб!"
-
type: line
author: alice
state: happy
text: [ "Сегодня такой хороший день!\nС самого утра я чувствую воодушение и радость!", "А как у тебя настроение?" ]
-
type: menu
label: "Что ей ответить?"
opts:
-
mark: happy_mood
text: "Отличное, спасибо!"
-
mark: sad_mood
text: "Не очень радостное..."
marks:
happy_mood:
lines:
-
type: line
author: bob
state: happy
text: "У меня сегодня нет никаких планов, хочешь, пойдём погуляем?"
-
type: end
sad_mood:
lines:
-
type: line
author: bob
state: sad
text: "Я хочу побыть один..."
-
type: end
Metadata
Metadata
Assignees
Labels
No labels