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 m

⟦65d235e56⟧ TextFile

    Length: 9356 (0x248c)
    Types: TextFile
    Names: »moreobj.c«

Derivation

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

TextFile

/* moreobj.c
 *
 *	Routines in this file:
 *
 *	oaltar()
 *	othrone()
 *	ochest()
 *	ofountain()
 */
#include "header.h"

/*
 *	******
 *	OALTAR
 *	******
 *
 *	subroutine to process an altar object
 */
oaltar()
{
	unsigned long k;

	lprcat("\nDo you (p) pray  (d) desecrate"); 
	iopts();
	while (1) {
		while (1) switch(getcharacter()) {
		case 'p':	
		     lprcat(" pray\nDo you (m) give money or (j) just pray? ");
			while (1) switch(getcharacter()) {
			case 'j':	
				if (rnd(100)<75) 
					lprcat("\nnothing happens");
				else if (rnd(13)<4) ohear();
				else if (rnd(43) <= 10) {
					if (c[WEAR]) 
						lprcat("\nYou feel your armor vibrate for a moment");
					enchantarmor();
					return;
				}
				else if (rnd(43) <= 10) {
					if (c[WIELD]) 
						lprcat("\nYou feel your weapon vibrate for a moment");
					enchweapon(); 
					return;
				}
				else createmonster(makemonst(level+2));
				return;

			case 'm':
donate:
				cursor(1,24);  
				cltoeoln();
				cursor(1,23);  
				cltoeoln();
				lprcat("how much do you donate? ");
				k = readnum(c[GOLD]);
				if (c[GOLD] < k) { 	
					lprcat("You don't have that much!");
					nap(1001);
					goto donate;
				}
				if ( (k==0 || (k<(c[GOLD]/10)) )
				    && rnd(60)<30) {
lprcat("Cheapskate! The Gods are insulted at such a meager offering!");
					forget();
					createmonster(DEMONPRINCE);
					c[AGGRAVATE] += 1500; 
					return;
				}
				c[GOLD] -= k;
				if (k < c[GOLD]/10 || k<rnd(50)) { 
					createmonster(makemonst(level+2)); 
					c[AGGRAVATE] += 500; 
				}
				else if (rnd(101) > 50)	{ 
					ohear(); 
					return; 
				}
				else if (rnd(43) >= 33) {
					if (c[WEAR]) 
			lprcat("You feel your armor vibrate for a moment");
					enchantarmor();
					enchantarmor();
					return;
				}
				else if (rnd(43) >= 33) {
					if (c[WIELD]) 
			lprcat("You feel your weapon vibrate for a moment");
					enchweapon(); 
					enchweapon(); 
					return;
				}
				else	lprcat("Thank You.");
				bottomline();	
				return;
			} /* end case j or m */

		case 'd': 
			lprcat(" desecrate");
			if (rnd(100)<60) { 
				createmonster(makemonst(level+3)+8); 
				c[AGGRAVATE] += 2500; 
			}
			else if(rnd(100)<5) raiselevel();
			else if (rnd(101)<30) {
	lprcat("\nThe altar crumbles into a pile of dust before your eyes");
				forget();    /*remember to destroy the altar*/
			}
			else lprcat("\nnothing happens");
			return;

		case 'i':
		case '\33': 
			ignore();
			if (rnd(100)<30) { 
				createmonster(makemonst(level+2)); 
				c[AGGRAVATE] += rnd(450); 
			}
			else	lprcat("\nnothing happens");
			return;
		} /* end pray, des, ignore */
	}
} /* end oaltar */

/*
	function to cast a +3 protection on the player
 */
ohear()
{
	lprcat("You have been heard!");
	if (c[ALTPRO]==0) c[MOREDEFENSES]+=5;
	c[ALTPRO] += 800;	/* protection field */
	bottomline();
}

/*
	*******
	OTHRONE
	*******

	subroutine to process a throne object
 */
othrone(arg)
int arg;
{
	register int i,k;

	lprcat("\nDo you (p) pry off jewels, (s) sit down"); 
	iopts();
	while (1) {
		while (1) switch(getcharacter()) {
		case 'p':	
			lprcat(" pry off");  
			k=rnd(101);
			if (k<25) {
				for (i=0; i<rnd(4); i++) 
					creategem(); /*gems pop off the throne*/
				item[playerx][playery]=ODEADTHRONE;
				know[playerx][playery]=0;
			}
			else if (k<40 && arg==0) {
				createmonster(GNOMEKING);
				item[playerx][playery]=OTHRONE2;
				know[playerx][playery]=0;
			}
			else lprcat("\nnothing happens");
			return;

		case 's': 	
			lprcat(" sit down");  
			k=rnd(101);
			if (k<30 && arg==0) {
				createmonster(GNOMEKING);
				item[playerx][playery]=OTHRONE2;
				know[playerx][playery]=0;
			}
			else if (k<35) {
			    lprcat("\nZaaaappp!  You've been teleported!\n"); 
				beep(); 
				oteleport(0); 
			}
			else lprcat("\nnothing happens");
			return;

		case 'i':
		case '\33': 
			ignore(); 
			return;
		};
	}
}

odeadthrone()
{
	register int k;

	lprcat("\nDo you (s) sit down"); 
	iopts();
	while (1) {
		while (1) switch(getcharacter()) {
		case 's': 	
			lprcat(" sit down");  
			k=rnd(101);
			if (k<15) raiselevel();
			else if (k<35) {
			      lprcat("\nZaaaappp!  You've been teleported!\n"); 
				beep(); 
				oteleport(0); 
			}
			else lprcat("\nnothing happens");
			return;

		case 'i':
		case '\33': 
			ignore(); 
			return;
		};
	}
}

/*
	******
	OCHEST
	******

	subroutine to process a chest object
 */
ochest()
{
	register int i,k;

	lprcat("\nDo you (t) take it, (o) try to open it"); 
	iopts();
	while (1) {
		while (1) switch(getcharacter()) {
		case 'o':	
			lprcat(" open it");  
			k=rnd(101);
			if (k<40) {
				lprcat("\nThe chest explodes as you open it"); 
				beep();
				i = rnd(10);  
				lastnum=281;  /* in case he dies */
			lprintf("\nYou suffer %d hit points damage!",(long)i);
				checkloss(i);
				switch(rnd(10))	{
				case 1:	
					c[ITCHING]+= rnd(1000)+100;
		lprcat("\nYou feel an irritation spread over your skin!");
					beep();
					break;

				case 2:	
					c[CLUMSINESS]+= rnd(1600)+200;
			lprcat("\nYou begin to lose hand to eye coordination!");
					beep();
					break;

				case 3:	
					c[HALFDAM]+= rnd(1600)+200;
	lprcat("\nYou suddenly feel sick and BARF all over your shoes!");	
					beep();
					break;
				};
				item[playerx][playery]=know[playerx][playery]=0;
				if (rnd(100)<69) 
					creategem(); /* gems from the chest */
				dropgold(rnd(110*iarg[playerx][playery]+200));
				for (i=0; i<rnd(4); i++) 
					something(iarg[playerx][playery]+2);
			}
			else lprcat("\nnothing happens");
			return;

		case 't':	
			lprcat(" take");
			if (take(OCHEST,iarg[playerx][playery])==0)
				item[playerx][playery]=know[playerx][playery]=0;
			return;

		case 'i':
		case '\33': 
			ignore(); 
			return;
		};
	}
}

/*
	*********
	OFOUNTAIN
	*********
 */

ofountain()
{
	register int x;

	cursors();
	lprcat("\nDo you (d) drink, (w) wash yourself"); 
	iopts();
	while (1) switch(getcharacter()) {
	case 'd':	
		lprcat("drink");
		if (rnd(1501)<4) {
		lprcat("\nOops!  You seem to have caught the dreadful sleep!");
			beep(); 
			lflush();  
			sleep(3);  
			died(280); 
			return;
		}
		x = rnd(100);
		if (x==1) raiselevel();
		else if (x < 11) { 	
			x=rnd((level<<2)+2);
lprintf("\nBleah! The water tasted like stale gatorade! You suffer %d hit points!", (long)x);
			lastnum=273; 
			losehp(x); 
			bottomline();  
			cursors();
		}
		else if (x<14) { 	
			c[HALFDAM] += 200+rnd(200);
			lprcat("\nThe water makes you vomit");
		}
		else if (x<17) 
			quaffpotion(17); /* giant strength */
		else if (x < 45)
			lprcat("\nnothing seems to have happened");
		else if (rnd(3) != 2)
			fntchange(1);	/*change char levels upward*/
		else
			fntchange(-1);	/*change char levels downward*/
		if (rnd(12)<3) {      
			lprcat("\nThe fountains bubbling slowly quiets");
			/* dead fountain */
			item[playerx][playery]=ODEADFOUNTAIN; 
			know[playerx][playery]=0;
		}
		return;

	case '\33':
	case 'i':	
		ignore();  
		return;
	case 'w':	
		lprcat("wash yourself");
		if (rnd(100) < 11) { 	
			x=rnd((level<<2)+2);
lprintf("\nOh no!  The water burns like acid!  You suffer %d hit points!",(long)x);
			lastnum=273; 
			losehp(x); 
			bottomline();  
			cursors();
		}
		else if (rnd(100) < 29)
			lprcat("\nYou are now clean!");
		else if (rnd(100) < 31)
		  lprcat("\nThis water needs soap!  The dirt didn't come off!");
		else if (rnd(100) < 34)
			createmonster(WATERLORD); 
		else lprcat("\nnothing seems to have happened");
		return;
	}
}

/*
	a subroutine to raise or lower character levels
	if how > 0 they are raised   if how < 0 they are lowered
 */
fntchange(how)
int how;
{
	register long j;

	lprc('\n');
	switch(rnd(9))
	{
	case 1:	
		lprcat("Your strength");	
		fch(how,&c[0]);	
		break;
	case 2:	
		lprcat("Your intelligence");	
		fch(how,&c[1]);	
		break;
	case 3:	
		lprcat("Your wisdom");
		fch(how,&c[2]);	
		break;
	case 4:	
		lprcat("Your constitution");
		fch(how,&c[3]);	
		break;
	case 5:	
		lprcat("Your dexterity");
		fch(how,&c[4]);	
		break;
	case 6:	
		lprcat("Your charm");
		fch(how,&c[5]);	
		break;
	case 7:	
		j=rnd(level+1);
		if (how < 0) { 	
			lprintf("You lose %d hit point",(long)j);  
			if (j>1) lprcat("s!"); 
			else lprc('!'); 
			losemhp((int)j); 
		}
		else { 	
			lprintf("You gain %d hit point",(long)j);  
			if (j>1) lprcat("s!"); 
			else lprc('!'); 
			raisemhp((int)j); 
		}
		bottomline();		
		break;
	case 8:	
		j=rnd(level+1);
		if (how > 0) { 	
			lprintf("You just gained %d spell",(long)j);  
			raisemspells((int)j);
			if (j>1) lprcat("s!"); 
			else lprc('!');
		}
		else { 	
			lprintf("You just lost %d spell",(long)j);
			losemspells((int)j);
			if (j>1) lprcat("s!"); 
			else lprc('!');
		}
		bottomline();	
		break;
	case 9:	
		j = 5*rnd((level+1)*(level+1));
		if (how < 0) { 	
			lprintf("You just lost %d experience point",(long)j);
			if (j>1) lprcat("s!"); 
			else lprc('!'); 
			loseexperience((long)j);
		}
		else { 	
			lprintf("You just gained %d experience point",(long)j);
			if (j>1) lprcat("s!"); 
			else lprc('!'); 
			raiseexperience((long)j);
		}
		break;
	}
	cursors();
}

/*
	***
	FCH
	***

	subroutine to process an up/down of a character attribute for ofountain
 */
fch(how,x)
int how;
long *x;
{
	if (how < 0)	 { 	
		lprcat(" went down by one!");	
		--(*x); 
	} 
	else { 	
		lprcat(" went up by one!");	
		(*x)++; 
	}
	bottomline();
}