Resync patch with contrib.
[dragonfly.git] / games / larn / store.c
blob35a9cbf9f8d787ed618ab6df056e5da60f50a317
1 /*-
2 * Copyright (c) 1988 The Regents of the University of California.
3 * All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
33 * @(#)store.c 5.4 (Berkeley) 5/13/91
34 * $FreeBSD: src/games/larn/store.c,v 1.5 1999/11/30 03:49:00 billf Exp $
35 * $DragonFly: src/games/larn/store.c,v 1.4 2006/08/26 17:05:05 pavalos Exp $
38 /* store.c Larn is copyrighted 1986 by Noah Morgan. */
39 #include "header.h"
41 static void dnd_2hed(void);
42 static void dnd_hed(void);
43 static void handsfull(void);
44 static void outofstock(void);
45 static void nogold(void);
46 static void dnditem(int);
47 static void sch_hed(void);
48 static void banktitle(const char *);
49 static void obanksub(void);
50 static void otradhead(void);
51 static void cnsitm(void);
53 static int dndcount=0,dnditm=0;
55 /* this is the data for the stuff in the dnd store */
56 int maxitm=83; /* number of items in the dnd inventory table */
57 struct _itm itm_[90] = {
58 /*cost iven name iven arg how
59 gp iven[] ivenarg[] many */
61 { 2, OLEATHER, 0, 3 },
62 { 10, OSTUDLEATHER, 0, 2 },
63 { 40, ORING, 0, 2 },
64 { 85, OCHAIN, 0, 2 },
65 { 220, OSPLINT, 0, 1 },
66 { 400, OPLATE, 0, 1 },
67 { 900, OPLATEARMOR, 0, 1 },
68 { 2600, OSSPLATE, 0, 1 },
69 { 150, OSHIELD, 0, 1 },
71 /*cost iven name iven arg how
72 gp iven[] ivenarg[] many */
74 { 2, ODAGGER, 0, 3 },
75 { 20, OSPEAR, 0, 3 },
76 { 80, OFLAIL, 0, 2 },
77 { 150, OBATTLEAXE, 0, 2 },
78 { 450, OLONGSWORD, 0, 2 },
79 { 1000, O2SWORD, 0, 2 },
80 { 5000, OSWORD, 0, 1 },
81 { 16500, OLANCE, 0, 1 },
82 { 6000, OSWORDofSLASHING, 0, 0 },
83 { 10000, OHAMMER, 0, 0 },
85 /*cost iven name iven arg how
86 gp iven[] ivenarg[] many */
88 { 150, OPROTRING, 1, 1 },
89 { 85, OSTRRING, 1, 1 },
90 { 120, ODEXRING, 1, 1 },
91 { 120, OCLEVERRING, 1, 1 },
92 { 180, OENERGYRING, 0, 1 },
93 { 125, ODAMRING, 0, 1 },
94 { 220, OREGENRING, 0, 1 },
95 { 1000, ORINGOFEXTRA, 0, 1 },
97 { 280, OBELT, 0, 1 },
99 { 400, OAMULET, 0, 1 },
101 { 6500, OORBOFDRAGON, 0, 0 },
102 { 5500, OSPIRITSCARAB, 0, 0 },
103 { 5000, OCUBEofUNDEAD, 0, 0 },
104 { 6000, ONOTHEFT, 0, 0 },
106 { 590, OCHEST, 6, 1 },
107 { 200, OBOOK, 8, 1 },
108 { 10, OCOOKIE, 0, 3 },
110 /*cost iven name iven arg how
111 gp iven[] ivenarg[] many */
113 { 20, OPOTION, 0, 6 },
114 { 90, OPOTION, 1, 5 },
115 { 520, OPOTION, 2, 1 },
116 { 100, OPOTION, 3, 2 },
117 { 50, OPOTION, 4, 2 },
118 { 150, OPOTION, 5, 2 },
119 { 70, OPOTION, 6, 1 },
120 { 30, OPOTION, 7, 7 },
121 { 200, OPOTION, 8, 1 },
122 { 50, OPOTION, 9, 1 },
123 { 80, OPOTION, 10, 1 },
125 /*cost iven name iven arg how
126 gp iven[] ivenarg[] many */
128 { 30, OPOTION, 11, 3 },
129 { 20, OPOTION, 12, 5 },
130 { 40, OPOTION, 13, 3 },
131 { 35, OPOTION, 14, 2 },
132 { 520, OPOTION, 15, 1 },
133 { 90, OPOTION, 16, 2 },
134 { 200, OPOTION, 17, 2 },
135 { 220, OPOTION, 18, 4 },
136 { 80, OPOTION, 19, 6 },
137 { 370, OPOTION, 20, 3 },
138 { 50, OPOTION, 22, 1 },
139 { 150, OPOTION, 23, 3 },
141 /*cost iven name iven arg how
142 gp iven[] ivenarg[] many */
144 { 100, OSCROLL, 0, 2 },
145 { 125, OSCROLL, 1, 2 },
146 { 60, OSCROLL, 2, 4 },
147 { 10, OSCROLL, 3, 4 },
148 { 100, OSCROLL, 4, 3 },
149 { 200, OSCROLL, 5, 2 },
150 { 110, OSCROLL, 6, 1 },
151 { 500, OSCROLL, 7, 2 },
152 { 200, OSCROLL, 8, 2 },
153 { 250, OSCROLL, 9, 4 },
154 { 20, OSCROLL, 10, 5 },
155 { 30, OSCROLL, 11, 3 },
157 /*cost iven name iven arg how
158 gp iven[] ivenarg[] many */
160 { 340, OSCROLL, 12, 1 },
161 { 340, OSCROLL, 13, 1 },
162 { 300, OSCROLL, 14, 2 },
163 { 400, OSCROLL, 15, 2 },
164 { 500, OSCROLL, 16, 2 },
165 { 1000, OSCROLL, 17, 1 },
166 { 500, OSCROLL, 18, 1 },
167 { 340, OSCROLL, 19, 2 },
168 { 220, OSCROLL, 20, 3 },
169 { 3900, OSCROLL, 21, 0 },
170 { 610, OSCROLL, 22, 1 },
171 { 3000, OSCROLL, 23, 0 }
175 function for the dnd store
177 static void
178 dnd_2hed(void)
180 lprcat("Welcome to the Larn Thrift Shoppe. We stock many items explorers find useful\n");
181 lprcat(" in their adventures. Feel free to browse to your hearts content.\n");
182 lprcat("Also be advised, if you break 'em, you pay for 'em.");
185 static void
186 dnd_hed(void)
188 int i;
189 for (i=dnditm; i<26+dnditm; i++) dnditem(i);
190 cursor(50,18); lprcat("You have ");
193 static void
194 handsfull(void)
196 lprcat("\nYou can't carry anything more!");
197 lflush();
198 nap(2200);
201 static void
202 outofstock(void)
204 lprcat("\nSorry, but we are out of that item.");
205 lflush();
206 nap(2200);
209 static void
210 nogold(void)
212 lprcat("\nYou don't have enough gold to pay for that!");
213 lflush();
214 nap(2200);
217 void
218 dndstore(void)
220 int i;
221 dnditm = 0;
222 nosignal = 1; /* disable signals */
223 clear(); dnd_2hed();
224 if (outstanding_taxes>0)
226 lprcat("\n\nThe Larn Revenue Service has ordered us to not do business with tax evaders.\n"); beep();
227 lprintf("They have also told us that you owe %d gp in back taxes, and as we must\n",(long)outstanding_taxes);
228 lprcat("comply with the law, we cannot serve you at this time. Soo Sorry.\n");
229 cursors();
230 lprcat("\nPress "); standout("escape"); lprcat(" to leave: "); lflush();
231 i=0;
232 while (i!='\33') i=getchr();
233 drawscreen(); nosignal = 0; /* enable signals */ return;
236 dnd_hed();
237 while (1)
239 cursor(59,18); lprintf("%d gold pieces",(long)c[GOLD]);
240 cltoeoln(); cl_dn(1,20); /* erase to eod */
241 lprcat("\nEnter your transaction ["); standout("space");
242 lprcat(" for more, "); standout("escape");
243 lprcat(" to leave]? ");
244 i=0;
245 while ((i<'a' || i>'z') && (i!=' ') && (i!='\33') && (i!=12)) i=getchr();
246 if (i==12) { clear(); dnd_2hed(); dnd_hed(); }
247 else if (i=='\33')
248 { drawscreen(); nosignal = 0; /* enable signals */ return; }
249 else if (i==' ')
251 cl_dn(1,4);
252 if ((dnditm += 26) >= maxitm) dnditm=0; dnd_hed();
254 else
255 { /* buy something */
256 lprc(i); /* echo the byte */
257 i += dnditm - 'a';
258 if (i>=maxitm) outofstock(); else
259 if (itm_[i].qty <= 0) outofstock(); else
260 if (pocketfull()) handsfull(); else
261 if (c[GOLD] < itm_[i].price*10) nogold(); else
263 if (itm_[i].obj == OPOTION)
264 potionname[itm_[i].arg] = potionhide[itm_[i].arg];
265 else if (itm_[i].obj == OSCROLL)
266 scrollname[itm_[i].arg] = scrollhide[itm_[i].arg];
267 c[GOLD] -= itm_[i].price*10;
268 itm_[i].qty--; take(itm_[i].obj,itm_[i].arg);
269 if (itm_[i].qty==0) dnditem(i); nap(1001);
277 dnditem(index)
279 to print the item list; used in dndstore() enter with the index into itm_
281 static void
282 dnditem(int i)
284 int j,k;
285 if (i >= maxitm) return;
286 cursor( (j=(i&1)*40+1) , (k=((i%26)>>1)+5) );
287 if (itm_[i].qty == 0) { lprintf("%39s",""); return; }
288 lprintf("%c) ",(i%26)+'a');
289 if (itm_[i].obj == OPOTION)
290 { lprcat("potion of "); lprintf("%s",potionhide[itm_[i].arg]); }
291 else if (itm_[i].obj == OSCROLL)
292 { lprcat("scroll of "); lprintf("%s",scrollhide[itm_[i].arg]); }
293 else lprintf("%s",objectname[itm_[i].obj]);
294 cursor( j+31,k ); lprintf("%6d",(long)(itm_[i].price*10));
299 for the college of larn
301 char course[26]={0}; /* the list of courses taken */
302 char coursetime[] = { 10, 15, 10, 20, 10, 10, 10, 5 };
304 function to display the header info for the school
306 static void
307 sch_hed(void)
309 clear();
310 lprcat("The College of Larn offers the exciting opportunity of higher education to\n");
311 lprcat("all inhabitants of the caves. Here is a list of the class schedule:\n\n\n");
312 lprcat("\t\t Course Name \t Time Needed\n\n");
314 if (course[0]==0) lprcat("\t\ta) Fighters Training I 10 mobuls"); /*line 7 of crt*/
315 lprc('\n');
316 if (course[1]==0) lprcat("\t\tb) Fighters Training II 15 mobuls");
317 lprc('\n');
318 if (course[2]==0) lprcat("\t\tc) Introduction to Wizardry 10 mobuls");
319 lprc('\n');
320 if (course[3]==0) lprcat("\t\td) Applied Wizardry 20 mobuls");
321 lprc('\n');
322 if (course[4]==0) lprcat("\t\te) Behavioral Psychology 10 mobuls");
323 lprc('\n');
324 if (course[5]==0) lprcat("\t\tf) Faith for Today 10 mobuls");
325 lprc('\n');
326 if (course[6]==0) lprcat("\t\tg) Contemporary Dance 10 mobuls");
327 lprc('\n');
328 if (course[7]==0) lprcat("\t\th) History of Larn 5 mobuls");
330 lprcat("\n\n\t\tAll courses cost 250 gold pieces.");
331 cursor(30,18);
332 lprcat("You are presently carrying ");
335 void
336 oschool(void)
338 int i;
339 long time_used;
340 nosignal = 1; /* disable signals */
341 sch_hed();
342 while (1)
344 cursor(57,18); lprintf("%d gold pieces. ",(long)c[GOLD]); cursors();
345 lprcat("\nWhat is your choice ["); standout("escape");
346 lprcat(" to leave] ? "); yrepcount=0;
347 i=0; while ((i<'a' || i>'h') && (i!='\33') && (i!=12)) i=getchr();
348 if (i==12) { sch_hed(); continue; }
349 else if (i=='\33')
350 { nosignal = 0; drawscreen(); /* enable signals */ return; }
351 lprc(i);
352 if (c[GOLD] < 250) nogold(); else
353 if (course[i-'a'])
354 { lprcat("\nSorry, but that class is filled."); nap(1000); }
355 else
356 if (i <= 'h')
358 c[GOLD] -= 250; time_used=0;
359 switch(i)
361 case 'a': c[STRENGTH] += 2; c[CONSTITUTION]++;
362 lprcat("\nYou feel stronger!");
363 cl_line(16,7);
364 break;
366 case 'b': if (course[0]==0)
368 lprcat("\nSorry, but this class has a prerequisite of Fighters Training I");
369 c[GOLD]+=250; time_used= -10000; break;
371 lprcat("\nYou feel much stronger!");
372 cl_line(16,8);
373 c[STRENGTH] += 2; c[CONSTITUTION] += 2; break;
375 case 'c': c[INTELLIGENCE] += 2;
376 lprcat("\nThe task before you now seems more attainable!");
377 cl_line(16,9); break;
379 case 'd': if (course[2]==0)
381 lprcat("\nSorry, but this class has a prerequisite of Introduction to Wizardry");
382 c[GOLD]+=250; time_used= -10000; break;
384 lprcat("\nThe task before you now seems very attainable!");
385 cl_line(16,10);
386 c[INTELLIGENCE] += 2; break;
388 case 'e': c[CHARISMA] += 3;
389 lprcat("\nYou now feel like a born leader!");
390 cl_line(16,11); break;
392 case 'f': c[WISDOM] += 2;
393 lprcat("\nYou now feel more confident that you can find the potion in time!");
394 cl_line(16,12); break;
396 case 'g': c[DEXTERITY] += 3;
397 lprcat("\nYou feel like dancing!");
398 cl_line(16,13); break;
400 case 'h': c[INTELLIGENCE]++;
401 lprcat("\nYour instructor told you that the Eye of Larn is rumored to be guarded\n");
402 lprcat("by a platinum dragon who possesses psionic abilities. ");
403 cl_line(16,14); break;
405 time_used += coursetime[i-'a']*100;
406 if (time_used > 0)
408 gtime += time_used;
409 course[i-'a']++; /* remember that he has taken that course */
410 c[HP] = c[HPMAX]; c[SPELLS] = c[SPELLMAX]; /* he regenerated */
412 if (c[BLINDCOUNT]) c[BLINDCOUNT]=1; /* cure blindness too! */
413 if (c[CONFUSE]) c[CONFUSE]=1; /* end confusion */
414 larn_adjtime((long)time_used); /* adjust parameters for time change */
416 nap(1000);
422 * for the first national bank of Larn
424 int lasttime=0; /* last time he was in bank */
426 void
427 obank(void)
429 banktitle(" Welcome to the First National Bank of Larn.");
432 void
433 obank2(void)
435 banktitle("Welcome to the 5th level branch office of the First National Bank of Larn.");
438 static void
439 banktitle(const char *str)
441 nosignal = 1; /* disable signals */
442 clear(); lprcat(str);
443 if (outstanding_taxes>0)
445 int i;
446 lprcat("\n\nThe Larn Revenue Service has ordered that your account be frozen until all\n"); beep();
447 lprintf("levied taxes have been paid. They have also told us that you owe %d gp in\n",(long)outstanding_taxes);
448 lprcat("taxes, and we must comply with them. We cannot serve you at this time. Sorry.\n");
449 lprcat("We suggest you go to the LRS office and pay your taxes.\n");
450 cursors();
451 lprcat("\nPress "); standout("escape"); lprcat(" to leave: "); lflush();
452 i=0;
453 while (i!='\33') i=getchr();
454 drawscreen(); nosignal = 0; /* enable signals */ return;
456 lprcat("\n\n\tGemstone\t Appraisal\t\tGemstone\t Appraisal");
457 obanksub(); nosignal = 0; /* enable signals */
458 drawscreen();
462 * function to put interest on your bank account
464 void
465 ointerest(void)
467 int i;
468 if (c[BANKACCOUNT]<0) c[BANKACCOUNT] = 0;
469 else if ((c[BANKACCOUNT]>0) && (c[BANKACCOUNT]<500000))
471 i = (gtime-lasttime)/100; /* # mobuls elapsed */
472 while ((i-- > 0) && (c[BANKACCOUNT]<500000))
473 c[BANKACCOUNT] += c[BANKACCOUNT]/250;
474 if (c[BANKACCOUNT]>500000) c[BANKACCOUNT]=500000; /* interest limit */
476 lasttime = (gtime/100)*100;
479 static short gemorder[26]={0}; /* the reference to screen location for each */
480 static long gemvalue[26]={0}; /* the appraisal of the gems */
482 static void
483 obanksub(void)
485 unsigned long amt;
486 int i,k;
487 ointerest(); /* credit any needed interest */
489 for (k=i=0; i<26; i++)
490 switch(iven[i])
492 case OLARNEYE: case ODIAMOND: case OEMERALD:
493 case ORUBY: case OSAPPHIRE:
495 if (iven[i]==OLARNEYE)
497 gemvalue[i]=250000-((gtime*7)/100)*100;
498 if (gemvalue[i]<50000) gemvalue[i]=50000;
500 else gemvalue[i] = (255&ivenarg[i])*100;
501 gemorder[i]=k;
502 cursor( (k%2)*40+1 , (k>>1)+4 );
503 lprintf("%c) %s",i+'a',objectname[(int)iven[i]]);
504 cursor( (k%2)*40+33 , (k>>1)+4 );
505 lprintf("%5d",(long)gemvalue[i]); k++;
507 cursor(31,17); lprintf("You have %8d gold pieces in the bank.",(long)c[BANKACCOUNT]);
508 cursor(40,18); lprintf("You have %8d gold pieces",(long)c[GOLD]);
509 if (c[BANKACCOUNT]+c[GOLD] >= 500000)
510 lprcat("\nNote: Larndom law states that only deposits under 500,000gp can earn interest.");
511 while (1)
513 cl_dn(1,20);
514 lprcat("\nYour wish? [("); standout("d"); lprcat(") deposit, (");
515 standout("w"); lprcat(") withdraw, ("); standout("s");
516 lprcat(") sell a stone, or "); standout("escape"); lprcat("] ");
517 yrepcount=0;
518 i=0; while (i!='d' && i!='w' && i!='s' && i!='\33') i=getchr();
519 switch(i)
521 case 'd': lprcat("deposit\nHow much? "); amt = readnum((long)c[GOLD]);
522 if (amt>(unsigned)c[GOLD])
523 { lprcat(" You don't have that much."); nap(2000); }
524 else { c[GOLD] -= amt; c[BANKACCOUNT] += amt; }
525 break;
527 case 'w': lprcat("withdraw\nHow much? "); amt = readnum((long)c[BANKACCOUNT]);
528 if (amt >(unsigned) c[BANKACCOUNT])
529 { lprcat("\nYou don't have that much in the bank!"); nap(2000); }
530 else { c[GOLD] += amt; c[BANKACCOUNT] -= amt; }
531 break;
533 case 's': lprcat("\nWhich stone would you like to sell? ");
534 i=0; while ((i<'a' || i>'z') && i!='*') i=getchr();
535 if (i=='*')
536 for (i=0; i<26; i++)
538 if (gemvalue[i])
540 c[GOLD]+=gemvalue[i]; iven[i]=0;
541 gemvalue[i]=0; k = gemorder[i];
542 cursor( (k%2)*40+1 , (k>>1)+4 );
543 lprintf("%39s","");
546 else
548 if (gemvalue[i=i-'a']==0)
550 lprintf("\nItem %c is not a gemstone!",i+'a');
551 nap(2000); break;
553 c[GOLD]+=gemvalue[i]; iven[i]=0;
554 gemvalue[i]=0; k = gemorder[i];
555 cursor( (k%2)*40+1 , (k>>1)+4 ); lprintf("%39s","");
557 break;
559 case '\33': return;
561 cursor(40,17); lprintf("%8d",(long)c[BANKACCOUNT]);
562 cursor(49,18); lprintf("%8d",(long)c[GOLD]);
566 function for the trading post
568 static void
569 otradhead(void)
571 clear();
572 lprcat("Welcome to the Larn Trading Post. We buy items that explorers no longer find\n");
573 lprcat("useful. Since the condition of the items you bring in is not certain,\n");
574 lprcat("and we incur great expense in reconditioning the items, we usually pay\n");
575 lprcat("only 20% of their value were they to be new. If the items are badly\n");
576 lprcat("damaged, we will pay only 10% of their new value.\n\n");
579 void
580 otradepost(void)
582 int i,j,value,isub,izarg;
583 dnditm = dndcount = 0;
584 nosignal = 1; /* disable signals */
585 resetscroll(); otradhead();
586 while (1)
588 lprcat("\nWhat item do you want to sell to us ["); standout("*");
589 lprcat(" for list, or "); standout("escape"); lprcat("] ? ");
590 i=0; while (i>'z' || (i<'a' && i!='*' && i!='\33' && i!='.')) i=getchr();
591 if (i == '\33')
592 { setscroll(); recalc(); drawscreen(); nosignal=0; /* enable signals */ return; }
593 isub = i - 'a'; j=0;
594 if (iven[isub]==OSCROLL) if (scrollname[ivenarg[isub]][0]==0)
595 { j=1; cnsitm(); } /* can't sell unidentified item */
596 if (iven[isub]==OPOTION) if (potionname[ivenarg[isub]][0]==0)
597 { j=1; cnsitm(); } /* can't sell unidentified item */
598 if (!j) {
599 if (i=='*') { clear(); qshowstr(); otradhead(); }
600 else if (iven[isub]==0) lprintf("\nYou don't have item %c!",isub+'a');
601 else
603 for (j=0; j<maxitm; j++)
604 if ((itm_[j].obj == iven[isub]) || (iven[isub] == ODIAMOND) || (iven[isub] == ORUBY) || (iven[isub] == OEMERALD) || (iven[isub] == OSAPPHIRE))
606 srcount=0; show3(isub); /* show what the item was */
607 if ((iven[isub] == ODIAMOND) || (iven[isub] == ORUBY)
608 || (iven[isub] == OEMERALD) || (iven[isub] == OSAPPHIRE))
609 value = 20*ivenarg[isub];
610 else
611 if ((itm_[j].obj == OSCROLL) || (itm_[j].obj == OPOTION)) value = 2*itm_[j+ivenarg[isub]].price;
612 else
614 izarg=ivenarg[isub]; value = itm_[j].price; /* appreciate if a +n object */
615 if (izarg >= 0) value *= 2;
616 while ((izarg-- > 0) && ((value=14*(67+value)/10) < 500000));
618 lprintf("\nItem (%c) is worth %d gold pieces to us. Do you want to sell it? ",i,(long)value);
619 yrepcount=0;
620 if (getyn()=='y')
622 lprcat("yes\n"); c[GOLD]+=value;
623 if (c[WEAR] == isub) c[WEAR] = -1;
624 if (c[WIELD] == isub) c[WIELD] = -1;
625 if (c[SHIELD] == isub) c[SHIELD] = -1;
626 adjustcvalues(iven[isub],ivenarg[isub]);
627 iven[isub]=0;
629 else lprcat("no thanks.\n");
630 j = maxitm+100; /* get out of the inner loop */
632 if (j <= maxitm+2) lprcat("\nSo sorry, but we are not authorized to accept that item.");
634 } /* if(!j) */
635 } /* while(1) */
638 static void
639 cnsitm(void)
640 { lprcat("\nSorry, we can't accept unidentified objects."); }
643 * for the Larn Revenue Service
645 void
646 olrs(void)
648 int i,first;
649 unsigned long amt;
650 first = nosignal = 1; /* disable signals */
651 clear(); resetscroll(); cursor(1,4);
652 lprcat("Welcome to the Larn Revenue Service district office. How can we help you?");
653 while (1)
655 if (first) { first=0; goto nxt; }
656 cursors();
657 lprcat("\n\nYour wish? [(");
658 standout("p");
659 lprcat(") pay taxes, or ");
660 standout("escape");
661 lprcat("] "); yrepcount=0;
662 i=0; while (i!='p' && i!='\33') i=getchr();
663 switch(i)
665 case 'p': lprcat("pay taxes\nHow much? "); amt = readnum((long)c[GOLD]);
666 if (amt>(unsigned)c[GOLD]) lprcat(" You don't have that much.\n");
667 else c[GOLD] -= paytaxes((long)amt);
668 break;
670 case '\33': nosignal = 0; /* enable signals */
671 setscroll(); drawscreen(); return;
674 nxt: cursor(1,6);
675 if (outstanding_taxes>0)
676 lprintf("You presently owe %d gp in taxes. ",(long)outstanding_taxes);
677 else
678 lprcat("You do not owe us any taxes. ");
679 cursor(1,8);
680 if (c[GOLD]>0)
681 lprintf("You have %6d gp. ",(long)c[GOLD]);
682 else
683 lprcat("You have no gold pieces. ");