It seemed rather boring to me that the create food spell only ever created bread, given how many items have type ITEM_FOOD. So I set it up to pick a random food per casting :) First, in db.c create two new variables: obj_vnum *food_list; int num_foods; Add this function: void init_food_list(void) { obj_rnum i; int cnt; /* First we have to count how many food items so we can allocate * only as much space as need for the food array. */ for (i = 0; i < top_of_objt; i++) { if (GET_OBJ_TYPE(&obj_proto[i]) == ITEM_FOOD) num_foods += 1; } /* Now allocate */ if (num_foods) { CREATE(food_list, obj_vnum, num_foods); if (!food_list) return; /* And now go through and assign the values to the array */ for (i = 0, cnt = 0; i < top_of_objt; i++) { if (GET_OBJ_TYPE(&obj_proto[i]) == ITEM_FOOD) food_list[cnt++] = GET_OBJ_VNUM(&obj_proto[i]); } } } at the end of boot_world(), add log("Initializing statics."); init_food_list(); and in destroy_db(), add if (food_list) free(food_list); And then, move on over to magic.c, and at the top, add: extern int num_foods; extern obj_vnum *food_list; then in mag_creations, replace the CREATE_FOOD case with case SPELL_CREATE_FOOD: if (!food_list) z = 10; else z = food_list[rand_number(0, num_foods - 1)]; Is your boss reading your email? ....Probably Keep your messages private by using Lycos Mail. Sign up today at http://mail.lycos.com -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | | Newbie List: http://groups.yahoo.com/group/circle-newbies/ | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT