//#include "condition.h" #define COND_RANGE 100 #define COND_MAX 100 #define COND_FAIL 0 void create(){ } int cond, max_cond; void setup_condition(int i) { if(max_cond = i + random(COND_RANGE) > COND_MAX) max_cond = i = COND_MAX; cond = i; } /* this could be masked by the object */ varargs void break_me(object adjuster) { object env = environment(); if(env && interactive(env)){ if(adjuster && adjuster != env){ tell_object(env, "\n"+adjuster->query_cap_name()+ " destroys your "+this_object()->query_short()+ "!\n"); tell_object(adjuster, "You destroy "+env->query_cap_name()+ "'s "+this_object()->query_short()+"!\n"); tell_room(environment(env),adjuster->query_cap_name()+ " destroys "+env->query_cap_name()+"'s " +this_object()->query_short()+"!\n"); } else tell_object(env, "\nYour "+this_object()->query_short()+ " exists no more.\n"); } // Taniwha, can't continue execution after a dest. // So it'll get rather full :), but it fixes the problem this_object()->move("/room/rubbish"); call_out("dest_me",0); } string cond_string() { switch ((100*cond)/COND_MAX) { case 0 : return "It is a wreck.\n"; case 1..10 : return "It is in a very bad condition.\n"; case 11..20 : return "It is in a bad condition.\n"; case 21..30 : return "It is in poor condition.\n"; case 31..40 : return "It is below average condition.\n"; case 51..60 : return "It is average condition.\n"; case 61..70 : return "It is in reasonable condition.\n"; case 71..80 : return "It is in good condition.\n"; case 81..90 : return "It is in very good condition.\n"; default : return "It is in excellent condition.\n"; } } varargs int adjust_cond(int i, object adjuster) { if(!i) return cond; cond += i; if(cond < 0) cond = 0; // can't make better than max_cond if(cond > 0 && max_cond < cond){ cond = max_cond; return cond; } // max_cond can slip... if(cond < 0 && max_cond < cond + COND_RANGE) max_cond = cond + COND_RANGE; // the bigger i is and the smaller cond is the bigger the chance of breaking if(i < 0 && random(-cond/i) <= COND_FAIL) break_me(adjuster); /* if(cond < max_cond / 4 && (cond*400/max_cond + random(100) < 100)) break_me(adjuster); */ return cond; } int query_cond() { return cond; } int query_max_cond() { return max_cond; }