Dark Forest Crow Notes - Interactive fiction, text-interactions based and roleplaying games
Showing posts with label review. Show all posts
Showing posts with label review. Show all posts

Wednesday, September 7, 2016

Laid Off from the Synesthesia Factory short review

I played hundreds of IF games and actually have something to say about every single one. Of course, you don't need too read every single trash texts that come out of my mind, so I am trying to post here only the most interesting reviews and funny examples I found.

My main focus during the analysis is gameplay, as always.


The fun fact about Laid Off from the Synesthesia Factory is that you can 'play' it without actually doing anything. Just take a look: (blue text is for input words that I type, green is an output of the game)

[Enter an individual word, a short phrase, or a command.]


> Hell

Your first thought: to check your computer. This is in fact your default thought; give it five years and it'll have your cortex and also your amygdala. "Thought" is the wrong word.  Something closer: anymore, your core creature drive.
The original creature drives: hunger, exhaustion, libido. And their modern replacements: refreshing, unplugging, FOMO.

Spoiler: it will display the same text for almost every input string.

[Enter an individual word, a short phrase, or a command.]

> Tomato

Your next thought: How you have managed such disarray in a week's span. You feel as if you have been dropped into a spot-the-difference picture, the kind from a children's whodunnit book, where you are expected to solve the mystery of how you murdered your life.

It didn't even display a typical 'can't parse this shit' error message. So, actually you will not even understand, is a response of this 'game' is a result of your input replics analysis, or is it just a flow of author's mind flying into your face.

> Super Tomato

Proverb from a dubious online repository: I'm A-OK; I dress au fait; I don't stay home like sad Henri.

Statements that apply to you: zero. Optimism: You could make the second apply right now. And the third will come in half an hour. And even the first, if tonight goes well.

> You are shrimp

You consider PR. The problem: to succeed in doing PR for others you must first prove you've succeeded in doing PR for yourself. You must turn all the glop that is you into a tantalizing direct-to-consumer product, call it Aspirational You. Aspirational You is something special. Aspirational You does not evaporate or sweat under heat; she solidifies, like a cake. If she were knifed the blade would come out clean.

Well, seems shrimp is a good nickname for PR folks. Did game manage to understand me? Or maybe it's parser failed? I have no idea.

I entered the word 'Tomato' ten times or so and the game calmly displayed it's content.

Of course I can play as a smart player, writing only things I notice in the game's output and it will probably give me some results, I can also read the instructions...but I don't want to do it. Regular player won't read any instructions. Regular player doesn't care - he/she sees an input field and starts typing immediately expecting good gameplay.

This is a really good demonstration of serious problem in game development. This kind of problem appears when your game pretends that it is smarter than it is. And there is nothing worse in gamedev than failed expectations of a player. To be an author of such game is like to be an unsuccessful magician.

// P. S. After my first attempt I read the rules and followed them. Game appeared to be quite good. It's writing deserves an additional prize.

Monday, July 11, 2016

Overview of interactive fiction frameworks #2: Inform7


I continue my analysis of interactive fiction and text-based games development frameworks in this article. Why do I need it? I am not only writer and manager, but I am also software developer so I need to know frameworks and tools that are already present on the market and that are already used by other fellow developers - I need to know their features, paradigms and ideologies as well as their limitations to produce better decisions and estimations.

My conclusion for Twine was 'this tool is for you if you want to create something simple and fast'. Now I am trying to find something advanced.

So, here's a brief (as always) overview of Inform7. Again, it's not a tutorial although I have a list of references to good tutorials for Inform7 below. This post will contain mostly criticism and high-level analysis of Inform features. Every mention of 'Inform' below corresponds to Inform7; Inform6 is completely different tool.


Golduck thinks he is smarter than Psyduck. He uses Inform7.

As the Inform's site says,

"Inform is a design system for interactive fiction based on natural language. It is a radical reinvention of the way interactive fiction is designed, guided by contemporary work in semantics and by the practical experience of some of the world's best-known writers of IF.

Sounds pretentious. I think the amount of those who knows what is interactive fiction is so small that the term 'best-known writers' sounds really naive and funny.

Let's get started. I decided to just install Inform and launch it. Usually it's one of the best practices to understand if particular application has good design. I see this:



It looks like Moscow metro map:



Start a new project.


What I see is the list with tutorials and documentation on the right side of the screen. This can be useful. I try to launch my project immediately:

Tons of text in error message. It says I need a room so let's create a room. You can create a room in Inform by writing 'X is a room' so I type 'Nest is a room' and launch my application again:


The way this tool allows you to define things is not common: it pretends you can do it in English. Let's try to print something like 'Nest is a room. Nest is beautiful.' and launch it again:


Tons of text. Was it hard to just print 'redefinition error' or 'double definition error'? The design of these error messages and the Inform itself says this tool was created for those who knows nothing about programming. I seek for advanced tools, but maybe it's just a first impression...

Also I see we can't really use English. We can use something that looks like English in a way that developers of Inform defined for us. 

We have a place - now let's add a character: 

There is a Crow in the Nest.


As we can see, Inform has predefined sentences like 'You can see X here'. I didn't even asked to use it. Maybe we can redefine this sentence? I suppose I can overwrite output strings like this when player enters into particular room writing something like 'when X enters Y print Z'. 

Let's add some objects to our scene: 

Nest is a room.
There is a Crow in the Nest.
There is a Bottle of Pepsi in the Nest.
There is no Bottle of Pepsi in the Nest.

I added two contradictory statements.


Inform didn't understand it - well, it's not so important, but still.

I noticed that Inform not only has predefined sentences which describe things but also it has some predefined actions. I can take that Crow right now: I launch the game, enter 'take Crow' and my game answers: 'Crow taken'. Wow. Now 'drop the Crow': 'Dropped'. Funny.

I can change this behavior adding this lines of 'code':

After taking the Crow:
    say "Taken damn Crow, son"

Now if I enter 'take Crow' game will show my message. Let's specify that Crow is just a name of a man and launch the application again:

Crow is a man.




Mettlesome tool. 'I don't suppose the Crow would care for that.' So, my statement 'After taking the Crow:...' doesn't work anymore? That's right, Inform decided I can't take a character and refused to execute my line of code (which is actually simple if-else construction that you can find in any programming language). It's a bit strange. I searched for a solution and found this: you can use 'Instead of' construct:

Instead of taking the Crow: say "You can't take the Crow - it's a man."

Let's polish our code a bit and add an opportunity to talk with mister Crow and the description of our Nest:

Nest is a room. "Actually, it's not a room, it's a nest"

There is a Crow in the Nest.
There is a Bottle of Pepsi in the Nest.
Crow is a man.

After asking the Crow about "parrot":
    say "You talk about parrots. It's the best conversation in your life."



It works, as you can see. I want to add yet another location with additional character:

Tree is a room. "Actually, it's not a room. It's a tree."

Tree is north of Nest.
There is a Parrot in the Tree.
Parrot is a man.

Now if I sit in the Nest and type 'go north' game transports me to the tree so I can see mister Parrot there. I also can bring my Pepsi as a present to fellow Parrot. Predefined actions. Great.

Final version of Inform 'code' which produces two connected rooms with two characters and one item:

Nest is a room. "Actually, it's not a room, it's a nest"

There is a Crow in the Nest.
There is a Bottle of Pepsi in the Nest.
Crow is a man.

Instead of taking the Crow: say "You can't take the Crow - it's a man."

After asking the Crow about "parrot":
say "You talk about parrots. It's the best conversation in your life."

Tree is a room. "Actually, it's not a room. It's a tree."
Tree is north of Nest.
There is a Parrot in the Tree. "Angry Parrot".

Parrot is a man.

Actually, this pretty much describes everything what Inform is. If you have some development experience (enterprise, indie,...) you already see a lot of 'interesting' things.

Inform hides what is actually going on so I'll rewrite it via normal programming language like C++ using hypothetical Inform library for this language:

Room Nest(LOC(1, "Nest"), LOC(2, "Actually, it's not a room, it's a nest"))

Character Crow(LOC(3, "Crow"));
Crow.addAction(LOC(11, "take"), LOC(4, "You can't take the Crow - it's a man."), ActionTypes::SimplePrint);

Item BottleOfPepsi(LOC(5, "Bottle of Pepsi"));

Nest.add(Crow);
Nest.add(BottleOfPepsi);

Room Tree(LOC(6, "Tree"), LOC(7, "Actually, it's not a room. It's a tree."));
Nest.connect(LOC(12, "north"), &Tree);

Character Parrot(LOC(8, "Parrot"), LOC(9, "Angry Parrot"));
Parrot.addConv(LOC(10, "You talk about parrots. It's the best conversation in your life."));

ConversationGroup Conv;
Conv.add(Nest, CrowBottleOfPepsi, Tree, Parrot);

MovableGroup Movable;
Movable.add(BottleOfPepsi);

Game(Conv, Movable).launch();

Pretty simple, right? Well, if you are familiar with at least one programming language. 

It's not only simple, it's also more flexible. When you see what is actually going on you can change the behaviour in the way you want. I mean, you have classes. You have objects. You can completely change the behaviour of classes. You can easily take the Character class as a base and override any method you want. You can add your subclasses easily. You can rewrite the entire object model of the game.

You cannot do it easily with Inform. There is no normal object oriented model in it - this programming language is actually rule-based with all the disadvantages. Inform supports inheritance and some other kinds of abstractions but in a very unnatural way.

Inform incorporates basic world model with default behavior. Characters, items, zones, basic actions. Almost everything has default description strings and default action strings. Sometimes you can rewrite default behaviour using constructions like 'Instead of', but most of the time you don't want to change anything in Inform because it's hard and usually your solutions aka adhocs aka crutches look really ugly. Changes in the world model of Inform are not recommended.

You also may notice strange LOC symbols near each strings in my example. That's right, guys, I indicated localization functionality: LOC(identifier of localization resource, default value).

Inform doesn't support localization.

Here is a brief summary:

- Inform targets people who knows nothing about software and game development. If you are not a software developer (and you are not planning to become a software developer in your future) you can use this tool and skip the text below.

- Inform is a bit more advanced if we compare it with Twine.

- Inform contains a lot of predefined features - these features can be useful if you are a beginner.

- The world model of your game is already defined for you in Inform as well - and changes in this model are not recommended (hard to implement, look ugly).

- The world is defined, the model is incorporated - so you can't actually create a game that is not an interactive fiction and text-based one using Inform. Learning Inform is a complete waste of time if there's a possibility of you switching your mind in this way: 'Hmm, I just finished my awesome text-based game and now I want to add images of characters, sounds and any kind of advanced gameplay'. Only text-based games. Dead end.

- Real things are hidden under the skin that 'looks like English'. In my opinion this is the worst possible design solution. Differences between the code and simple text are washed away. Reading of such kind of code is a complete torture - especially if you write something that is more advanced than bunch of one-liners. You need to understand where is real English and where is Inform7. I don't even want to discuss debugging here.

- Inform is a rule-based language with all the disadvantages. Actually it doesn't look like a programming language, it looks like a simple 'English-language-like' wrapper over programming language with some predefined features for writing specific kinds of interactive fiction games.

- Yeah, with Inform you can publish your game fast on your website (as well as with Twine).

I think you still can use this tool if you want to create something simple and fast and you already understand that Twine is unsuitable in your case. An opportunity to create and publish a game instantly can be useful for newcomers.

As I promised, here is the list of comprehensive tutorials for Inform7:


1.) Inform7 for programmers guide.

2.) Comparison of Inform7 and TADS3 (other tool for interactive fiction) A lot of useful information.

3.) Blog of a girl with Inform7 tutorials.

4.) Getting Started with Inform7 tutorial

5.) Inform7 documentation, also available via the application itself.


Do I underestimate Inform7? Any features of this tool you enjoy?

Saturday, July 2, 2016

Example of good text-based game for newcomers


Here's a brief overview of the game I just found: Star Wars: Escape the Flagship. Short, interesting, easy to play - that's why I chose it. Visual design is not lame as well - it's just a text on a white screen.




Also, you don't need to type anything to play it - you always have a list of choices.

You play as a Stormtrooper who has been captured during a mission on a rebel flagship. You are awaiting execution and need to escape. I always wanted to be a stormtrooper: miss every shot, die in glory.

Use link above, press continue and we're in:

You see the Rebel walk through the open passage in front of your cell.

Rebel: Seems the captain wants me to give you a choice of how you will be executed. I can throw you out the airlock, which will be quite painful. Or I can put you out of your misery right now with my blaster rifle. What'll it be?

[remain silent]

Put me out of my misery.

I'll take the airlock.

[persuade] You don't have to do this. You could walk me towards the air lock but put me in an escape pod. No one would ever know the difference.

[threaten] Let me out right now or I'm going to grab your face, and crush your eyes with my fingers.

[bluff] I wasn't planting a listening devise. I was planting a bomb. It's on a death switch. If I die, everyone dies.

Maybe this rebel is just a redneck? Is he merciful or stupid enough? Hmm... I'll try to persuade

Rebel: I have no sympathy for Imperial scum

Darn...

Not that stupid I must admit. Oh, darn... Now games offers me the same choices. Since rebel is not retarded and/or merciful, let's play for time: bluff

Rebel: You don't think we're that stupid do you? We already checked the listening devise for explosives.

Darn...

Well, if it's my final moment, I choose airlock.

*He turns off the ray shield*
Rebel: Come on. It's not too far of a walk.
*The Rebel turns around to grab a pair of plasma cuffs*

[Wait]

[Strangle Him]

[persuade] I could have strangled you right there but I decided to let you live. Don't you think I've earned my freedom.

To persuade, or not to persuade? I'll wait.

Rebel: Here put these plasma cuffs on.
*He hands you a pair of open handcuffs*

[Intimidate] How about you put them on. Or else.

[Put them on]

No.

No!

*The Rebel aims his rifle at your head*
Rebel: ...just put them on.

[put them on] Yeah that sounds like a good idea.

No.


[Disarm him] 

This is it! Disarm!

*you successfully disarm him*
*The rebel raises his hands*
Rebel: Please! Please don't kill me!

[Shoot him] It's to late for that!

[Hand him the cuffs] "...just put them on". That's right! I'm in charge!

[Knock him out] It's past your bed time

[Give him the gun] I was just kidding.

Ha. This guy could have killed me...Okay, okay, I Hand him the cuffs and then Knock him out

*You successfully knock out the Rebel*

You have unlocked the achievement: Ghost

[Leave the room]

OBJECTIVE COMPLETED - Escape the cell

OBJECTIVE GAINED - Disable the security cameras from the security terminal

Continue

I didn't even died once!

*You walk outside the room and see a guard checking his ID into a room. He turns his head to his left to see you walking out the room with a rifle. He reaches for his blaster pistol on his belt*

[Shoot him]

[Aim your weapon] Drop it.

[persuade] Put it down. I have no intentions of hurting anyone.

Time to persuade again? I persuaded but after a couple of steps they found me and their captain shot me to death.

Maybe you will be more lucky than me?

I do really suggest you to try to play this game if you are novice and still wondering 'Is this real? People are playing games with text only during the age of Unreal Engine?' You will see how powerful is your imagination.