games-request@tekred.TEK.COM (11/05/87)
Submitted by: "James E. Wilson" <wilson@ji.berkeley.edu> Comp.sources.games: Volume 2, Issue 78 Archive-name: umoria/Part13 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 13 (of 16)." # Contents: store2.c treasure2.c # Wrapped by billr@tekred on Wed Nov 4 10:00:11 1987 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f store2.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"store2.c\" else echo shar: Extracting \"store2.c\" \(24653 characters\) sed "s/^X//" >store2.c <<'END_OF_store2.c' X#include <stdio.h> X#ifdef USG X#include <string.h> X#else X#include <strings.h> X#endif X X#include "constants.h" X#include "types.h" X#include "externs.h" X X#ifdef sun /* correct SUN stupidity in the stdio.h file */ Xchar *sprintf(); X#endif X Xdouble chr_adj(); X X/* Comments vary... -RAK- */ X/* Comment one : Finished haggling */ Xprt_comment1() X{ X msg_flag = FALSE; X switch(randint(14)) X { X case 1: msg_print("Done!"); break; X case 2: msg_print("Accepted!"); break; X case 3: msg_print("Fine..."); break; X case 4: msg_print("Agreed!"); break; X case 5: msg_print("Ok..."); break; X case 6: msg_print("Taken!"); break; X case 7: msg_print("You drive a hard bargain, but taken..."); break; X case 8: msg_print("You'll force me bankrupt, but it's a deal..."); break; X case 9: msg_print("Sigh... I'll take it..."); break; X case 10: msg_print("My poor sick children may starve, but done!"); break; X case 11: msg_print("Finally! I accept..."); break; X case 12: msg_print("Robbed again..."); break; X case 13: msg_print("A pleasure to do business with you!"); break; X case 14: msg_print("My spouse shall skin me, but accepted."); break; X } X} X X X/* %A1 is offer, %A2 is asking... */ Xprt_comment2(offer, asking, final) Xint offer, asking, final; X{ X vtype comment; X X if (final > 0) X switch(randint(3)) X { X case 1: X (void) strcpy(comment,"%A2 is my final offer; take it or leave it..."); X break; X case 2: X (void) strcpy(comment, "I'll give you no more than %A2."); X break; X case 3: X (void) strcpy(comment, "My patience grows thin... %A2 is final."); X break; X } X else X switch(randint(16)) X { X case 1: X (void) strcpy(comment, X "%A1 for such a fine item? HA! No less than %A2."); X break; X case 2: X (void) strcpy(comment, "%A1 is an insult! Try %A2 gold pieces..."); X break; X case 3: X (void) strcpy(comment, X "%A1??? Thou would rob my poor starving children?"); X break; X case 4: X (void) strcpy(comment, "Why I'll take no less than %A2 gold pieces."); X break; X case 5: X (void) strcpy(comment, "Ha! No less than %A2 gold pieces."); X break; X case 6: X (void) strcpy(comment, X "Thou blackheart! No less than %A2 gold pieces."); X break; X case 7: X (void) strcpy(comment, "%A1 is far too little, how about %A2?"); X break; X case 8: X (void) strcpy(comment, "I paid more than %A1 for it myself, try %A2."); X break; X case 9: X (void) strcpy(comment, X "%A1? Are you mad??? How about %A2 gold pieces?"); X break; X case 10: X (void) strcpy(comment, X "As scrap this would bring %A1. Try %A2 in gold."); X break; X case 11: X (void) strcpy(comment, X "May fleas of a 1000 orcs molest you. I want %A2."); X break; X case 12: X (void) strcpy(comment, X "My mother you can get for %A1, this costs %A2."); X break; X case 13: X (void) strcpy(comment, X "May your chickens grow lips. I want %A2 in gold!"); X break; X case 14: X (void) strcpy(comment, X "Sell this for such a pittance. Give me %A2 gold."); X break; X case 15: X (void) strcpy(comment, X "May the Balrog find you tasty! %A2 gold pieces?"); X break; X case 16: X (void) strcpy(comment,"Your mother was a Troll! %A2 or I'll tell..."); X break; X } X insert_num(comment, "%A1", offer, FALSE); X insert_num(comment, "%A2", asking, FALSE); X msg_print(comment); X} X X Xprt_comment3(offer, asking, final) X int offer, asking, final; X{ X vtype comment; X X if (final > 0) X switch(randint(3)) X { X case 1: X (void) strcpy(comment, X "I'll pay no more than %A1; take it or leave it."); X break; X case 2: X (void) strcpy(comment, "You'll get no more than %A1 from me..."); X break; X case 3: X (void) strcpy(comment, "%A1 and that's final."); X break; X } X else X switch(randint(15)) X { X case 1: X (void) strcpy(comment,"%A2 for that piece of junk? No more than %A1"); X break; X case 2: X (void) strcpy(comment, "For %A2 I could own ten of those. Try %A1."); X break; X case 3: X (void) strcpy(comment, "%A2? NEVER! %A1 is more like it..."); X break; X case 4: X (void) strcpy(comment, X "Let's be reasonable... How about %A1 gold pieces?"); X break; X case 5: X (void) strcpy(comment, "%A1 gold for that junk, no more..."); X break; X case 6: X (void) strcpy(comment, "%A1 gold pieces and be thankful for it!"); X break; X case 7: X (void) strcpy(comment, "%A1 gold pieces and not a copper more..."); X break; X case 8: X (void) strcpy(comment, "%A2 gold? HA! %A1 is more like it..."); X break; X case 9: X (void) strcpy(comment, "Try about %A1 gold..."); X break; X case 10: X (void) strcpy(comment, X "I wouldn't pay %A2 for your children, try %A1."); X break; X case 11: X (void) strcpy(comment, "*CHOKE* For that!? Let's say %A1."); X break; X case 12: X (void) strcpy(comment, "How about %A1."); X break; X case 13: X (void) strcpy(comment, "That looks war surplus! Say %A1 gold."); X break; X case 14: X (void) strcpy(comment, "I'll buy it as scrap for %A1."); X break; X case 15: X (void) strcpy(comment, "%A2 is too much, let us say %A1 gold."); X break; X } X insert_num(comment, "%A1", offer, FALSE); X insert_num(comment, "%A2", asking, FALSE); X msg_print(comment); X} X X X/* Kick 'da bum out... -RAK- */ Xprt_comment4() X{ X msg_flag = FALSE; X switch(randint(5)) X { X case 1: X msg_print("ENOUGH! Thou hath abused me once too often!"); X msg_print("Out of my place!"); X msg_print(" "); X break; X case 2: X msg_print("THAT DOES IT! You shall waste my time no more!"); X msg_print("out... Out... OUT!!!"); X msg_print(" "); X break; X case 3: X msg_print("This is getting no where... I'm going home!"); X msg_print("Come back tomorrow..."); X msg_print(" "); X break; X case 4: X msg_print("BAH! No more shall you insult me!"); X msg_print("Leave my place... Begone!"); X msg_print(" "); X break; X case 5: X msg_print("Begone! I have had enough abuse for one day."); X msg_print("Come back when thou art richer..."); X msg_print(" "); X break; X } X msg_flag = FALSE; X} X X Xprt_comment5() X{ X switch(randint(10)) X { X case 1: msg_print("You will have to do better than that!"); break; X case 2: msg_print("That's an insult!"); break; X case 3: msg_print("Do you wish to do business or not?"); break; X case 4: msg_print("Hah! Try again..."); break; X case 5: msg_print("Ridiculous!"); break; X case 6: msg_print("You've got to be kidding!"); break; X case 7: msg_print("You better be kidding!!"); break; X case 8: msg_print("You try my patience."); break; X case 9: msg_print("I don't hear you."); break; X case 10: msg_print("Hmmm, nice weather we're having..."); break; X } X} X X Xprt_comment6() X{ X switch(randint(5)) X { X case 1: msg_print("I must of heard you wrong..."); break; X case 2: msg_print("What was that?"); break; X case 3: msg_print("I'm sorry, say that again..."); break; X case 4: msg_print("What did you say?"); break; X case 5: msg_print("Sorry, what was that again?"); break; X } X} X X X/* Displays the set of commands -RAK- */ Xdisplay_commands() X{ X prt("You may:", 20, 0); X prt(" p) Purchase an item. b) Browse store's inventory.", 21, 0); X prt(" s) Sell an item. i) Inventory and Equipment Lists.", X 22, 0); X prt("ESC) Exit from Building. ^R) Redraw the screen.", 23, 0); X} X X X/* Displays the set of commands -RAK- */ Xhaggle_commands(typ) Xint typ; X{ X if (typ == -1) X prt("Specify an asking-price in gold pieces.", 21, 0); X else X prt("Specify an offer in gold pieces.", 21, 0); X prt("ESC) Quit Haggling.", 22, 0); X prt("", 23, 0); X} X X X/* Displays a store's inventory -RAK- */ Xdisplay_inventory(store_num, start) Xint store_num, start; X{ X int i, j, stop; X vtype out_val1, out_val2; X store_type *s_ptr; X treasure_type *i_ptr; X X s_ptr = &store[store_num]; X i = (start % 12); X stop = ((start / 12) + 1) * 12; X if (stop > s_ptr->store_ctr) stop = s_ptr->store_ctr; X while (start < stop) X { X inventory[INVEN_MAX] = s_ptr->store_inven[start].sitem; X i_ptr = &inventory[INVEN_MAX]; X if ((i_ptr->subval > 255) && (i_ptr->subval < 512)) X i_ptr->number = 1; X objdes(out_val1, INVEN_MAX, TRUE); X (void) sprintf(out_val2, "%c) %s", 97+i, out_val1); X prt(out_val2, i+6, 0); X if (s_ptr->store_inven[start].scost <= 0) X { X j = abs(s_ptr->store_inven[start].scost); X j += (j * chr_adj()); X if (j <= 0) X j = 1; X (void) sprintf(out_val2, "%9d", j); X } X else X (void) sprintf(out_val2,"%9d [Fixed]",s_ptr->store_inven[start].scost); X prt(out_val2, i+6, 59); X i++; X start++; X } X if (i < 12) X for (j = 0; j < (11 - i + 1); j++) X prt("", j+i+6, 0); X} X X X/* Re-displays only a single cost -RAK- */ Xdisplay_cost(store_num, pos) Xint store_num, pos; X{ X int i, j; X vtype out_val; X store_type *s_ptr; X X s_ptr = &store[store_num]; X i = (pos % 12); X if (s_ptr->store_inven[pos].scost < 0) X { X j = abs(s_ptr->store_inven[pos].scost); X j += (j*chr_adj()); X (void) sprintf(out_val, "%d", j); X } X else X (void) sprintf(out_val, "%9d [Fixed]", s_ptr->store_inven[pos].scost); X prt(out_val, i+6, 59); X} X X X/* Displays players gold -RAK- */ Xstore_prt_gold() X{ X vtype out_val; X X (void) sprintf(out_val, "Gold Remaining : %d", py.misc.au); X prt(out_val, 18, 17); X} X X X/* Displays store -RAK- */ Xdisplay_store(store_num, cur_top) Xint store_num, cur_top; X{ X store_type *s_ptr; X X s_ptr = &store[store_num]; X really_clear_screen(); X prt(owners[s_ptr->owner].owner_name, 3, 9); X prt(" Item", 4, 0); X prt("Asking Price", 4, 60); X store_prt_gold(); X display_commands(); X display_inventory(store_num, cur_top); X} X X X/* Get the ID of a store item and return it's value -RAK- */ Xint get_store_item(com_val, pmt, i, j) Xint *com_val; Xchar *pmt; Xint i, j; X{ X char command; X vtype out_val; X int flag; X X *com_val = -1; X flag = TRUE; X (void) sprintf(out_val, "(Items %c-%c, ESC to exit) %s", i+97, j+97, pmt); X while (((*com_val < i) || (*com_val > j)) && (flag)) X { X prt(out_val, 0, 0); X inkey(&command); X *com_val = (command); X switch(*com_val) X { X case 0: case 27: flag = FALSE; break; X default: *com_val = *com_val - 97; break; X } X } X msg_flag = FALSE; X erase_line(msg_line, msg_line); X return(flag); X} X X X/* Increase the insult counter and get pissed if too many -RAK- */ Xint increase_insults(store_num) Xint store_num; X{ X int increase; X store_type *s_ptr; X X increase = FALSE; X s_ptr = &store[store_num]; X s_ptr->insult_cur++; X if (s_ptr->insult_cur > owners[s_ptr->owner].insult_max) X { X prt_comment4(); X s_ptr->insult_cur = 0; X s_ptr->store_open = turn + 2500 + randint(2500); X increase = TRUE; X } X return(increase); X} X X X/* Decrease insults -RAK- */ Xdecrease_insults(store_num) Xint store_num; X{ X store_type *s_ptr; X X s_ptr = &store[store_num]; X s_ptr->insult_cur -= 2; X if (s_ptr->insult_cur < 0) s_ptr->insult_cur = 0; X} X X X/* Have insulted while haggling -RAK- */ Xint haggle_insults(store_num) Xint store_num; X{ X int haggle; X X haggle = FALSE; X if (increase_insults(store_num)) X haggle = TRUE; X else X prt_comment5(); X return(haggle); X} X X Xint get_haggle(comment, num) Xchar *comment; Xint *num; X{ X int i, clen; X vtype out_val; X int flag; X X flag = TRUE; X i = 0; X clen = strlen(comment); X do X { X msg_print(comment); X msg_flag = FALSE; X if (!get_string(out_val, 0, clen, 40)) X { X flag = FALSE; X erase_line(msg_line, msg_line); X } X (void) sscanf(out_val, "%d", &i); X } X while ((i <= 0) && (flag)); X if (flag) *num = i; X return(flag); X} X X Xint receive_offer(store_num, comment, new_offer, last_offer, factor) Xint store_num; Xchar *comment; Xint *new_offer; Xint last_offer, factor; X{ X int flag; X int receive; X X receive = 0; X flag = FALSE; X do X { X if (get_haggle(comment, new_offer)) X { X if (*new_offer*factor >= last_offer*factor) X flag = TRUE; X else if (haggle_insults(store_num)) X { X receive = 2; X flag = TRUE; X } X } X else X { X receive = 1; X flag = TRUE; X } X } X while (!flag); X return(receive); X} X X X/* Haggling routine -RAK- */ Xint purchase_haggle(store_num, price, item) Xint store_num; Xint *price; Xtreasure_type item; X{ X int max_sell, min_sell, max_buy; X int cost, cur_ask, final_ask, min_offer; X int last_offer, new_offer, final_flag, x3; X double x1, x2; X double min_per, max_per; X int flag, loop_flag; X vtype out_val, comment; X int purchase; X store_type *s_ptr; X owner_type *o_ptr; X X flag = FALSE; X purchase = 0; X *price = 0; X final_flag = 0; X msg_flag = FALSE; X s_ptr = &store[store_num]; X o_ptr = &owners[s_ptr->owner]; X cost = sell_price(store_num, &max_sell, &min_sell, item); X max_sell = max_sell + (max_sell*chr_adj()); X if (max_sell <= 0) max_sell = 1; X min_sell = min_sell + (min_sell*chr_adj()); X if (min_sell <= 0) min_sell = 1; X max_buy = (cost*(1-o_ptr->max_inflate)); X min_per = o_ptr->haggle_per; X max_per = min_per*3.0; X haggle_commands(1); X cur_ask = max_sell; X final_ask = min_sell; X min_offer = max_buy; X last_offer = min_offer; X (void) strcpy(comment, "Asking : "); X do X { X do X { X loop_flag = TRUE; X (void) sprintf(out_val, "%s %d", comment, cur_ask); X put_buffer(out_val, 1, 0); X switch(receive_offer(store_num, "What do you offer? ", X &new_offer, last_offer, 1)) X { X case 1: X purchase = 1; X flag = TRUE; X break; X case 2: X purchase = 2; X flag = TRUE; X break; X default: X if (new_offer > cur_ask) X { X prt_comment6(); X } X else if (new_offer == cur_ask) X { X flag = TRUE; X *price = new_offer; X } X else X loop_flag = FALSE; X } X } X while (!flag && loop_flag); X if (!flag) X { X x1 = (double)(new_offer - last_offer)/(double)(cur_ask - last_offer); X if (x1 < min_per) X { X flag = haggle_insults(store_num); X if (flag) purchase = 2; X } X else X { X if (x1 > max_per) X { X x1 = x1*0.75; X if (x1 < max_per) x1 = max_per; X } X } X x2 = (x1 + (randint(5) - 3)/100.0); X x3 = ((cur_ask-new_offer)*x2) + 1; X cur_ask -= x3; X if (cur_ask < final_ask) X { X cur_ask = final_ask; X (void) strcpy(comment, "Final Offer : "); X final_flag++; X if (final_flag > 3) X { X if (increase_insults(store_num)) X purchase = 2; X else X purchase = 1; X flag = TRUE; X } X } X else if (new_offer >= cur_ask) X { X flag = TRUE; X *price = new_offer; X } X if (!flag) X { X last_offer = new_offer; X prt("", 1, 0); X (void) sprintf(out_val, "Your last offer : %d", last_offer); X put_buffer(out_val, 1, 39); X prt_comment2(last_offer, cur_ask, final_flag); X } X } X } X while (!flag); X prt("", 1, 0); X display_commands(); X return(purchase); X} X X X/* Haggling routine -RAK- */ Xint sell_haggle(store_num, price, item) Xint store_num; Xint *price; Xtreasure_type item; X{ X int max_sell, max_buy, min_buy; X int cost, cur_ask, final_ask, min_offer; X int last_offer, new_offer, final_flag, x3; X int max_gold; X double x1, x2; X double min_per, max_per; X int flag, loop_flag; X vtype comment, out_val; X store_type *s_ptr; X owner_type *o_ptr; X int sell; X X flag = FALSE; X sell = 0; X *price = 0; X final_flag = 0; X msg_flag = FALSE; X s_ptr = &store[store_num]; X cost = item_value(item); X if (cost < 1) X { X sell = 3; X flag = TRUE; X } X else X { X o_ptr = &owners[s_ptr->owner]; X cost += -(cost*chr_adj()) - X (cost*rgold_adj[o_ptr->owner_race][py.misc.prace]); X if (cost < 1) cost = 1; X max_sell = (cost*(1+o_ptr->max_inflate)); X max_buy = (cost*(1-o_ptr->max_inflate)); X min_buy = (cost*(1-o_ptr->min_inflate)); X if (min_buy < 1) min_buy = 1; X if (max_buy < 1) max_buy = 1; X if (min_buy < max_buy) min_buy = max_buy; X min_per = o_ptr->haggle_per; X max_per = min_per*3.0; X max_gold = o_ptr->max_cost; X } X if (!flag) X { X haggle_commands(-1); X if (max_buy > max_gold) X { X final_flag= 1; X (void) strcpy(comment, "Final offer : "); X cur_ask = max_gold; X final_ask = max_gold; X msg_print("I am sorry, but I have not the money to afford such a fine item."); X msg_print(" "); X } X else X { X cur_ask = max_buy; X final_ask = min_buy; X if (final_ask > max_gold) X final_ask = max_gold; X (void) strcpy(comment, "Offer : "); X } X min_offer = max_sell; X last_offer = min_offer; X if (cur_ask < 1) cur_ask = 1; X do X { X do X { X loop_flag = TRUE; X (void) sprintf(out_val, "%s %d", comment, cur_ask); X put_buffer(out_val, 1, 0); X switch(receive_offer(store_num, "What price do you ask? ", X &new_offer, last_offer, -1)) X { X case 1: X sell = 1; X flag = TRUE; X break; X case 2: X sell = 2; X flag = TRUE; X break; X default: X if (new_offer < cur_ask) X { X prt_comment6(); X } X else if (new_offer == cur_ask) X { X flag = TRUE; X *price = new_offer; X } X else X loop_flag = FALSE; X } X } X while (!flag && loop_flag); X if (!flag) X { X msg_flag = FALSE; X x1 = (double)(last_offer - new_offer)/ X (double)(last_offer - cur_ask); X if (x1 < min_per) X { X flag = haggle_insults(store_num); X if (flag) sell = 2; X } X else X { X if (x1 > max_per) X { X x1 *= 0.75; X if (x1 < max_per) x1 = max_per; X } X } X x2 = (x1 + (randint(5) - 3)/100.0); X x3 = ((new_offer-cur_ask)*x2) + 1; X cur_ask += x3; X if (cur_ask > final_ask) X { X cur_ask = final_ask; X (void) strcpy(comment, "Final Offer : "); X final_flag++; X if (final_flag > 3) X { X if (increase_insults(store_num)) X sell = 2; X else X sell = 1; X flag = TRUE; X } X } X else if (new_offer <= cur_ask) X { X flag = TRUE; X *price = new_offer; X } X if (!flag) X { X last_offer = new_offer; X prt("", 1, 0); X (void) sprintf(out_val, "Your last bid %d", last_offer); X put_buffer(out_val, 1, 39); X prt_comment3(cur_ask, last_offer, final_flag); X } X } X } X while (!flag); X prt("", 1, 0); X display_commands(); X } X return(sell); X} X X X/* Buy an item from a store -RAK- */ Xint store_purchase(store_num, cur_top) Xint store_num; Xint *cur_top; X{ X int i, item_val, price; X int item_new, choice; X int save_number; X vtype out_val, tmp_str; X store_type *s_ptr; X treasure_type *i_ptr; X inven_record *r_ptr; X int purchase; X X purchase = FALSE; X s_ptr = &store[store_num]; X /* i == number of objects shown on screen */ X if (*cur_top == 12) X i = s_ptr->store_ctr - 1 - 12; X else if (s_ptr->store_ctr > 11) X i = 12; X else X i = s_ptr->store_ctr - 1; X if (s_ptr->store_ctr < 1) X msg_print("I am currently out of stock."); X /* Get the item number to be bought */ X else if (get_store_item(&item_val, X "Which item are you interested in? ", 0, i)) X { X item_val = item_val + *cur_top; /* TRUE item_val */ X inventory[INVEN_MAX] = s_ptr->store_inven[item_val].sitem; X i_ptr = &inventory[INVEN_MAX]; X if ((i_ptr->subval > 255) && (i_ptr->subval < 512)) X { X save_number = i_ptr->number; X i_ptr->number = 1; X } X else X save_number = 1; X if (inven_check_weight()) X if (inven_check_num()) X { X if (s_ptr->store_inven[item_val].scost > 0) X { X price = s_ptr->store_inven[item_val].scost; X choice = 0; X } X else X choice = purchase_haggle(store_num, &price, X inventory[INVEN_MAX]); X switch(choice) X { X case 0: X if (py.misc.au >= price) X { X prt_comment1(); X decrease_insults(store_num); X py.misc.au -= price; X store_destroy(store_num, item_val, TRUE); X inven_carry(&item_new); X objdes(tmp_str, item_new, TRUE); X (void) sprintf(out_val, "You have %s (%c)", X tmp_str, item_new+97); X msg_print(out_val); X if (*cur_top >= s_ptr->store_ctr) X { X *cur_top = 0; X display_inventory(store_num, *cur_top); X } X else X { X r_ptr = &s_ptr->store_inven[item_val]; X if (save_number > 1) X { X if (r_ptr->scost < 0) X { X r_ptr->scost = price; X display_cost(store_num, item_val); X } X } X else X display_inventory(store_num, item_val); X store_prt_gold(); X } X } X else X { X if (increase_insults(store_num)) X purchase = TRUE; X else X { X prt_comment1(); X msg_print("Liar! You have not the gold!"); X } X } X break; X case 2: X purchase = TRUE; X break; X default: X break; X } X prt("", 1, 0); X } X else X prt("You cannot carry that many different items.", 0, 0); X else X prt("You can not carry that much weight.", 0, 0); X } X return(purchase); X} X X X/* Sell an item to the store -RAK- */ Xint store_sell(store_num, cur_top) Xint store_num, cur_top; X{ X int item_val; X int item_pos, price; X int redraw; X vtype out_val, tmp_str; X treasure_type *i_ptr; X int sell; X X sell = FALSE; X redraw = FALSE; X if (get_item(&item_val, "Which one? ", &redraw, 0, inven_ctr-1)) X { X if (redraw) display_store(store_num, cur_top); X inventory[INVEN_MAX] = inventory[item_val]; X i_ptr = &inventory[INVEN_MAX]; X if ((i_ptr->subval > 255) && (i_ptr->subval < 512)) X i_ptr->number = 1; X objdes(tmp_str, INVEN_MAX, TRUE); X (void) sprintf(out_val, "Selling %s (%c)", tmp_str, item_val+97); X msg_print(out_val); X msg_print(" "); X if ((store_buy[store_num])(inventory[INVEN_MAX].tval)) X if (store_check_num(store_num)) X switch(sell_haggle(store_num, &price, inventory[INVEN_MAX])) X { X case 0: X prt_comment1(); X py.misc.au += price; X inven_destroy(item_val); X store_carry(store_num, &item_pos); X if (item_pos >= 0) X if (item_pos < 12) X if (cur_top < 12) X display_inventory(store_num, item_pos); X else X display_inventory(store_num, cur_top); X else if (cur_top > 11) X display_inventory(store_num, item_pos); X store_prt_gold(); X break; X case 2: X sell = TRUE; X break; X case 3: X msg_print("How dare you!"); X msg_print("I will not buy that!"); X sell = increase_insults(store_num); X break; X default: X break; X } X else X prt("I have not the room in my store to keep it...", 0, 0); X else X prt("I do not buy such items.", 0, 0); X } X else if (redraw) X display_store(store_num, cur_top); X return(sell); X} X X X/* Entering a store -RAK- */ Xenter_store(store_num) Xint store_num; X{ X int com_val, cur_top; X char command; X int exit_flag; X store_type *s_ptr; X X s_ptr = &store[store_num]; X if (s_ptr->store_open < turn) X { X exit_flag = FALSE; X cur_top = 0; X display_store(store_num, cur_top); X do X { X if (get_com("", &command)) X { X msg_flag = FALSE; X com_val = (command); X switch(com_val) X { X case 18: X display_store(store_num, cur_top); X break; X case 98: X if (cur_top == 0) X if (s_ptr->store_ctr > 12) X { X cur_top = 12; X display_inventory(store_num, cur_top); X } X else X prt("Entire inventory is shown.", 0, 0); X else X { X cur_top = 0; X display_inventory(store_num, cur_top); X } X break; X case 101: /* Equipment List */ X if (inven_command('e', 0, 0)) X display_store(store_num, cur_top); X break; X case 105: /* Inventory */ X if (inven_command('i', 0, 0)) X display_store(store_num, cur_top); X break; X case 116: /* Take off */ X if (inven_command('t', 0, 0)) X display_store(store_num, cur_top); X break; X case 119: /* Wear */ X if (inven_command('w', 0, 0)) X display_store(store_num, cur_top); X break; X case 120: /* Switch weapon */ X if (inven_command('x', 0, 0)) X display_store(store_num, cur_top); X break; X case 112: X exit_flag = store_purchase(store_num, &cur_top); X break; X case 115: X exit_flag = store_sell(store_num, cur_top); X break; X default: X prt("Invalid Command.", 0, 0); X break; X } X } X else X exit_flag = TRUE; X } X while (!exit_flag); X draw_cave(); X } X else X msg_print("The doors are locked."); X} END_OF_store2.c if test 24653 -ne `wc -c <store2.c`; then echo shar: \"store2.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f treasure2.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"treasure2.c\" else echo shar: Extracting \"treasure2.c\" \(28020 characters\) sed "s/^X//" >treasure2.c <<'END_OF_treasure2.c' X#include "constants.h" X#include "types.h" X X/* Identified objects flags */ Xint object_ident[MAX_OBJECTS] = { X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, X FALSE, FALSE, FALSE, FALSE X}; X Xint t_level[MAX_OBJ_LEVEL]; X X/* Gold list (All types of gold and gems are defined here) */ Xtreasure_type gold_list[MAX_GOLD] = { X{"copper" , 100, '$',0x00000000, X 0, 3, 1, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"copper" , 100, '$',0x00000000, X 0, 4, 2, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"copper" , 100, '$',0x00000000, X 0, 5, 3, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"silver" , 100, '$',0x00000000, X 0, 6, 4, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"silver" , 100, '$',0x00000000, X 0, 7, 5, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"silver" , 100, '$',0x00000000, X 0, 8, 6, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"garnets" , 100, '*',0x00000000, X 0, 9, 7, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"garnets" , 100, '*',0x00000000, X 0, 10, 8, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"gold" , 100, '$',0x00000000, X 0, 12, 9, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"gold" , 100, '$',0x00000000, X 0, 14, 10, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"gold" , 100, '$',0x00000000, X 0, 16, 11, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"opals" , 100, '*',0x00000000, X 0, 18, 12, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"sapphires" , 100, '*',0x00000000, X 0, 20, 13, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"gold" , 100, '$',0x00000000, X 0, 24, 14, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"rubies" , 100, '*',0x00000000, X 0, 28, 15, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"diamonds" , 100, '*',0x00000000, X 0, 32, 16, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"emeralds" , 100, '*',0x00000000, X 0, 40, 17, 0, 0, 0, 0, 0, 0, ' ' , 1}, X{"mithril" , 100, '$',0x00000000, X 0, 80, 18, 0, 0, 0, 0, 0, 0, ' ' , 1} X}; X Xtreasure_type t_list[MAX_TALLOC]; Xtreasure_type inventory[INVEN_ARRAY_SIZE]; X X/* Items which are sold in the stores are different from dungeon */ X/* items so that identify works properly. Note that the players */ X/* receive their initial items from this list, so position is */ X/* very important... */ Xtreasure_type inventory_init[INVEN_INIT_MAX] = { X{"& Ration~ of Food" , 80, ',',0x00000000, X 5000, 3, 307, 10, 5, 0, 0, 0, 0, "0d0" , 0}, /* 1*/ X{"& Hard Biscuit~" , 80, ',',0x00000000, X 500, 1, 309, 2, 5, 0, 0, 0, 0, "0d0" , 0}, /* 2*/ X{"& Strip~ of Beef Jerky" , 80, ',',0x00000000, X 1750, 2, 310, 2, 5, 0, 0, 0, 0, "0d0" , 0}, /* 3*/ X{"& Pint of Fine Ale" , 80, ',',0x00000000, X 500, 1, 311, 10, 3, 0, 0, 0, 0, "0d0" , 0}, /* 4*/ X{"& Pint of Fine Wine" , 80, ',',0x00000000, X 400, 2, 312, 10, 1, 0, 0, 0, 0, "0d0" , 0}, /* 5*/ X{"& Dagger (Misercorde) (%P2,%P3)" , 23, '|',0x00000000, X 0, 10, 2, 15, 1, 0, 0, 0, 0, "1d4" , 0}, /* 6*/ X{"& Dagger (Stiletto) (%P2,%P3)" , 23, '|',0x00000000, X 0, 10, 3, 12, 1, 0, 0, 0, 0, "1d4" , 0}, /* 7*/ X{"& Bastard Sword (%P2,%P3)" , 23, '|',0x00000000, X 0, 350, 7, 140, 1, 0, 0, 0, 0, "3d4" , 0}, /* 8*/ X{"& Broadsword (%P2,%P3)" , 23, '|',0x00000000, X 0, 255, 10, 150, 1, 0, 0, 0, 0, "2d5" , 0}, /* 9*/ X{"& Longsword (%P2,%P3)" , 23, '|',0x00000000, X 0, 300, 18, 130, 1, 0, 0, 0, 0, "1d10" , 0}, /* 10*/ X{"& Small Sword (%P2,%P3)" , 23, '|',0x00000000, X 0, 48, 22, 75, 1, 0, 0, 0, 0, "1d6" , 0}, /* 11*/ X{"& Broad Axe (%P2,%P3)" , 21, '\\',0x00000000, X 0, 304, 4, 160, 1, 0, 0, 0, 0, "2d5" , 0}, /* 12*/ X{"& Morningstar (%P2,%P3)" , 21, '\\',0x00000000, X 0, 396, 9, 150, 1, 0, 0, 0, 0, "2d6" , 0}, /* 13*/ X{"& Mace (%P2,%P3)" , 21, '\\',0x00000000, X 0, 130, 10, 120, 1, 0, 0, 0, 0, "2d4" , 0}, /* 14*/ X{"& War Hammer (%P2,%P3)" , 21, '\\',0x00000000, X 0, 225, 11, 120, 1, 0, 0, 0, 0, "3d3" , 0}, /* 15*/ X{"& Halberd (%P2,%P3)" , 22, '/',0x00000000, X 0, 430, 5, 190, 1, 0, 0, 0, 0, "3d4" , 0}, /* 16*/ X{"& Pike (%P2,%P3)" , 22, '/',0x00000000, X 0, 358, 7, 160, 1, 0, 0, 0, 0, "2d5" , 0}, /* 17*/ X{"& Spear (%P2,%P3)" , 22, '/',0x00000000, X 0, 36, 8, 50, 1, 0, 0, 0, 0, "1d6" , 0}, /* 18*/ X{"& Short Bow (%P2)" , 20, '}',0x00000000, X 2, 50, 1, 30, 1, 0, 0, 0, 0, "0d0" , 0}, /* 19*/ X{"& Long Bow (%P2)" , 20, '}',0x00000000, X 3, 120, 2, 40, 1, 0, 0, 0, 0, "0d0" , 0}, /* 20*/ X{"& Light Crossbow (%P2)" , 20, '}',0x00000000, X 5, 160, 10, 110, 1, 0, 0, 0, 0, "0d0" , 0}, /* 21*/ X{"& Sling (%P2)" , 20, '}',0x00000000, X 1, 5, 20, 5, 1, 0, 0, 0, 0, "0d0" , 0}, /* 22*/ X{"& Arrow~ (%P2,%P3)" , 12, '{',0x00000000, X 0, 1, 1, 2, 1, 0, 0, 0, 0, "1d4" , 0}, /* 23*/ X{"& Bolt~ (%P2,%P3)" , 11, '{',0x00000000, X 0, 2, 1, 3, 1, 0, 0, 0, 0, "1d5" , 0}, /* 24*/ X{"& Iron Shot~ (%P2,%P3)" , 10, '{',0x00000000, X 0, 2, 1, 5, 1, 0, 0, 0, 0, "1d3" , 0}, /* 25*/ X{"& Pick (%P1) (%P2,%P3)" , 25, '\\',0x20000000, X 1, 50, 1, 150, 1, 0, 0, 0, 0, "1d3" , 0}, /* 26*/ X{"& Shovel (%P1) (%P2,%P3)" , 25, '\\',0x20000000, X 0, 15, 2, 60, 1, 0, 0, 0, 0, "1d2" , 0}, /* 27*/ X{"& Pair of Soft Leather Boots [%P6,%P4]" , 30, ']',0x00000000, X 0, 7, 2, 30, 1, 0, 0, 2, 0, "1d1" , 0}, /* 28*/ X{"& Pair of Hard Leather Boots [%P6,%P4]" , 30, ']',0x00000000, X 0, 12, 3, 40, 1, 0, 0, 3, 0, "1d1" , 0}, /* 29*/ X{"& Hard Leather Cap [%P6,%P4]" , 33, ']',0x00000000, X 0, 12, 2, 15, 1, 0, 0, 2, 0, "0d0" , 0}, /* 30*/ X{"& Metal Cap [%P6,%P4]" , 33, ']',0x00000000, X 0, 30, 3, 20, 1, 0, 0, 3, 0, "1d1" , 0}, /* 31*/ X{"& Iron Helm [%P6,%P4]" , 33, ']',0x00000000, X 0, 75, 4, 75, 1, 0, 0, 5, 0, "1d3" , 0}, /* 32*/ X{"Soft Leather Armor [%P6,%P4]" , 36, '(',0x00000000, X 0, 18, 2, 80, 1, 0, 0, 4, 0, "0d0" , 0}, /* 33*/ X{"Soft Studded Leather [%P6,%P4]" , 36, '(',0x00000000, X 0, 35, 3, 90, 1, 0, 0, 5, 0, "1d1" , 0}, /* 34*/ X{"Hard Leather Armor [%P6,%P4]" , 36, '(',0x00000000, X 0, 55, 4, 100, 1, -1, 0, 6, 0, "1d1" , 0}, /* 35*/ X{"Hard Studded Leather [%P6,%P4]" , 36, '(',0x00000000, X 0, 100, 5, 110, 1, -1, 0, 7, 0, "1d2" , 0}, /* 36*/ X{"Leather Scale Mail [%P6,%P4]" , 36, '(',0x00000000, X 0, 330, 9, 140, 1, -1, 0, 11, 0, "1d1" , 0}, /* 37*/ X{"Metal Scale Mail [%P6,%P4]" , 35, '[',0x00000000, X 0, 430, 1, 250, 1, -2, 0, 13, 0, "1d4" , 0}, /* 38*/ X{"Chain Mail [%P6,%P4]" , 35, '[',0x00000000, X 0, 530, 2, 220, 1, -2, 0, 14, 0, "1d4" , 0}, /* 39*/ X{"Partial Plate Armor [%P6,%P4]" , 35, '[',0x00000000, X 0, 900, 9, 260, 1, -3, 0, 22, 0, "1d6" , 0}, /* 40*/ X{"Full Plate Armor [%P6,%P4]" , 35, '[',0x00000000, X 0, 1050, 11, 380, 1, -3, 0, 25, 0, "2d4" , 0}, /* 41*/ X{"& Cloak [%P6,%P4]" , 32, '(',0x00000000, X 0, 3, 1, 10, 1, 0, 0, 1, 0, "0d0" , 0}, /* 42*/ X{"& Set of Leather Gloves [%P6,%P4]" , 31, ']',0x00000000, X 0, 3, 1, 5, 1, 0, 0, 1, 0, "0d0" , 0}, /* 43*/ X{"& Set of Gauntlets [%P6,%P4]" , 31, ']',0x00000000, X 0, 35, 2, 25, 1, 0, 0, 2, 0, "1d1" , 0}, /* 44*/ X{"& Small Leather Shield [%P6,%P4]" , 34, ')',0x00000000, X 0, 30, 1, 50, 1, 0, 0, 2, 0, "1d1" , 0}, /* 45*/ X{"& Medium Leather Shield [%P6,%P4]" , 34, ')',0x00000000, X 0, 60, 2, 75, 1, 0, 0, 3, 0, "1d2" , 0}, /* 46*/ X{"& Small Metal Shield [%P6,%P4]" , 34, ')',0x00000000, X 0, 50, 4, 65, 1, 0, 0, 3, 0, "1d3" , 0}, /* 47*/ X{"& Ring of Resist Fire" , 45, '=',0x00080000, X 0, 250, 11, 2, 1, 0, 0, 0, 0, "0d0" , 0}, /* 48*/ X{"& Ring of Resist Cold" , 45, '=',0x00200000, X 0, 250, 12, 2, 1, 0, 0, 0, 0, "0d0" , 0}, /* 49*/ X{"& Ring of Feather Falling" , 45, '=',0x04000000, X 0, 250, 13, 2, 1, 0, 0, 0, 0, "0d0" , 0}, /* 50*/ X{"& Ring of Protection [%P4]" , 45, '=',0x00000000, X 0, 100, 24, 2, 1, 0, 0, 0, 0, "0d0" , 0}, /* 51*/ X{"& Amulet of Charisma (%P1)" , 40, '"',0x00000020, X 0, 250, 6, 3, 1, 0, 0, 0, 0, "0d0" , 0}, /* 52*/ X{"& Amulet of Slow Digestion" , 40, '"',0x00000080, X 0, 200, 9, 3, 1, 0, 0, 0, 0, "0d0" , 0}, /* 53*/ X{"& Amulet of Resist Acid" , 40, '"',0x00100000, X 0, 300, 10, 3, 1, 0, 0, 0, 0, "0d0" , 0}, /* 54*/ X{"& Scroll~ of Enchant Weapon To-Hit" , 70, '?',0x00000001, X 0, 125, 300, 5, 1, 0, 0, 0, 0, "0d0" , 0}, /* 55*/ X{"& Scroll~ of Enchant Weapon To-Dam" , 70, '?',0x00000002, X 0, 125, 301, 5, 1, 0, 0, 0, 0, "0d0" , 0}, /* 56*/ X{"& Scroll~ of Enchant Armor" , 70, '?',0x00000004, X 0, 125, 302, 5, 1, 0, 0, 0, 0, "0d0" , 0}, /* 57*/ X{"& Scroll~ of Identify" , 70, '?',0x00000008, X 0, 50, 303, 5, 2, 0, 0, 0, 0, "0d0" , 0}, /* 58*/ X{"& Scroll~ of Remove Curse" , 70, '?',0x00000010, X 0, 100, 304, 5, 1, 0, 0, 0, 0, "0d0" , 0}, /* 59*/ X{"& Scroll~ of Light" , 70, '?',0x00000020, X 0, 15, 305, 5, 3, 0, 0, 0, 0, "0d0" , 0}, /* 60*/ X{"& Scroll~ of Phase Door" , 70, '?',0x00000080, X 0, 15, 306, 5, 2, 0, 0, 0, 0, "0d0" , 0}, /* 61*/ X{"& Scroll~ of Magic Mapping" , 70, '?',0x00000800, X 0, 40, 307, 5, 2, 0, 0, 0, 0, "0d0" , 0}, /* 62*/ X{"& Scroll~ of Treasure Detection" , 70, '?',0x00004000, X 0, 15, 308, 5, 2, 0, 0, 0, 0, "0d0" , 0}, /* 63*/ X{"& Scroll~ of Object Detection" , 70, '?',0x00008000, X 0, 15, 309, 5, 2, 0, 0, 0, 0, "0d0" , 0}, /* 64*/ X{"& Scroll~ of Detect Invisible" , 70, '?',0x00080000, X 0, 15, 310, 5, 2, 0, 0, 0, 0, "0d0" , 0}, /* 65*/ X{"& Scroll~ of Recharging" , 70, '?',0x01000000, X 0, 200, 311, 5, 1, 0, 0, 0, 0, "0d0" , 0}, /* 66*/ X{"& Book of Magic Spells [Beginners-Magik]" , 90, '?',0x0000007F, X 0, 25, 257, 30, 1,-100, 0, 0, 0, "1d1" , 0}, /* 67*/ X{"& Book of Magic Spells [Magik I]" , 90, '?',0x0000FF80, X 0, 100, 258, 30, 1,-100, 0, 0, 0, "1d1" , 0}, /* 68*/ X{"& Book of Magic Spells [Magik II]" , 90, '?',0x00FF0000, X 0, 400, 259, 30, 1,-100, 0, 0, 0, "1d1" , 0}, /* 69*/ X{"& Book of Magic Spells [The Mages Guide to Power]", 90, '?',0x7F000000, X 0, 800, 261, 30, 1,-100, 0, 0, 0, "1d1" , 0}, /* 70*/ X{"& Holy Book of Prayers [Beginners Handbook]" , 91, '?',0x000000FF, X 0, 25, 258, 30, 1,-100, 0, 0, 0, "1d1" , 0}, /* 71*/ X{"& Holy Book of Prayers [Words of Wisdom]" , 91, '?',0x0000FF00, X 0, 100, 259, 30, 1,-100, 0, 0, 0, "1d1" , 0}, /* 72*/ X{"& Holy Book of Prayers [Chants and Blessings]" , 91, '?',0x01FF0000, X 0, 300, 260, 30, 1,-100, 0, 0, 0, "1d1" , 0}, /* 73*/ X{"& Holy Book of Prayers [Exorcism and Dispelling]", 91, '?',0x7E000000, X 0, 900, 261, 30, 1,-100, 0, 0, 0, "1d1" , 0}, /* 74*/ X{"& Potion~ of Restore Strength" , 75, '!',0x00000004, X 0, 300, 310, 4, 1, 0, 0, 0, 0, "1d1" , 0}, /* 75*/ X{"& Potion~ of Restore Intelligence" , 75, '!',0x00000020, X 0, 300, 311, 4, 1, 0, 0, 0, 0, "1d1" , 0}, /* 76*/ X{"& Potion~ of Restore Wisdom" , 75, '!',0x00000100, X 0, 300, 312, 4, 1, 0, 0, 0, 0, "1d1" , 0}, /* 77*/ X{"& Potion~ of Restore Charisma" , 75, '!',0x00000800, X 0, 300, 313, 4, 1, 0, 0, 0, 0, "1d1" , 0}, /* 78*/ X{"& Potion~ of Cure Light Wounds" , 75, '!',0x10001000, X 50, 15, 314, 4, 2, 0, 0, 0, 0, "1d1" , 0}, /* 79*/ X{"& Potion~ of Cure Serious Wounds" , 75, '!',0x30002000, X 100, 40, 315, 4, 1, 0, 0, 0, 0, "1d1" , 0}, /* 80*/ X{"& Potion~ of Cure Critical Wounds" , 75, '!',0x70004000, X 100, 100, 316, 4, 1, 0, 0, 0, 0, "1d1" , 0}, /* 81*/ X{"& Potion~ of Restore Dexterity" , 75, '!',0x04000000, X 0, 300, 317, 4, 1, 0, 0, 0, 0, "1d1" , 0}, /* 82*/ X{"& Potion~ of Restore Constitution" , 75, '!',0x68000000, X 0, 300, 318, 4, 1, 0, 0, 0, 0, "1d1" , 0}, /* 83*/ X{"& Potion~ of Heroism" , 76, '!',0x00000010, X 0, 35, 319, 4, 2, 0, 0, 0, 0, "1d1" , 0}, /* 84*/ X{"& Potion~ of Boldness" , 76, '!',0x00000040, X 0, 10, 320, 4, 2, 0, 0, 0, 0, "1d1" , 0}, /* 85*/ X{"& Wand of Light (%P1 charges)" , 65, '-',0x00000001, X 0, 200, 1, 10, 1, 0, 0, 0, 0, "1d1" , 2}, /* 86*/ X{"& Wand of Lightning Bolts (%P1 charges)" , 65, '-',0x00000002, X 0, 600, 2, 10, 1, 0, 0, 0, 0, "1d1" , 6}, /* 87*/ X{"& Wand of Magic Missile (%P1 charges)" , 65, '-',0x00002000, X 0, 200, 14, 10, 1, 0, 0, 0, 0, "1d1" , 2}, /* 88*/ X{"& Wand of Disarming (%P1 charges)" , 65, '-',0x00020000, X 0, 700, 18, 10, 1, 0, 0, 0, 0, "1d1" , 12}, /* 89*/ X{"& Wand of Lightning Balls (%P1 charges)" , 65, '-',0x00040000, X 0, 1200, 19, 10, 1, 0, 0, 0, 0, "1d1" , 20}, /* 90*/ X{"& Wand of Wonder (%P1 charges)" , 65, '-',0x00800000, X 0, 250, 24, 10, 1, 0, 0, 0, 0, "1d1" , 10}, /* 91*/ X{"& Staff of Light (%P1 charges)" , 55, '_',0x00000001, X 0, 250, 1, 50, 1, 0, 0, 0, 0, "1d2" , 3}, /* 92*/ X{"& Staff of Door/Stair Location (%P1 charges)" , 55, '_',0x00000002, X 0, 350, 2, 50, 1, 0, 0, 0, 0, "1d2" , 7}, /* 93*/ X{"& Staff of Trap Location (%P1 charges)" , 55, '_',0x00000004, X 0, 350, 3, 50, 1, 0, 0, 0, 0, "1d2" , 7}, /* 94*/ X{"& Staff of Detect Invisible (%P1 charges)" , 55, '_',0x00008000, X 0, 200, 16, 50, 1, 0, 0, 0, 0, "1d2" , 3}, /* 95*/ X{"& Potion~ of Restore Life Levels" , 76, '!',0x00000080, X 0, 400, 321, 4, 1, 0, 0, 0, 0, "1d1" , 0}, /* 96*/ X{"& Scroll~ of Blessing" , 71, '?',0x00000020, X 0, 15, 312, 5, 2, 0, 0, 0, 0, "0d0" , 0}, /* 97*/ X{"& Scroll~ of Word-of-Recall" , 71, '?',0x00000100, X 0, 150, 313, 5, 3, 0, 0, 0, 0, "0d0" , 0}, /* 98*/ X{"& Potion~ of Slow Poison" , 76, '!',0x00000800, X 0, 25, 322, 4, 2, 0, 0, 0, 0, "1d1" , 0}, /* 99*/ X{"& Potion~ of Neutralize Poison" , 76, '!',0x00001000, X 0, 75, 323, 4, 1, 0, 0, 0, 0, "1d1" , 0}, /*100*/ X{"& Wand of Stinking Cloud (%P1 charges)" , 65, '-',0x00200000, X 0, 400, 22, 10, 1, 0, 0, 0, 0, "1d1" , 5}, /*101*/ X{"& Iron Spike~" , 13, '~',0x00000000, X 0, 1, 1, 10, 1, 0, 0, 0, 0, "1d1" , 1}, /*102*/ X{"& Brass Lantern~ with %P5 turns of light" , 15, '~',0x00000000, X 7500, 35, 2, 50, 1, 0, 0, 0, 0, "1d1" , 1}, /*103*/ X{"& Wooden Torch~ with %P5 turns of light" , 15, '~',0x00000000, X 4000, 2, 270, 30, 5, 0, 0, 0, 0, "1d1" , 1}, /*104*/ X{"& Flask~ of oil" , 77, '!',0x00040000, X 7500, 3, 257, 10, 5, 0, 0, 0, 0, "2d6" , 1} /*105*/ X}; X Xtreasure_type blank_treasure = {"nothing", 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, X 0, "0d0", 0}; X X/* Treasure related values */ Xint inven_ctr = 0; /* Total different obj's */ Xint inven_weight = 0; /* Cur carried weight */ Xint equip_ctr = 0; /* Cur equipment ctr */ Xint tcptr; /* Cur treasure heap ptr */ X X/* Following are feature objects defined for dungeon */ X X/* Traps are just Nasty treasures... */ Xtreasure_type trap_lista[MAX_TRAPA] = { X{"an open pit" , 102, ' ',0x00000000, X 0, 0, 1, 0, 0, 0, 0, 0, 0, "2d6" ,-50}, X{"an arrow trap" , 101, '.',0x00000000, X 0, 0, 2, 0, 0, 0, 0, 0, 0, "1d8" , 0}, X{"a covered pit" , 101, '.',0x00000000, X 0, 0, 3, 0, 0, 0, 0, 0, 0, "2d6" , 0}, X{"a trap door" , 101, '.',0x00000000, X 0, 0, 4, 0, 0, 0, 0, 0, 0, "2d8" , 0}, X{"a gas trap" , 101, '.',0x00000000, X 0, 0, 5, 0, 0, 0, 0, 0, 0, "1d4" , 0}, X{"a loose rock" , 101, '.',0x00000000, X 0, 0, 6, 0, 0, 0, 0, 0, 0, "0d0" , 0}, X{"a dart trap" , 101, '.',0x00000000, X 0, 0, 7, 0, 0, 0, 0, 0, 0, "1d4" , 0}, X{"a strange rune" , 101, '.',0x00000000, X 0, 0, 8, 0, 0, 0, 0, 0, 0, "0d0" , 0}, X{"some loose rock" , 101, '.',0x00000000, X 0, 0, 9, 0, 0, 0, 0, 0, 0, "2d6" , 0}, X{"a gas trap" , 101, '.',0x00000000, X 0, 0, 10, 0, 0, 0, 0, 0, 0, "1d4" , 0}, X{"a strange rune" , 101, '.',0x00000000, X 0, 0, 11, 0, 0, 0, 0, 0, 0, "0d0" , 0}, X{"a blackened spot" , 101, '.',0x00000000, X 0, 0, 12, 0, 0, 0, 0, 0, 0, "4d6" , 0}, X{"some corroded rock" , 101, '.',0x00000000, X 0, 0, 13, 0, 0, 0, 0, 0, 0, "4d6" , 0}, X{"a gas trap" , 101, '.',0x00000000, X 0, 0, 14, 0, 0, 0, 0, 0, 0, "2d6" , 0}, X{"a gas trap" , 101, '.',0x00000000, X 5, 0, 15, 0, 0, 0, 0, 0, 0, "1d4" , 10}, X{"a gas trap" , 101, '.',0x00000000, X 5, 0, 16, 0, 0, 0, 0, 0, 0, "1d8" , 5}, X{"a dart trap" , 101, '.',0x00000000, X 5, 0, 17, 0, 0, 0, 0, 0, 0, "1d8" , 10}, X{"a dart trap" , 101, '.',0x00000000, X 5, 0, 18, 0, 0, 0, 0, 0, 0, "1d8" , 10} X}; X X/* Traps: Level represents the difficulty of disarming; */ X/* and P1 represents the experienced gained when disarmed*/ Xtreasure_type trap_listb[MAX_TRAPB] = { X{"an open pit" , 102, ' ',0x00000000, X 1, 0, 1, 0, 0, 0, 0, 0, 0, "2d6" ,-50}, X{"an arrow trap" , 102, '^',0x00000000, X 3, 0, 2, 0, 0, 0, 0, 0, 0, "1d8" ,-10}, X{"a covered pit" , 102, '^',0x00000000, X 2, 0, 3, 0, 0, 0, 0, 0, 0, "2d6" ,-40}, X{"a trap door" , 102, '^',0x00000000, X 5, 0, 4, 0, 0, 0, 0, 0, 0, "2d8" ,-25}, X{"a gas trap" , 102, '^',0x00000000, X 3, 0, 5, 0, 0, 0, 0, 0, 0, "1d4" , 5}, X{"a loose rock" , 102, ';',0x00000000, X 0, 0, 6, 0, 0, 0, 0, 0, 0, "0d0" ,-90}, X{"a dart trap" , 102, '^',0x00000000, X 5, 0, 7, 0, 0, 0, 0, 0, 0, "1d4" , 10}, X{"a strange rune" , 102, '^',0x00000000, X 5, 0, 8, 0, 0, 0, 0, 0, 0, "0d0" ,-10}, X{"some loose rock" , 102, '^',0x00000000, X 5, 0, 9, 0, 0, 0, 0, 0, 0, "2d6" ,-10}, X{"a gas trap" , 102, '^',0x00000000, X 10, 0, 10, 0, 0, 0, 0, 0, 0, "1d4" , 5}, X{"a strange rune" , 102, '^',0x00000000, X 5, 0, 11, 0, 0, 0, 0, 0, 0, "0d0" ,-10}, X{"a blackened spot" , 102, '^',0x00000000, X 10, 0, 12, 0, 0, 0, 0, 0, 0, "4d6" , 10}, X{"some corroded rock" , 102, '^',0x00000000, X 10, 0, 13, 0, 0, 0, 0, 0, 0, "4d6" , 10}, X{"a gas trap" , 102, '^',0x00000000, X 5, 0, 14, 0, 0, 0, 0, 0, 0, "2d6" , 5}, X{"a gas trap" , 102, '^',0x00000000, X 5, 0, 15, 0, 0, 0, 0, 0, 0, "1d4" , 10}, X{"a gas trap" , 102, '^',0x00000000, X 5, 0, 16, 0, 0, 0, 0, 0, 0, "1d8" , 5}, X{"a dart trap" , 102, '^',0x00000000, X 5, 0, 17, 0, 0, 0, 0, 0, 0, "1d8" , 10}, X{"a dart trap" , 102, '^',0x00000000, X 5, 0, 18, 0, 0, 0, 0, 0, 0, "1d8" , 10}, X /* Special case, see DOOR_LIST below (subvals must agree) */ X{"a closed door" , 105, '+',0x00000000, X 0, 0, 19, 0, 0, 0, 0, 0, 0, "1d1" , 0} X}; X X/* Special trap */ Xtreasure_type scare_monster = X{"a strange rune" , 102, '^',0x00000000, X 0, 0, 99, 0, 0, 0, 0, 0, 0, "0d0" ,-90}; X Xtreasure_type rubble = X{"some rubble" , 103, ':',0x00000000, X 0, 0, 1, 0, 0, 0, 0, 0, 0, "0d0" , 0}; X X/* Secret door must have same subval as closed door in */ X/* TRAP_LISTB. See CHANGE_TRAP */ Xtreasure_type door_list[3] = { X{"an open door" , 104,'\'',0x00000000, X 0, 0, 1, 0, 0, 0, 0, 0, 0, "1d1" , 0}, X{"a closed door" , 105, '+',0x00000000, X 0, 0, 19, 0, 0, 0, 0, 0, 0, "1d1" , 0}, X{"a secret door" , 109, '#',0x00000000, X 0, 0, 19, 0, 0, 0, 0, 0, 0, "1d1" , 0} X}; X Xtreasure_type up_stair = X{"an up staircase " , 107, '<',0x00000000, X 0, 0, 1, 0, 0, 0, 0, 0, 0, "1d1" , 0}; X Xtreasure_type down_stair = X{"a down staircase" , 108, '>',0x00000000, X 0, 0, 1, 0, 0, 0, 0, 0, 0, "1d1" , 0}; X END_OF_treasure2.c if test 28020 -ne `wc -c <treasure2.c`; then echo shar: \"treasure2.c\" unpacked with wrong size! fi # end of overwriting check fi echo shar: End of archive 13 \(of 16\). cp /dev/null ark13isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 16 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0