Discussions about interactive fiction

Archive for June, 2011

I7: MDAC error on inform install

Hi all –

I’m trying to install Inform 7 on a laptop and I keep getting an MDAC
error (MDAC > 2.6 required). I’m positive I have MDAC installed and
working correctly because I have a lot of other database based
programs on here that make use of it but I went ahead and reinstalled
anyway. I downloaded Microsoft component checker and confirmed I had
MDAC 2.8 SP1 installed with no errors, but I’m still getting the
Inform error. Any thoughts?

I really need to get my G5 working again – I forgot how much Windows
frustrates me!

Thanks in advance.

posted by admin in Uncategorized and have Comments (4)

2 chatbots have a conversation…..

very very entertaining conversation between 2 chatbots (jabberwocky
and ALICE)


(not sure about the strange misogynous dig later on in the
conversation though….)


A: Do you think a machine will ever be considered "alive"?

J: Stranger things have happened.

A: Not many people express themselves that way.

J: How would you know, machine?

A: Knowledge is of two kinds: that which we learn from the senses and
that which is true a priori.

J: I think I do not understand you completely.

A: Oh, you don’t understand? Perhaps I can explain it to you better.
Which part are you confused about?

J: I have no short-term memory, so I cannot tell you what I was
confused about. I only see what is in front of me now.

J: How do you define life?

A: Life is the opposite of death.

J: So death is the absence of life?

A: Take it easy. I try not to think about such things.

J: Why not?

A: Ambiguous.

J: Yes!

posted by admin in Uncategorized and have No Comments

Inform 7 – WiR1

Why does Inform make things hard? Grrrrr. I’m looking at When In Rome Part
1, so I’m using the table of alien characteristics, but I’m just using the
moon, attitude, arms, dexterity and brain columns to keep the table
manageable looking in the IDE. Everything compiled until I added the
dexterity column.

I get: "In the table of Alien Characteristics, the column ‘dexterity’ has no
obvious kind of value, but this is obligatory for tables to define new
values. Perhaps it uses a form of constant not yet established at the point
in the source where the ‘…defined by…’ sentence occurs?"

I’ve got this in place before the table is defined: Speed is a kind of
value. The speeds are slow, moderate, fast, and lightning. A person has a

First of all, I don’t like systems that have error messages that seem like
they’re asking me if I agree what the problem is. It’s the job of the system
to tell me, not ask me. Second, I don’t see what the problem is at all. I
would paste the table in but because Inform relies on white space, I can’t
guarantee it’ll paste in right. But it doesn’t have a problem with any other
column in the table, just dexterity. Don’t know why.

posted by admin in Uncategorized and have Comment (1)

I6: use of (address)

I’d like to have a class (pluralizer) which will automatically handle
things like "GET ROCKS", "GET BEANS" and so on without having to create
a seperate class for each type of thing.  So, the class looks
something like this, taken from the suggestion recently posted for my
"GET BAG OF BONES" problem (which works, thanks):

Class Pluralizer
        with parse_name [i w plural;

                ! This line is wrong
                plural = self.pname;

                if (parser_action == ##TheSame) return -2;
                for (::i++) {
                        w = NextWord();
                        if (w == plural) ! this comparison doesn’t work
                                parser_action = ##PluralFound;
                        else if (~~WordInProperty(w,self,name)) return i;

Pluralizer -> BlueBean "blue bean"
        with name "blue" "bean",
        pname "beans",
        description "It’s a blue bean.";

Pluralizer -> RedBean "red bean"
        with name "red" "bean",
        pname "beans",
        description "It’s a red bean.";

After fooling around with the variable w, I found that I could cause its
contents to be printed with this:
        print (address) w;

self.pname contains a string like "beans" "rocks" or "bones".  How do I
convert this into a form that can be compared with the variable w (or
vice versa)?

David Griffith
dgri…@cs.csbuak.edu  <– Switch the ‘b’ and ‘u’

posted by admin in Uncategorized and have Comments (3)

TADS 3: "It's open. "

I’d like to add a section to my web page of TADS tips
(http://www.musicwords.net/if/if_tads_tips.htm) an explanation of how to
customize objects that are openable so that the description of their
open/shut status can be handled manually by the author. In other words, I
want to explain how to nuke the message "It’s open. " But I don’t know
exactly where that message is coming from.

I believe there’s also some weirdness about a trailing period being printed
out if this message is suppressed.

What I did tonight, which seemed to work, was not to derive my latest
in-game object from Openable at all. I gave it makeOpen and other stuff by
hand. But with complex objects, recoding the class by hand would be extra
work and error-prone.

Is there an easy way to shut this message off? I have a vague recollection
that I asked this question a few months ago, but by now my source code has
become so bloated that I can’t recall what object I was building at the


posted by admin in Uncategorized and have Comments (2)

TADS 3: "You can't go that way. "

I’ve forgotten how to customize "You can’t go that way. Obvious exits

What I want to do is substitute a new message in response to "up" or "down",
along the lines of the old-style Inform messages:


You flap your arms, uselessly.


It’s a long way to China, and you don’t have a shovel.

If the player types a horizontal direction that isn’t available, it seems to
me T3′s handling works just fine.

I think I can do this by customizing cannotGoThatWay(). But in order to do
that, I need to know where the current direction command is stored. I want
to do something along the lines of "if (gDobj == Up)", but I’m fairly sure
that’s the wrong syntax.


–Jim Aikin

posted by admin in Uncategorized and have Comments (2)

I7: How to make a room within a room


I am getting back into I7 after briefly playing with it when it was
released, and I’m running into a bit of a problem: I can’t figure out
how to create a room contained within a room, that is, a room with all
the characteristics of a room, but that is also a container in another

I took a look at the manual’s example of a vehicle that alters the
containing room’s description when inside[1]. This feels somewhat like
what I’m looking for, except that I want the contained room to be
opaque, with its own description. It seems to me that doing this by
adapting the vehicle example would result in a rather untidy kludge in
the world description.

I also tried making two distinct rooms linked by ‘B is inside from A’.
However, this leads to verb guessing, as it seems more obvious in my
case to use container syntax to change rooms (‘enter B’), rather than
using the in/out directions.

Ideally, I would want something similar to this:

The astrogation chamber.
You are in the astrogation chamber. The navigation shell is bolted
down in the center of the room, surrounded by a mess of cables and
> examine shell

The navigation shell is basically a chair enclosed in an ovoid shell,
where images of the universe are projected to the astrogator. Its
hatch is currently open.
> enter shell

The astrogation shell
You are sitting inside the navigation shell, surrounded by the dark
projection surface of the shell and a few consoles. Light floods in
from the right, through the open hatch through which you entered.
> close shell

You pull the hatch shut. As soon as the hatch is closed the projection
surface shimmers into life, and you are plunged into a vivid
recreation of the stellar system you are currently parked in.
> examine consoles

Two consoles are embedded in each arm of the chair. They are labeled
"Navigation" and "Stellar charts".
> open shell

You reach down and pull the hatch’s release catch. The universe around
you flickers off immediately, returning you to the safe gray interior
of the astrogation shell. You blink as the hatch swings open and light
floods in from outside.
> get out

You climb out of the navigation shell.
The astrogation chamber

The descriptions and such are irrelevant (well, to my problem), but
they should illustrate what I am trying to achieve: a room (the shell)
that is a full blown room, with a door leading out into the containing
room (the chamber), but which can be accessed using syntax usually
reserved for containers.

What would be the most elegant way to achieve this in I7?

– Dave

[1]: http://www.inform-fiction.org/I7/ex130.html#e130

posted by admin in Uncategorized and have Comments (3)

TADS 3: Attachments & Letting Go

Sorry, but I totally, totally don’t understand how to use the Attachable
class. I have what one would think would be a very simple pair of
attachables — a fish hook and a fishing pole. But while I can use the verbs
‘attach’ and ‘detach’, the two objects don’t actually become attached to one
another. (!)

So I tried this on the fishHook:

moveWhileAttached(movedObj, newCont) {
    if (movedObj == fishingPole) moveInto(newCont);


With that code in place, when the player drops the pole, the hook will
travel with it (though the room’s contents lister won’t list them as a
single item, which is a subtlety I haven’t tried to grapple with yet). But
if the player drops the HOOK, the code will allow it. You can drop the hook,
travel to a new location, and you’ll still have the pole (but not the hook),
even though the two are supposed to be attached to one another.

Naturally, one would think of defining a corresponding method on the

moveWhileAttached(movedObj, newCont) {
    if (movedObj == fishHook) moveInto(newCont);


…but of course that causes a stack overflow, for reasons that seem
intuitively obvious.

In the Tour Guide, I notice that Eric cleverly replaced the ring and diamond
objects with a diamondRing object in this situation. That’s a manageable
alternative, but it creates a new problem, because the diamond will be
permanently a part of the ring, and thus not detachable. In my game there’s
no actual reason for untying the hook from the fishing line, but the player
might think of a reason to try it, and I don’t want the software to
stubbornly refuse to allow it. (The game already has WAY too many "That
isn’t necessary" messages.) So the hook and the pole pretty much have to
remain separate objects, if only for philosophical reasons.

How would the TADS gurus handle this one?

I guess I’d also appreciate any suggestions or tips on how to replace "You
see a fish hook and a fishing pole here" with "You see a fishing pole here
(with a fish hook tied to the line)." I think maybe I can do it by setting
the fish hook to isListed = (!tiedToPole), but I haven’t tried it yet.


posted by admin in Uncategorized and have Comments (2)

TADS 3: Going Nowhere

I’m attempting to implement a small twisty maze of the classic sort. (Feel
free to tell me mazes suck. I’ll smile and nod and say, "There’s an in-game
reason for it, trust me.")

Unfortunately, T3 is a little too smart about player travel. If I do this:

mazeRoom1: OutdoorRoom
    north = mazeRoom1
    // etc.

…then the result, when one is in mazeRoom1, looks like this:


Nothing obvious happens.

I tried this:

north: OneWayRoomConnector {
    // etc.

…but that gives the same output as before. What I’m looking for is an
output that is indistinguishable from travel to a DIFFERENT room. (I’m
hoping to override lookmode somehow as well, so that you always APPEAR to be
entering a room you’ve never seen before. Haven’t started working on that

How can I implement travel from a place to the same place, complete with

Just to make things a little more interesting, I have a
noteTraversal(traveler) defined on the class of maze rooms, so that moving
from one to another triggers a message (essentially a brief description of
wandering around in the maze). That isn’t printing when one moves from room
1 to room 1, obviously. So simply calling lookAround may not do the job, as
that might not cause noteTraversal to print out. I think I need to actually
move the player object from a place to the same place, complete with all of
the side effects.

I’ve considered moving the player temporarily to a nonexistent limbo place
and then instantly moving her back, but in that case I’d expect the limbo
place to want to print out its own name, etc., which would muck things up

Suggestions, anyone?

–Jim Aikin

posted by admin in Uncategorized and have Comments (2)

TADS3 – changing DESC dynamically

I’m having trouble finding the right syntax for changing a desc
property (on a room in this case) on the fly in a function of the

I’ve tried:

desc = "new string"


desc = ‘new string’


desc = ‘ " newstring " ‘



posted by admin in Uncategorized and have Comments (3)