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 r

⟦132ff24f3⟧ TextFile

    Length: 3702 (0xe76)
    Types: TextFile
    Names: »regen.c«

Derivation

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

TextFile

/* regen.c */
#include "header.h"
/*
	*******
	REGEN()
	*******
	regen()

	subroutine to regenerate player hp and spells
 */
regen()
{
	register int i,flag;
	register long *d;

	d = c;
	if (d[TIMESTOP])  { 
		if(--d[TIMESTOP]<=0) 
			bottomline();  
		return; 
	}	/* for stop time spell */
	flag=0;

	if (d[STRENGTH]<3) { 
		d[STRENGTH]=3; 
		flag=1; 
	}
	if ((d[HASTESELF]==0) || ((d[HASTESELF] & 1) == 0))
		gtime++;

	if (d[HP] != d[HPMAX])
		if (d[REGENCOUNTER]-- <= 0)	/*regenerate hit points	*/
		{
			d[REGENCOUNTER] = 22 + (d[HARDGAME]<<1) - d[LEVEL];
			if ((d[HP] += d[REGEN]) > d[HPMAX])  
				d[HP] = d[HPMAX];
			bottomhp();
		}

	if (d[SPELLS] < d[SPELLMAX])		/*regenerate spells	*/
		if (d[ECOUNTER]-- <= 0) {
			d[ECOUNTER] = 100+4*(d[HARDGAME]-d[LEVEL]-d[ENERGY]);
			d[SPELLS]++;	
			bottomspell();
		}

	if (d[HERO])	
		if (--d[HERO]<=0) { 
			for (i=0; i<6; i++) 
				d[i] -= 10; 
			flag=1; 
		}
	if (d[COKED])
		if (--d[COKED]<=0) {
			for (i=0; i<6; i++)
				d[i] -= 34;
			flag=1;
		}
	if (d[ALTPRO])	
		if (--d[ALTPRO]<=0) { 
			d[MOREDEFENSES]-=3; 
			flag=1; 
		}
	if (d[PROTECTIONTIME])	
		if (--d[PROTECTIONTIME]<=0) {
			d[MOREDEFENSES]-=2; 
			flag=1; 
		}
	if (d[DEXCOUNT])
		if (--d[DEXCOUNT]<=0)	{ 
			if ( (d[DEXTERITY]-=3) < 3 )
				d[DEXTERITY] = 3;
			flag=1; 
		}
	if (d[STRCOUNT])
		if (--d[STRCOUNT]<=0)	{ 
			d[STREXTRA]-=3; 
			flag=1; 
		}
	if (d[BLINDCOUNT])
		if (--d[BLINDCOUNT]<=0) { 
			cursors();  
			lprcat("\nThe blindness lifts  "); 
			beep(); 
		}
	if (d[CONFUSE])	
		if (--d[CONFUSE]<=0) { 
			cursors();  
			lprcat("\nYou regain your senses"); 
			beep(); 
		}
	if (d[GIANTSTR])
		if (--d[GIANTSTR]<=0) { 
			d[STREXTRA] -= 20; 
			flag=1; 
		}
	if (d[CHARMCOUNT])
		if ((--d[CHARMCOUNT]) <= 0) flag=1;
	if (d[INVISIBILITY])	
		if ((--d[INVISIBILITY]) <= 0) flag=1;
	if (d[CANCELLATION])
		if ((--d[CANCELLATION]) <= 0) flag=1; 
	if (d[WTW])
		if ((--d[WTW]) <= 0) flag=1; 
	if (d[HASTESELF])
		if ((--d[HASTESELF]) <= 0) flag=1;
	if (d[AGGRAVATE])
		--d[AGGRAVATE]; 
	if (d[SCAREMONST])
		if ((--d[SCAREMONST]) <= 0) flag=1; 
	if (d[STEALTH])	
		if ((--d[STEALTH]) <= 0) flag=1; 
	if (d[AWARENESS])		
		if(c[ORB] != 2)
			--d[AWARENESS];
	if (d[HOLDMONST])		
		if ((--d[HOLDMONST]) <= 0) flag=1;
	if (d[HASTEMONST])		
		--d[HASTEMONST];
	if (d[FIRERESISTANCE])	
		if ((--d[FIRERESISTANCE]) <= 0) flag=1;
	if (d[GLOBE])
		if (--d[GLOBE]<=0) { 
			d[MOREDEFENSES]-=10; 
			flag=1; 
		}
	if (d[SPIRITPRO])
		if (--d[SPIRITPRO] <= 0) flag=1;
	if (d[UNDEADPRO])		
		if (--d[UNDEADPRO] <= 0) flag=1;
	if (d[HALFDAM])			
		if (--d[HALFDAM]<=0)  { 
			cursors();  
			lprcat("\nYou now feel better "); 
			beep(); 
		}
	if (d[SEEINVISIBLE])  {
		int i;
		for (i=0;i<26;i++)
			if (iven[i]==OAMULET) {
				i=999;
				break;
			}
		if (i!=999)
			if (--d[SEEINVISIBLE]<=0) {
				monstnamelist[INVISIBLESTALKER] = ' ';
				cursors();  
			   lprcat("\nYou feel your vision return to normal"); 
				beep(); 
			}
	}

	if (d[ITCHING]) {
		if (d[ITCHING]>1)
			if ((d[WEAR]!= -1) || (d[SHIELD]!= -1))
				if (rnd(100)<50) { 		
					d[WEAR]=d[SHIELD]= -1; 
					cursors();
	lprcat("\nThe hysteria of itching forces you to remove your armor!"); 
					beep(); 
					recalc();  
					bottomline();
				}
		if (--d[ITCHING]<=0) { 
			cursors();  
			lprcat("\nYou now feel the irritation subside!"); 
			beep(); 
		}
	}
	if (d[CLUMSINESS]) {
		if (d[WIELD] != -1)
			if (d[CLUMSINESS]>1)
			  if (item[playerx][playery]==0)/* if nothing there */
				if (rnd(100)<33) /* drop your weapon */
					drop_object((int)d[WIELD]);
		if (--d[CLUMSINESS]<=0) { 
			cursors();  
			lprcat("\nYou now feel less awkward!"); 
			beep(); 
		}
	}
	if (flag) 
		bottomline();
}