There's more fancy ways to do it via scripting, but here's probably the simpliest way for what you want (well least character size that is hopefully 'simple' enough for you to do it ~ depends on how good~bad this post is of mine as a guide for you, lol):
Quest's 'Groups~Classes' are known as 'Object Types'
http://docs.textadventures.co.uk/quest/ ... /type.html (Object Types)
http://docs.textadventures.co.uk/quest/types.html (Object Types)
http://docs.textadventures.co.uk/quest/ ... types.html (using Object Types and their 'Inherited' Attributes Tutorial Guide)
left side's 'tree of stuff', click on the '+' for 'Advanced' to show its subcategories, click on 'Object Types', and click on 'Add', (see below)
Object Type Name: key_object_type (for this post~example only, as the name can be whatever you want)
'key_object_type' Object Type -> Attributes -> Add -> (see below)
Attribute Name: look
Attribute Type (there's a little drop down box below, it's currently selected as a 'string', but change it to a script): script
Attribute Value: (your scripting: 'add new script~s' circle button, your script~s, see below)
add new script -> output -> 'print a message' Script -> [message ~ this is for text only] or [expression ~ this is for text + VARIABLES] -> (write your message ~ if you need help with what you want to do for your message, well if you want to do a dynamic~VARIABLE message, let me know and I can help you with it, as you'll need to use 'this' for your VARIABLE's Object's name, and will likely need help with using VARIABLES)
etc script~s
-------------------
then on (each~every~all of) your 'key' Objects, for an example:
'key_1' Object -> 'Attributes' Tab -> Inherited Types -> Add -> (either scroll down looking for your 'key_object_type' Object Type, or just re-type in the name of your Object Type, in this example: key_object_type, instead of trying to find it, lol)
-------------------------------
Object Types can hold Attributes (just like an Object can hold Attributes) and also other Object Types (but we'll ignore this, so not to confuse you).
so, conceptually this is what you're doing:
you create an Object Type, which you give it the 'look' Script Attribute (which is your non-room Object description), and you likely will want to set it up to be a generalized message (as its going to be used by all of your 50 'key' Objects).
then you give each~every~all of your 50 'key' Objects, this Object Type (via as a 'Inherited' Attribute)
now... using an Object Type, for just a single Attribute is a waste, but you can have the Object Type hold more Attributes, and then it's not a waste!
-----
here's the usefulness (efficiency: less character~symbol length, less typing, less file size) of Object Types, as seen via directly in code:
<object name="dragon_1">
<inherit name="fire_dragon_object_type" />
</object>
<object name="dragon_2">
<inherit name="fire_dragon_object_type" />
</object>
<object name="dragon_3">
<inherit name="fire_dragon_object_type" />
</object>
<object name="dragon_4">
<inherit name="water_dragon_object_type" />
</object>
<object name="dragon_5">
<inherit name="water_dragon_object_type" />
</object>
<object name="dragon_6">
<inherit name="water_dragon_object_type" />
</object>
<type name="fire_dragon_object_type">
<alias>fire dragon</alias>
<attr name="elemental_string_attribute" type="string">fire</attr>
<attr name="strength_integer_attribute" type="int">75</attr>
<attr name="endurance_integer_attribute" type="int">75</attr>
<attr name="dexterity_integer_attribute" type="int">75</attr>
<attr name="agility_integer_attribute" type="int">75</attr>
<attr name="speed_integer_attribute" type="int">75</attr>
<attr name="luck_integer_attribute" type="int">75</attr>
<attr name="intelligence_integer_attribute" type="int">75</attr>
<attr name="spirituality_integer_attribute" type="int">75</attr>
<attr name="mentality_integer_attribute" type="int">75</attr>
<attr name="perception_integer_attribute" type="int">75</attr>
<look type="script">
msg ("The {this.alias} is vulnerable to water damage, but absorbs fire damage.")
</look>
</type>
<type name="water_dragon_object_type">
<alias>water dragon</alias>
<attr name="elemental_string_attribute" type="string">water</attr>
<attr name="strength_integer_attribute" type="int">50</attr>
<attr name="endurance_integer_attribute" type="int">50</attr>
<attr name="dexterity_integer_attribute" type="int">50</attr>
<attr name="agility_integer_attribute" type="int">50</attr>
<attr name="speed_integer_attribute" type="int">50</attr>
<attr name="luck_integer_attribute" type="int">50</attr>
<attr name="intelligence_integer_attribute" type="int">50</attr>
<attr name="spirituality_integer_attribute" type="int">50</attr>
<attr name="mentality_integer_attribute" type="int">50</attr>
<attr name="perception_integer_attribute" type="int">50</attr>
<look type="script">
msg ("The {this.alias} is vulnerable to fire damage, but absorbs water damage.")
</look>
</type>
vs *NOT* using Object Types (yuck! much more work~typing, more character~symbols, more file size):
<object name="dragon_1">
<alias>fire dragon</alias>
<attr name="elemental_string_attribute" type="string">fire</attr>
<attr name="strength_integer_attribute" type="int">75</attr>
<attr name="endurance_integer_attribute" type="int">75</attr>
<attr name="dexterity_integer_attribute" type="int">75</attr>
<attr name="agility_integer_attribute" type="int">75</attr>
<attr name="speed_integer_attribute" type="int">75</attr>
<attr name="luck_integer_attribute" type="int">75</attr>
<attr name="intelligence_integer_attribute" type="int">75</attr>
<attr name="spirituality_integer_attribute" type="int">75</attr>
<attr name="mentality_integer_attribute" type="int">75</attr>
<attr name="perception_integer_attribute" type="int">75</attr>
<look type="script">
msg ("The fire dragon is vulnerable to water damage, but absorbs fire damage.")
</look>
</object>
<object name="dragon_2">
<alias>fire dragon</alias>
<attr name="elemental_string_attribute" type="string">fire</attr>
<attr name="strength_integer_attribute" type="int">75</attr>
<attr name="endurance_integer_attribute" type="int">75</attr>
<attr name="dexterity_integer_attribute" type="int">75</attr>
<attr name="agility_integer_attribute" type="int">75</attr>
<attr name="speed_integer_attribute" type="int">75</attr>
<attr name="luck_integer_attribute" type="int">75</attr>
<attr name="intelligence_integer_attribute" type="int">75</attr>
<attr name="spirituality_integer_attribute" type="int">75</attr>
<attr name="mentality_integer_attribute" type="int">75</attr>
<attr name="perception_integer_attribute" type="int">75</attr>
<look type="script">
msg ("The fire dragon is vulnerable to water damage, but absorbs fire damage.")
</look>
</object>
<object name="dragon_3">
<alias>fire dragon</alias>
<attr name="elemental_string_attribute" type="string">fire</attr>
<attr name="strength_integer_attribute" type="int">75</attr>
<attr name="endurance_integer_attribute" type="int">75</attr>
<attr name="dexterity_integer_attribute" type="int">75</attr>
<attr name="agility_integer_attribute" type="int">75</attr>
<attr name="speed_integer_attribute" type="int">75</attr>
<attr name="luck_integer_attribute" type="int">75</attr>
<attr name="intelligence_integer_attribute" type="int">75</attr>
<attr name="spirituality_integer_attribute" type="int">75</attr>
<attr name="mentality_integer_attribute" type="int">75</attr>
<attr name="perception_integer_attribute" type="int">75</attr>
<look type="script">
msg ("The fire dragon is vulnerable to water damage, but absorbs fire damage.")
</look>
</object>
<object name="dragon_4">
<alias>water dragon</alias>
<attr name="elemental_string_attribute" type="string">water</attr>
<attr name="strength_integer_attribute" type="int">50</attr>
<attr name="endurance_integer_attribute" type="int">50</attr>
<attr name="dexterity_integer_attribute" type="int">50</attr>
<attr name="agility_integer_attribute" type="int">50</attr>
<attr name="speed_integer_attribute" type="int">50</attr>
<attr name="luck_integer_attribute" type="int">50</attr>
<attr name="intelligence_integer_attribute" type="int">50</attr>
<attr name="spirituality_integer_attribute" type="int">50</attr>
<attr name="mentality_integer_attribute" type="int">50</attr>
<attr name="perception_integer_attribute" type="int">50</attr>
<look type="script">
msg ("The water dragon is vulnerable to fire damage, but absorbs water damage.")
</look>
</object>
<object name="dragon_5">
<alias>water dragon</alias>
<attr name="elemental_string_attribute" type="string">water</attr>
<attr name="strength_integer_attribute" type="int">50</attr>
<attr name="endurance_integer_attribute" type="int">50</attr>
<attr name="dexterity_integer_attribute" type="int">50</attr>
<attr name="agility_integer_attribute" type="int">50</attr>
<attr name="speed_integer_attribute" type="int">50</attr>
<attr name="luck_integer_attribute" type="int">50</attr>
<attr name="intelligence_integer_attribute" type="int">50</attr>
<attr name="spirituality_integer_attribute" type="int">50</attr>
<attr name="mentality_integer_attribute" type="int">50</attr>
<attr name="perception_integer_attribute" type="int">50</attr>
<look type="script">
msg ("The water dragon is vulnerable to fire damage, but absorbs water damage.")
</look>
</object>
<object name="dragon_6">
<alias>water dragon</alias>
<attr name="elemental_string_attribute" type="string">water</attr>
<attr name="strength_integer_attribute" type="int">50</attr>
<attr name="endurance_integer_attribute" type="int">50</attr>
<attr name="dexterity_integer_attribute" type="int">50</attr>
<attr name="agility_integer_attribute" type="int">50</attr>
<attr name="speed_integer_attribute" type="int">50</attr>
<attr name="luck_integer_attribute" type="int">50</attr>
<attr name="intelligence_integer_attribute" type="int">50</attr>
<attr name="spirituality_integer_attribute" type="int">50</attr>
<attr name="mentality_integer_attribute" type="int">50</attr>
<attr name="perception_integer_attribute" type="int">50</attr>
<look type="script">
msg ("The water dragon is vulnerable to fire damage, but absorbs water damage.")
</look>
</object>