Right. I think I forgot to mention that Quests often have a TTRPG element, like the QM (Quest Master) rolls dice to determine outcomes, that sort of thing. So that makes Quests like TTRPGs meets CYOA.
There is one thing I do want to stipulate, though, and that's that I would want to write a more-native dice rolling and interpretation mechanism. I've discussed this with @sun before, but the short version is that there'd be something like a RandomNumberOutcome object that would federate, and would include the following information, in no particular order:
- type -- card draw, dice roll, etc
- interpretation_system -- how to interpret it, ex., could be a PokerHand or ChroniclesOfDarknessRoll or whatever else
- results -- an array of results; if it's something like a card draw, the cards drawn, if it's a dice roll, the dice rolled
- denomination -- the denomination of the thing being rolled; if you're rolling six sided dice, might be a string like "d6"
- quantity -- how many of them you're doing; example, if you're rolling four six-sided dice, this field might be the number 4; also worth noting that the number here might be different than the size of results, because some dice systems have what are called "exploding" dice that let you re-roll them under certain circumstances, so in CofD you roll d10s, but if one lands on 10 you reroll it, so you could start with rolling 4 at d10 and get results like [1,9,10,3] and then need to reroll one and you end up with something like [1,9,10,3,7]. The quantity in this case is 4 but the size of results is higher
- interpretation_info -- JSON object that contains other interpretation info, like for the exploding dice example, might include something like explosion_minimum which defaults to 10 if unstated, but under special circumstances you could have 9-Again or 8-Again, where it explodes on 9,10 or 8,9,10, respectively; could also have information in it like successes so the system just has how many times it succeeded baked into the metadata
Of course, some English-language blob of text would be put into the content field so people not on my fork won't have to interpret it. However, it would recommend against relying on this since the formatting might not stay consistent and if you want it in Russian or Japanese or whatever you're out of luck relying on content.
This shouldn't be interpreted as a strict spec, but a speculative one. And I'm not sure it would be worth the time to author it.