/*************************************************************************** _____ __ __ __ __ / _ \/ \ / \/ \ / \ / /_\ \ \/\/ /\ \/\/ / / | \ / \ / \____|__ /\__/\ / \__/\ / \/ \/ \/ As the Wheel Weaves based on ROM 2.4. Original code by Dalsor. See changes.log for a list of changes from the original ROM code. Credits for code created by other authors have been left intact at the head of each function. ***************************************************************************/ /* Random items - not really - code by Dalsor for AWW. */ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include "aww.h" #include "recycle.h" #include "interp.h" #include "tables.h" /* else if ( chance chance <= 95 ) { obj->item_type = ITEM_NOTEPAPER; } else if ( chance <= 99 ) { obj->item_type = ITEM_DRINK_CON; } } */ OBJ_DATA *rand_item( OBJ_DATA *obj, int level ) { char item_name[MSL]; char mat_short[MSL]; char mat_long[MSL]; char buf_name[MSL]; char buf_short[MSL]; char buf_long[MSL]; int chance = number_percent(); int wear_chance = number_range(1,10); int item_chance = number_percent(); int weap_chance = number_percent(); int wname_chance = number_percent(); int weight = level * 5; item_name[0] = '\0'; mat_short[0] = '\0'; mat_long[0] = '\0'; buf_name[0] = '\0'; buf_short[0] = '\0'; buf_long[0] = '\0'; if ( weight > 50 ) weight = 50; /* determine the item type and include the name if not a weapon */ if ( item_chance <= 10 ) { obj->item_type = ITEM_LOCKPICK; free_string(item_name); strcat(item_name,"lockpick"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_HOLD; } else if ( item_chance <= 20 ) { obj->item_type = ITEM_PILL; free_string(item_name); strcat( item_name,"pill"); obj->wear_flags = ITEM_TAKE; } else if ( item_chance <= 30 ) { obj->item_type = ITEM_SCROLL; free_string(item_name); strcat( item_name,"scroll"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_HOLD; } else if ( item_chance <= 40 ) { obj->item_type = ITEM_POTION; free_string(item_name); strcat( item_name,"potion"); } else if ( item_chance <= 70 ) { obj->item_type = ITEM_ARMOR; } else if ( item_chance <= 90 ) { obj->item_type = ITEM_WEAPON; obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WIELD; } else if ( item_chance <= 91 ) { obj->item_type = ITEM_ANGREAL_FEMALE; free_string(item_name); strcat( item_name,"angreal"); obj->value[1] = wear_chance; obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_ANGREAL; } else if ( item_chance <= 92 ) { obj->item_type = ITEM_ANGREAL_MALE; free_string(item_name); strcat( item_name,"angreal"); obj->value[1] = wear_chance; obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_ANGREAL; } else if ( item_chance <= 93 ) { obj->item_type = ITEM_LIGHT; free_string(item_name); strcat( item_name,"lamp"); obj->value[2] = number_range(1,999); } else if ( item_chance <= 94 ) { obj->item_type = ITEM_FOOD; free_string(item_name); strcat( item_name,"meal"); obj->value[0] = number_range(1,99); obj->value[1] = number_range(1,99); obj->value[2] = 0; } else if ( item_chance <= 95 ) { obj->item_type = ITEM_MIRROR; free_string(item_name); strcat( item_name,"mirror"); } else if ( item_chance <= 96 ) { obj->item_type = ITEM_PIPE_TABAC; free_string(item_name); strcat( item_name,"pipe"); obj->value[0] = number_range(1,20); obj->value[1] = number_range(1,20); } else if ( item_chance <= 97 ) { obj->item_type = ITEM_COMM_DEV; free_string(item_name); strcat( item_name,"device"); obj->wear_flags = ITEM_TAKE; switch( wear_chance ) { case 1: case 2: case 3: obj->wear_flags += ITEM_WEAR_FINGER; break; case 4: case 5: case 6: obj->wear_flags += ITEM_WEAR_NECK; break; case 7: case 8: case 9: case 10: obj->wear_flags += ITEM_WEAR_FLOAT; break; } obj->value[0] = number_range(10,100); } else { obj->item_type = ITEM_WEAPON; obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WIELD; } /* if the type is a weapon, give it a name */ if ( obj->item_type == ITEM_WEAPON ) { if ( weap_chance <= 10 ) { obj->value[0] = WEAPON_FLAIL; if ( wname_chance <= 25 ) { free_string(item_name); strcat( item_name,"horseman's flail"); } else if ( wname_chance <= 50 ) { free_string(item_name); strcat( item_name,"footman's flail"); } else if ( wname_chance <= 75 ) { free_string(item_name); strcat( item_name,"morning-star"); } else { free_string(item_name); strcat( item_name,"flail"); } } else if ( weap_chance <= 15 ) { obj->value[0] = WEAPON_STAFF; if ( wname_chance <= 15 ) { free_string(item_name); strcat( item_name,"staff"); } else if ( wname_chance <= 25 ) { free_string(item_name); strcat( item_name,"bo-staff"); } else if ( wname_chance <= 35 ) { free_string(item_name); strcat( item_name,"quarter-staff"); } else if ( wname_chance <= 50 ) { free_string(item_name); strcat( item_name,"bludgeon"); } else if ( wname_chance <= 60 ) { free_string(item_name); strcat( item_name,"cane"); } else if ( wname_chance <= 75 ) { free_string(item_name); strcat( item_name,"rod"); } else if ( wname_chance <= 85 ) { free_string(item_name); strcat( item_name,"cudgel"); } else { free_string(item_name); strcat( item_name,"stick"); } } else if ( weap_chance <= 20 ) { obj->value[0] = WEAPON_WHIP; if ( wname_chance <= 15 ) { free_string(item_name); strcat( item_name,"whip"); } else if ( wname_chance <= 25 ) { free_string(item_name); strcat( item_name,"scourge"); } else if ( wname_chance <= 35 ) { free_string(item_name); strcat( item_name,"blackjack"); } else if ( wname_chance <= 50 ) { free_string(item_name); strcat( item_name,"cat-o' nine tails"); } else if ( wname_chance <= 60 ) { free_string(item_name); strcat( item_name,"lash"); } else if ( wname_chance <= 75 ) { free_string(item_name); strcat( item_name,"flog"); } else if ( wname_chance <= 85 ) { free_string(item_name); strcat( item_name,"quirt"); } else { free_string(item_name); strcat( item_name,"whip"); } } else if ( weap_chance <= 25 ) { obj->value[0] = WEAPON_MACE; if ( wname_chance <= 15 ) { free_string(item_name); strcat( item_name,"mace"); } else if ( wname_chance <= 25 ) { free_string(item_name); strcat( item_name,"club"); } else if ( wname_chance <= 35 ) { free_string(item_name); strcat( item_name,"hammer"); } else if ( wname_chance <= 50 ) { free_string(item_name); strcat( item_name,"warhammer"); } else if ( wname_chance <= 60 ) { free_string(item_name); strcat( item_name,"horseman's mace"); } else if ( wname_chance <= 75 ) { free_string(item_name); strcat( item_name,"footman's mace"); } else if ( wname_chance <= 85 ) { free_string(item_name); strcat( item_name,"beating rod"); } else { free_string(item_name); strcat( item_name,"bludgeon"); } } else if ( weap_chance <= 40 ) { obj->value[0] = WEAPON_SPEAR; if ( wname_chance <= 15 ) { free_string(item_name); strcat( item_name,"spear"); } else if ( wname_chance <= 25 ) { free_string(item_name); strcat( item_name,"pike"); } else if ( wname_chance <= 35 ) { free_string(item_name); strcat( item_name,"lance"); } else if ( wname_chance <= 50 ) { free_string(item_name); strcat( item_name,"javelin"); } else if ( wname_chance <= 70 ) { free_string(item_name); strcat( item_name,"spear"); } else if ( wname_chance <= 75 ) { free_string(item_name); strcat( item_name,"spontoon"); } else { free_string(item_name); strcat( item_name,"spear"); } } else if ( weap_chance <= 80 ) { obj->value[0] = WEAPON_DAGGER; if ( wname_chance <= 15 ) { free_string(item_name); strcat( item_name,"dagger"); } else if ( wname_chance <= 25 ) { free_string(item_name); strcat( item_name,"knife"); } else if ( wname_chance <= 35 ) { strcat( item_name,"dirk"); free_string(item_name); } else { free_string(item_name); strcat( item_name,"dagger"); } } else if ( weap_chance <= 90 ) { obj->value[0] = WEAPON_SWORD; if ( wname_chance <= 15 ) { free_string(item_name); strcat( item_name,"sword"); } else if ( wname_chance <= 25 ) { free_string(item_name); strcat( item_name,"cutlass"); } else if ( wname_chance <= 35 ) { free_string(item_name); strcat( item_name,"sabre"); } else if ( wname_chance <= 50 ) { free_string(item_name); strcat( item_name,"sword"); } else if ( wname_chance <= 70 ) { free_string(item_name); strcat( item_name,"blade"); } else if ( wname_chance <= 75 ) { free_string(item_name); strcat( item_name,"falchion"); } else if ( wname_chance <= 85 ) { free_string(item_name); strcat( item_name,"broadsword"); } else if ( wname_chance <= 95 ) { free_string(item_name); strcat( item_name,"shortsword"); } else { free_string(item_name); strcat( item_name,"sword"); } } else if ( weap_chance >= 80 ) { obj->value[0] = WEAPON_AXE; if ( wname_chance <= 15 ) { free_string(item_name); strcat( item_name,"axe"); } else if ( wname_chance <= 25 ) { free_string(item_name); strcat( item_name,"hand-axe"); } else if ( wname_chance <= 35 ) { free_string(item_name); strcat( item_name,"battle-axe"); } else if ( wname_chance <= 50 ) { free_string(item_name); strcat( item_name,"war-axe"); } else if ( wname_chance <= 70 ) { free_string(item_name); strcat( item_name,"axe"); } else if ( wname_chance <= 75 ) { free_string(item_name); strcat( item_name,"woodsman's axe"); } else if ( wname_chance <= 85 ) { free_string(item_name); strcat( item_name,"broad-axe"); } else { free_string(item_name); strcat( item_name,"axe"); } } /* now we assign an attack noun to the weapon */ switch ( obj->value[0] ) { default : obj->value[3] = attack_lookup("pound"); break; case(WEAPON_SWORD): if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("slice"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("slash"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("stab"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("pierce"); break; } else { obj->value[3] = attack_lookup("slash"); break; } case(WEAPON_DAGGER): if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("jab"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("slice"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("pierce"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("thrust"); break; } else { obj->value[3] = attack_lookup("jab"); break; } case(WEAPON_SPEAR): if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("jab"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("slice"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("pierce"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("thrust"); break; } else { obj->value[3] = attack_lookup("pierce"); break; } case(WEAPON_STAFF): if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("pound"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("thwack"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("beating"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("crunch"); break; } else { obj->value[3] = attack_lookup("whack"); break; } case(WEAPON_MACE): if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("pound"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("crush"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("beating"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("crunch"); break; } else { obj->value[3] = attack_lookup("pound"); break; } case(WEAPON_AXE): if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("cleave"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("crunch"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("slash"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("chop"); break; } else { obj->value[3] = attack_lookup("cleave"); break; } case(WEAPON_FLAIL): if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("pound"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("crush"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("beating"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("crunch"); break; } else { obj->value[3] = attack_lookup("pound"); break; } case(WEAPON_WHIP): if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("whip"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("flog"); break; } else if ( number_percent() < 10 ) { obj->value[3] = attack_lookup("sting"); break; } else { obj->value[3] = attack_lookup("whip"); break; } } } /* now let's find a valid material */ switch( obj->item_type ) { default: obj->material = str_dup("iron"); weight += 10; break; case ITEM_FOOD: obj->material = str_dup("food"); weight += 1; break; case ITEM_LOCKPICK: if ( chance <= 10 ) { obj->material = str_dup("iron"); weight += 10; break; } if ( chance <= 60 ) { obj->material = str_dup("steel"); weight += 10; break; } if ( chance <= 75 ) { obj->material = str_dup("hardwood"); weight += 5; break; } if ( chance <= 90 ) { obj->material = str_dup("bone"); weight += 2; break; } if ( chance <= 10 ) { obj->material = str_dup("temperedsteel"); weight += 5; break; } else { obj->material = str_dup("iron"); weight += 5; break; } case ITEM_PILL: obj->material = str_dup("food"); weight -= 10; break; case ITEM_COMM_DEV: obj->material = str_dup("cuendillar"); weight -= 5; break; case ITEM_SCROLL: obj->material = str_dup("paper"); weight += 20; break; case ITEM_POTION: obj->material = str_dup("softleather"); weight += 1; break; case ITEM_ARMOR: if ( chance <= 10 ) { obj->material = str_dup("bronze"); weight += 8; break; } if ( chance <= 25 ) { obj->material = str_dup("softleather"); weight += 1; break; } if ( chance <= 60 ) { obj->material = str_dup("steel"); weight += 10; break; } if ( chance <= 75 ) { obj->material = str_dup("hardleather"); weight += 3; break; } if ( chance <= 80 ) { obj->material = str_dup("bronze"); weight += 7; break; } if ( chance <= 90 ) { obj->material = str_dup("bone"); weight += 4; break; } if ( chance <= 95 ) { obj->material = str_dup("sungwood"); weight += 5; break; } if ( chance <= 10 ) { obj->material = str_dup("temperedsteel"); weight += 9; break; } else { obj->material = str_dup("iron"); weight += 9; break; } case ITEM_WEAPON: if ( chance <= 1 ) { obj->material = str_dup("powerwrought"); weight -= 5; break; } if ( chance <= 15 ) { obj->material = str_dup("bronze"); weight += 1; break; } if ( chance <= 35 ) { obj->material = str_dup("iron"); weight += 3; break; } if ( chance <= 85 ) { obj->material = str_dup("steel"); weight += 4; break; } if ( chance <= 90 ) { obj->material = str_dup("bone"); weight += 2; break; } if ( chance <= 100 ) { obj->material = str_dup("temperedsteel"); weight += 3; break; } } /* we now have a material, assign a color type corresponding to the material */ if ( !str_cmp(obj->material,"iron") ) { free_string(mat_short); if ( chance <= 15 ) strcat(mat_short,"cold-gray"); else if ( chance <= 35 ) strcat(mat_short,"hard-gray"); else if ( chance <= 55 ) strcat(mat_short,"dull-gray"); else if ( chance <= 75 ) strcat(mat_short,"bright-gray"); else if ( chance <= 85 ) strcat(mat_short,"misty-gray"); else strcat(mat_short,"gray-white"); } else if ( !str_cmp(obj->material,"steel") ) { free_string(mat_short); if ( chance <= 15 ) strcat(mat_short,"cold-gray"); else if ( chance <= 35 ) strcat(mat_short,"hard-gray"); else if ( chance <= 55 ) strcat(mat_short,"dull-gray"); else if ( chance <= 75 ) strcat(mat_short,"bright-gray"); else if ( chance <= 85 ) strcat(mat_short,"misty-gray"); else strcat(mat_short,"gray-white"); } else if ( !str_cmp(obj->material,"hardwood") ) { free_string(mat_short); if ( chance <= 15 ) strcat(mat_short,"light-brown"); else if ( chance <= 35 ) strcat(mat_short,"dark-brown"); else if ( chance <= 55 ) strcat(mat_short,"nearly black"); else if ( chance <= 75 ) strcat(mat_short,"reddish-brown"); else if ( chance <= 85 ) strcat(mat_short,"dark red"); else strcat(mat_short,"dark brown"); } else if ( !str_cmp(obj->material,"bone") ) { free_string(mat_short); if ( chance <= 25 ) strcat(mat_short,"dark-gray"); else if ( chance <= 50 ) strcat(mat_short,"pale white"); else if ( chance <= 75 ) strcat(mat_short,"bleached white"); else strcat(mat_short,"gray-white"); } else if ( !str_cmp(obj->material,"temperedsteel") ) { free_string(mat_short); if ( chance <= 15 ) strcat(mat_short,"cold-gray"); else if ( chance <= 25 ) strcat(mat_short,"cobalt-gray"); else if ( chance <= 35 ) strcat(mat_short,"hard-gray"); else if ( chance <= 55 ) strcat(mat_short,"blue-gray"); else if ( chance <= 75 ) strcat(mat_short,"bright-gray"); else if ( chance <= 85 ) strcat(mat_short,"silvery-gray"); else strcat(mat_short,"gray-white"); } else if ( !str_cmp(obj->material,"food") ) { free_string(mat_short); strcat(mat_short,"plain"); } else if ( !str_cmp(obj->material,"paper") ) { free_string(mat_short); strcat(mat_short,"plain"); } else if ( !str_cmp(obj->material,"softleather") ) { free_string(mat_short); if ( chance <= 15 ) strcat(mat_short,"pale brown"); else if ( chance <= 35 ) strcat(mat_short,"light brown"); else if ( chance <= 55 ) strcat(mat_short,"dark brown"); else if ( chance <= 75 ) strcat(mat_short,"brownish-gray"); else if ( chance <= 85 ) strcat(mat_short,"reddish-brown"); else strcat(mat_short,"gray-white"); } else if ( !str_cmp(obj->material,"bronze") ) { free_string(mat_short); strcat(mat_short,"plain"); } else if ( !str_cmp(obj->material,"hardleather") ) { free_string(mat_short); if ( chance <= 15 ) strcat(mat_short,"pale brown"); else if ( chance <= 35 ) strcat(mat_short,"light brown"); else if ( chance <= 55 ) strcat(mat_short,"dark brown"); else if ( chance <= 75 ) strcat(mat_short,"brownish-gray"); else if ( chance <= 85 ) strcat(mat_short,"reddish-brown"); else strcat(mat_short,"gray-white"); } else if ( !str_cmp(obj->material,"sungwood") ) { free_string(mat_short); if ( chance <= 15 ) strcat(mat_short,"light-brown"); else if ( chance <= 35 ) strcat(mat_short,"dark-brown"); else if ( chance <= 55 ) strcat(mat_short,"nearly black"); else if ( chance <= 75 ) strcat(mat_short,"reddish-brown"); else if ( chance <= 85 ) strcat(mat_short,"dark red"); else strcat(mat_short,"dark brown"); } else if ( !str_cmp(obj->material,"powerwrought") ) { free_string(mat_short); if ( chance <= 15 ) strcat(mat_short,"cold-gray"); else if ( chance <= 35 ) strcat(mat_short,"hard-gray"); else if ( chance <= 55 ) strcat(mat_short,"dull-gray"); else if ( chance <= 75 ) strcat(mat_short,"bright-gray"); else if ( chance <= 85 ) strcat(mat_short,"misty-gray"); else strcat(mat_short,"gray-white"); } else { free_string(mat_short); if ( chance <= 15 ) strcat(mat_short,"cold-gray"); else if ( chance <= 35 ) strcat(mat_short,"hard-gray"); else if ( chance <= 55 ) strcat(mat_short,"dull-gray"); else if ( chance <= 75 ) strcat(mat_short,"bright-gray"); else if ( chance <= 85 ) strcat(mat_short,"misty-gray"); else strcat(mat_short,"gray-white"); } switch( obj->item_type ) { default: break; case ITEM_ARMOR: if ( chance <= 5 ) { free_string(item_name); strcat(item_name,"thigh-guard"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_THIGH; break; } else if ( chance <= 10 ) { free_string(item_name); strcat(item_name,"thigh-plate"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_THIGH; break; } else if ( chance <= 15 ) { free_string(item_name); strcat(item_name,"greave"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_THIGH; break; } else if ( chance <= 20 ) { free_string(item_name); strcat(item_name,"belt"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_WAIST; break; } else if ( chance <= 25 ) { free_string(item_name); strcat(item_name,"shin-guard"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_CALF; break; } else if ( chance <= 30 ) { free_string(item_name); strcat(item_name,"bracer"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_WRIST; break; } else if ( chance <= 35 ) { free_string(item_name); strcat(item_name,"wrist-guard"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_WRIST; break; } else if ( chance <= 45 ) { free_string(item_name); strcat(item_name,"helm"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_HEAD; break; } else if ( chance <= 55 ) { free_string(item_name); strcat(item_name,"set of arm-guards"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_ARMS; break; } else if ( chance <= 65 ) { free_string(item_name); strcat(item_name,"backplate"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_BACK; break; } else if ( chance <= 70 ) { free_string(item_name); strcat(item_name,"breastplate"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_BODY; break; } else if ( chance <= 75 ) { free_string(item_name); strcat(item_name,"pair of gauntlets"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_HANDS; break; } else if ( chance <= 85 ) { free_string(item_name); strcat(item_name,"helmet"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_HEAD; break; } else { free_string(item_name); strcat(item_name,"helmet"); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_WEAR_HEAD; break; } } obj->weight = weight; obj->condition = number_range(weight*9,weight*11); if ( obj->condition > 100 ) obj->condition = 100; obj->cost = number_range(weight*9,weight*11) * 2; obj->guild = str_dup("Loner"); sprintf( buf_name, "%s %s %s", mat_short, obj->material, item_name ); free_string( obj->name ); obj->name = str_dup( buf_name ); sprintf( buf_short, "a %s %s %s", mat_short, obj->material, item_name ); free_string( obj->short_descr ); obj->short_descr = str_dup( buf_short ); sprintf( buf_long, "Here lies a %s %s %s.", mat_short, obj->material, item_name ); free_string( obj->description ); obj->description = str_dup( buf_long ); return obj; } int rand_spell( ) { if (number_percent() < 10 ) return skill_lookup("cure blinding"); else if (number_percent() < 10 ) return skill_lookup("cure critical"); else if (number_percent() < 10 ) return skill_lookup("cure disease"); else if (number_percent() < 10 ) return skill_lookup("cure serious"); else if (number_percent() < 10 ) return skill_lookup("cure light"); else if (number_percent() < 10 ) return skill_lookup("cure poison"); else if (number_percent() < 10 ) return skill_lookup("heal"); else if (number_percent() < 10 ) return skill_lookup("defense"); else if (number_percent() < 10 ) return skill_lookup("vigor"); else if (number_percent() < 10 ) return skill_lookup("shield"); else if (number_percent() < 10 ) return skill_lookup("fire shield"); else if (number_percent() < 10 ) return skill_lookup("large"); else if (number_percent() < 10 ) return skill_lookup("glow"); else if (number_percent() < 10 ) return skill_lookup("see shadow"); else if (number_percent() < 10 ) return skill_lookup("see light"); else if (number_percent() < 10 ) return skill_lookup("seeing"); else if (number_percent() < 10 ) return skill_lookup("see hidden"); else if (number_percent() < 10 ) return skill_lookup("see invis"); else if (number_percent() < 10 ) return skill_lookup("smell poison"); else return skill_lookup("invert"); } OBJ_DATA *make_rand_special( OBJ_DATA *fObj ) { int chance = number_range(1,12); AFFECT_DATA *af = new_affect(); switch( chance ) { case 1: af->location = APPLY_STR; af->modifier = number_range(1,20); break; case 2: af->location = APPLY_DEX; af->modifier = number_range(1,20); break; case 3: af->location = APPLY_CON; af->modifier = number_range(1,20); break; case 4: af->location = APPLY_WIS; af->modifier = number_range(1,20); break; case 5: af->location = APPLY_INT; af->modifier = number_range(1,20); break; case 6: af->location = APPLY_CHA; af->modifier = number_range(1,20); break; case 7: af->location = APPLY_INS; af->modifier = number_range(1,20); break; case 8: af->location = APPLY_REF; af->modifier = number_range(1,20); break; case 9: af->location = APPLY_HITROLL; af->modifier = number_range(1,20); break; case 10: af->location = APPLY_DAMROLL; af->modifier = number_range(1,20); break; case 11: af->location = APPLY_HIT; af->modifier = ( number_range(1,10) * 5 ); break; case 12: af->location = APPLY_MANA; af->modifier = ( number_range(1,10) * 5 ); break; case 13: af->location = APPLY_MOVE; af->modifier = ( number_range(1,10) * 5 ); break; case 14: af->location = APPLY_AC; af->modifier = -( number_range(1,10) * 5 ); break; } af->where = TO_OBJECT; af->type = -1; af->duration = -1; af->bitvector = 0; af->level = 250; af->next = fObj->affected; fObj->affected = af; fObj->cost += ( af->modifier * 20 ); return( fObj ); } OBJ_DATA *make_treasure_item( int level ) { OBJ_DATA *obj; bool remort = FALSE; int oWeight; if ( level < 1 ) level = 1; /*if ( number_percent() / 2 > number_percent() ) remort = TRUE;*/ obj = create_object( get_obj_index(OBJ_VNUM_GEM), 0 ); rand_item( obj, level ); oWeight = number_range(obj->weight/4,obj->weight/3); obj->level = 1; switch ( obj->item_type ) { case ITEM_WEAPON: if ( obj->item_type != ITEM_WEAPON ) break; /* what the fuck happened... boom */ if ( !CAN_WEAR(obj, ITEM_TAKE) ) /* set take if not set */ obj->wear_flags = ITEM_TAKE; obj->value[1] = remort ? 2 : 1; /* if the obj is remort, times 2 */ obj->value[2] = number_range( oWeight * 1.75, oWeight * 2.5 ); /* sick */ break; case ITEM_ARMOR: obj->value[0] = remort ? number_range( oWeight, oWeight * 2 ) /* more sick */ : number_range( oWeight * 2, oWeight * 3 ); obj->value[1] = remort ? number_range( oWeight, oWeight * 2 ) : number_range( oWeight * 2, oWeight * 3 ); obj->value[2] = remort ? number_range( oWeight, oWeight * 2 ) : number_range( oWeight * 2, oWeight * 3 ); obj->value[3] = remort ? number_range( oWeight, oWeight * 2 ) : number_range( oWeight * 2, oWeight * 3 ); break; case ITEM_LOCKPICK: obj->condition = level / 2; obj->value[0] = level / 3 + obj->condition; /* might be too high */ break; case ITEM_SCROLL: case ITEM_POTION: case ITEM_PILL: obj->value[0] = level / 2; obj->value[1] = rand_spell(); obj->value[2] = rand_spell(); obj->value[3] = rand_spell(); obj->value[4] = rand_spell(); break; } if ( obj->condition > 100 ) obj->condition = 100; make_rand_special( obj ); return ( obj ); }