#include <sys/types.h> #include <stdio.h> #include <string.h> #include <time.h> #include "merc.h" #include "interp.h" #include "tables.h" #include "rig_tables.h" #include "rig.h" char *const gems1[12] = { "Banded Agate", "Eye Agate", "Moss Agate", "Azurite", "Blue Quartz", "Hematite", "Lapus Lazuli", "Malachite", "Obsidian", "Rhodochrosite", "Tiger Eye", "Freshwater Pearl" }; char *const gems2[16] = { "Bloodstone", "Carnelian", "Chalcedony", "Chrysoprase", "Citrine", "Iolite", "Jasper", "Moonstone", "Peridot", "Quartz", "Sadonyx", "Rose Quartz", "Smokey Quartz", "Star Rose Quartz", "Zircon", "Black Zircon" }; char *const gems3[16] = { "Amber", "Amethyst", "Chrysoberyl", "Coral", "Red Garnet", "Brown-Green Garnet", "Jade", "Jet", "White Pearl", "Golden Pearl", "Pink Pearl", "Silver Pearl", "Red Spinel", "Red-Brown Spinel", "Deep Green Spinel", "Tourmaline" }; char *const gems4[6] = { "Alexandrite", "Aquamarine", "Violet Garnet", "Black Pearl", "Deep Blue Spinel", "Golden Yellow Topaz" }; char *const gems5[7] = { "Emerald", "White Opal", "Black Opal", "Fire Opal", "Blue Sapphire", "Tomb Jade", "Water Opal" }; char *const gems6[11] = { "Bright Green Emerald", "Blue-White Diamond", "Pink Diamond", "Brown Diamond", "Blue Diamond", "Jacinth", "Black Sapphire", "Ruby", "Star Ruby", "Blue Star Sapphire", "Black Star Sapphire" }; OBJ_DATA * create_gem (OBJ_DATA * obj, int type) { char name_set[MSL]; char shor_set[MSL]; char long_set[MSL]; char mate_set[MSL]; char *gname; int gemname, cost; int gemtable = number_range( 1, 100 ); free_string(obj->name); free_string(obj->short_descr); free_string(obj->description); free_string(obj->material); if( gemtable <= 25 ) { gemname = number_range( 0, 11 ); gname = gems1[gemname]; cost = 10; } else if( gemtable <= 50 ) { gemname = number_range( 0, 15 ); gname = gems2[gemname]; cost = 50; } else if( gemtable <= 70 ) { gemname = number_range( 0, 15 ); gname = gems3[gemname]; cost = 100; } else if( gemtable <= 90 ) { gemname = number_range( 0, 5 ); gname = gems4[gemname]; cost = 500; } else if( gemtable <= 99 ) { gemname = number_range( 0, 6 ); gname = gems5[gemname]; cost = 1000; } else { gemname = number_range( 0, 10 ); gname = gems6[gemname]; cost = 5000; } obj->item_type = ITEM_GEM; obj->cost = cost; sprintf(name_set, "%s gem", gname); sprintf(shor_set, "%s", gname); sprintf(long_set, "A chunk of %s lies here gleaming.", gname); sprintf(mate_set, "%s", gname); obj->name = str_dup (name_set); obj->short_descr = str_dup (shor_set); obj->description = str_dup (long_set); obj->material = str_dup (mate_set); obj->item_type = ITEM_GEM; obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_HOLD; return obj; } /* * create_beer() * * Generates a 'spell' beer, ie non-healing */ OBJ_DATA * create_beer (OBJ_DATA* obj, int type) { char name_set[MSL]; char shor_set[MSL]; char long_set[MSL]; char buf[MSL]; int spell_num = 0; int spell_name = -1; int total_obj_value = 0; /* Gen random scroll */ if (type == RIG_RANDOM) spell_name = number_range(0, rig_beer_max() - 1); else spell_name = type; if (spell_name == -1) spell_name = 0; free_string(obj->name); free_string(obj->short_descr); free_string(obj->description); sprintf(buf, "%s", rig_beer_table[spell_name].name); spell_num = skill_lookup (buf); sprintf(name_set, "%s beer", rig_beer_table[spell_name].name); sprintf(shor_set, "a tankered labeled '%s'", rig_beer_table[spell_name].name); sprintf(long_set, "a tankered labeled '%s' is on the ground here.", rig_beer_table[spell_name].name); obj->name = str_dup (name_set); obj->short_descr = str_dup (shor_set); obj->description = str_dup (long_set); obj->item_type = ITEM_DRINK_CON; obj->value[0] = number_range(20, 25); obj->value[1] = 1; obj->value[2] = 1; obj->value[3] = 1; obj->value[4] = 1; obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_HOLD; total_obj_value = rig_beer_table[spell_name].cost; obj->cost = (total_obj_value * number_range(2, 3)); return (obj); } OBJ_DATA * create_food(OBJ_DATA * obj, int type) { char name_set[MSL]; char shor_set[MSL]; char long_set[MSL]; int obj_type; if (type == RIG_RANDOM) obj_type = number_range(0, rig_food_max() - 1); else obj_type = type; if (obj_type == -1) obj_type = 0; free_string(obj->name); free_string(obj->short_descr); free_string(obj->description); free_string(obj->material); sprintf(name_set, "%s food", rig_food_table[obj_type].name); sprintf(shor_set, "%s", rig_food_table[obj_type].name); sprintf(long_set, "%s is on the ground here.", rig_food_table[obj_type].name); obj->name = str_dup (name_set); obj->short_descr = str_dup (shor_set); obj->description = str_dup (long_set); obj->material = str_dup (long_set); obj->item_type = ITEM_FOOD; obj->cost = rig_food_table[obj_type].cost; obj->value[0] = rig_food_table[obj_type].cost; obj->value[1] = rig_food_table[obj_type].cost; obj->value[4] = 0; obj->level = 1; obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_HOLD; return obj; } OBJ_DATA * create_gold(OBJ_DATA * obj, int value) { char name_set[MSL]; char shor_set[MSL]; char long_set[MSL]; free_string(obj->name); free_string(obj->short_descr); free_string(obj->description); sprintf(name_set, "%d silver money gcash", value); sprintf(shor_set, "%d silver pieces", value); sprintf(long_set, "a pile of %d silver piecees is on the ground here.", value); obj->name = str_dup (name_set); obj->short_descr = str_dup (shor_set); obj->description = str_dup (long_set); obj->item_type = ITEM_MONEY; obj->value[0] = value; obj->wear_flags = ITEM_TAKE; return obj; }