Adrift Critique

This forum is the place to discuss the older ADRIFT versions 3.9 and 4.0.

Please refer to the ADRIFT 4 Manual for more information.
User avatar
phkb
Posts: 376
Joined: Thu Jan 06, 2005 3:27 am
Location: Sydney, Australia
Contact:

Post by phkb »

I think rw's issue (and correct me if I'm wrong here!) is more along the lines of, issues like this shouldn't need to be worked around if the underlying system was doing the right thing. The whole premise of ADRIFT is that it makes it easy to write IF. A few clicks and you're away. But, by using ADRIFT you are putting a large gulf between a playable game, and a game that doesn't break down in unexpected ways. It's easy to get a lot of things wrong.

In the ADRIFT community we tend to focus on playability, and are happy to deal with occasional parsing issues. The wider IF community isn't. From what I understand rw is trying to encourage all of us, but Campbell in particular, to take the time to get the parsing right. The time for v4 might be passed, but with v5 still in advanced alpha stage it might be possible to influence the engine in the right directions.

I would certainly hope that a task with a command "whack the blue box" would know which object I was referring to if I just typed in "whack box", without having the command read like "whack {the} {blue} box".
My IF-related stuff can be found here
User avatar
P/o Prune
Site Admin
Posts: 4667
Joined: Mon Jun 24, 2002 9:18 am
Points: 93
Location: Denmark

Post by P/o Prune »

Eric's got a point.
Of course it is absolutely great if the author of a game takes into consideration every single possibility of handling an object,
But being an author I have the right, I feel, to assume that when the text reads:
On the table you find a diary and history book, the player will try to “get the diary” or “get the book”
Why all this fuzz about having to call the objects different things?
I'm not trying get find an easy way around writing games, but is it the authors fault that the player insists on calling the diary a journal, and then get all upset because the parser doesn't understand?
It is the authors responsibility to allow for various ways to take the object, like get, grab, take, pick up etc. and in mu opinion this is where the dreaded “Guess the Verb” comes in.
D-Day in progress 86Kb (Slowly drifting)
Just a Fairy Tale: 138Kb
User avatar
Campbell
Site Admin
Posts: 4723
Joined: Sun Jun 23, 2002 12:05 pm
Points: 0
Location: Edinburgh, Scotland
Contact:

Post by Campbell »

Duncan, you couldn't repeat that test in v5 could you, to see how it compares? I also just realised that I hadn't added give to the Standard Library yet, so you'll need to add this (a rough draft, may need refining):

Code: Select all

<Task>
        <Key>GiveObjectToChar</Key>
        <Priority>50014</Priority>
        <Type>General</Type>
        <Command>[give/offer] %objects% to %character%</Command>
        <Command>[give/offer] %character% %objects%</Command>
        <Description>Give object to character</Description>
        <CompletionMessage>
            <Description>
                <DisplayWhen>StartDescriptionWithThis</DisplayWhen>
                <Text>You hand %CharacterName[%character%]% %TheObject[%objects%]%.</Text>
            </Description>
        </CompletionMessage>
        <Repeatable>True</Repeatable>
        <Continue>ContinueOnNoOutput</Continue>
        <Restrictions>
            <Restriction>
                <Object>ReferencedObjects Must Exist </Object>
                <Message>
                    <Description>
                        <DisplayWhen>StartDescriptionWithThis</DisplayWhen>
                        <Text>Sorry, I'm not sure which object you're referring to.</Text>
                    </Description>
                </Message>
            </Restriction>
            <Restriction>
                <Object>ReferencedObjects Must BeHeldByCharacter %Player%</Object>
                <Message>
                    <Description>
                        <DisplayWhen>StartDescriptionWithThis</DisplayWhen>
                        <Text>You are not carrying %TheObjects[%objects%]%.</Text>
                    </Description>
                </Message>
            </Restriction>
            <Restriction>
                <Character>%Player% Must HaveSeenCharacter ReferencedCharacter</Character>
                <Message>
                    <Description>
                        <DisplayWhen>StartDescriptionWithThis</DisplayWhen>
                        <Text>Sorry, I'm not sure which character you're referring to. (characters must be seen)</Text>
                    </Description>
                </Message>
            </Restriction>
            <Restriction>
                <Character>%Player% Must BeInSameLocationAsCharacter ReferencedCharacter</Character>
                <Message>
                    <Description>
                        <DisplayWhen>StartDescriptionWithThis</DisplayWhen>
                        <Text>You can't see %CharacterName[%character%]%!</Text>
                    </Description>
                </Message>
            </Restriction>
            <BracketSequence>#A#A#A#</BracketSequence>
        </Restrictions>
        <Actions>
            <MoveObject>ReferencedObjects ToCarriedBy ReferencedCharacter</MoveObject>
        </Actions>
    </Task>
Also, disambiguation doesn't yet work for characters. Something to be looked at.[/color]
ADRIFT Developer developer.
ralphmerridew
Posts: 2598
Joined: Fri Dec 13, 2002 11:56 pm
Points: 10
Location: Missouri
Contact:

Post by ralphmerridew »

For comparison, Inform 7 version:

http://www.glpics.com/ralphmerridew/uninspired/story.ni
http://www.glpics.com/ralphmerridew/uninspired/output.z5

Giving the diary to either character ends the game. Giving the history book to Hermione prints fixed text. Giving the history book to Ginny falls through to default.
To test disambiguation with the characters, I added the verb "call" (call ginny / call hermione).

Abbreviated transcript:
Common Room
You can see Ginny here.

>give book to girl
Which do you mean, the diary of Tom Riddle or A History of Hogwarts?

>history
Ginny looks at A History of Hogwarts, but isn't interested.

>give book to girl
Which do you mean, the diary of Tom Riddle or A History of Hogwarts?

>diary
She grabs it from you, saying "Oh, thanks.", then runs off.

*** You have kept the plot on track. ***

> undo
Common Room
(Previous turn undone.)

>call hermione
Hermione walks in.

>give diary to girl
Who do you mean, Hermione or Ginny?

>hermione
She later turns it over to Dumbledore, and your adventures end this year.

*** You have messed up the plot completely. ***


Could you post your .taf and a .amf?

Notice that I did not write any code specific to disambiguation; it works correctly by default. Similarly with the other Tier 1 systems.

Since these problems occur in ADRIFT without work and don't occur in other systems, I do consider players to be justified for blaming them on ADRIFT.
Bloodhounds can make you laugh and cuss in the same breath. They are endearing, faithful, and can sling drool ten feet in any direction. -- Virginia Lanier
Eric
Posts: 610
Joined: Wed Oct 02, 2002 4:38 am
Points: 10
Contact:

Post by Eric »

Po. Prune wrote:Eric's got a point.
Of course it is absolutely great if the author of a game takes into consideration every single possibility of handling an object,
But being an author I have the right, I feel, to assume that when the text reads:
On the table you find a diary and history book, the player will try to “get the diary” or “get the book”
Why all this fuzz about having to call the objects different things?
I'm not trying get find an easy way around writing games, but is it the authors fault that the player insists on calling the diary a journal, and then get all upset because the parser doesn't understand?
It is the authors responsibility to allow for various ways to take the object, like get, grab, take, pick up etc. and in mu opinion this is where the dreaded “Guess the Verb” comes in.
I have always tried to account for reasonable possibilities when it comes to what a player/reader might type as a command, what the player might try to do during the game. However, I also tend to write for people who actually want to play a game and it seems like some people are more interested in seeing if they can find some way to "break" games rather than play them. So if someone complains that, gee, you can fit the kitchen table into the apple pie if you've sliced the pie, I guess my reaction is well, why should I waste endless time accommodating those who aren't really interested in playing the game in the first place, because anyone who was actually trying to play the game wouldn't bother doing anything like that.
Eric
Web Site | Blog
Duncan_B

Post by Duncan_B »

Duncan, you couldn't repeat that test in v5 could you, to see how it compares?

I can do that. Er... should I just copy-paste that long bit into the library? I haven't attempted to mess with the library yet in v5.

Could you post your .taf and a .amf?

Sure-- of the one with the tasks written in, I assume? I can also add one task which will attempt to disambiguate between the diary and history when both are held. I'll try to get those posted on the Adventures page soon, then.

Notice that I did not write any code specific to disambiguation; it works correctly by default. Similarly with the other Tier 1 systems.

Since these problems occur in ADRIFT without work and don't occur in other systems, I do consider players to be justified for blaming them on ADRIFT.

I can see how from a player's perspective (esp. an outsider) something like that could be just "ADRIFT, grr..." And certainly, while they aren't always game-breaking, things like that can get annoying even if they can be corrected easily on the next turn. So I get that.

But as a 'DRIFTer I feel like other authors writing in ADRIFT should know to create appropriate tasks for disambiguation in order to get something like that to work. It's not hard. If it's possible that a module demonstrating a method of improving disambiguation can be created, then I say we go for it.

I still think it's ultimately up to 'DRIFTers to make their games work well. If anyone disagrees with me, I suppose that's fine, but I hope our end goal is the same-- that the ADRIFT community should produce quality IF.
User avatar
Campbell
Site Admin
Posts: 4723
Joined: Sun Jun 23, 2002 12:05 pm
Points: 0
Location: Edinburgh, Scotland
Contact:

Post by Campbell »

Duncan_B wrote:I can do that. Er... should I just copy-paste that long bit into the library? I haven't attempted to mess with the library yet in v5.
Yep, just paste it into StandardLibrary.amf next to the other tasks, and it should pop in when you create a new adventure.
ADRIFT Developer developer.
ralphmerridew
Posts: 2598
Joined: Fri Dec 13, 2002 11:56 pm
Points: 10
Location: Missouri
Contact:

Post by ralphmerridew »

Barring that, you can use any other verb that disambiguates. (PUT _)
Also, I forgot that "history" has special meaning to ADRIFT; it's okay to change the book to a different subject.

As for it being possible to work around, it was chosen to be an extremely simple, unambiguous, disambiguation task. Other systems handle it without missing a step. Despite that, ADRIFT still had to use workarounds to get it right.

As for the matter of simply not allowing synoynms:
I value consistency. So I'd have a higher opinion of a game that went by the rule "The diary is a 'diary'. It is not a 'book' or 'journal' or .... PERIOD. Ginny is 'Ginny'. She is not 'girl' or 'witch' or 'redhead' or ...." than a game which went by the rule of "The diary can be called "diary" or "book" or "journal". Well, mostly. There's this one command where you have to call it 'diary'."

And if I go through a game, and "GET BOOK", "EXAMINE BOOK", "TALK TO GIRL" work correctly, and "GIVE BOOK TO GIRL" gives the response "Hermione looks at the diary briefly, but isn't interested.", then I'm generally going to conclude that the solution to the puzzle doesn't involve giving the diary to Hermione. I'm not going to then try "GIVE DIARY TO HERMIONE"; I just did that, and it didn't work.
Bloodhounds can make you laugh and cuss in the same breath. They are endearing, faithful, and can sling drool ten feet in any direction. -- Virginia Lanier
Duncan_B

Post by Duncan_B »

Okay, I'll see about getting that stuff done after work tonight.
As for the matter of simply not allowing synoynms:
I value consistency. So I'd have a higher opinion of a game that went by the rule "The diary is a 'diary'. It is not a 'book' or 'journal' or .... PERIOD. Ginny is 'Ginny'. She is not 'girl' or 'witch' or 'redhead' or ...." than a game which went by the rule of "The diary can be called "diary" or "book" or "journal". Well, mostly. There's this one command where you have to call it 'diary'."

And if I go through a game, and "GET BOOK", "EXAMINE BOOK", "TALK TO GIRL" work correctly, and "GIVE BOOK TO GIRL" gives the response "Hermione looks at the diary briefly, but isn't interested.", then I'm generally going to conclude that the solution to the puzzle doesn't involve giving the diary to Hermione. I'm not going to then try "GIVE DIARY TO HERMIONE"; I just did that, and it didn't work.

So true. I think that's an example of the reason The Hangover is probably one of the worst IF games I've ever played. With commands like "give deby two dollar bill" where you have to type those words exactly (or else you have to type "give deby dollar bill" or "give deby the two dollar bill") even though the Generator auto-completes giving to "give X to..." so unless you go in and take out the "to" you'll never complete the task. Ugh. That game just had so many problems...

Granted, I've never played Death Agency.
djchallis
Posts: 1117
Joined: Mon Apr 10, 2006 10:28 pm
Points: 10
Location: England
Contact:

Post by djchallis »

Nobody's posted here for a while, yet nobody seemed to reach a conclusion...

You guys know I love ADRIFT, so please don't kill me, but I agree with ralphmerridew. Maybe this is just a programmer thing, but I can't sit comfortably with ADRIFT's parser issues. Yes, you can workaround them, but you shouldn't have to. In programming you can do simple tasks in many ways, but some are bad form and some are good form. So I don't really sit comfortably with us essentially "settling" for this flawed way and saying it's ok because we can solve the problems.

For me the biggest issue is the way ADRIFT tries to cover the author's back by assuming things and giving answers where the author didn't specify. I don't want it doing that. I want to be in complete control of everything the game sends to the player. If the player tries something I (the author) haven't thought of, I don't want ADRIFT taking a guess at what the response should be, because it's probably going to be out of character, or even in the case of ralphmerridew's example, it's going to give the player false information that leads them away from a puzzle.

Having said all that, I was playing an Inform7 game the other day and it gave me some responses I was sure the author hadn't custom-written. Maybe this is an issue in all IF and I just don't know about it. That doesn't detract from my complaints about the ADRIFT parser issues we do know about though.
To get complete immersion I do feel the author should custom-write every piece of text the player reads.

But Lumin and Po Prune are right - the non-drifting IF community probably do spend more time complaining about ADRIFT than they do enjoying the quality of the games produced by it.

Oh, and I agree with DCBSuperfly - getting people who don't play IF to test your game is really helpful!
Game in the works - Project Clocks - on hold for a bit.
Game finished - I am the Law for the OddComp. Looking forward to finishing Clocks so I can show what I can really do!
Current focus - Some microIF. Short experiments to test ideas and actually release something!
Ren
Posts: 828
Joined: Tue Jan 17, 2006 1:44 pm
Points: 10
Location: UK

Post by Ren »

ADRIFT is worse, as a system, ralphmerridew is correct. I will continue to use it, because I can't programme and therefore it, and it alone, affords me the opportunity to write IF (albeit very, very slowly), and I am grateful.

The majority, though not all, of the flaws can be worked around. This is the price to pay.

(says me)
djchallis
Posts: 1117
Joined: Mon Apr 10, 2006 10:28 pm
Points: 10
Location: England
Contact:

Post by djchallis »

Well said.
Game in the works - Project Clocks - on hold for a bit.
Game finished - I am the Law for the OddComp. Looking forward to finishing Clocks so I can show what I can really do!
Current focus - Some microIF. Short experiments to test ideas and actually release something!
User avatar
Campbell
Site Admin
Posts: 4723
Joined: Sun Jun 23, 2002 12:05 pm
Points: 0
Location: Edinburgh, Scotland
Contact:

Post by Campbell »

Hopefully these issues are mostly resolved with v5. Would you agree?
ADRIFT Developer developer.
ralphmerridew
Posts: 2598
Joined: Fri Dec 13, 2002 11:56 pm
Points: 10
Location: Missouri
Contact:

Post by ralphmerridew »

In my diary example, it's not a case of ADRIFT 4 providing text; the same problem would occur if ADRIFT didn't define the "GIVE" verb and the player had defined a fallthrough GIVE %object% to %character%. The problem is that ADRIFT 4 tasks are defined by the exact text used, and not by the meaning of the command.

I think ADRIFT 5 should handle the diary problem just fine (it took The Flower Garden without a hitch).

On the other hand, the .TAF 5 format is even more obnoxious to portability than .TAF 4; Campbell has stated that the single format for development and distribution is deliberate, and I still think it's a bad idea; there are some things I saw in the library (the <del> tag, the many DisplayWhen instructions) that don't leave me optimistic about the design.
Bloodhounds can make you laugh and cuss in the same breath. They are endearing, faithful, and can sling drool ten feet in any direction. -- Virginia Lanier
Duncan_B

Post by Duncan_B »

Okay, sorry about the tardiness here. I've been sort of absent for a while. Anyway, I've uploaded a couple of .taf files along with a small readme file explaining them for any passersby. They are listed under the "Demos" section of the Adventures page.

As for v5, here I added the give command as above to the library and have produced the following transcript without adding any tasks.
> north

> look

You're in the other place! Also here is a diary and a tome. Lady is here.

> get books
Ok, you pick up the diary and the tome.

> south

> look

It's a room. Hermione is here.

> give book to hermione

Which book? The diary or the tome.

> diary
You hand Hermione the diary.

> inventory
You are wearing nothing, and are carrying a tome.

> x hermione
You see nothing interesting about Hermione.

> give book to hermione
You hand Hermione the tome.

> inventory
You are wearing nothing, and are carrying nothing.

> x hermione
You see nothing interesting about Hermione.

Again, this transcript was all done without creating any tasks.

My notes on it are that: Upon starting the Runner, I have to click on the parser bar in order to type something into it (blinky line starts up in main screen for some reason). Room names/descriptions do not appear upon entry. Items do not appear as held by Hermione after being given, so I wonder if giving her the tome after giving her the diary (which disappears) actually counts as a disambiguation test?
Post Reply