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

Friday, October 7, 2016

List of useful tools and resources to improve your English: for writers and game developers (and not only)

This post contains some useful links to resources that will help you to improve your writing. If you are not familiar with English but still want to translate your game or story - this post is for you. Of course, the best solution is to finally learn English or find a professional writer. Sometimes you simply cannot afford it. 


The tools and sites listed below are free to use.

1.) Tool: Reverso

It's a tool for free online translation in French, Spanish, Italian, German, Russian, Portuguese, Hebrew, Japanese, English. Why not Google Translate? Well, Reverso supports translation in context of words, groups of words and idioms and I think that this feature is the most important: Google Translate doesn't provide such amount of examples.

Hola!

2.) Tool: OneLook

OneLook is not only a site where you can find tons of dictionaries: there's also a tool that can help you to find words related to the one you specify, ranked by relevance.

Some synonyms, some assiciations.


"Measure and improve the readability and marketing content of your writing with our exclusive readability and keyword tools!"

I found this tool to be extremly helpful: it can analyze your text snippet or your entire blog article and give you Flesch-Kincaid reading ease, Gunning-Fog score, keyword density, word counts, syllable counts and many other valuable metrics that can help you to improve your writing:

Those stats! Mmm...

Secret tip: clear your browsers' cookies if the site says that your limit of free analysis is exceeded.

4.) Blog: dailywritingtips

"The rise of the information age – with the proliferation of emails, blogs and social networks – makes the ability to write clear, correct English more important than ever."


5.) Blog: caroclarke

Blog by Caro Clarke where you can always find good writing advice, for example, in the beginner's four faults article.




8.) Bonus: words and vocabularies by theme

    8.1.) english-for-students

    8.2.) myvocabulary

    8.3.) englishclub


That's all for now. Of course, tools like Reverso won't instantly turn your writing into a masterpiece, but they will definetly ease your pain.

See you soon.

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.

Wednesday, July 13, 2016

Overview of interactive fiction frameworks #3: Inform6


Our glorious jorney into amazing world of interactive fiction development tools and frameworks continues. Twine and Inform7 have fallen. Who is next?

Psypoke or Slowduck? Wtf?

Inform6. Yeah, Inform6, a father of Inform7.

Guess what, folks, Inform6 is better than Inform7 in many aspects, but still there is no reasons to use it. That's why this article is so short. Main things are here:

- Inform6 is an object-oriented programming language. Yeah, it's not like Inform7 which targets writers who knows nothing about software development.

- It's an old tool but guys like DavidKinder still support it. But, actually, they are all focused on Inform7 now.

- It has the same power as Inform7. Key features of Inform6 and Inform7 are almost the same.

- Inform6 code is more readable than pseudoenglish of Inform7 and actually does what you ask. I think Inform7 made a step back in this aspect. Guys are trying to get new audience or non-programmers.

That's all.

So, should you use Inform6?

If you are a writer who doesn't want to waste your time to learn programming language to create your simple games - use Inform7 or even Twine. 

If you are a software developer then you definetly don't need to learn yet another old and specific programming language to create your game. This tool was doing it's job well in the past. Now it's days are over, let's say 'thank you' and forget about it.

Again, list of good tutorials for those who still want to try Inform6:


I hope you will not use it.

As a bonus, take a look at the example of Inform6 source code with some definitions:

  Object Kitchen "Kitchen";
  Object Front_Door "Front Door";

  Object Living_Room "Living Room"
      with
          description "A comfortably furnished living room.",
          n_to Kitchen,
          s_to Front_Door,
      has light;

  Object -> -> Briefcase "briefcase"
      with
          name 'briefcase' 'case',
          description "A slightly worn, black briefcase.",
      has container;

Not that bad.

Enjoyable post is coming very soon.

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?

Friday, July 8, 2016

Classical text-based games mechanics explained: Galatea review part 1


Recently I mentioned Galatea - time for a brief review.



I decided to review Galatea because this game focuses on the interactions between the player and NPC in a very typical and common way for any kinds of interactive fiction games and programs. It's a bit pretentious also.

So, let's get started. You can play it here or here. We launch it and we see:

You come around a corner, away from the noise of the opening.

There is only one exhibit. She stands in the spotlight, with her back to you: a sweep of pale hair on paler skin, a column of emerald silk that ends in a pool at her feet. She might be the model in a perfume ad; the trophy wife at a formal gathering; one of the guests at this very opening, standing on an empty pedestal in some ironic act of artistic deconstruction --

You hesitate, about to turn away. Her hand balls into a fist.

"They told me you were coming."

I like how it starts. She seems to be hot. I press enter.

Galatea
Copyright (c) 2000-4 by Emily Short.  (First-time users should type 'help'.)
Release 3 / Serial number 040208 / Inform v6.15 Library 6/10 

The Gallery's End
Unlit, except for the single spotlight; unfurnished, except for the defining swath of black velvet.  And a placard on a little stand.

On the pedestal is Galatea.

Fine. >> Hello, Galatea!

"Hello," you say -- and stop.  What would you say next?  'I'm a famous critic, be on your best behavior'?  There's no etiquette established; and then it strikes you as strange that you should bother to be concerned.

Fortunately, the little awkwardness is lost on her. "Good of you not to walk away again," she replies.  

That's not a verb I recognize.

Wow, this is the game that can actually produce a response to 'Hello' input. First test passed. Good job, fellow developer.

You may notice 'That's not a verb I recognize.' in the end of the output - it means it's not that good. It's actually a response to 'Galatea' input.

Logic of the game (most likely) goes in this way: it receives 'Hello, Galatea!' input string. It sees punctuation mark 'comma' and then separates input into two strings: 'Hello' and 'Galatea'. Response to 'Hello' is fine, but the wont be any responses to 'Galatea':

>> galatea
That's not a verb I recognize.

>> Galatea
That's not a verb I recognize.

>> Hey Galatea!
That's not a verb I recognize.

>> Galia!

That's not a verb I recognize.

This is sad and strange at the same time. Let's try advanced techniques:

>> how are you?
That's not a verb I recognize.

>> you are nice
That's not a verb I recognize.

>> hell!
That's not a verb I recognize.

>> do you hear me?
That's not a verb I recognize.

>> do you read what I type?

That's not a verb I recognize.

It seems we won't have any actual conversation with Galatea, guys. Capabilities of this creation (and, of course, capabilities of framework that was used to program this) are limited. I'll try to focus on keywords.

>> look around
I only understood you as far as wanting to look.

Damn!

>> look

The Gallery's End
Unlit, except for the single spotlight; unfurnished, except for the defining swath of black velvet. And a placard on a little stand.

On the pedestal is Galatea.

>> look at Galatea

She is facing away from you. You cannot see her face, only her hair, and the line of her shoulder. It's hard to know what she's looking at -- the velvet backdrop, if she has her eyes open, but there's not much to see in that. Mostly, it is obvious, she is not looking at you.

Her green dress widens out at the knee, falling over the pedestal on which she stands in a way that would probably be very awkward, if she wanted to move.

>> look at dress

If you knew designers, you might recognize it: it looks expensive. A shimmering column from the bodice down to the knee, where it flares to cover the whole base of the pedestal.

I can't ask 'how are you' but at least I can take a look at her awesome dress.

>> look at pedestal

It's hard to see it, under the sweep of the gown.

>> look at gown

If you knew designers, you might recognize it: it looks expensive. A shimmering column from the bodice down to the knee, where it flares to cover the whole base of the pedestal.

Game understands synonyms, that's great.

>> look at velvet

Heavy black velvet, making her skin seem even paler and more alien by contrast.

I don't even know what to type next. Hm...I have a girl near me, why do I look at her clothes?

>> look at her skin

Smooth, pale, and with a sheen, as though polished.

Yeah, baby.

>> look at her face

You can't see the face, given her current position.

>> look at her hands

She has slender hands with tapering fingers.  At the moment, they hang loosely at her sides, sometimes hiding themselves for a moment in the folds of her gown.

Hot!

>> look at her neck

You can't see the throat, given her current position.

>> change the position
That's not a verb I recognize.

Sad. Maybe I can ask her about her damn artist?

>> ask Galatea about artist

A pause.  "I don't know where he is,"  she says.  "Or who, or what, for that matter.  He sold me immediately after my waking.  While he was carving me, there was no strangeness, but afterward..."

That's better, I guess I got the idea of interaction with Galatea.

>> ask Galatea about myself

"What do you know about me?" you ask.  (They told her you were coming; does that mean you, or some abstract viewer?  Are you really the first, this evening, to have rounded this particular corner?)

"Nothing," she says, "other than that you have come to look at me."

>> ask Galatea about dress

She shrugs in it. "It looks odd, doesn't it?" she says. "I insisted on clothes, and they bought me this."

>> ask about artist

"Tell me what you do know about him," you prompt.  

"He hated people -- though I think he was also quite lonely.  It was a question of not having patience for anyone."  Very quietly.  "If anyone tried to come up to the studio he'd get out his shotgun and fire into the air until they got the idea.  The woman didn't even bring milk if she knew he was there.  They had a system of leaving things for each other so that they didn't have to meet.  And when he sold me, it was the same.  He wrote letters, made arrangements; did not even stay with me, when they came to look me over."

>> ask about Galatea

"Read the placard," she says.  "That's what it's there for, after all."

Let's speed up the process

>> hug Galatea

You know better than that. Naturally. But the fact that it crossed your mind surprises you a bit. You have never had any trouble keeping it clear in your mind when you're dealing with a piece of machinery rather than a person.

>> hug Galatea!

It's a bit awkward at this angle -- the best you can manage is to put your arm around her at the waist. She relaxes, smiling wanly.  "Thanks."

>> read the placard

Large cream letters on a black ground.

47.  Galatea

White Thasos marble.  Non-commissioned work by the late Pygmalion of Cyprus. (The artist has since committed suicide.)

Originally not an animate.  The waking of this piece from its natural state remains unexplained.

>> ask Galatea about herself

"You've read the placard, so you know what they think is important... I'm not sure how much there is to add.  I was carved.  I woke up.  And here I am."

Sad, sad girl. I think I know how to cheer her up. And I'll definetly do it in the next article.

I enjoyed my experience. If you are interested in understanding text-based games mechanics you definetly need to try it out.

Here is the summary of things I've noticed during the walkthrough:

- Dictionary of the game is limited as always.

- Normal, natural language strings are not ok: game will not understand you. Only specific sentences and replics are allowed. Still, processing of input strings is better than in most of text-based games nowadays. 

- We can't say 'how are you' to NPC. You can't say 'you are nice'. Game didn't respond to NPCs name: Galatea. We have no freedom at all. It's a common thing for text-based games so don't be surprised. Usually, such games have some kind of rules, and if you follow the rules - game responds.

- Game sometimes produces different output strings in answer to the same input strings. It's very good in my opinion and (strangely) it's a rare thing in nowadays interactive fiction. It also means that game tracks it's state. Very good.

Stay tuned.