297 lines
4.5 KiB
C
297 lines
4.5 KiB
C
/* $NetBSD: moreobj.c,v 1.12 2012/06/19 05:30:43 dholland Exp $ */
|
|
|
|
/*
|
|
* moreobj.c Larn is copyrighted 1986 by Noah Morgan.
|
|
*
|
|
* Routines in this file:
|
|
*
|
|
* oaltar() othrone() ochest() ofountain()
|
|
*/
|
|
#include <sys/cdefs.h>
|
|
#ifndef lint
|
|
__RCSID("$NetBSD: moreobj.c,v 1.12 2012/06/19 05:30:43 dholland Exp $");
|
|
#endif /* not lint */
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include "header.h"
|
|
#include "extern.h"
|
|
|
|
static void fch(int, long *);
|
|
|
|
/*
|
|
* subroutine to process an altar object
|
|
*/
|
|
void
|
|
oaltar(void)
|
|
{
|
|
|
|
lprcat("\nDo you (p) pray (d) desecrate");
|
|
iopts();
|
|
while (1) {
|
|
while (1)
|
|
switch (ttgetch()) {
|
|
case 'p':
|
|
lprcat(" pray\nDo you (m) give money or (j) just pray? ");
|
|
while (1)
|
|
switch (ttgetch()) {
|
|
case 'j':
|
|
act_just_pray();
|
|
return;
|
|
|
|
case 'm':
|
|
act_donation_pray();
|
|
return;
|
|
|
|
case '\33':
|
|
return;
|
|
};
|
|
|
|
case 'd':
|
|
lprcat(" desecrate");
|
|
act_desecrate_altar();
|
|
return;
|
|
|
|
case 'i':
|
|
case '\33':
|
|
ignore();
|
|
act_ignore_altar();
|
|
return;
|
|
};
|
|
}
|
|
}
|
|
|
|
/*
|
|
subroutine to process a throne object
|
|
*/
|
|
void
|
|
othrone(int arg)
|
|
{
|
|
|
|
lprcat("\nDo you (p) pry off jewels, (s) sit down");
|
|
iopts();
|
|
while (1) {
|
|
while (1)
|
|
switch (ttgetch()) {
|
|
case 'p':
|
|
lprcat(" pry off");
|
|
act_remove_gems(arg);
|
|
return;
|
|
|
|
case 's':
|
|
lprcat(" sit down");
|
|
act_sit_throne(arg);
|
|
return;
|
|
|
|
case 'i':
|
|
case '\33':
|
|
ignore();
|
|
return;
|
|
};
|
|
}
|
|
}
|
|
|
|
void
|
|
odeadthrone(void)
|
|
{
|
|
int k;
|
|
|
|
lprcat("\nDo you (s) sit down");
|
|
iopts();
|
|
while (1) {
|
|
while (1)
|
|
switch (ttgetch()) {
|
|
case 's':
|
|
lprcat(" sit down");
|
|
k = rnd(101);
|
|
if (k < 35) {
|
|
lprcat("\nZaaaappp! You've been teleported!\n");
|
|
beep();
|
|
oteleport(0);
|
|
} else
|
|
lprcat("\nnothing happens");
|
|
return;
|
|
|
|
case 'i':
|
|
case '\33':
|
|
ignore();
|
|
return;
|
|
};
|
|
}
|
|
}
|
|
|
|
/*
|
|
subroutine to process a throne object
|
|
*/
|
|
void
|
|
ochest(void)
|
|
{
|
|
|
|
lprcat("\nDo you (t) take it, (o) try to open it");
|
|
iopts();
|
|
while (1) {
|
|
while (1)
|
|
switch (ttgetch()) {
|
|
case 'o':
|
|
lprcat(" open it");
|
|
act_open_chest(playerx, playery);
|
|
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;
|
|
};
|
|
}
|
|
}
|
|
|
|
/*
|
|
process a fountain object
|
|
*/
|
|
void
|
|
ofountain(void)
|
|
{
|
|
|
|
cursors();
|
|
lprcat("\nDo you (d) drink, (w) wash yourself");
|
|
iopts();
|
|
while (1)
|
|
switch (ttgetch()) {
|
|
case 'd':
|
|
lprcat("drink");
|
|
act_drink_fountain();
|
|
return;
|
|
|
|
case '\33':
|
|
case 'i':
|
|
ignore();
|
|
return;
|
|
|
|
case 'w':
|
|
lprcat("wash yourself");
|
|
act_wash_fountain();
|
|
return;
|
|
}
|
|
}
|
|
|
|
/*
|
|
***
|
|
FCH
|
|
***
|
|
|
|
subroutine to process an up/down of a character attribute for ofountain
|
|
*/
|
|
static void
|
|
fch(int how, long *x)
|
|
{
|
|
if (how < 0) {
|
|
lprcat(" went down by one!");
|
|
--(*x);
|
|
} else {
|
|
lprcat(" went up by one!");
|
|
(*x)++;
|
|
}
|
|
bottomline();
|
|
}
|
|
|
|
/*
|
|
a subroutine to raise or lower character levels
|
|
if x > 0 they are raised if x < 0 they are lowered
|
|
*/
|
|
void
|
|
fntchange(int how)
|
|
{
|
|
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 %ld hit point", (long) j);
|
|
if (j > 1)
|
|
lprcat("s!");
|
|
else
|
|
lprc('!');
|
|
losemhp((int) j);
|
|
} else {
|
|
lprintf("You gain %ld 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 %ld spell", (long) j);
|
|
raisemspells((int) j);
|
|
if (j > 1)
|
|
lprcat("s!");
|
|
else
|
|
lprc('!');
|
|
} else {
|
|
lprintf("You just lost %ld 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 %ld experience point", (long) j);
|
|
if (j > 1)
|
|
lprcat("s!");
|
|
else
|
|
lprc('!');
|
|
loseexperience((long) j);
|
|
} else {
|
|
lprintf("You just gained %ld experience point", (long) j);
|
|
if (j > 1)
|
|
lprcat("s!");
|
|
else
|
|
lprc('!');
|
|
raiseexperience((long) j);
|
|
}
|
|
break;
|
|
}
|
|
cursors();
|
|
}
|