From: Edward J Glamkowski 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)]; break;