More suggestions...

The Pixie
Some minor things, but they would make things easier.

1. List objects alphabetically

2. The ability to move exits in a script (they do not get listed, even when given a name). This may well be possible in XML. Moving an exit would be an alternative to creating one; say if the exit has scripts it will be easier this way.

3. When you right click on a object in the right pane, a delete option would be nice.

4. A way to list stats about the adventure - number of rooms, number of characters, number of items, average words per room.

5. This may be asking rather more, but a spell checker would be good. Alternatively, an export to plain text, so a file with XML removed can be loaded into Word for spell checking.

Alex
1. Objects are now listed alphabetically in drop-downs - this is fixed by issue #803 so will be in the next release.

2. If the exit has a name, you can update its parent attribute: myexit.parent = some new room

3. Good idea. Logged http://quest.codeplex.com/workitem/834. Not a priority for this release unless someone else wants to implement it. Open to other suggestions for adding to the menu, maybe cut/copy?

4. Might be interesting for some people I suppose... logged http://quest.codeplex.com/workitem/835 for a future release.

5. There is basic spell checking functionality built in to WPF so this should be do-able. Logged for a future release: http://quest.codeplex.com/workitem/836

The Pixie
Cool.

More suggests

Items that can be turned on and off can be set to only change when held.


In the built-in verbs you have "wear" but not "remove", which seems an odd omission.

I am wondering how to do clothes, and one way would be to have a container as a child of the player; done that way, it would be good if the contents of that contained then appeared as a separate inventory list at the right, with a heading "Being worn" or whatever.

Another approach for clothes would be to change the state. This is already virtually done for turning on and off, and I would guess someone more knowledgeable than me could get this to work with the system as it is, however, it would be great if this too was built in.

Thus, my suggestion is that the options tab has four option:
Not switchable
Switchable
Switchable only when worn
Wearable

I apologise for giving you yet more work (but wearing items is a common feature of text adventures).

Alex
Would be good to have a "wearable items" library I think, any volunteers?

What sort of thing would be switchable only when worn?

The Pixie
I meant held not worn for switchable items. Sorry.

If I knew about libraries, I would be happy to help. Is there a good reference that would teach me? I very first experience of Quest was five days ago, so while I am happy to learn, I do not know much at this point.

By the way, I could not upload an image to the Wiki.

Pertex
Libraries are external containerfiles for objects, functions and so on, which you can use from the main file. I added my scorecounter-library, so you can see the structure of it. score_lib.aslx is the libraryfile, scoring.aslx is the game-file (see the walkthrough!).
Important: you cant open the library in Quest. Use an external texteditor to open it.

The Pixie
Okay, so that is trivial.

I am happy to give this a go, but that may well mean I am nagging you guys with even more questions (in the long term I will be better equipped for the next thing).

To get the ball rolling; there seems to be no way to change the name of an object during play (attempting to do so generates an error), so appending "(being worn)" is not going to be easy.

Is there a way to set up a second inventory box for items worn? Or, can the inventory behaviour be modified so it lists worn items differently? Where do I find how that is handled?

Pertex
The Pixie wrote:
To get the ball rolling; there seems to be no way to change the name of an object during play (attempting to do so generates an error), so appending "(being worn)" is not going to be easy.


:D very easy. Just change the alias: object.alias=object.alias + "(being worn)"

The Pixie wrote:
Is there a way to set up a second inventory box for items worn? Or, can the inventory behaviour be modified so it lists worn items differently? Where do I find how that is handled?


Perhaps you could use the box for status variables

The Pixie
Okay, I have created a type that is weartable and can be inherited from, but I cannot get it to load as a library. I followed what you did, Pertex, in score, and Quest is trying to open the right file, but objects to it not being a library.

Included file 'Clothing_lib.aslx' is not a library


As far as I can see, score_lib.aslx is just XML enclosed in "library" tags; is there something else to it? I checked score still works after the new version, and that loads fine.

Alex
The <library> element must be the first element in the aslx file.

Pertex
It could be a problem with the encoding. Make sure that the lib is saved as UTF-8

The Pixie
I had a comment at the top of the file, and that threw it.

So I have a library, and a very quick test adventure; how do I submit it?

Alex
You can email it to me, or maybe it's better to attach it here so people can play with it first. When it's ready, I'll set up a new area on the site and/or wiki.

The Pixie
Another suggestion:

assertions for walkthroughs

Unit test your game!

Alex
Yes, that is something I've had in the back of my mind. Would be great for testing Quest itself as well!

Logged: http://quest.codeplex.com/workitem/845

The Pixie
Occasionally I get this error:
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at AxeSoftware.Quest.EditorControls.WFEditorTree.AddNode(String key, String text, String parentKey, Nullable`1 foreColor, Nullable`1 backColor, Nullable`1 position)
at AxeSoftware.Quest.Editor.m_controller_AddedNode(String key, String text, String parent, Boolean isLibraryNode, Nullable`1 position)
at AxeSoftware.Quest.EditorController.AddElementToTree(Element o, Nullable`1 position)
at AxeSoftware.Quest.EditorController.UpdateTree()
at AxeSoftware.Quest.EditorController.Initialise(String filename, String libFolder)
...

It would be helpful if it stated the key it could not find, so I could search for it, and correct my XML.

Alex
What causes the error?

The Pixie
When an XML element has an unknown value for the name attibute, say for inherit, I think will do it.

The Pixie
A couple more minor suggestions:

Consistency in case sensitivity for function names. Most names seem to be insentitive, but a few, such as destroy, are not (I would prefer to use Destroy than destroy, so all function names are in title case, to differentiate from variables).

When in code view, pressing crtl-F opens up the search box. Would be nice if it moved the cursor there too. This seems to happen if the search box is already open, but in that case it would be nice if the existing search text was highlighted.

Some clues about where a syntax error might be. The system sometimes goves a line number, but it is usually line 1; even if it just said the function of object name, this would be helpful.

Also, suppurt for comments in the GUI (they can already go in the XML). In particular, functions would benefit from the ability to add a comment at the top. As functions are often CDATA, and comments must be outside the CDATA, I think that would restrict you to one comment as at the top of each script.

Alex
"destroy" is not a function, it's a script command.

Functions are capitalised "LikeThis", and script commands are capitalised "like this".

This is the same convention typically used in C# code (script commands are like keywords).

I would treat everything as case sensitive. In fact I'd say case insensitivity is a bug as far as scripting goes (though FLEE may have other ideas, so I'm not sure how well this applies to expressions).

I agree it would be nice for Ctrl+F to set focus to the text box - I couldn't get it to work though. Focussing in WPF is a pain sometimes. If anybody wants to have a look into this, be my guest!

Syntax errors usually come from FLEE - each expression is compiled individually which is why the line is always 1. Logged http://quest.codeplex.com/workitem/864 for more error information.

Logged http://quest.codeplex.com/workitem/865 for script comments.

The Pixie
I had totally missed the distinction between functions and script commands. Okay, could I then suggest that the script commands listed on these pages all be in lower case, and on the second page, a note added to explain this is consistent.

http://quest5.net/wiki/Category:Script_Commands
http://quest5.net/wiki/Category:All_Functions

I was doing XML comments by the way; these do survive the editor. It wuld just be nice to see them in thr GUI.

Alex
I agree, I think the Script Commands should be removed from the "All Functions" category... it wasn't my addition, and I don't really fancy going through them all to remove the category entry from each item... sigh.

The Pixie
I think it is useful having them on the same page, but perhaps in two sections. I refer to that page a lot. I will modify it that way myself if you would like.

Alex
The Category pages are automatically generated based on pages that have that have category tag, so you can't split it into two sections... unless there is such a thing as a sub-category, which may be the case. I don't know - MediaWiki has a lot of hidden depths. I'm happy for you to organise it this way if you can!

Pertex
Alex wrote:I agree, I think the Script Commands should be removed from the "All Functions" category...


No I do not agree with that. I added the "All Functions" category because I had to click through different pages to find a function or a command. Mostly I do know a piece of the name of a command or function so I find the right thing on this all-page really quick.

The Pixie
Pertex wrote:I added the "All Functions" category because I had to click through different pages to find a function or a command. Mostly I do know a piece of the name of a command or function so I find the right thing on this all-page really quick.

I agree. However, if I see an entry for "Destroy", then I am going to think that it should be in title case, and comment when Quest objects.

So how about changing the script commands to lower case on the relevant pages, will Wiki Media then update this page to show them in lower case? The title of the page can become All Functions and Script Commands, with a note at the bottom that functions are title case, script commands are lower case.


On a slightly related note, what is the deal with "Dictionary add"? Is that a function and a script command?

Alex
MediaWiki seems to like having all entries with an initial capital letter - even e e cummings on WikiPedia doesn't get special treatment, he has to have a capital letter too - http://en.wikipedia.org/wiki/E_e_cummings

Alex
"dictionary add" is just a script command - is there anywhere that says otherwise?

The Pixie
Er, it starts with a capital in the Wiki...

I am coming round to thinking that all functions should have just functions and not script commands. I have added a comment to the script commands page that they should be lower case, but I wonder if a further note about the difference between script commands and functions is desirable. It is not somethig I was aware of until this discussion.

Pertex
I dont understand the problem. This category should only view all functions or command or something else that can be used for scripting. Perhaps you want to rename it to "Glossary" or something. Then you can create a new category "all functions" with really only functions in it. And if you dont want to use "All functions" in the meantime you still can use the other links to the functions.

"(NB script commands should be in all lower case)" What does NB mean?

The Pixie
As it is at the moment, the script commands in the list are wrong; they should be lower case. There should be some way to make this clear so people do not wonder why Destroy is not correct (as I did).

I have written a whole bunch of functions with all lower case names because I was not aware of the convention for functions; look at code Quest creates you see lower case and title case mixed in. I now realise that is because some are script commands. I guess what it is that differentiating helps to understand the underlying philosophy of the language.

NB means "nota bene", Latin for "note well".

Alex
This may help: http://en.wikipedia.org/wiki/Wikipedia:Naming_conventions_(technical_restrictions) - if anyone can figure it out!

MediaWiki certainly is powerful but it also melts the brain sometimes.

Alex
Actually looks like it wouldn't help the Category page.

Maybe we need to manually maintain the list of script command articles, but that's a pain too.

The Pixie
Another request:

Default responses for ask/tell to have an option to invoke a script, with the subject asked or told available.

I would like to have default responses to depend on the subject asked about, and this would seem the simplest way. I can have the script for each character call a function, and the function give a suitable response, possibly varied by the sex of the character or whatever.

The Pixie
Another request. You already have functions for turning flags on and off; could I suggest one for determining the state? Furthermore, I suggest it returns false if the flag does not exist.

I have already written; I would just like it added to the standard library.
  <function name="GetObjectFlag" parameters="obj, flag" type="boolean">
if (HasBoolean(obj, flag)) {
return (GetBoolean(obj, flag))
}
else {
return (false)
}
</function>

Alex
That is equivalent to the existing GetBoolean function - which returns false if the flag/attribute doesn't exist.

The GetBoolean function is what the "if" expression template "object has flag" uses.

The Pixie
I was sure I tried that first and found that was not the case, and yet when I tried just now it certainly does work. Suggestion withdrawn.

Congratulations on the full release by the way.

The Pixie
I have said this before, but I want to say it again to emphasise it:

Error messages to give a clue about where the problem is. If I miss a " in a msg, then go from code to GUI view I get an error saying ) is missing (which I can understand, and do not object to), but no clue about where it might be. If you have a game that is a decent size it is a real pain in the neck to track down that missing " or ).

I say this because I see this is not scheduled until 5.2.
http://quest.codeplex.com/workitem/864

Alex
OK. I have rescheduled for v5.1 and added that detail.

The Pixie
A transcript facility

I say this only because I note that judges for IFcomp seem to like this.

Alex
Already logged for 5.1: http://quest.codeplex.com/workitem/867

The Pixie
A way to change the scope for a command when matching #object#.

And example to illustrate would be the "buy" command. Set this to look only in player.parent.stock (checking if it exists first). Goods for sale go in the stock object, where they are not available for "get", "look at", etc. When you buy something, the item in stock gets cloned, and added to the player. If the player drops and then takes the object, the game will know he is talking about the clone, and not the original.

Alex
Logged http://quest.codeplex.com/workitem/895

The Pixie
Two more; one simple, one not. I would not want you to get bored...

Conditional libraries

In the xml for importing a library, have an optional attribute "debug". If it is present and true, then exclude the library when creating the .quest file. Any cheats (functions, commands, etc.) that you use for debuigging can go in a conditional library that you know will be excluded when you release.

Stats

I have mentioned this before, but now it gets bigger, as a debugging tool. A menu command in the editor that will go through your game and:

count the number of rooms (objects that inherit editor_room, but do not have stats_exclude_room set to true)
list all the rooms with no alias
list all the rooms with no (or the default*) "look"
list all the rooms with no (or the default*) "smell"
list all the rooms with no (or the default*) "listen"
list all the rooms with no exits (unless stats_exclude_exit_from is set)
list all the rooms with no exits pointing to them (unless stats_exclude_exit_to is set)

count the number of items (objects that inherit editor_item, but do not have stats_exclude_item set to true and are not male or female characters)
list all the items with no alias
list all the items with no (or the default*) "look at"

count the number of characters (objects that inherit editor_item, but do not have stats_exclude_item set to true and are male or female characters)
list all the characters with no alias
list all the characters with no (or the default*) "look at"
list all the characters with no (or the default*) "talk at"

* It would have to check what the default is too for the particular game.

Pertex
The Pixie wrote:Two more; one simple, one not. I would not want you to get bored...

which one is the simple one? :lol:

and some enhancements in the debugger:
-a refreshbutton
-a treeview like in the editor in the objecttab
-sorting asc/desc in all tabs


The Pixie
Yet another suggestion.

Ubiquitous scenery items: A way to have one item in many places. The player wants to examine the wall, no problem, wall is a ubiquitous item, so is defined once, but can be examined from anywhere. The way I see this being implemented is through types. You can set a room to inherit from the "walled" type, and then add the wall object to the type. Then the scope checks through all the objects in the room the current room inherits from as well as what is in the room.

ETA

Thinking aboiut it this might just be an amendment to this:

A way to change the scope for a command when matching #object#.

And example to illustrate would be the "buy" command. Set this to look only in player.parent.stock (checking if it exists first). Goods for sale go in the stock object, where they are not available for "get", "look at", etc. When you buy something, the item in stock gets cloned, and added to the player. If the player drops and then takes the object, the game will know he is talking about the clone, and not the original.


Alex
There is a ticket for extending scopes, which this could be part of: http://quest.codeplex.com/workitem/813

The Pixie
People in the wider IF community seem to like to put in comments while playing a game, especially when beta-testing and judging a competition. The convention seems to be that if the player starts a command [[ this should be ignored by the parser.

Alex
Didn't someone on intfiction.org say it was "*"? How do you turn that on in Inform - it just gives me "That's not a verb I recognize".

The Pixie
I have been looking at reviews (esp. of IFcomp entries) and snippets from transcripts have [[ to start a comment. Maybe that was edited later? I have never usded any other software, so I do not know.

Pertex
If you add the use-command to an object ("handle objects individually"), it would be fine, if Q5 could generate the use-command with switched objects. So if you create "use a on b" Q5 generates "use b on a" automatically with the same script

Alex
But "use a on b" is not the same thing as "use b on a"... use nail on hammer?

By the way, I think it's time we had separate threads for each suggestion/problem/discussion as it's starting to get difficult to keep track of everything when it's all in one thread.

Pertex
So its the question, if 'use a on b' is the correct command. :D In german I only have 'use a with b' so the order does not care.
On the other hand, if you are baking bread you could 'use water on flour' but also 'use flour on water' so you have to create both, too.

The Pixie
I previously requested a way to add comments in game. I have now found a solution.
  <command name="comment">
<pattern type="string"><![CDATA[^\*]]></pattern>
<script>
</script>
</command>

Type an asterisk, and everythung after will get ignored.

m4u
Alex wrote:Already logged for 5.1: http://quest.codeplex.com/workitem/867


Hi guys, i needing this badly for the competition. Any luck?

Pertex
In Q5.3 there is a log command and a log window.
What do you want to do exactly?

The Pixie
m4u wrote:Hi guys, i needing this badly for the competition. Any luck?

Sounds familar, I requested it because I needed it for last years.

Add the command in the post above yours.

Go into code mode, and insert it just before the last line.
 </asl>

This becomes:

  <command name="comment">
<pattern type="string"><![CDATA[^\*]]></pattern>
<script>
</script>
</command>
</asl>


It is not perfect, as any full stop will be seen as the end of one command (taken as a coment) and the start of a second (which will be taken as a command).

[hint]I am hoping this will be properly implemented in 5.3; it should be easy to do (using the assert command as a basis, and just doing nothing) and as you have found is vital to competitions and also makes beta-testing easier[/hint]

Pertex
Sorry, I am a bit confused. What should this code do? Logging the output in a textfile?

sgreig
Pertex wrote:Sorry, I am a bit confused. What should this code do? Logging the output in a textfile?


I believe so. The idea is that you have the game creating a transcript of the player's session, and they can add notes about their observations, etc. by typing something along the lines of:


[[ This puzzle is really obscure. The solution should be made a bit more obvious.

Alex
If you'd like to see the player transcripts for those who have been playing online, drop me an email and I can extract them from the logs - I did this for the IFComp entry last year too.

It's the kind of service that will eventually be automated as I think it will be helpful to a lot of game authors to see exactly what players are doing.

The Pixie
Pertex wrote:Sorry, I am a bit confused. What should this code do? Logging the output in a textfile?

I allows the player to type a comment that will not be parsed by the game, so will not affect the game state during play. The author can then look through the transcipt searching for * and quickly find those comments.

Logging transcripts will be very useful, and is related, but is not the same thing.

The Pixie
Just gone back over this old thread to see what I had suggested so long ago, and what is still outstanding and I still think would be good in Quest:

Comments, as mentioned above
Spell checker
Control-F in code view to move the cursor
Conditional libraries (i.e., debugging commands in a library that is not included when publishing)

And a new one:
A keyboard short cut for jumping between GUI and code

With regards to the Control-F issue, how about having the search box open all the time, rather than only appearing when control-F is pressed? Control-F would now move the cursor to the search box, which it does successfully anyway if the box is already open.

Spell checking may be tricky to impossible, but the rest should be easy to implement?

jaynabonne
According to Alex, the two Find bugs (focus not moved to Find box the first time, and text not auto-selected on subsequent Finds) are both fixed in 5.3.

This topic is now closed. Topics are closed after 60 days of inactivity.

Support

Forums