DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T s

⟦4e470f107⟧ TextFile

    Length: 29301 (0x7275)
    Types: TextFile
    Names: »store.c.orig«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Ularn/store.c.orig« 

TextFile

/*	store.c		*/
#include "header.h"

static int dndcount=0,dnditm=0;

/*	this is the data for the stuff in the dnd store	*/
int maxitm=92;	/* number of items in the dnd inventory table	*/

struct _itm itm[92] = {
/*cost	  memory   iven name	iven arg      how
   gp	  pointer  iven[]	ivenarg[]     many */
{ 2,	0,	OLEATHER,	0,		3	} ,
{ 10,	0,	OSTUDLEATHER,	0,		2	} ,
{ 40,	0,	ORING,		0,		2	} ,
{ 85,	0,	OCHAIN,		0,		2	} ,
{ 220,	0,	OSPLINT,	0,		1	} ,
{ 400,	0,	OPLATE,		0,		1	} ,
{ 900,	0,	OPLATEARMOR,	0,		1	} ,
{ 2600,	0,	OSSPLATE,	0,		1	} ,
{ 150,	0,	OSHIELD,	0,		1	} ,
{ 5000, 0,      OELVENCHAIN,    0,      	0	} ,
{ 1000, 0,	OORB,		0,		0	} ,
{ 10000,0,	OSLAYER,	0,		0	} ,

/*cost	  memory 	iven name	iven arg   how
  gp	 pointer	  iven[]	ivenarg[]  many */

{ 2,	0,	ODAGGER,		0,	3	} ,
{ 20,	0,	OSPEAR,			0,	3	} ,
{ 80,	0,	OFLAIL,			0,	2	} ,
{ 150,	0,	OBATTLEAXE,		0,	2	} ,
{ 450,	0,	OLONGSWORD,		0,	2	} ,
{ 1000,	0,	O2SWORD,		0,	2	} ,
{ 5000,	0,	OSWORD,			0,	1	} ,
{ 20000,0,	OLANCE,			0,	1	} ,
{ 2000,	0,	OSWORDofSLASHING,	0,	0	} ,
{ 7500, 0,	OHAMMER,		0,	0	} ,

/*cost	  memory 	iven name	iven arg   how
  gp	 pointer	  iven[]	ivenarg[]  many */
{ 150,	0,	OPROTRING,	1,	1	} ,
{ 85,	0,	OSTRRING,	1,	1	} ,
{ 120,	0,	ODEXRING,	1,	1	} ,
{ 120,	0,	OCLEVERRING,	1,	1	} ,
{ 180,	0,	OENERGYRING,	0,	1	} ,
{ 125,	0,	ODAMRING,	0,	1	} ,
{ 220,	0,	OREGENRING,	0,	1	} ,
{ 1000,	0,	ORINGOFEXTRA,	0,	1		} ,

{ 280,	0,	OBELT,		0,	1		} ,
{ 400,	0,	OAMULET,	5,	1		} ,

{ 500,	0,	OCUBEofUNDEAD,	0,	0		} ,
{ 600,	0,	ONOTHEFT,	0,	0		} ,

{ 590,	0,	OCHEST,		3,	1		} ,
{ 200,	0,	OBOOK,		2,	1		} ,
{ 10,	0,	OCOOKIE,	0,	3		} ,
{ 666,  0,	OHANDofFEAR,    0,	0		} ,

	/*cost	  memory 	iven name	iven arg   how
	  gp	 pointer	  iven[]	ivenarg[]  many */

{ 20,	potionname,	OPOTION,	0,	6		} ,
{ 90,	potionname,	OPOTION,	1,	5		} ,
{ 520,	potionname,	OPOTION,	2,	1		} ,
{ 100,	potionname,	OPOTION,	3,	2		} ,
{ 50,	potionname,	OPOTION,	4,	2		} ,
{ 150,	potionname,	OPOTION,	5,	2		} ,
{ 70,	potionname,	OPOTION,	6,	1		} ,
{ 30,	potionname,	OPOTION,	7,	7		} ,
{ 200,	potionname,	OPOTION,	8,	1		} ,
{ 50,	potionname,	OPOTION,	9,	1		} ,
{ 80,	potionname,	OPOTION,	10,	1		} ,

/*cost	  memory 	iven name	iven arg   how
  gp	 pointer	  iven[]	ivenarg[]  many */

{ 30,	potionname,	OPOTION,	11,	3		} ,
{ 20,	potionname,	OPOTION,	12,	5		} ,
{ 40,	potionname,	OPOTION,	13,	3		} ,
{ 35,	potionname,	OPOTION,	14,	2		} ,
{ 520,	potionname,	OPOTION,	15,	1		} ,
{ 90,	potionname,	OPOTION,	16,	2		} ,
{ 200,	potionname,	OPOTION,	17,	2		} ,
{ 220,	potionname,	OPOTION,	18,	4		} ,
{ 80,	potionname,	OPOTION,	19,	6		} ,
{ 370,	potionname,	OPOTION,	20,	3		} ,
{ 50,	potionname,	OPOTION,	22,	1		} ,
{ 150,	potionname,	OPOTION,	23,	3		} ,

/*cost	  memory 	iven name	iven arg   how
  gp	 pointer	  iven[]	ivenarg[]  many */

{ 850,	0,		OORBOFDRAGON,	0,	0		} ,
{ 750,	0,		OSPIRITSCARAB,	0,	0		} ,
{ 8000, 0,		OVORPAL,	0,	0,		} ,

{ 100,	scrollname,	OSCROLL,	0,	2		} ,
{ 125,	scrollname,	OSCROLL,	1,	2		} ,
{ 60,	scrollname,	OSCROLL,	2,	4		} ,
{ 10,	scrollname,	OSCROLL,	3,	4		} ,
{ 100,	scrollname,	OSCROLL,	4,	3		} ,
{ 200,	scrollname,	OSCROLL,	5,	2		} ,
{ 110,	scrollname,	OSCROLL,	6,	1		} ,
{ 500,	scrollname,	OSCROLL,	7,	2		} ,
{ 200,	scrollname,	OSCROLL,	8,	2		} ,
{ 250,	scrollname,	OSCROLL,	9,	4		} ,
{ 20,	scrollname,	OSCROLL,	10,	5		} ,
{ 30,	scrollname,	OSCROLL,	11,	3		} ,

/*cost	  memory 	iven name	iven arg   how
  gp	 pointer	  iven[]	ivenarg[]  many */

{ 340,	scrollname,	OSCROLL,	12,	1	} ,
{ 340,	scrollname,	OSCROLL,	13,	1	} ,
{ 300,	scrollname,	OSCROLL,	14,	2	} ,
{ 400,	scrollname,	OSCROLL,	15,	2	} ,
{ 500,	scrollname,	OSCROLL,	16,	2	} ,
{ 1000,	scrollname,	OSCROLL,	17,	1	} ,
{ 500,	scrollname,	OSCROLL,	18,	1	} ,
{ 340,	scrollname,	OSCROLL,	19,	2	} ,
{ 220,	scrollname,	OSCROLL,	20,	3	} ,
{ 3900,	scrollname,	OSCROLL,	21,	0	} ,
{ 610,	scrollname,	OSCROLL,	22,	1	} ,
{ 3000,	scrollname,	OSCROLL,	23,	0	} ,
{ 300,  0,		OSPHTALISMAN,   0,	0	} ,
{ 150,  0,		OWWAND,		0,	0	} ,
{ 50,	0,		OBRASSLAMP,	0,	0	} ,
{ 9500, 0,		OPSTAFF,	0,	0	} 
};

/*
	function for the dnd store
 */
dnd_2hed()
{
lprcat("Welcome to the Ularn Thrift Shoppe.  We stock many items explorers find useful\n");
lprcat("in their adventures.  Feel free to browse to your hearts content.\n");
lprcat("Also be advised, if you break 'em, you pay for 'em.");
}

dnd_hed()
{
	register int i;

	for (i=dnditm; i<26+dnditm; i++)	
		dnditem(i);
	cursor(50,18); 
	lprcat("You have ");
}

dndstore()
{
	register int i;

	dnditm = 0;
	nosignal = 1; /* disable signals */
	clear();  
	dnd_2hed();
	if (outstanding_taxes>0)
	{
lprcat("\n\nThe Ularn Revenue Service has ordered us to not do business with tax evaders.\n"); 
		beep();
lprintf("They have also told us that you owe %d gp in back taxes, and as we must\n",(long)outstanding_taxes);
lprcat("comply with the law, we cannot serve you at this time.  Soo Sorry.\n");
		cursors();	
		lprcat("\nPress "); 
		standout("escape"); 
		lprcat(" to leave: "); 
		lflush();
		i=0;
		while (i!='\33') i=getcharacter();
		drawscreen();  
		nosignal = 0; /* enable signals */
		return;
	}
	dnd_hed();
	while (1) {
		cursor(59,18); 
		lprintf("%d gold pieces",(long)c[GOLD]);
		cltoeoln(); 
		cl_dn(1,20);	/* erase to eod */
		lprcat("\nEnter your transaction ["); 
		standout("space");
		lprcat(" for more, "); 
		standout("escape");
		lprcat(" to leave]? ");
		i=0;
		while ((i<'a' || i>'z') && (i!=' ') && (i!='\33') && (i!=12))  
			i=getcharacter();
		if (i==12) { 
			clear();  
			dnd_2hed();  
			dnd_hed(); 
		}
		else if (i=='\33') { 	
			drawscreen();  
			nosignal = 0; /* enable signals */

			return; 
		}
		else if (i==' ') {
			cl_dn(1,4);
			if ((dnditm += 26) >= maxitm) 
				dnditm=0; 
			dnd_hed();
		}
		else
		{  /* buy something */
			lprc(i);	/* echo the byte */
			i += dnditm - 'a';
			if (i>=maxitm) 
				outofstock(); 
			else if (itm[i].qty <= 0) 
				outofstock(); 
			else if (pocketfull()) 
				handsfull(); 
			else if (c[GOLD] < itm[i].price*10) 
				nogold(); 
			else { 	
				if (itm[i].mem != 0) 
					*itm[i].mem[itm[i].arg] = ' ';
				c[GOLD] -= itm[i].price*10;
				itm[i].qty--;  
				take(itm[i].obj,itm[i].arg);
				if (itm[i].qty==0) 
					dnditem(i);  
				nap(1001);
			}
		}

	}
}

/*
	function for the players hands are full
 */
handsfull()
{ 	
	lprcat("\nYou can't carry anything more!"); 
	lflush(); 
	nap(2200); 
}
outofstock()
{ 	
	lprcat("\nSorry, but we are out of that item."); 
	lflush(); 
	nap(2200); 
}
nogold()
{ 	
	lprcat("\nYou don't have enough gold to pay for that!"); 
	lflush(); 
	nap(2200); 
}

/*
	dnditem(index)

	to print the item list;  
	used in dndstore() enter with the index into itm
*/
dnditem(i)
register int i;
{
	register int j,k;

	if (i >= maxitm)  
		return;
	cursor( (j=(i&1)*40+1) , (k=((i%26)>>1)+5) );
	if (itm[i].qty == 0)  { 	
		lprintf("%39s","");  
		return; 
	}
	lprintf("%c) ",(i%26)+'a');
	if (itm[i].obj == OPOTION) { 	
		lprcat("potion of "); 
		lprintf("%s",&potionname[itm[i].arg][1]); 
	}
	else if (itm[i].obj == OSCROLL) { 	
		lprcat("scroll of "); 
		lprintf("%s",&scrollname[itm[i].arg][1]); 
	}
	else lprintf("%s",objectname[itm[i].obj]);
	cursor( j+31,k );  
	lprintf("%6d",(long)(itm[i].price*10));
}


/*
	for the college of larn
 */
char course[26]={0};	/*	the list of courses taken	*/
char coursetime[] = { 10, 15, 10, 20, 10, 10, 10, 5 };

/*
	function to display the header info for the school
 */
sch_hed()
{
	clear();
lprcat("The College of Ularn offers the exciting opportunity of higher education to\n");
lprcat("all inhabitants of the caves.  Here is a list of the class schedule:\n\n\n");
	lprcat("\t\t    Course Name \t       Time Needed\n\n");

	/*line 7 of crt*/
	if (course[0]==0) 
		lprcat("\t\ta)  Fighters Training I         10 mobuls"); 
	lprc('\n');
	if (course[1]==0) 
		lprcat("\t\tb)  Fighters Training II        15 mobuls");
	lprc('\n');
	if (course[2]==0) 
		lprcat("\t\tc)  Introduction to Wizardry    10 mobuls");
	lprc('\n');
	if (course[3]==0) 
		lprcat("\t\td)  Applied Wizardry            20 mobuls");
	lprc('\n');
	if (course[4]==0) 
		lprcat("\t\te)  Behavioral Psychology       10 mobuls");
	lprc('\n');
	if (course[5]==0) 
		lprcat("\t\tf)  Faith for Today             10 mobuls");
	lprc('\n');
	if (course[6]==0) 
		lprcat("\t\tg)  Contemporary Dance          10 mobuls");
	lprc('\n');
	if (course[7]==0) 
		lprcat("\t\th)  History of Ularn              5 mobuls");

	lprcat("\n\n\t\tAll courses cost 250 gold pieces.");
	cursor(30,18);
	lprcat("You are presently carrying ");
}

oschool()
{
	register int i;

	long time_used;
	nosignal = 1; /* disable signals */
	sch_hed();
	while (1) {
		cursor(57,18); 
		lprintf("%d gold pieces.   ",(long)c[GOLD]); 
		cursors();
		lprcat("\nWhat is your choice ["); 
		standout("escape");
		lprcat(" to leave] ? ");  
		yrepcount=0;
		i=0;  
		while ((i<'a' || i>'h') && (i!='\33') && (i!=12)) 
			i=getcharacter();
		if (i==12) { 
			sch_hed();  
			continue; 
		}
		else if (i=='\33') { 	
			nosignal = 0; 
			drawscreen();  /* enable signals */

			return; 
		}
		lprc(i);
		if (c[GOLD] < 250)  
			nogold();  
		else
			if (course[i-'a']) { 	
				lprcat("\nSorry, but that class is filled."); 
				nap(1000); 
			}
			else if (i <= 'h') {
				c[GOLD] -= 250; 
				time_used=0;
				switch(i) {
				case 'a':
					c[STRENGTH] += 2;  
					c[CONSTITUTION]++;
					lprcat("\nYou feel stronger!");
					cl_line(16,7);
					break;

				case 'b':
					if (course[0]==0) {
						lprcat("\nSorry, but this class has a prerequisite of Fighters Training I");
						c[GOLD]+=250;  
						time_used= -10000;  
						break;
					}
					lprcat("\nYou feel much stronger!");
					cl_line(16,8);
					c[STRENGTH] += 2;  
					c[CONSTITUTION] += 2;  
					break;

				case 'c':
					c[INTELLIGENCE] += 2; 
					lprcat("\nThe task before you now seems more attainable!");
					cl_line(16,9);  
					break;

				case 'd':
					if (course[2]==0) {
						lprcat("\nSorry, but this class has a prerequisite of Introduction to Wizardry");
						c[GOLD]+=250;  
						time_used= -10000;  
						break;
					}
					lprcat("\nThe task before you now seems very attainable!");
					cl_line(16,10);
					c[INTELLIGENCE] += 2;  
					break;

				case 'e':
					c[CHARISMA] += 3;  
					lprcat("\nYou now feel like a born leader!");
					cl_line(16,11);  
					break;

				case 'f':
					c[WISDOM] += 2;  
					lprcat("\nYou now feel more confident that you can find the potion in time!");
					cl_line(16,12);  
					break;

				case 'g':
					c[DEXTERITY] += 3;  
					lprcat("\nYou feel like dancing!");
					cl_line(16,13);  
					break;

				case 'h':
					c[INTELLIGENCE]++;
					lprcat("\nWow!! E = MC^2!!!\n");
					cl_line(16,14);  
					break;
				}
				time_used += coursetime[i-'a']*100;
				if (time_used > 0) {
					gtime += time_used;
					/*remember that he has taken that course*/
					course[i-'a']++;
					/* he regenerated */ 
					c[HP] = c[HPMAX];  
					c[SPELLS] = c[SPELLMAX]; 

					/* cure blindness too!  */
					if (c[BLINDCOUNT])	
						c[BLINDCOUNT]=1;  

					/*	end confusion	*/
					if (c[CONFUSE])	
						c[CONFUSE]=1;	

					/* adjust parameters for time change */
					adjtime((long)time_used);	
				}
				nap(1000);
			}
	}
}

/*
 *	for the first national bank of Ularn
 */
int lasttime=0;	/* last time he was in bank */
obank()
{
	banktitle("    Welcome to the First National Bank of Ularn.");
}
obank2() 
{
banktitle("Welcome to the 8th level branch office of the First National Bank of Ularn.");
}

banktitle(str)
char *str;
{
	nosignal = 1; /* disable signals */
	clear();  
	lprcat(str);
	if (outstanding_taxes>0) {
		register int i;
lprcat("\n\nThe Ularn Revenue Service has ordered that your account be frozen until all\n"); 
		beep();
lprintf("levied taxes have been paid.  They have also told us that you owe %d gp in\n",(long)outstanding_taxes);
lprcat("taxes, and we must comply with them. We cannot serve you at this time.  Sorry.\n");
lprcat("We suggest you go to the LRS office and pay your taxes.\n");
		cursors();	
		lprcat("\nPress "); 
		standout("escape"); 
		lprcat(" to leave: "); 
		lflush();
		i=0;
		while (i!='\33') 
			i=getcharacter();
		drawscreen();  
		nosignal = 0; /* enable signals */

		return;
	}
	lprcat("\n\n\tGemstone\t      Appraisal\t\tGemstone\t      Appraisal");
	obanksub();		
	nosignal = 0; /* enable signals */
	drawscreen();
}

/*
 *	function to put interest on your bank account
 */
ointerest()
{
	register int i;

	if (c[BANKACCOUNT]<0) 
		c[BANKACCOUNT] = 0;
	else if ((c[BANKACCOUNT]>0) && (c[BANKACCOUNT]<1000000)) {
		i = (gtime-lasttime)/100; /* # mobuls elapsed */
		while ((i-- > 0) && (c[BANKACCOUNT]<1000000))
			c[BANKACCOUNT] += c[BANKACCOUNT]/250;
		if (c[BANKACCOUNT]>1000000) 
			c[BANKACCOUNT]=1000000; /* interest limit */
	}
	lasttime = (gtime/100)*100;
}

static short gemorder[26]={0};	/* the reference to screen location for each */
static long gemvalue[26]={0};	/* the appraisal of the gems */

obanksub()
{
	long amt;
	register int i,k;
	ointerest();	/* credit any needed interest */

	if (level==8) c[TELEFLAG] = 0;

	for (k=i=0; i<26; i++)
		switch(iven[i]) {
		case OLARNEYE: 
		case ODIAMOND: 
		case OEMERALD: 
		case ORUBY: 
		case OSAPPHIRE: 
			if (iven[i]==OLARNEYE) { 	
				gemvalue[i]=250000-((gtime*7)/100)*100;
				if (gemvalue[i]<50000) 
					gemvalue[i]=50000;
			}
			else gemvalue[i] = (255&ivenarg[i])*100;
			gemorder[i]=k;
			cursor( (k%2)*40+1 , (k>>1)+4 );
			lprintf("%c) %s",i+'a',objectname[iven[i]]);
			cursor( (k%2)*40+33 , (k>>1)+4 );
			lprintf("%5d",(long)gemvalue[i]);  
			k++;
		};
	cursor(31,17); 
	lprintf("You have %8d gold pieces in the bank.",(long)c[BANKACCOUNT]);
	cursor(40,18); 
	lprintf("You have %8d gold pieces",(long)c[GOLD]);
	if (c[BANKACCOUNT]+c[GOLD] >= 500000)
		lprcat("\nNote:  Ularndom law states that only deposits under 1,000,000gp  can earn interest.");
	while (1) {
		cl_dn(1,20);
		lprcat("\nYour wish? [("); 
		standout("d"); 
		lprcat(") deposit, (");
		standout("w"); 
		lprcat(") withdraw, ("); 
		standout("s");
		lprcat(") sell a stone, or "); 
		standout("escape"); 
		lprcat("]  ");
		yrepcount=0;
		i=0; 
		while (i!='d' && i!='w' && i!='s' && i!='\33') 
			i=getcharacter();
		switch(i) {
		case 'd':
			lprcat("deposit\nHow much? ");	
			amt = readnum((long)c[GOLD]);
			if (amt < 0) { 
				lprcat("\nSorry, but we can't take negative gold!"); 
				nap(2000); 
				amt=0; 
			} 
			else if (amt>c[GOLD]) { 	
				lprcat("  You don't have that much."); 
				nap(2000); 
			} 
			else { 	
				c[GOLD] -= amt;  
				c[BANKACCOUNT] += amt; 
			}
			break;

		case 'w':
			lprcat("withdraw\nHow much? ");	
			amt = readnum((long)c[BANKACCOUNT]);
			if (amt<0) { 	
				lprcat("\nSorry, but we don't have any negative gold!");  
				nap(2000); 
				amt=0; 
			}
			else if (amt > c[BANKACCOUNT]) { 	
				lprcat("\nYou don't have that much in the bank!"); 
				nap(2000); 
			}
			else { 	
				c[GOLD] += amt;  
				c[BANKACCOUNT] -= amt; 
			}		
			break;

		case 's':
			lprcat("\nWhich stone would you like to sell? ");
			i=0; 
			while ((i<'a' || i>'z') && i!='*') 
				i=getcharacter();
			if (i=='*')
				for (i=0; i<26; i++) { 	
					if (gemvalue[i]) {
						if (iven[i]==OLARNEYE) {
						monstnamelist[DEMONLORD]=' ';
						monstnamelist[DEMONLORD+1]=' ';
						monstnamelist[DEMONLORD+2]= ' ';
						monstnamelist[DEMONLORD+3]= ' ';
						monstnamelist[DEMONLORD+4]= ' ';
						monstnamelist[DEMONLORD+5]= ' ';
						monstnamelist[DEMONLORD+6]= ' ';
						monstnamelist[DEMONPRINCE]= ' ';
						monstnamelist[LUCIFER] = ' ';
						}
						c[GOLD]+=gemvalue[i];  
						iven[i]=0;
						gemvalue[i]=0;	
						k = gemorder[i];
						cursor( (k%2)*40+1 , (k>>1)+4 );
						lprintf("%39s","");
					}
				}
			else { 
				if (gemvalue[i=i-'a']==0) {
				  lprintf("\nItem %c is not a gemstone!",i+'a');
					nap(2000); 
					break;
				}
				if (iven[i]==OLARNEYE) {
					monstnamelist[DEMONLORD]=' ';
					monstnamelist[DEMONLORD+1]=' ';
					monstnamelist[DEMONLORD+2]= ' ';
					monstnamelist[DEMONLORD+3]= ' ';
					monstnamelist[DEMONLORD+4]= ' ';
					monstnamelist[DEMONLORD+5]= ' ';
					monstnamelist[DEMONLORD+6]= ' ';
					monstnamelist[DEMONPRINCE]= ' ';
					monstnamelist[LUCIFER] = ' ';
				}
				c[GOLD]+=gemvalue[i];  
				iven[i]=0;
				gemvalue[i]=0;	
				k = gemorder[i];
				cursor( (k%2)*40+1 , (k>>1)+4 ); 
				lprintf("%39s","");
			}
			break;
		case '\33':
			return;
		};
		cursor(40,17); 
		lprintf("%8d",(long)c[BANKACCOUNT]);
		cursor(49,18); 
		lprintf("%8d",(long)c[GOLD]);
	}
}

/*
	subroutine to appraise any stone for the bank
 */
appraise(gemstone)
int gemstone;
{
	register int j,amt;

	for (j=0; j<26; j++)
		if (iven[j]==gemstone) {
			lprintf("\nI see you have %s",objectname[gemstone]);
			if (gemstone==OLARNEYE) 
				lprcat("  I must commend you.  I didn't think\nyou could get it.");
			lprcat("  Shall I appraise it for you? ");  
			yrepcount=0;
			if (getyn()=='y') {
				lprcat("yes.\n  Just one moment please \n");  
				nap(1000);
				if (gemstone==OLARNEYE) {
					amt = 250000-((gtime*7)/100)*100;
					if (amt<50000) amt=50000;
				}
				else amt = (255 & ivenarg[j]) * 100;
				lprintf("\nI can see this is an excellent stone, It is worth %d",(long)amt);
				lprcat("\nWould you like to sell it to us? ");  
				yrepcount=0;
				if (getyn()=='y') { 
					lprcat("yes\n"); 
					c[GOLD]+=amt;  
					iven[j]=0; 
				}
				else lprcat("no thank you.\n");
				if (gemstone==OLARNEYE) lprcat("It is, of course, your privilege to keep the stone\n"); 
			}
			else lprcat("no\nO. K.\n");
		}
}
/*
	function for the trading post
 */
otradhead()
{
	clear();
lprcat("Welcome to the Ularn Trading Post.  We buy items that explorers no longer find\n");
lprcat("useful.  Since the condition of the items you bring in is not certain,\n");
lprcat("and we incur great expense in reconditioning the items, we usually pay\n");
lprcat("only 20% of their value were they to be new.  If the items are badly\n");
lprcat("damaged, we will pay only 10% of their new value.\n\n");
}

otradepost()
{
	int i,j,value,isub,izarg;

	dnditm = dndcount = 0;
	nosignal = 1; /* disable signals */
	resetscroll();	
	otradhead();
	while (1) {
		lprcat("\nWhat item do you want to sell to us ["); 
		standout("*");
		lprcat(" for list, or "); 
		standout("escape"); 
		lprcat("] ? ");
		i=0; 
		while (i>'z' || (i<'a' && i!='*' && i!='\33' && i!='.')) 
			i=getcharacter();
		if (i == '\33') { 	
			setscroll(); 
			recalc(); 
			drawscreen(); 
			nosignal=0; /* enable signals */

			return; 
		}
		isub = i - 'a';		
		j=0;
		if (iven[isub]==OSCROLL) 
			if (scrollname[ivenarg[isub]][0]==0) { 	
				j=1; 
				cnsitm(); 
			}	/* can't sell unidentified item */
		if (iven[isub]==OPOTION) 
			if (potionname[ivenarg[isub]][0]==0) { 	
				j=1; 
				cnsitm(); 
			}	/* can't sell unidentified item */
		if (!j)
			if (i=='*') { 	
				clear(); 
				qshowstr(); 
				otradhead(); 
			}
			else  if (iven[isub]==0)  
				lprintf("\nYou don't have item %c!",isub+'a');
			else {
				for (j=0; j<maxitm; j++)
					if ((itm[j].obj == iven[isub]) || 
					    (iven[isub] == ODIAMOND) || 
					    (iven[isub] == ORUBY) || 
					    (iven[isub] == OEMERALD) || 
					    (iven[isub] == OSAPPHIRE)) {
						srcount=0;  
						show3(isub);	/* show what the item was */
						if ((iven[isub] == ODIAMOND) 
						    || (iven[isub] == ORUBY) 
						    || (iven[isub] == OEMERALD) 
						    || (iven[isub] == OSAPPHIRE))
							value = 20*ivenarg[isub];
						else if ((itm[j].obj == OSCROLL) 
						    || (itm[j].obj == OPOTION))  
							value = 2*itm[j+ivenarg[isub]].price;
						else {
							izarg=ivenarg[isub];  
							/* appreciate if a +n object */
							value = itm[j].price;	
							if (izarg >= 0) value *= 2;
							while ((izarg-- > 0) && ((value=14*(67+value)/10) < 500000))
								;
						}
						lprintf("\nItem (%c) is worth %d gold pieces to us.  Do you want to sell it? ",i,(long)value);
						yrepcount=0;
						if (getyn()=='y') {
							lprcat("yes\n"); 
							c[GOLD]+=value;
							if (c[WEAR] == isub) c[WEAR] = -1;
							if (c[WIELD] == isub) c[WIELD] = -1;
							if (c[SHIELD] == isub) c[SHIELD] = -1;
							adjustcvalues(iven[isub],ivenarg[isub]);
							iven[isub]=0;
						}
						else lprcat("no thanks.\n");
						j = maxitm+100;	/* get out of the inner loop */
					}
				if (j <= maxitm+2) lprcat("\nSo sorry, but we are not authorized to accept that item.");
			}
	}
}

cnsitm()
{ 
	lprcat("\nSorry, we can't accept unidentified objects."); 
}

/*
 *	for the Ularn Revenue Service
 */
olrs()
{
	register int i,first;
	long amt;

	first = nosignal = 1; /* disable signals */
	clear();  
	resetscroll(); 
	cursor(1,4);
	if (outstanding_taxes)
		if (cheat) {
lprcat("Sorry, but it seems you are trying to pay off your taxes by cheating!");
			lprcat("\n\n\tpress [escape] to exit the office.");
			cursors();
			i=0; 
			while (i!='\33') 
				i=getcharacter();
			nosignal = 0; /* enable signals */
			setscroll(); 
			drawscreen();	
			return;
		}
	lprcat("Welcome to the Ularn Revenue Service district office.  How can we help you?");
	while (1) {
		if (first) { 
			first=0; 
			goto nxt; 
		}
		cursor(1, 20);
		lprcat("\n\nYour wish? [(");
		standout("p");
		lprcat(") pay taxes, or ");
		standout("escape");
		lprcat("]  ");  
		yrepcount=0;
		i=0; 
		while (i!='p' && i!='\33') 
			i=getcharacter();
		switch(i) {
		case 'p':	
			lprcat("pay taxes\nHow much? "); 
			amt = readnum((long)c[GOLD]);
			if (amt<0) { 
			lprcat("\nSorry, but we can't take negative gold\n"); 
				amt=0; 
			} 
			else
				if (amt>c[GOLD])	
					lprcat("  You don't have that much.\n");
				else  c[GOLD] -= paytaxes((long)amt);
			break;
		case '\33':	
			nosignal = 0; /* enable signals */
			setscroll(); 
			drawscreen();	
			return;
		};

nxt:	
		cursor(1,6);
		if (outstanding_taxes>0)
	lprintf("You presently owe %d gp in taxes.  ",(long)outstanding_taxes);
		else
			lprcat("You do not owe us any taxes.           ");
		cursor(1,8);
		if (c[GOLD]>0)
			lprintf("You have %6d gp.    ",(long)c[GOLD]);
		else
			lprcat("You have no gold pieces.  ");
	}
}


nomore()
{
	lprcat("\nSorry man, I ain't got no more of that shit.");
	lflush(); 
	nap(2200); 
}
nocash()
{ 	
	lprcat("\nWhattaya trying to pull on me? You aint got the cash!");
	lflush(); 
	nap(1200);
}

/*
	Dealer McDopes Pad
 */
/*
	function to display the header info for the pad
 */
char drug[5]={0};
pad_hd()
{
	clear();
	lprcat("Hey man, welcome to Dealer McDope's Pad!  I gots the some of the finest shit\n");
	lprcat("you'll find anywhere in Ularn - check it out...\n\n\n");
	lprcat("\t\t    The Stash\t\t\tThe Cash\n\n");

	/*line 7 of crt*/
	if (drug[0]==0) lprcat("\t\ta)  Killer Speed\t\t100 bucks");
	lprc('\n');
	if (drug[1]==0) lprcat("\t\tb)  Groovy Acid\t\t\t250 bucks");
	lprc('\n');
	if (drug[2]==0) lprcat("\t\tc)  Monster Hash\t\t500 bucks");
	lprc('\n');
	if (drug[3]==0) lprcat("\t\td)  Trippy Shrooms\t\t1000 bucks");
	lprc('\n');
	if (drug[4]==0) lprcat("\t\te)  Cool Coke\t\t\t5000 bucks");
	lprc('\n');

	cursor(30,18);
	lprcat("Looks like you got about ");
}

opad()
{
	register int i,flag;

	nosignal = 1; /* disable signals */

	pad_hd();

	while (1) {
		cursor(57,18); 
		lprintf("%d bucks on you.   ",(long)c[GOLD]); 
		cursors();
		lprcat("\nSo, whatdya want [escape");
		lprcat(" to split] ? ");  
		yrepcount=0;

		i=flag=0;

		while ((i<'a' || i>'e') && (i!='\33') && (i!=12)) 
			i=getcharacter();

		if (i==12) { 
			pad_hd();  
			continue; 
		}
		else if (i=='\33') { 	
			nosignal = 0; 
			drawscreen();  /* enable signals */
			return; 
		}
		lprc(i);
		if (drug[i-'a']) { 	
			nomore();
			flag++;
		} 
		else
			switch(i) {
			case 'a': 
				if (c[GOLD] < 100) {
					nocash();
					flag++;
				} 
				break;
			case 'b': 
				if (c[GOLD] < 250) {
					nocash();
					flag++;
				} 
				break;
			case 'c': 
				if (c[GOLD] < 500) {
					nocash();
					flag++;
				} 
				break;
			case 'd': 
				if (c[GOLD] < 1000) {
					nocash();
					flag++;
				} 
				break;
			case 'e': 
				if (c[GOLD] < 5000) {
					nocash();
					flag++;
				} 
				break;
			}
		if (flag>0) continue;
		switch(i) {
		case 'a':	/* speed */
			if (snag(OSPEED)) {
				c[GOLD] -= 100; 
				cl_line(16,7);
				flag++;
			}
			break;

		case 'b':	/* acid */
			if (snag(OACID)) {
				c[GOLD] -= 250; 
				cl_line(16,8);
				flag++;
			}
			break;

		case 'c':	/* hash */
			if (snag(OHASH)) {
				c[GOLD] -= 500; 
				cl_line(16,9);  
				flag++;
			}
			break;

		case 'd':	/* shrooms */
			if (snag(OSHROOMS)) {
				c[GOLD] -= 1000; 
				cl_line(16,10);
				flag++;
			}
			break;

		case 'e':	/* coke */
			if (snag(OCOKE)) {
				c[GOLD] -= 5000; 
				cl_line(16,11);  
				flag++;
			}
			break;
		} /* end switch */

		/*remember that he has snagged that drug*/
		if (flag) 
			drug[i-'a']++;
		nap(1000);
	} /*end while(1) */
} /* end pad() */

snag(itm)
int itm;
{
	int i,limit;

	if ( (limit = 15 + (c[LEVEL] >> 1)) > 26) limit=26;

	for(i=0;i<limit;i++)
		if (iven[i]==0) {
			iven[i]=itm;
			ivenarg[i]=0;
			limit=0;
			lprcat("\nOk, here ya go");
			show3(i);
			return(1);
		}
	lprcat("\nHey, you can't carry anymore");
	return(0);
}

int char_picked = 0;

pick_char(foo)
int foo;
{
	int i;

	nosignal = 1; /* disable signals */

    	if (foo == 0) {
		clear();
		lprcat("\t\tThe Addiction of Ularn\n\n");
		lprcat("Pick a character class...\n\n\n");
		lprcat("\t\t    Character\n\n");

		lprcat("\t\ta)  Ogre");
		lprc('\n');
		lprcat("\t\tb)  Wizard");
		lprc('\n');
		lprcat("\t\tc)  Klingon");
		lprc('\n');
		lprcat("\t\td)  Elf");
		lprc('\n');
		lprcat("\t\te)  Rogue");
		lprc('\n');
		lprcat("\t\tf)  Geek");
		lprc('\n');
		lprcat("\t\tg)  Dwarf");
		lprc('\n');
		lprcat("\t\th)  Rambo");
		lprc('\n');

		cursors();
		lprcat("\nSo, what are ya? ");
		lflush();

		while (i<'a' || i>'h') 
			i=getcharacter();

  	 } else { 
		i = foo;
		c[SHIELD] = c[WEAR] = c[WIELD] = -1;
   	}
	switch(i) {
	case 'a': 	/* Ogre */
		strcpy(char_class, "Ogre");
		spelknow[1]=1;	/* mle */
		c[SPELLMAX]=c[SPELLS]=1;
		c[HPMAX]=c[HP]=16;
		c[0] = 18;	/* strength */
		c[1] = 4;	/* intelligence */
		c[2] = 6;	/* wisdom */
		c[3] = 16;	/* constitution */
		c[4] = 6;	/* dexterity */
		c[5] = 4;	/* charisma */
		iven[0]=OPOTION;
		ivenarg[0]=rund(6);
		iven[1]=OPOTION;
		ivenarg[1]=rund(6);
		c[WIELD]=c[WEAR]= -1;
		break;
	case 'b': 	/* Wizard */
		strcpy(char_class, "Wizard");
		spelknow[1]=1;	/* mle */
		spelknow[4]=1;	/* chm */
		c[SPELLMAX]=c[SPELLS]=2;
		c[HPMAX]=c[HP]=8;
		c[0] = 8;	/* strength */
		c[1] = 16;	/* intelligence */
		c[2] = 16;	/* wisdom */
		c[3] = 6;	/* constitution */
		c[4] = 6;	/* dexterity */
		c[5] = 8;	/* charisma */
		iven[0]=OPOTION;
		ivenarg[0]=19; /* potion of treasure detection */
		iven[1]=OSCROLL;
		ivenarg[1]=rund(6); 
		iven[2]=OSCROLL;
		ivenarg[2]=rund(6);
		c[WIELD]=c[WEAR]= -1;
		break;
	case 'c': 	/* Klingon */
		strcpy(char_class, "Klingon");
		spelknow[5]=1;	/* ssp */
		c[SPELLMAX]=c[SPELLS]=1;
		c[HPMAX]=c[HP]=14;
		c[0] = 14;	/* strength */
		c[1] = 12;	/* intelligence */
		c[2] = 4;	/* wisdom */
		c[3] = 12;	/* constitution */
		c[4] = 8;	/* dexterity */
		c[5] = 3;	/* charisma */
		iven[0]=OSTUDLEATHER;
		ivenarg[0]=0;
		iven[1]=OPOTION;
		ivenarg[1]=rund(6);
		c[WIELD]= -1;
		c[WEAR] = 0;
		break;
	case 'd': 	/* Elf */
		strcpy(char_class, "Elf");
		spelknow[0]=1;
		c[SPELLS]=1;
		c[SPELLMAX]=2;
		c[HPMAX]=c[HP]=8;
		c[0] = 8;	/* strength */
		c[1] = 14;	/* intelligence */
		c[2] = 12;	/* wisdom */
		c[3] = 8;	/* constitution */
		c[4] = 8;	/* dexterity */
		c[5] = 14;	/* charisma */
		iven[0]=OLEATHER;
		ivenarg[0]=0;
		iven[1]=OSCROLL;
		ivenarg[1]=rund(6);
		c[WIELD]= -1;
		c[WEAR]=0;
		break;
	case 'e':  	/* Rogue */
		strcpy(char_class, "Rogue");
		spelknow[1]=1; 
		c[SPELLMAX]=c[SPELLS]=1;
		c[HPMAX]=c[HP]=12;	
		c[0] = 8;	/* strength */
		c[1] = 12;	/* intelligence */
		c[2] = 8;	/* wisdom */
		c[3] = 10;	/* constitution */
		c[4] = 14;	/* dexterity */
		c[5] = 6;	/* charisma */
		iven[0]=OLEATHER; 
		iven[1]=ODAGGER;
		ivenarg[1]=ivenarg[0]=c[WEAR]=0;  
		c[WIELD]=1;
		iven[2]=OSCROLL;
		ivenarg[2]=14;	/* stealth */
		break;
	case 'f':  	/* Geek */
		strcpy(char_class, "Geek");
		spelknow[0]=1; 
		spelknow[1]=1; 
		c[SPELLMAX]=c[SPELLS]=1;
		c[HPMAX]=c[HP]=10;	
		c[0] = 12;	/* strength */
		c[1] = 12;	/* intelligence */
		c[2] = 12;	/* wisdom */
		c[3] = 12;	/* constitution */
		c[4] = 12;	/* dexterity */
		c[5] = 12;	/* charisma */
		iven[0]=OLEATHER; 
		iven[1]=ODAGGER;
		ivenarg[1]=ivenarg[0]=c[WEAR]=0;  
		c[WIELD]=1;
		break;
	case 'g':  	/* Dwarf*/
		strcpy(char_class, "Dwarf");
		spelknow[0]=1; 
		c[SPELLMAX]=c[SPELLS]=1;
		c[HPMAX]=c[HP]=12;	
		c[0] = 16;	/* strength */
		c[1] = 6;	/* intelligence */
		c[2] = 8;	/* wisdom */
		c[3] = 16;	/* constitution */
		c[4] = 4;	/* dexterity */
		c[5] = 4;	/* charisma */
		iven[0]=OSPEAR;
		ivenarg[0]=c[WIELD]=0;
		break;
	case 'h':  	/* Rambo */
		strcpy(char_class, "Rambo");
		c[SPELLMAX]=c[SPELLS]=0;
		c[HPMAX]=c[HP]=1;
		c[0] = 3;	/* strength */
		c[1] = 3;	/* intelligence */
		c[2] = 3;	/* wisdom */
		c[3] = 3;	/* constitution */
		c[4] = 3;	/* dexterity */
		c[5] = 3;	/* charisma */
		iven[0]=OLANCE;
		ivenarg[0]=c[WIELD]=0;
		c[LANCEDEATH] = 1;
		break;
	} /* end switch */
	nosignal = 0;
} /* end pick_char */