Creating Verbs: Aaron A. Reed, Blue Lacuna style

Hey guys, so I love the game Blue Lacuna because it made the entry level for people knew to the game very low, and took away a lot of guesswork. I chose to use Tads 3 because I wanted a programming language similar to C-languages I program with at school, and know Blue Lacuna was written in Inform 7.

Basically following a similar structure to Blue Lacuna, what would I need to know or understand in order to make it so when you type in a name, let’s say “George”, you automatically “Talk To”. Or if you type in simply “Dog” you pet it.

Right now I’m thinking the answer is in the verbs, but not sure really how to go about creating these verbs, and the if/else conditions that go into that. For example, I might simply modify the dobj Talkto? Or I might create a new class called “George” and create the doobj Talkto, and maybe a series of conditions for when to do what, but I start getting lost when it starts involving conditions, and figuring out how to create verbs with only a few resources on how to create them has been a bit overwhelming.

Any tips or help on this endeavor would be great!

Might take a look at Doers in adv3Lite. (Info about them starts on pg 109 in the ‘Learning TADS 3 with adv3Lite’ pdf.

I haven’t played with Doers yet, but it looks like this would work. You’d still have to define a ‘George’ action (verb).

Haven’t tried the following, but from how I understand it, it would be something like this:

DefineIAction(George)
    execAction(cmd)
    {
        "You talk to George. ";  // This should only show up when the
                                 // Doer defined below doesn't catch the 'George' action
    }
;

VerbRule(George)
    'george'
    : VerbProduction
    action = George
;

Doer 'george'
    execAction(c)
    {
        doInstead(TalkTo, npcGeorge); // assuming you name the actor George 'npcGeorge' in code
    }
    when = (gPlayerChar.location == npcGeorge.location)
;

Thanks! Doers sound like a neat concept; I don’t know much about adv3 Lite (am reading about it now), and trying to figure out where to put the adv3 file to get it to show up in the Tads 3 Workbench menu :S. In the meantime, do you (or anyone) know how I would do the same thing using Tads 3 without adv3 Lite?

You may find that what you are trying to do—simplify the flow of text between game and player—was one of the motivations for developing the adv3Lite library. I’m not a user of adv3, so I can’t help you do it with that library, but I do know that the kind of thing you are attempting is exactly what tipped the scales to Lite for me, when I first started using TADS3 a little over a year ago.

As for getting Lite to show up in your Workbench, you don’t do anything to the adv3 files that come with TADS by default.

You use the adv3Lite library instead of, not with, the adv3 library.

Download the Lite zip, expand it to someplace on your system (I strongly recommend any place except c:\program files), then tell Workbench where the library files are using the Workbench Options dialog (opened from Tools | Options), under System | Library Paths.

This should add some adv3Lite options to the New Project Starter wizard that opens when you choose New Project from the File menu.

Also, a word of advice (voice of experience) about Doers. Be careful about scope for a Doer. If you create a Doer that overrides an existing command (Put thing in Thing) and don’t restrict where and when it’s active, you will effectively block all dobjFor(PutIn) macros everywhere in your code.

Jerry

I haven’t used Doers much, but I suspect that may be the way to set it up. The point being, a Doer can be restricted as to when and where it will be active. So if you want ‘george’ to be transformed into a ‘talk to george’ command, for example, your where property for the Doer would restrict it to the room where George is located.

And yeah, I’d suggest going with adv3Lite. I had a similar problem getting it to show up in Workbench the first time I tried it – don’t remember now how I solved the problem. But having used both adv3 and adv3Lite, I think the latter really is both more powerful and easier to use.

The adv3lite folder is in C:/My Documents/TADS 3/extensions/.

Thanks guys I solved the problem but I had to move it into the Program’s directory, extension. I think Advs3 lite is really cool and I want to play with it, but I already have a LARGE proportion of my game already written in Tads 3, have spent a lot of energy with Tads 3, and don’t want to convert it -yet-, but will make version 1.2 of the game in Advs3 lite possibly.

In the meantime, I would love to know how to do the same thing in Tads 3 advs3 even if it takes more steps or know how? And even if it’s just to allow me to make a comparison to see how complicated it really is to do the same thing in Tads 3.

Let’s take the example ‘george’ as a command. This would be done with DefineIAction. (See the “How to Create Verbs” page in the Technical Manual.) In the execAction method, you would first test whether George is present, and then use the replaceAction macro with (TalkTo, george) to create the action you want.