/**
* This effect is used to impart the attribute of "quality" upon an
* object, be it weapon, armour or normal object. There are a couple
* main effects of quality upon an object:
* <ul>
* <li>
* <b>Sturdiness</b>. A higher quality object will suffer less damage
* than it would normally. Lower quality suffers more damage.
* <li>
* <b>Value</b>. A higher quality object is worth more. Lower quality
* brings a lower price.
* <li>
* <b>Damage Inflicted</b>. A higher quality weapon has better balance,
* holds a better edge (for sharp weapons), has a better designed
* striking surface (for blunt weapons), and better grips, and thus
* will do more damage than a normal weapon. A low quality weapon,
* on the other hand, might have a loose handle, poor edge or even
* a warped blade.
* <li>
* <b>Enchantment potential</b>. A higher quality weapon, due to its
* superior form and structure, will hold a higher enchantment than
* something put together by some drunken twonk from Slice.
* <li>
* <b>Appearance</b>. The quality of the item is obvious to those who
* inspect it.
* </ul>
* All these modifications to normal behavior are on a logarithmic scale,
* thus the range of possible quality numbers ranges from +infinity to
* -infinity, but in actual practice only +10 to -10 are meaningful.
* Even so, the further you get from quality 0 (normal in all respects)
* the more rare it should be. Most shopkeepers will not carry poor
* quality merchandice unless they are in dire straits, and there are
* extremely few people on the disc capable of even approaching the upper
* quality ratings. Even then, they only do so by the grace of the Gods.
* @example wossname->add_effect(EFFECT_PATH+"object/quality.c",4)
* @classification object.quality
* @author Daxa (Greg Craff)
* @started Sun 2200 22 Mar 1998
*/
#include <effect.h>
#include "path.h"
/**
* @ignore
*/
string query_shadow_ob() { return SHADOWS + "quality"; }
/**
* @ignore
*/
string query_classification() { return "object.quality"; }
/**
* @ignore
*/
int query_indefinite() { return 1; }
/**
* This function is called by add_effect.
* @param wossname The object receiving the effect; don't worry about it.
* @param quality The integer indicating quality. This is the only thing
* you worry about.
* @param id The effect id on the object receiving the effect; ignore it.
*/
int beginning( object wossname, int quality, int id)
{
wossname->add_extra_look( this_object() );
}
void end( object wossname, int quality, int id)
{
wossname->remove_extra_look( this_object() );
}
int merge_effect( object wossname, int old_quality, int new_quality, int id)
{
// Necessary to handle quality = 0
if (new_quality == 0)
{
// function bing = (: $(wossname), "set_arg_of", $(id), 0 :);
function bing = (: $(wossname)->set_arg_of($(id), 0) :);
call_out(bing, 0);
return 1;
}
else
return new_quality;
}
int restart( object wossname, int quality, int id)
{
wossname->add_extra_look( this_object() );
}
/**
* @ignore
*/
string extra_look( object wossname )
{
return capitalize(wossname->query_pronoun()) +
" appears to be of "+ wossname->quality() + " quality.\n";
}