A Quest library for common verbs

Farvardin
27 Aug 2003, 10:35
Some people complained Quest wasn't powerfull enough in comparison to other system such as Inform, Tads etc.

I think this is especially because Quest lacks most of the built-in verbs other system has. It's a bit annoying when one is performing a simple action such as

> throw knife
> swim
> lift bed

to get the reply :

"I don't understand your command. Type HELP for a list of valid commands."

Of course every author can (should) add his / her own commands, but it's quite a bit task for general replies (some players could test some normal command to see if an action is possible in the game, and then get this default reply intead).

So I thought we could make available a library for Quest, with many commands. Authors could modify it, or better add his / her modified commands to suit the game's needs, and even if the author doesn't modify it much, at least there would be more interesting replies and it would give a better opinion of Quest to other people.

Here are some commonly used verbs I've begun to gather. The replies I've made for some of them are not especially good, english is not my mother tongue after all... but are some people here interested in developping this ? Could you find more usefull verbs ?
Anyway I'll develop this list for my own game, and I'll re-post it later when all will be filled, and then maybe it would be possible to begin to correct all the mistakes :)



!addto game
command <blow in #@quest.objects#>
command <borrow>
command <buy #quest.objects#> msg <#quest.error.article# is not for sale>
command <bring>
command <cancel>
command <cast>
command <carve, dig, pick>
command <change>
command <clean>
command <climb>
command <close>
command <comb>
command <complain> msg <Don't complain all the time !>
command <cook> msg <Maybe it's not time to cook now ?>
command <cough> msg <Reuf, reuf>
command <count>
command <commit suicide> playerlose
command <cry> msg <You don't need to do that now. Crying can't be made on command.>
command <cut #@quest.objects#> {
if property <#quest.objects#; breakable> then {
msg <You torn #quest.error.gender# #quest.objects# to pieces, and nothing usefull remains.>
conceal <#quest.objects#>
}
}
command <change #@quest.objects#> msg <Change what ?>
command <crawl>
command <dance> msg <You dance a bit for your own pleasure>
command <desire>
command <detach>
command <dive>
command <dig>
command <draw>
command <dream>
command <drive>
command <drink #@quest.objects#> {
if property <#quest.objects#; drinkable> then {
msg <You drink #quest.error.gender# #quest.objects#>
conceal <#quest.objects#>
}
else msg <#quest.error.gender# #quest.objects# doesn't seem good to drink, you should forget this.>
}
command <eat #@quest.objects#> {
if property <#quest.objects#; edible> then {
msg <You eat #quest.error.gender# #quest.objects#>
conceal <#quest.objects#>
}
else {
msg <#quest.error.gender# #quest.objects# doesn't appear appetizing, you shouldn't do this.>
}
}
command <erode>
command <edit>
command <enter>
command <escape>
command <explain>
command <empty>
command <fill>
command <find>
command <finish>
command <fix>
command <fly>
command <glitter>
command <help #@object#>
command <hit #@quest.objects#> msg <What do you plan to use for this courageous action ?>
command <hurt>
command <jump>
command <kiss>
command <laugh> msg <Ha ha ha |n Ha ha ha ha>
command <love #quest.objects# ; like #quest.objects# ; enjoy #quest.objects#> msg <We're glad you enjoy #quest.error.article#.>
command <learn>
command <leave>
command <lift>
command <listen>
command <lose>
command <pay>
command <pick, pluck>
command <plant>
' command <put>
' command <put on>
' put = drop
command <drop #@thing# on #@support#> {
if property <#support#; supporter> then {
msg <You put #quest.error.gender# #thing# on #support#>
}
else {
msg <You can't put #quest.error.gender# #thing# on this>
}
}

' command <put #@thing# and #@otherthing# in #@container#>
command <radiate>
command <rain>
command <read>
command <release>
command <reply>
command <ride>
command <rub>
command <run> msg <Where could you run ?>
command <say>
command <see>
command <seek>
command <sell>
command <send>
command <show>
command <sit>
command <sing> msg <You sing a bit>
command <sleep>
command <smell> msg <You smell nothing unexpected here.>
command <smell #quest.objects#> msg <You smell nothing unexpected here.>
command <smoke>
command <smile> msg <You're smiling now>
command <shout> msg <You don't need to shout now>
command <spend>
command <stand up, get up>
command <start>
command <steal>
command <swim> msg <You don't want to wet your clothes.>
command <take>
command <take, receive>
command <teach>
command <throw>
command <wear>
command <travel>
command <try>
command <turn off>
command <turn on>
command <undo>
command <wait> msg <You wait for a while.>
command <wake>
command <walk>
command <wash>
command <weep>
command <work>
command <worry>
command <write>


!end


!addto synonyms
inspect = examine
leave = drop
swallow = eat
fetch = bring
!end



Alex
27 Aug 2003, 12:55
This sounds like a good idea.

I'd recommend not using #quest.objects# in a command though, as the #quest.objects# string variable stores the list of objects for the current room's description. Having said that, I don't think you'll break anything by using it, as it's not needed after the description is printed, and you're only using it temporarily. It might break MaDbRiT's library perhaps though. I suggest you just use something like #object# instead.

Also, if you use things like "command <bring>" that will only work for "bring" - not "bring (some object)".

Using the #@...# in "command <change #@quest.objects#> msg <Change what ?>" will be annoying, since the only response is that the command doesn't work, there's not much point in forcing the player to use a valid object name, in my opinion.

Er, "radiate"...?! :)

Farvardin
27 Aug 2003, 17:10

I'd recommend not using #quest.objects# in a command though...



ok, it's noted... as I said, it's only a 1st try, I'll fix all that is necessary later.
For #quest.objects#, I thought it was only related to object used by the player, but I know now that any object typed by player will be put in a variable of any name, #object# included.

Er, "radiate"...?!



heu... yes... I have a list of common verbs and I copied it and deleted the unnecessary entries. It seems that I forget this one, and probably a few others too...

About library, it could be fine too to have a powerfull library for handly object put on something. (I don't think I have the capacity to make it myself)
MaDbRiT's library is good for object put in. I could try to change it a bit for handling objects put on.

Anonymous
27 Aug 2003, 20:39


MaDbRiT's library is good for object put in. I could try to change it a bit for handling objects put on.



You don't need to change it to do that :-)

all you need it to add a command in your own ASL that makes 'put jug on shelf' (for example) call the put jug IN shelf routine, and then change the shelf's 'header for listing' to read something more appropriate :-) That will have the effect you need (albeit it would be a little clumsy).

I have a new much enhanced version of that library in test at the moment, I could quite easily add a new object type of 'surface' for an object things could be placed ON rather than IN if it is thought generally worthwhile.

Al (a.k.a. MaDbRiT)

Anonymous
27 Aug 2003, 20:52


So I thought we could make available a library for Quest, with many commands. Authors could modify it, or better add his / her modified commands to suit the game's needs, and even if the author doesn't modify it much, at least there would be more interesting replies and it would give a better opinion of Quest to other people.



Actually this idea is exactly the one used by the ALAN I-F system, there is a library of 'verb stubs' that just provide simple default messages for a LOT of relatively routine game playing input. Authors are expected to expand the stubs where they want more than the default response.

As my typelib adds quite a few commands itself, (the new version adds commands that deal with things like 'tell Fred to take the jug') perhaps i should convert the ALAN stub verb library to a Quest Library that is either part of, or better yet seperate but called by, my "typelib.qlb"?

As I'm pretty conversant with ALAN, (large parts of my 'typelib.qlb' were converted from my own ALAN library code) converting the ALAN code would be pretty easy, plus the list of verbs is likely to be a 'play tested' set of really useful ones :-)

Al (MaDbRiT)

Farvardin
28 Aug 2003, 06:58


You don't need to change it to do that

all you need it to add a command in your own ASL



I didn't say it correctly, I wanted to say "copy a part of this lib. code, change it, and add it to a new library".

I prefer not to alter your own library. For my game I override some of your synonyms and verbs in typelib by creating a new library
(
!addto game
command <give #TLSdObj# to #TLSiObj#;give #TLSiObj# the #TLSdObj#> exec <give #TLSdObj# to #TLSiObj#;normal>
' nodebug
command <drop #TLSdObj# on #support#> exec <drop #TLSdObj# on #support#;normal>
!end

)

I have a new much enhanced version of that library in test at the moment, I could quite easily add a new object type of 'surface' for an object things could be placed ON rather than IN if it is thought generally worthwhile.



yes, it'd be great ! In Inform the property is called "supporter" for an object that can receive other things. I think it's an usefull feature since players are likely to put things ON other things as much as they can put them IN. For ex. only the act of sitting somewhere, even if this can be coded in an other way...

I'm curious also to see your enhanced version of typelib. If you need a beta tester, tell me :)


Actually this idea is exactly the one used by the ALAN I-F system, there is a library of 'verb stubs' that just provide simple default messages for a LOT of relatively routine game playing input. Authors are expected to expand the stubs where they want more than the default response.



yes, it's exactly what I had in mind.

About Alan I downloaded the system some times ago (as I did for many other IF systems) but I haven't tried it much.
I've found something related to such a standard library at :
http://bang.dhs.org/if/raif/pre1997/msg00374.html
(by Luis E. Torres)

It's also this kind of replies I had in mind. I checked also the Inform library about this issue, it can gives some ideas. I think when we'll have a similar for Quest, it will be much conveniant. I'll search more for new usefull verbs, and synomyms.

Anonymous
28 Aug 2003, 08:51


I didn't say it correctly, I wanted to say "copy a part of this lib. code, change it, and add it to a new library".

I prefer not to alter your own library. For my game I override some of your synonyms and verbs in typelib by creating a new library



That's MUCH the better way, because it doesn't risk breaking the existing library :-) As is repeated continually in TADS documentation as well as in mine, 'Don't EVER change the library, override it external code where you need to'.


I have a new much enhanced version of that library in test at the moment, I could quite easily add a new object type of 'surface' for an object things could be placed ON rather than IN if it is thought generally worthwhile.

yes, it'd be great ! In Inform the property is called "supporter" for an object that can receive other things. I think it's an usefull feature since players are likely to put things ON other things as much as they can put them IN. For ex. only the act of sitting somewhere, even if this can be coded in an other way...



Yeah, Inform calls it a 'supporter', TADS calls it a 'surface', I chose to go with the TADS naming convention, though it makes little difference really.

Sitting in/on and lying in/on things is a bit more complex than that, because you have to get into the possibilities of what can be seen/reached from the sitting/lying position. I've not really investigated the possibilities of this too much yet, but it is something I plan to do in a later version of the typelib library, by means of 'chair' and 'bed' types. You should be able to sit on and lie on (or lie IN) a bed, so there's a few little nuances to sort out.

Al (MaDbRiT)

PS Luis Torres' library for ALAN is way, way old. There's a much more up to date one (for ALAN 3) on the ALAN website.

Chuck
20 Sept 2003, 01:24
!addto game 
command <give #TLSdObj# to #TLSiObj#;give #TLSiObj# the #TLSdObj#> exec <give #TLSdObj# to #TLSiObj#;normal>
' nodebug
command <drop #TLSdObj# on #support#> exec <drop #TLSdObj# on #support#;normal>
!end


I too am interested in having objects with a surface and objects that can be placed there (e.g., cup and table). The above code that Farvardin offered is incomplete.

Al said

all you need it to add a command in your own ASL that makes 'put jug on shelf' (for example) call the put jug IN shelf routine, and then change the shelf's 'header for listing' to read something more appropriate That will have the effect you need (albeit it would be a little clumsy).

I have a new much enhanced version of that library in test at the moment, I could quite easily add a new object type of 'surface' for an object things could be placed ON rather than IN if it is thought generally worthwhile.



I'd like to see the code for successfully putting the jug on the shelf if you have it. I'm looking forward to the library that includes an optional surface for an object with the action ON. Yes, that's worthwhile (though I'd give a priority to your conversation additions to the library).

What say you, the MaDbRit magic man?

Chuck Smith

Farvardin
20 Sept 2003, 04:39

The above code that Farvardin offered is incomplete.



I've only given an example of what can be a shortcut to get something that work, but is very limited.

For climbing on something I've made : (in an object's def.)

properties <climbable; supporter; not takeable; noTake=Take the stool if you wish, but not this table.>
action <climbing> do {
msg <You climb on it.>
property <table; climbed>
}

As I said, it's very very limited, and doesn"t handle the fact the player has to type "climb down" or someting similar, like in other IF system. It's less realistic but still usable.

I'd like very much to see / try the new version of the TypeLib too :)