storybook/spec.txt
2021-12-17 13:54:05 -06:00

58 lines
2.9 KiB
Plaintext

###################################
# Untitled Storybook Game Project #
###################################
This will be a project to create a system whereby "Choose Your Own Adventure" (CYOA) style stories can be easily written.
Each page will read out story elements, and then prompt the user to select a new page based on a decision
they would like to make.
Making certain choices will also award ad-hoc stat bonuses i.e. +1 Knowledge or something, all
stats are presumed to be 0 until points are awarded. This stat system also includes the ability
to make checks when certain choices become available, or once they are selected.
Requirements:
1. A language description and recognizer for creating CYOA-style stories.
2. An interpreter and interface for interacting with these stories.
3. Both story-writing and story-interaction tools need to be cross platform and relatively straightforwards for
a non technical user to operate.
Story language PEG: (with apologies, this is my first PEG)
Story <- BlankLine* Page+ EndOfFile
Page <- Header Body BlankLine*
Header <- Identifier Newline BlankLine*
Identifier <- [A-Z][A-Z0-9_]*
Body <- Footer / TextLine Body
TextLine <- (!Newline .)+ Newline
Footer <- Ending / Goto / Choice+
Goto <- 'GOTO' Spacing Identifier Newline
Ending <- 'THE END' Newline
Choice <- [0-9]+ ')' Spacing (!Redirect .)+ Redirect
Redirect <- StatCheck? Spacing '[' Identifier ']' Spacing StatChange? Newline
StatCheck <- '<' StatName Spacing [0-9]+ ('+' / '-')? '>'
StatChange <- '(' ('+' / '-') [0-9]+ Spacing StatName ')'
StatName <- [A-Za-z]+
EndOfFile <- !.
BlankLine <- Spacing Newline
Spacing <- (' ' / '\t')*
Newline <- '\r\n' / '\r' / '\n'
Work log:
12/13/21
Right now I need to make a decision before any of the work has started on how the user would interact with the system.
I think for a MVP it would be okay to just write a console application, but I think for the long term there needs to
be a decision made on how this will work. I'm leaning towards one of three options.
1) We put the whole thing on the JVM and make it a library or something.
Maybe in the future we can make a frontend for making and playing stories
as a web interface, but we could make the interface pluggable as far as the backend is concerned.
2) I build this non-traditional game in a traditional game engine (Godot probably). This ensures cross-platform
availibility. I'm not 100% sure about my ability to use parsers in Godot, but this looks like a good option.
3) I build this as a reactive web page. I know this sounds like a terrible idea, but there are actually a lot
of cool image and text transition libraries out there. It does mean setting up something like React tho, which
like, just kill me now
Out of the three of these I think the Java thing would be the easiest and I think the Godot thing would be the best.