Brahman (part 1)
There are parser games, which tend to focus on objects, and non-parser games, which tend to focus on choices and threads. But lets consider the middle ground:
Non-parser games based around concepts.
concepts here refers to a generalisation of objects, things, places, people and non-tangible ideas, knowledge or facts. But they are nevertheless entities that can be applied, referenced or used; “nouns” would be a crude approximation.
Now, let’s take the idea of a parser and, instead of shooting for hairy ball NLP, relegate it to a robust, but powerful command language (which it always was anyhow).
Take the parser out of the player experience and make it an authoring tool.
The authoring tool and the game then become the same thing. You create the game from inside itself out of thin air!
The Cosmic Power of Creation
What is Brahman?
A system for creating touch-based, text interactive fiction with graphic illustrations and sound.
Why Brahman?
According to Wikipedia:
“Brahman” is the power itself, not the creator. That’s you!
Non-parser games based around concepts?
If there’s a parser could it still be a parser game? Emphatically yes, but typing is a bit like working - people don’t want to do it (mobiles especially). They also don’t like reading too much in one go either.
X on Y
The idea is to simplify all player operations, conceptually into “X on Y”. This generalisation covers cases such as “use X on Y”, “ask X about Y”, “tell X about Y”, where the idea of “how” (verb) is implicit.
It’s important to remember that X and Y can be intangibles.
You don’t have an inventory. You don’t pick things up and you don’t have to walk halfway across the game to get the silver key to then come back and open the birdcage. This sort of stuff is not entertainment.
You [em]do[/em] have a roster of entities. These are both ideas and objects that you’ve encountered that might be useful. The roster will include physical objects, people, places and facts. We’ll pull the usual trick of having things disappear from this list once you’ve used them, to keep it manageable.
For the UI, this could be a sliding drawer of icons, it could be a palette or something else. So long as it works. You tap on an entity from the roster to “use it” and you apply it to the current focus.
Current Focus?
The text on the screen establishes the current focus. The last thing mentioned in the text, or the person you’re talking to is the focus.
When the butler opens the door, you select the calling card in the roster to present it to the butler.
Inspector Lestrade is in the room. You click on “Mr. Peterson”, you’re asking Lestrade about Peterson.
You only select “X” to perform “X on Y”.
The focus, “Y”, is essentially the last thing mentioned in the text. If it’s not the thing you want to reference, you can tap something else in the text. This is also the mechanism to inspect or examine, search etc.
Inspector Lestrade and Mrs. Hudson are in the room. You click on “Mr. Peterson”?
Will depend on who’s talking or with whom you last interacted. If you really want to ask Mrs. Hudson, you click on “Hudson” in the main text body, then on Peterson from your roster.
Depending on the game design, maybe you’ll always be asking the most relevant character anyhow.
From itself out of thin air
Just how does this work?
The best way to explain might be by demonstrating in the system so far. So let’s do that. Bear in mind that the system is currently WIP. Here’s goes:
[code] Welcome to Brahman.
Version 0.1.
You are in the Universe.
It is vast.
You can see a Mobile here.
[/code]
Rocking!
Ok, not very spectacular, but indeed minimalist. You start with almost nothing, creating even the basics yourself. I’ll demonstrate how things work by creating some of those basics, but in practice you’d load a [em]kickstart[/em] library and build your story on top of that.
> look at the mobile
I don't understand "look".
In "look at the mobile".
Not even “look” is defined to begin with!
I should mention here that this demo is going to look awfully like a parser game. That’s because it kinda is when you’re the author. As mentioned above, the player experience would normally be totally different.
Boot me up Scotty! (he didn’t say this either)
create "examine", "look" and "l" as verbs.
look means think.
look thing "X" means describe "X".
look at "X" means look "X".
examine "X" means look "X".
l "X" means look "X".
That sorts out the basic look and aliases. We’ll cover “in” and “on” later. Try it out,
[code]> look at the mobile
The Mobile is a wild and crazy dude.
You are in the Universe.
It is vast.
You can see a Mobile here.
look at the universe
It is vast.
look at me
Brahma is the one with the tough job.[/code]
One of the aims of this system is to allow a somewhat organic development. The idea of trying it as you go rather than making everything upfront. Also, play testing is also editing and filling in gaps. At any time you could create a new object and give it meaning.
In these examples i won’t be giving things long and full descriptions because it will just get in the way. Also, in practice you’d want to separate the re-usable stuff from the story stuff. Here I’m just going to mix it all together to keep the examples short.
Create object to represent classes.
[code]create a “room” as container.
create (a “lounge” as room) in here.
set lounge as “This place is disgusting!”
create “go” as verb.
go room “X” means put me in “X”.[/code]
Notice that “room X” is a filter. This is how you make things work on only those things that make sense. Filters works just like adjectives.
Let’s create some things,
create "people" as mobile.
create "Fat", "Freak", "Freewheeling" as adjectives.
create freak "brothers" as people.
create (Fat "Freddy" as brother) in lounge.
create ("Phineas" as brother) in lounge.
create (Freewheeling "Franklin" as brother) in lounge.
set freddy as "Fat Freddy is fat and stupid looking."
set phineas as "Phineas is wild and crazy."
set franklin as "Freehwheeling Franklin is a mean looking dude."
go lounge
How does it look so far,
[code]You are in the lounge.
This place is disgusting!
You can see Fat Freddy, Phineas and Freewheeling Franklin here.
[/code]
> look at fat freddy
Fat Freddy is fat and stupid looking.
The collective nouns used for groups and filters work too.
> look at the freak brothers
Fat Freddy is fat and stupid looking. Phineas is wild and crazy.
Freehwheeling Franklin is a mean looking dude.
We need some extra things,
[code]create a “kitchen” as room.
set kitchen as “This kitchen is totally revolting. The cooker has never been cleaned.”
create ((“Fat Freddy’s” “cat” as mobile) of freddy) in kitchen.
set cat as “He looks hungry”
create (some “cat” “food” of cat) in kitchen.
create a “cooker” in kitchen.
set cooker as “Eeeww!”
set cat food as “Urg!”
go kitchen[/code]
These last examples illustrate some points,
[code]You are in the kitchen.
This kitchen is totally revolting. The cooker has never been cleaned.
You can see Fat Freddy’s cat, some cat food and a cooker here.
[/code]
Notice that it “knows” to say “some cat food” but “a cooker”. This is because it learns how to say something from the definition. It also knows not to say “a fat freddy’s cat”.
But there’s something wrong. We don’t really want it to mention the cooker since it’s part of the description,
sorted,
create an implicit "cooker" in kitchen.
Makes this implied, but not mentioned.
[code]You are in the kitchen.
This kitchen is totally revolting. The cooker has never been cleaned.
You can see Fat Freddy’s cat, some cat food and an implicit cooker here.
[/code]
Oops! it’s mentioned. That’s because we’ve got the power of Brahman to see the invisible. Things are different if we’re one of the characters,
put fat freddy in kitchen.
become fat freddy.
and try some things out,
[code]You are in the kitchen.
This kitchen is totally revolting. The cooker has never been cleaned.
You can see Fat Freddy’s cat and some cat food here.
What now? look at the cooker
Eeeww![/code]
What now? look at freddy's cat
He looks hungry.
What now? look at phineas
You can't see any such Phineas here.
Now let’s add stuff so we can feed the cat.
I know we weren’t going to have “get”, but let’s see how you’d implement it, because it illustrates some important points.
create "get" as verb.
get thing "X" means if "X" in me then think "You've already got ", "X" else (silent. put "X" in me. loud. think "You get ", "X").
try it out,
What now? get cat food
You get some cat food.
You are in the kitchen.
What now? get cat food
You've already got some cat food.
What now? get cooker
You get a cooker.
oops! didn’t really want to get the cooker.
fix this by creating a class “gettable” and change those things we allow to get as gettable.
create a "gettable" as thing.
create ((some "cat" "food" as gettable) of cat) in kitchen.
rewrite “get” and add aliases,
create "to", "up" as prepositions.
create "get", "take" and "pick" as verbs.
get thing "X" means think "You can't get ", "X".
get gettable "X" means (
if "X" in me then
think "You've already got ", "X"
else (
silent.
if put "X" in me then (
loud.
think "You get ", "X"
) else loud
)
)
take "X" means get "X".
pick up "X" means get "X".
try it out,
[code]You are in the kitchen.
This kitchen is totally revolting. The cooker has never been cleaned.
You can see Fat Freddy’s cat and some cat food here.
What now? pick up cat food
You get some cat food.
You are in the kitchen.
This kitchen is totally revolting. The cooker has never been cleaned.
You can see Fat Freddy’s cat here.
What now? get cooker
You can’t get a cooker.[/code]
That’s better! You start to see that the standard verbs begin to get complicated. This is why you’d normally have a kickstart library with a basic ontology and a pre-defined verb set.
So now we write our only story action, which is to feed the cat.
[code]create “feed” as verb.
feed thing “X” means think “huh?”.
feed mobile “X” means think “X”, " doesn’t want any food".
feed cat “X” means (
if food in me then (
think “X”, " bolts down the food hungrily.".
silent.
put food in universe.
loud
)
else think “you don’t have any food.”
)[/code]
play it,
[code]You are in the kitchen.
This kitchen is totally revolting. The cooker has never been cleaned.
You can see Fat Freddy’s cat and some cat food here.
What now? feed cat
You don’t have any food.
What now? get cat food
You get some cat food.
You are in the kitchen.
This kitchen is totally revolting. The cooker has never been cleaned.
You can see Fat Freddy’s cat here.
What now? feed cat
Fat Freddy’s cat bolts down the food hungrily.
You are in the kitchen.
This kitchen is totally revolting. The cooker has never been cleaned.
You can see Fat Freddy’s cat here.
What now? feed cat
You don’t have any food.[/code]
Conclusion
We haven’t covered building a map or movement yet (although it’s similar) and i haven’t shown how it works from a kickstart library - which makes it a [em]lot[/em] easier to build stuff.
Much of the above would be in the kickstart library, leaving only the descriptions and story actions to really be implemented.
Also the above examples lean far too much toward the old school text adventure paradigm, but a different kickstart can give a different kind of experience. Focusing more on threads rather than objects.
You can see, however, that we pretty much did build this from nothing, only a few raw primitives, which means the experience and type of games created can vary enormously.