Very basic question about puzzles
Romia
23 Mar 2016, 19:03Hi. I'm totally new to this, and have only been making tiny games for my kid so far. I always seem to end up struggling with this type of feature... Example: The player has 5 diffrent items, and needs to place the right one in a box. Placing the wrong one should make nothing happen, and placing the right one should solve the puzzle. It should only be possible to have one thing at the time in the box. (As in other cases there might be three boxes and each of them needs to be given right items.)
So far I haven't come up with a solution I like. Either the game lists every object in the room to choose from, or I can't make the box deny to have more than one item in it, or whatever I come up with just doesn't work.
I feel completely stupid because this seems to be a really really basic element to a game.
Please help? I'm no coder, but am comfortale with using copy/paste from an example until it works.
So far I haven't come up with a solution I like. Either the game lists every object in the room to choose from, or I can't make the box deny to have more than one item in it, or whatever I come up with just doesn't work.
I feel completely stupid because this seems to be a really really basic element to a game.

Please help? I'm no coder, but am comfortale with using copy/paste from an example until it works.

HegemonKhan
23 Mar 2016, 20:34Edit:
things that seem easy or basic to the person playing the game, actually aren't so easy or basic to actually implement for the game maker (some "easy/basic" game stuff actually requires some very advanced professional programming/code work and logic), so you're not stupid.
Game Making requires a 'code/if' problem-solving logic mindset (regardless of whether you're actually coding or not), which takes time to train your brain in.
----------------------
there's the built-in 'maxobjects' Integer Attribute that you can use (I'm not sure how/where you activate this within the GUI~Editor, you got to figure it out):
http://docs.textadventures.co.uk/quest/ ... jects.html
for example, creating your own 'put/putin/use/useon' Verb/Command:
for checking if the right item is in the box:
http://docs.textadventures.co.uk/quest/ ... tains.html
--------------
for the ('box/room/whatever') Object listing every child Object, you're going to have to find the 'box/room/whatever' Object's Tab that has the toggle option of turning on/off the autolist child objects, to 'off' (check/uncheck it), so it won't list those child objects (child objects: the objects that are inside of another object, in this case, your 'box/room/whatever' Object)
things that seem easy or basic to the person playing the game, actually aren't so easy or basic to actually implement for the game maker (some "easy/basic" game stuff actually requires some very advanced professional programming/code work and logic), so you're not stupid.
Game Making requires a 'code/if' problem-solving logic mindset (regardless of whether you're actually coding or not), which takes time to train your brain in.
----------------------
there's the built-in 'maxobjects' Integer Attribute that you can use (I'm not sure how/where you activate this within the GUI~Editor, you got to figure it out):
http://docs.textadventures.co.uk/quest/ ... jects.html
for example, creating your own 'put/putin/use/useon' Verb/Command:
if (box.maxobjects > 0) {
msg ("Sorry, but the box can only hold 1 item at a time. Remove the item that is already in the box first.")
} else {
<item's name that you need a way of referencing which item it is>.parent = box
// or, you can use the GUI~Editor's 'MoveObject' Script:
// MoveObject (<item's name that you need a way of referencing which item it is>, box)
}
for checking if the right item is in the box:
http://docs.textadventures.co.uk/quest/ ... tains.html
// let's say 'item3' is the solution
// (case: upper/lower case, matters. for example: Box =/= box =/= boX =/= BOX)
if (Contains (box, item3)) {
msg ("Congrats, you found the solution to this puzzle!")
}
--------------
for the ('box/room/whatever') Object listing every child Object, you're going to have to find the 'box/room/whatever' Object's Tab that has the toggle option of turning on/off the autolist child objects, to 'off' (check/uncheck it), so it won't list those child objects (child objects: the objects that are inside of another object, in this case, your 'box/room/whatever' Object)
HegemonKhan
23 Mar 2016, 20:40containment (parent-child) hierarcy:
grandfather
-> father
->-> son
->->-> grandson
grandfather is the main (root) parent
grandfather is the the direct parent of father
grandfather is the indirect parent of son and grandson
father is the direct child of grandfather
father is the direct parent of son
father is the indirect parent of grandson
son is the indirect child of grandfather
son is the direct child of father
son is the direct arent of grandson
grandson is the indirect child of grandfather and father
grandson is the direct child of son
C:\\ (drive)
-> programs (folder)
->-> quest (file)
player
-> bag
->-> gold coin
// Objects in (or put into) the player's 'inventory' simply means that those Objects are inside (or put inside) of the 'player' Object.
// the 'inventory' is actually an Object List Attribute of the 'player' Object, but ignore about Lists for now, as they're much too complicated for now.
HK
-> pants
->-> wallet
->->-> $1
multiverse
-> universe
->-> galaxy clusters
->->-> milky way galaxy
->->->-> the 'sun' (a star on the outer tendril of the milkyway galaxy)
->->->->-> the 'earth' (3rd planet from sun; planet in our sun's solar system)
->->->->->-> humans
etc etc etc containment/parent-child heirarcies
grandfather
-> father
->-> son
->->-> grandson
grandfather is the main (root) parent
grandfather is the the direct parent of father
grandfather is the indirect parent of son and grandson
father is the direct child of grandfather
father is the direct parent of son
father is the indirect parent of grandson
son is the indirect child of grandfather
son is the direct child of father
son is the direct arent of grandson
grandson is the indirect child of grandfather and father
grandson is the direct child of son
C:\\ (drive)
-> programs (folder)
->-> quest (file)
player
-> bag
->-> gold coin
// Objects in (or put into) the player's 'inventory' simply means that those Objects are inside (or put inside) of the 'player' Object.
// the 'inventory' is actually an Object List Attribute of the 'player' Object, but ignore about Lists for now, as they're much too complicated for now.
HK
-> pants
->-> wallet
->->-> $1
multiverse
-> universe
->-> galaxy clusters
->->-> milky way galaxy
->->->-> the 'sun' (a star on the outer tendril of the milkyway galaxy)
->->->->-> the 'earth' (3rd planet from sun; planet in our sun's solar system)
->->->->->-> humans
etc etc etc containment/parent-child heirarcies
HegemonKhan
23 Mar 2016, 20:45here's a good resource for you (if you don't already know about it):
http://docs.textadventures.co.uk/quest/guides/ (look at the 'security passcode' stuff, as it's a similar general idea)
(scroll all the way down, to the 'helpsheets for a beginning', as these are useful guides for the common questions/things people want to do in their games)
http://docs.textadventures.co.uk/quest/guides/ (look at the 'security passcode' stuff, as it's a similar general idea)
(scroll all the way down, to the 'helpsheets for a beginning', as these are useful guides for the common questions/things people want to do in their games)

XanMag
23 Mar 2016, 21:51Here you go. I like these questions as it gives me a reason to procrastinate with x3!
Here is a .aslx file. The simple room is easier to understand and addresses part one of your questions. The tougher room is harder to understand but addresses the second scenario.
I would download the .aslx file and run it with the Quest software. That way you can see what I did and you can copy it.
Also, you might want to check out the "game" 'Quest - Tutorials and Template'. It is designed for someone exactly like you and I would like to know if you find it useful! Please ask if you have questions! Good luck.
.aslx file -
Code (if interested):
I'll be happy to explain the steps to you if you cannot locate them (which may be a bit difficult in the tougher room). Be sure to check the 'attributes' tab of the tougher room - specifically the FilledBoxCount and the changedFilledBoxCount as well as the commands for adding the correct object to the correct slot.
Here is a .aslx file. The simple room is easier to understand and addresses part one of your questions. The tougher room is harder to understand but addresses the second scenario.
I would download the .aslx file and run it with the Quest software. That way you can see what I did and you can copy it.
Also, you might want to check out the "game" 'Quest - Tutorials and Template'. It is designed for someone exactly like you and I would like to know if you find it useful! Please ask if you have questions! Good luck.
.aslx file -
Code (if interested):
<asl version="550">
<include ref="English.aslx" />
<include ref="Core.aslx" />
<game name="Items in a Box Puzzle">
<gameid>f1162207-4cf6-4192-95bd-4df801b04aff</gameid>
<version>1.0</version>
<firstpublished>2016</firstpublished>
<feature_limitinventory />
</game>
<object name="simple room">
<inherit name="editor_room" />
<alias>simple item in a box puzzle</alias>
<object name="marshmallow">
<inherit name="editor_object" />
<look>Yep. A soft, squishy marshmallow.</look>
<eat>As tempting as it is, no.</eat>
<take />
</object>
<object name="box">
<inherit name="editor_object" />
<inherit name="container_limited" />
<look>The box is decorated colorfully and is open. Of course it is open, it has no lid! Placing the correct object in the box will unlock the door!</look>
<takemsg>The box is fastened securely to the floor.</takemsg>
<feature_container />
<open type="boolean">false</open>
<close type="boolean">false</close>
<containermaxobjects>The box cannot hold any more!</containermaxobjects>
<containerfullmessage>The box cannot hold any more!</containerfullmessage>
</object>
<object name="door">
<inherit name="editor_object" />
<look>There is a door on the north wall but there are no handles! There must be another way to open it!</look>
<takemsg>You can't.</takemsg>
</object>
<object name="golf ball">
<inherit name="editor_object" />
<look>It's a beat up, old golf ball.</look>
<take />
</object>
<object name="die">
<inherit name="editor_object" />
<look>It's a game die, but there are no number on it.</look>
<take />
<roll>It's not meant for rolling or tossing.</roll>
</object>
<command name="die placed cmd">
<pattern>put die in box; place die in box; deposit die in box</pattern>
<script>
msg ("When you drop the die in the box, the door on the north wall disappears! You may now go north!")
UnlockExit (locked1)
MakeObjectInvisible (door)
MakeExitVisible (locked1)
</script>
</command>
<exit name="locked1" alias="north" to="tougher room">
<inherit name="northdirection" />
<locked />
<lockmessage>This is blocked by an unopenable door at the moment!</lockmessage>
<visible type="boolean">false</visible>
</exit>
<object name="player">
<inherit name="editor_object" />
<inherit name="editor_player" />
</object>
</object>
<verb>
<property>roll</property>
<pattern>roll; toss</pattern>
<defaultexpression>"You can't roll; toss " + object.article + "."</defaultexpression>
</verb>
<object name="tougher room">
<inherit name="editor_room" />
<BoxFilledCount type="int">3</BoxFilledCount>
<changedBoxFilledCount type="script"><![CDATA[
if (tougher room.BoxFilledCount = 0) {
MakeObjectVisible (fabulous sword)
MoveObject (fabulous sword, pedastal)
msg ("<br/>You hear a shimmering sound and notice that a sword has appeared on the pedastal!")
}
]]></changedBoxFilledCount>
<object name="slot 1">
<inherit name="editor_object" />
<inherit name="container_open" />
<look>It's a triangular slot.</look>
<feature_container />
<close type="boolean">false</close>
<open type="boolean">false</open>
</object>
<object name="slot 2">
<inherit name="editor_object" />
<inherit name="container_open" />
<look>It's a round shaped slot.</look>
<feature_container />
<open type="boolean">false</open>
<close type="boolean">false</close>
</object>
<object name="slot 3">
<inherit name="editor_object" />
<inherit name="container_open" />
<look>It's a square shaped slot.</look>
<feature_container />
<open type="boolean">false</open>
<close type="boolean">false</close>
</object>
<object name="hockey puck">
<inherit name="editor_object" />
<look>It's a hockey puck.</look>
<take type="script">
if (Contains (slot 3,slab)) {
msg ("It is where it should be! Leave it alone!")
}
else {
msg ("Taken.")
AddToInventory (hockey puck)
}
</take>
</object>
<object name="pyramid souvenir">
<inherit name="editor_object" />
<look>Must have been bought in an Egyptian gift shop?</look>
<take type="script">
if (Contains (slot 1,pyramid souvenir)) {
msg ("This is in the proper place. No need to move it!")
}
else {
msg ("Taken.")
AddToInventory (pyramid souvenir)
}
</take>
</object>
<object name="slab">
<inherit name="editor_object" />
<look>It's a small stone square a little bigger than a coaster.</look>
<take type="script">
if (Contains (slot 3,slab)) {
msg ("It is where it belongs. You do not need to take it!")
}
else {
msg ("Taken, bacon.")
AddToInventory (slab)
}
</take>
</object>
<command name="pyramid slot 1 cmd">
<pattern type="string">^(put|place) (the |)(pyramid|triangle|souvenir|pyramid souvenir) (on|into|in|onto) (the |)(slot 1|1)</pattern>
<script>
if (Got(pyramid souvenir)) {
msg ("You place the object into slot 1 and it fits perfectly!")
MoveObject (pyramid souvenir, slot 1)
tougher room.BoxFilledCount = tougher room.BoxFilledCount - 1
}
else {
msg ("You are not carrying that item.")
}
</script>
</command>
<command name="pyramid wrong slot cmd">
<pattern type="string">^(put|place) (the |)(pyramid|triangle|souvenir|pyramid souvenir) (on|into|in|onto) (the |)(slot 2|2|3|slot 3)</pattern>
<script>
if (Got(pyramid souvenir)) {
msg ("It does not appear to fit into that slot.")
}
else {
msg ("You are not carrying that item.")
}
</script>
</command>
<object name="pedastal">
<inherit name="editor_object" />
<inherit name="surface" />
<look type="script">
if (Contains (pedastal,fabulous sword)) {
msg ("It's a pedastal on which rests a fabulous sword!")
}
else {
msg ("It's an old pedastal and there ain't nothin' on it!")
}
</look>
<visible />
<scenery />
<feature_container />
</object>
<command name="puck slot 2 cmd">
<pattern type="string">^(put|place) (the |)(puck|hockey|hockey puck) (on|into|in|onto) (the |)(slot 2|2)</pattern>
<script>
if (Got(hockey puck)) {
msg ("You place the object into slot 2 and it fits perfectly!")
MoveObject (hockey puck, slot 2)
tougher room.BoxFilledCount = tougher room.BoxFilledCount - 1
}
else {
msg ("You are not carrying that item.")
}
</script>
</command>
<command name="puck wrong slot">
<pattern type="string">^(put|place) (the |)(puck|hockey|hockey puck) (on|into|in|onto) (the |)(slot 1|1|slot 3|3)</pattern>
<script>
if (Got(hockey puck)) {
msg ("It does not appear to fit into that slot.")
}
else {
msg ("You are not carrying that item.")
}
</script>
</command>
<command name="slab slot 3 cmd">
<pattern type="string">^(put|place) (the |)(slab) (on|into|in|onto) (the |)(slot 3|3)</pattern>
<script>
if (Got(slab)) {
msg ("You place the object into slot 1 and it fits perfectly!")
MoveObject (slab, slot 3)
tougher room.BoxFilledCount = tougher room.BoxFilledCount - 1
}
else {
msg ("You are not carrying that item.")
}
</script>
</command>
<command name="slab wrong slot">
<pattern type="string">^(put|place) (the |)(slab) (on|into|in|onto) (the |)(slot 1|1|slot 1|1|slot 2|2)</pattern>
<script>
if (Got(slab)) {
msg ("It does not appear to fit into that slot.")
}
else {
msg ("You are not carrying that item.")
}
</script>
</command>
<object name="fabulous sword">
<inherit name="editor_object" />
<look>It's a fabulous sword!</look>
<take />
<visible type="boolean">false</visible>
</object>
<exit alias="south" to="simple room">
<inherit name="southdirection" />
</exit>
</object>
</asl>
I'll be happy to explain the steps to you if you cannot locate them (which may be a bit difficult in the tougher room). Be sure to check the 'attributes' tab of the tougher room - specifically the FilledBoxCount and the changedFilledBoxCount as well as the commands for adding the correct object to the correct slot.
Romia
25 Mar 2016, 16:49Thank you all for good and helpful replies.
That Tutorials and Template game... omg, what an amount of work you've put in to that. Awesome! I'm gonna keep it as an encyclopedia, to come back to as I try more advanced stuff.
For now I'll work more on putting stuff in boxes. Seems like I completely missed the part about commands earlier....

That Tutorials and Template game... omg, what an amount of work you've put in to that. Awesome! I'm gonna keep it as an encyclopedia, to come back to as I try more advanced stuff.

HegemonKhan
25 Mar 2016, 18:11when you're ready, the first big step is learning how to use Attributes and the If Script:
viewtopic.php?f=18&t=5559
as these two things/scripts, especially when used together, let's you do 90% of everything that you want to do within your game.
viewtopic.php?f=18&t=5559
as these two things/scripts, especially when used together, let's you do 90% of everything that you want to do within your game.
Romia
25 Mar 2016, 19:08I'm stuck again. I can't get the limited container to work. I have set it up exactly like in XanMag's example game (Items in a Box puzzle), but I can put as much as I like in it. Really wondering what I'm doing wrong here.
The command for putting stuff in the box looks like this:
if (Got(battery)) {
msg ("You place the battery in the first basket.")
MoveObject (battery, first basket)
}
else {
msg ("You're not carrying that item.")
}
Which is pretty much identical to XanMag's, only with my names in it (and without the BoxFilledCount, which I suddenly realized I didn't need...)
Please, where else should I check for errors?
Update: This is confusing me even more... in XanMag's game (first part, the simple room). if I put in the marshmallow first and then try the golf ball, I get the message that the box is full. Also with golf ball first, then marshmallow. But I can put in the die even if the marshmallow or golf ball is in the box.
And I've been looking it over again and again, and I can't find the reason.

if (Got(battery)) {
msg ("You place the battery in the first basket.")
MoveObject (battery, first basket)
}
else {
msg ("You're not carrying that item.")
}
Which is pretty much identical to XanMag's, only with my names in it (and without the BoxFilledCount, which I suddenly realized I didn't need...)
Please, where else should I check for errors?

Update: This is confusing me even more... in XanMag's game (first part, the simple room). if I put in the marshmallow first and then try the golf ball, I get the message that the box is full. Also with golf ball first, then marshmallow. But I can put in the die even if the marshmallow or golf ball is in the box.
And I've been looking it over again and again, and I can't find the reason.


XanMag
26 Mar 2016, 01:54Ah... The die in the box is controlled by a command which overrides everything else. You can correct this by using a flag. Let me know if you can't figure that out and I'll be glad to help!
As for the first issue, have you ticked the box in one of the game tabs. It says something like setting inventory limits. sorry I didn't mention that before!
As for the first issue, have you ticked the box in one of the game tabs. It says something like setting inventory limits. sorry I didn't mention that before!
Romia
26 Mar 2016, 10:57Ohhhh, now I see the problem. That's what you get for "coding" when you're tired, I guess. First HUGE fail: I didn't realize that 'put' will work on it's own. The I guess I mixed up your two rooms, starting to make commands for every item available to choose from (to put in the basket). The I even messed that up ,and made Regular expressions where I should have made Command patterns. But I will obviously only need to do that for the correct item. So upon deleting the commands/expressions I'd made, it works like a charm. /facepalm
But umm... could you please explain the diffrence between Regular expressions and Command patterns? Then I'll be quiet for a while.
Most grateful in any case.

But umm... could you please explain the diffrence between Regular expressions and Command patterns? Then I'll be quiet for a while.

Most grateful in any case.



XanMag
26 Mar 2016, 15:18I think (using that term loosely), expressions are used when you use "code" to match player input and command patterns are when you match player input directly.
I think...
I think...

HegemonKhan
26 Mar 2016, 16:42I don't know REGular EXpressions (REGEX) very well, I tried studying them (along with Quest's 'delegates' too) a long while ago, but don't remember much now about them, nor did I really understand them anyways (at that time, hopefully I can understand them more now, now that I've been learning more about programming...), lol.
-----------
as for Command's 'patterns' they're your input parsing syntax for activating that Command (and taking any arguments as parameters to be used in the Command's scripting/scripts).
the simpliest Command's 'pattern' is a single "activation" word:
for example:
whenever you type in 'info', you see your character's stats
-----------
now, let's add parsing for an argument to be used as a parameter for the command's scripting:
if I type:
info player
I see HK's stats
same for:
info player2 // see XanMag's stats, not HK's, lol
info player3 // see Romia's stats, not HK's, lol
but if I type:
info orc1
or
info tree1
I see this:
You can only view your party members stat information. Wrong input, try again
------
you can have as many arguments/parameters as you want, using:
#text....# // quest sees this just as text, to be used in the Command's scripting
or
#object.....# // quest looks for an actual Object with the name/alias you type in for input, to be used in the Command's scripting
and also whatever pattern syntax that you want (using 3 arguments as an example):
info #object1# #object2# #object3#
// input required (example): info player1 player2 player3
info #object1#, #object2#, and #object3#
// input required (example): info player1, player2, and player3
info#object1##object2##object3#
// input required (example): infoplayer1player2player3
etc etc etc
--------------
oh, about what I mean by "activation" word:
the first word in the pattern allows quest to know what Command to activate, for example:
<command name="command_1">
-> <pattern>kiss</pattern>
</command>
<command name="command_2">
-> <pattern>kick</pattern>
</command>
<command name="command_3">
-> <pattern>bite</pattern>
</command>
<command name="command_4">
-> <pattern>punch</pattern>
</command>
as this deals with parsing...
what command does quest activate in this scenario:
kiss girl
or
kiss the girl
<command name="command_1">
-> <pattern>kiss #object#</pattern>
</command>
<command name="command_2">
-> <pattern>kiss #text#</pattern>
</command>
<command name="command_2">
-> <pattern>kiss the #text#</pattern>
</command>
quest (or a human): bafflement... I can activate any of them, so which one... ??? ERROR !!!!!
this is why it's important to use a unique "activator" (first) word for your command patterns, so quest can know what Command you want it to activate
-----------
as for Command's 'patterns' they're your input parsing syntax for activating that Command (and taking any arguments as parameters to be used in the Command's scripting/scripts).
the simpliest Command's 'pattern' is a single "activation" word:
for example:
<command name="character_information_command">
<pattern>info</pattern>
<script>
ClearScreen
msg ("CHARACTER SCREEN")
msg ("")
msg ("Name: " + player.alias)
msg ("Age: " + player.age_integer + " (" + player.age_string + ")")
msg ("Sex: " + player.sex)
msg ("Race: " + player.race)
msg ("Class: " + player.class)
// etc etc etc character stats
wait {
ClearScreen
}
</script>
</command>
// pretend output:
CHARACTER SCREEEN
Name: HK
Age: 18 (adult) // I wish I was 18 again
Sex: male
Race: human
Class: warrior
etc etc etc
whenever you type in 'info', you see your character's stats
-----------
now, let's add parsing for an argument to be used as a parameter for the command's scripting:
<object name="player">
<attr name="type_of_object" type="string">party_member</attr>
<attr name="alias" type="string">HK</attr>
<attr name="age_integer" type="int">18</attr>
<attr name="age_string" type="string">adult</attr>
<attr name="sex" type="string">male</attr>
<attr name="race" type="string">human</attr>
<attr name="class" type="string">warrior</attr>
</object>
<object name="player2">
<attr name="type_of_object" type="string">party_member</attr>
<attr name="alias" type="string">XanMag</attr>
<attr name="age_integer" type="int">18</attr>
<attr name="age_string" type="string">adult</attr>
<attr name="sex" type="string">male</attr>
<attr name="race" type="string">human</attr>
<attr name="class" type="string">barbarian</attr>
</object>
<object name="player3">
<attr name="type_of_object" type="string">party_member</attr>
<attr name="alias" type="string">Romia</attr>
<attr name="age_integer" type="int">18</attr>
<attr name="age_string" type="string">adult</attr>
<attr name="sex" type="string">male</attr>
<attr name="race" type="string">human</attr>
<attr name="class" type="string">knight</attr>
</object>
<obejct name="orc1">
<attr name="type_of_object" type="string">monster</attr>
<attr name="alias" type="string">orc</attr>
<attr name="age_integer" type="int">18</attr>
<attr name="age_string" type="string">adult</attr>
<attr name="sex" type="string">male</attr>
<attr name="race" type="string">orc</attr>
<attr name="class" type="string">berserker</attr>
</object>
<object name="tree1">
<attr name="type_of_object" type="string">environment</attr>
</object>
<command name="character_information_command">
<pattern>info #object_parameter#</pattern>
<script>
if (GetString (object_parameter, "type_of_object") = "party_member") {
ClearScreen
msg ("CHARACTER SCREEN")
msg ("")
msg ("Name: " + object_parameter.alias)
msg ("Age: " + object_parameter.age_integer + " (" + object_parameter.age_string + ")")
msg ("Sex: " + object_parameter.sex)
msg ("Race: " + object_parameter.race)
msg ("Class: " + object_parameter.class)
// etc etc etc character stats
wait {
ClearScreen
}
} else {
msg ("You can only view your party members stat information. Wrong input, try again")
}
</script>
</command>
if I type:
info player
I see HK's stats
same for:
info player2 // see XanMag's stats, not HK's, lol
info player3 // see Romia's stats, not HK's, lol
but if I type:
info orc1
or
info tree1
I see this:
You can only view your party members stat information. Wrong input, try again
------
you can have as many arguments/parameters as you want, using:
#text....# // quest sees this just as text, to be used in the Command's scripting
or
#object.....# // quest looks for an actual Object with the name/alias you type in for input, to be used in the Command's scripting
and also whatever pattern syntax that you want (using 3 arguments as an example):
info #object1# #object2# #object3#
// input required (example): info player1 player2 player3
info #object1#, #object2#, and #object3#
// input required (example): info player1, player2, and player3
info#object1##object2##object3#
// input required (example): infoplayer1player2player3
etc etc etc
--------------
oh, about what I mean by "activation" word:
the first word in the pattern allows quest to know what Command to activate, for example:
<command name="command_1">
-> <pattern>kiss</pattern>
</command>
<command name="command_2">
-> <pattern>kick</pattern>
</command>
<command name="command_3">
-> <pattern>bite</pattern>
</command>
<command name="command_4">
-> <pattern>punch</pattern>
</command>
as this deals with parsing...
what command does quest activate in this scenario:
kiss girl
or
kiss the girl
<command name="command_1">
-> <pattern>kiss #object#</pattern>
</command>
<command name="command_2">
-> <pattern>kiss #text#</pattern>
</command>
<command name="command_2">
-> <pattern>kiss the #text#</pattern>
</command>
quest (or a human): bafflement... I can activate any of them, so which one... ??? ERROR !!!!!
this is why it's important to use a unique "activator" (first) word for your command patterns, so quest can know what Command you want it to activate