/* weapon.c */ #include <sys.h> #include <weapon.h> object wielder,owner; string name,short_desc,long_desc; int hit_bonus,dam_num_die,dam_die_size,dam_bonus,flags,special,value; string msg_array1[MAX_INTENSITY]; string msg_array2[MAX_INTENSITY]; string msg_array3[MAX_INTENSITY]; string msg_array4[MAX_INTENSITY]; string msg_array5[MAX_INTENSITY]; self_destruct() { destruct(this_object()); return 1; } replicate() { object o; int loop; o=clone_object("/obj/weapon"); call_other(o,"set_hit_bonus",hit_bonus); call_other(o,"set_damage_bonus",dam_num_die,dam_die_size,dam_bonus); call_other(o,"set_name",get_name()); call_other(o,"set_short",short_desc); call_other(o,"set_long",long_desc); call_other(o,"set_flags",flags); call_other(o,"set_special",special); call_other(o,"set_owner",owner); call_other(o,"set_value",value); loop=0; while (loop<MAX_INTENSITY) { call_other(o,"set_hit_msg",loop,msg_array1[loop],msg_array2[loop], msg_array3[loop],msg_array4[loop],msg_array5[loop]); loop++; } move_object(o,location(this_object())); return o; } set_value(arg) { value=arg; return 1; } get_value() { return value; } get_type() { return TYPE_WEAPON; } get_owner() { return owner; } get_flags() { return flags; } get_special() { return special; } set_owner(o) { owner=o; return 1; } set_flags(f) { flags=f; return 1; } set_special(s) { special=s; return 1; } intensity_string(intensity) { if (intensity==I_PUNY) return "Puny"; if (intensity==I_WEAK) return "Weak"; if (intensity==I_POOR) return "Poor"; if (intensity==I_AVERAGE) return "Average"; if (intensity==I_GOOD) return "Good"; if (intensity==I_VERYGOOD) return "VeryGood"; return "Massacre"; } stat() { int loop; tell_player(this_player(),"Object Type: WEAPON\n"); if (flags) tell_player(this_player(),"Flags: "+make_flags(flags)+"\n"); if (special) tell_player(this_player(),"Special: "+itoa(special)+"\n"); if (name) tell_player(this_player(),"Name: "+get_name()+"\n"); if (short_desc) tell_player(this_player(),"Short: "+short_desc+"\n"); if (long_desc) tell_player(this_player(),"Long: "+long_desc+"\n"); tell_player(this_player(),"HitBonus: "+itoa(hit_bonus)+"\n"); tell_player(this_player(),"Damage: "+itoa(dam_num_die)+"d"+ itoa(dam_die_size)+"+"+itoa(dam_bonus)+"\n"); tell_player(this_player(),"Value: "+itoa(value)+"\n"); if (wielder) tell_player(this_player(),"Wielded By: "+make_num(wielder)+"\n"); loop=0; if (owner) tell_player(this_player(),"Owner: "+make_num(owner)+"\n"); while (loop<MAX_INTENSITY) { if (msg_array1[loop] || msg_array2[loop] || msg_array3[loop] || msg_array4[loop] || msg_array5[loop]) tell_player(this_player(),intensity_string(loop)+": "+ msg_array1[loop]+"*"+msg_array2[loop]+";"+ msg_array3[loop]+";"+ msg_array4[loop]+"*"+msg_array5[loop]+"\n"); loop++; } return 1; } id(arg) { return instr(name,1,";"+arg+";"); } get_short() { return wielder? short_desc+" (wielded)":short_desc; } set_short(arg) { short_desc=arg; return 1; } get_long() { return long_desc; } set_long(arg) { long_desc=arg; return 1; } get_name() { if (name) return midstr(name,2,(strlen(name)-2)); } set_name(arg) { int pos; name=";"+arg+";"; pos=instr(arg,1,";"); if (!short_desc) if (pos) short_desc="a "+leftstr(arg,pos-1); else short_desc="a "+arg; if (!long_desc) long_desc="You see nothing special."; return 1; } drop() { return wielder; } dead_drop() { if (wielder) call_other(wielder,"force_unwield"); wielder=0; return 0; } get() { return 1; } wield() { if (wielder) return 0; wielder=caller_object(); return 1; } unwield() { if (!wielder) return 1; if (caller_object()!=wielder) return 1; wielder=0; return 0; } get_hit_bonus(monster) { return hit_bonus; } set_hit_bonus(bonus) { hit_bonus=bonus; return 1; } get_damage() { return itoa(dam_num_die)+"d"+itoa(dam_die_size)+"+"+ itoa(dam_bonus); } get_damage_bonus(monster) { int count; int bonus; count=0; while (count++<dam_num_die) bonus+=random(dam_die_size)+1; return bonus+dam_bonus; } set_damage_bonus(x,y,z) { dam_num_die=x; dam_die_size=y; dam_bonus=z; return 1; } set_hit_msg(intensity,msg1,msg2,msg3,msg4,msg5) { if (intensity<0 || intensity>=MAX_INTENSITY) return; msg_array1[intensity]=msg1; msg_array2[intensity]=msg2; msg_array3[intensity]=msg3; msg_array4[intensity]=msg4; msg_array5[intensity]=msg5; return 1; } get_hit_msg1(intensity) { if (intensity<0 || intensity>=MAX_INTENSITY) return; return msg_array1[intensity]; } get_hit_msg2(intensity) { if (intensity<0 || intensity>=MAX_INTENSITY) return; return msg_array2[intensity]; } get_hit_msg3(intensity) { if (intensity<0 || intensity>=MAX_INTENSITY) return; return msg_array3[intensity]; } get_hit_msg4(intensity) { if (intensity<0 || intensity>=MAX_INTENSITY) return; return msg_array4[intensity]; } get_hit_msg5(intensity) { if (intensity<0 || intensity>=MAX_INTENSITY) return; return msg_array5[intensity]; }