|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 29350 (0x72a6)
Types: TextFile
Names: »store.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Ularn/store.c«
/* 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(i = 0; i < 26; i++)
gemvalue[i] = 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 */