ftp.nice.ch/pub/next/games/strategic/NetHack.s.tar.gz#/NetHackSource/src/sit.c

This is sit.c in view mode; [Download] [Up]

/*	SCCS Id: @(#)sit.c	3.0	89/06/12
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed.  See license for details. */

#include "hack.h"

#if defined(THRONES) || defined(SPELLS)
void
take_gold()
{
	if (u.ugold <= 0)  {
		You("feel a strange sensation.");
	} else {
		You("notice you have no gold!");
		u.ugold = 0;
		flags.botl = 1;
	}
}
#endif

int
dosit() {
#ifdef THRONES
	register int cnt;
#endif

	if(Levitation)  {
	    pline("There's nothing to sit on up here.");
#ifdef THRONES
	} else  if(IS_THRONE(levl[u.ux][u.uy].typ)) {

	    if (rnd(6) > 4)  {
		switch (rnd(13))  {
		    case 1:
			adjattrib(rn2(A_MAX), -rn1(4,3), FALSE);
			losehp(rnd(10), "cursed throne", KILLED_BY_AN);
			break;
		    case 2:
			adjattrib(rn2(A_MAX), 1, FALSE);
			break;
		    case 3:
		pline("A%s charge of electricity shoots through your body!",
			      (Shock_resistance) ? "" : " massive");
			if(Shock_resistance)
				losehp(rnd(6), "electric chair", KILLED_BY_AN);
			else	losehp(rnd(30), "electric chair", KILLED_BY_AN);
			break;
		    case 4:
			You("feel much, much better!");
			if(u.uhp >= (u.uhpmax - 5))  u.uhpmax += 4;
			u.uhp = u.uhpmax;
			make_blinded(0L,TRUE);
			make_sick(0L,FALSE);
			heal_legs();
			flags.botl = 1;
			break;
		    case 5:
			take_gold();
			break;
		    case 6:
			if(u.uluck + rn2(5) < 0) {
			    You("feel your luck is changing.");
			    change_luck(1);
			} else	    makewish();
			break;
		    case 7:
			cnt = rnd(10);
			You("hear a voice echo:");
			pline("\"Thy audience hath been summoned, Sire!\"");
			while(cnt--)
			    (void) makemon(courtmon(), u.ux, u.uy);
			break;
		    case 8:
			You("hear a voice echo:");
			pline("\"By thy Imperious order, Sire...\"");
			do_genocide(1);
			break;
		    case 9:
			You("hear a voice echo:");
	pline("\"A curse upon thee for sitting upon this most holy throne!\"");
			if (Luck > 0)  {
			    make_blinded(Blinded + rn1(100,250),TRUE);
			} else	    rndcurse();
			break;
		    case 10:
			if (Luck < 0 || (HSee_invisible & INTRINSIC))  {
				pline("An image forms in your mind.");
				do_mapping();
			} else  {
				Your("vision clarifies.");
				HSee_invisible |= INTRINSIC;
			}
			break;
		    case 11:
			if (Luck < 0)  {
			    You("feel threatened.");
			    aggravate();
			} else  {

			    You("feel a wrenching sensation.");
			    tele();		/* teleport him */
			}
			break;
		    case 12:
			You("are granted a gift of insight!");
			while (!ggetobj("identify", identify, rn2(5))
				&& invent);
			break;
		    case 13:
			Your("mind turns into a pretzel!");
			make_confused(HConfusion + rn1(7,16),FALSE);
			break;
		    default:	impossible("throne effect");
				break;
		}
	    } else	You("feel somehow out of place...");

	    if (!rn2(3) && IS_THRONE(levl[u.ux][u.uy].typ))	{
		pline("The throne vanishes in a puff of logic.");
/*		levl[u.ux][u.uy].scrsym = ROOM_SYM; */
		levl[u.ux][u.uy].typ = ROOM;
		if(Invisible) newsym(u.ux,u.uy);
	    }
#endif
#ifdef POLYSELF
	} else if (lays_eggs(uasmon) || u.umonnum == PM_QUEEN_BEE) {
		struct obj *uegg;

		if (u.uhunger < objects[EGG].nutrition) {
			You("are too weak to lay an egg.");
			return 0;
		}

		uegg = mksobj(EGG, 0);
		uegg->spe = 1;
		uegg->quan = 1;
		uegg->owt = weight(uegg);
		uegg->corpsenm =
		    (u.umonnum==PM_QUEEN_BEE ? PM_KILLER_BEE : monsndx(uasmon));
		uegg->known = uegg->dknown = 1;
		You("lay an egg.");
		dropy(uegg);
		stackobj(uegg);
		morehungry(objects[EGG].nutrition);
#endif
	} else
		pline("Having fun sitting on the floor?");
	return(1);
}

void
rndcurse() {			/* curse a few inventory items at random! */

	int	nobj = 0;
	int	cnt, onum;
	struct	obj	*otmp;

	if(Antimagic) {
	    shieldeff(u.ux, u.uy);
	    You("feel a malignant aura surround you.");
	}

	for (otmp = invent; otmp; otmp = otmp->nobj)  nobj++;
	    if (nobj) for (cnt = rnd(6/((!!Antimagic) + 1)); cnt > 0; cnt--)  {

		onum = rn2(nobj);
		for(otmp = invent; onum != 0; onum--)
		    otmp = otmp->nobj;
		if(otmp->blessed)
			otmp->blessed = 0;
		else
			otmp->cursed++;
	    }
}

void
attrcurse() {			/* remove a random INTRINSIC ability */
	switch(rnd(10)) {
	case 1 : if (HFire_resistance & INTRINSIC) {
			HFire_resistance &= ~INTRINSIC;
			if (Inhell && !Fire_resistance) {
			    You("burn to a crisp.");
			    killer_format = NO_KILLER_PREFIX;
			    killer = self_pronoun("a gremlin stole %s fire resistance in hell", "his");
			    done(BURNING);
			} else You("feel warmer.");
			break;
		}
	case 2 : if (HTeleportation & INTRINSIC) {
			HTeleportation &= ~INTRINSIC;
			You("feel less jumpy.");
			break;
		}
	case 3 : if (HPoison_resistance & INTRINSIC) {
			HPoison_resistance &= ~INTRINSIC;
			You("feel a little sick!");
			break;
		}
	case 4 : if (HTelepat & INTRINSIC) {
			HTelepat &= ~INTRINSIC;
			Your("senses fail!");
			break;
		}
	case 5 : if (HCold_resistance & INTRINSIC) {
			HCold_resistance &= ~INTRINSIC;
			You("feel cooler.");
			break;
		}
	case 6 : if (HInvis & INTRINSIC) {
			HInvis &= ~INTRINSIC;
			You("feel paranoid.");
			break;
		}
	case 7 : if (HSee_invisible & INTRINSIC) {
			HSee_invisible &= ~INTRINSIC;
			You("thought you saw something!");
			break;
		}
	case 8 : if (Fast & INTRINSIC) {
			Fast &= ~INTRINSIC;
			You("feel slower.");
			break;
		}
	case 9 : if (Stealth & INTRINSIC) {
			Stealth &= ~INTRINSIC;
			You("feel clumsy.");
			break;
		}
	case 10: if (Protection & INTRINSIC) {
			Protection &= ~INTRINSIC;
			You("feel vulnerable.");
			break;
		}
	default: break;
	}
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.