summaryrefslogtreecommitdiffstats
path: root/larn/moreobj.c
diff options
context:
space:
mode:
authordholland <dholland@NetBSD.org>2008-02-19 06:05:26 +0000
committerdholland <dholland@NetBSD.org>2008-02-19 06:05:26 +0000
commitc3de34fcf8f28f8b1d0090907c4eb2116be93d2e (patch)
tree3e6bd42fed76dea2dcfeea18d7a3fe05be8f5be5 /larn/moreobj.c
parente56d75c2f9cc30dd639b9070119f0159aec6e97e (diff)
downloadbsdgames-darwin-c3de34fcf8f28f8b1d0090907c4eb2116be93d2e.tar.gz
bsdgames-darwin-c3de34fcf8f28f8b1d0090907c4eb2116be93d2e.tar.zst
bsdgames-darwin-c3de34fcf8f28f8b1d0090907c4eb2116be93d2e.zip
Split some code from moreobj.c into action.c, as per larn 12.2.
Diffstat (limited to 'larn/moreobj.c')
-rw-r--r--larn/moreobj.c195
1 files changed, 13 insertions, 182 deletions
diff --git a/larn/moreobj.c b/larn/moreobj.c
index b515fbff..b0cb5961 100644
--- a/larn/moreobj.c
+++ b/larn/moreobj.c
@@ -1,4 +1,4 @@
-/* $NetBSD: moreobj.c,v 1.10 2008/02/04 01:07:01 dholland Exp $ */
+/* $NetBSD: moreobj.c,v 1.11 2008/02/19 06:05:26 dholland Exp $ */
/*
* moreobj.c Larn is copyrighted 1986 by Noah Morgan.
@@ -9,14 +9,13 @@
*/
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: moreobj.c,v 1.10 2008/02/04 01:07:01 dholland Exp $");
+__RCSID("$NetBSD: moreobj.c,v 1.11 2008/02/19 06:05:26 dholland Exp $");
#endif /* not lint */
#include <stdlib.h>
#include <unistd.h>
#include "header.h"
#include "extern.h"
-static void ohear(void);
static void fch(int, long *);
/*
@@ -25,7 +24,6 @@ static void fch(int, long *);
void
oaltar()
{
- long amt;
lprcat("\nDo you (p) pray (d) desecrate");
iopts();
@@ -37,56 +35,11 @@ oaltar()
while (1)
switch (ttgetch()) {
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 + 1));
+ act_just_pray();
return;
case 'm':
- lprcat("\n\n");
- cursor(1, 24);
- cltoeoln();
- cursor(1, 23);
- cltoeoln();
- lprcat("how much do you donate? ");
- amt = readnum((long) c[GOLD]);
- if (amt < 0 || c[GOLD] < amt) {
- lprcat("\nYou don't have that much!");
- return;
- }
- c[GOLD] -= amt;
- if (amt < c[GOLD] / 10 || amt < rnd(50)) {
- createmonster(makemonst(level + 1));
- c[AGGRAVATE] += 200;
- } else if (rnd(101) > 50) {
- ohear();
- return;
- } else if (rnd(43) == 5) {
- if (c[WEAR])
- lprcat("\nYou feel your armor vibrate for a moment");
- enchantarmor();
- return;
- } else if (rnd(43) == 8) {
- if (c[WIELD])
- lprcat("\nYou feel your weapon vibrate for a moment");
- enchweapon();
- return;
- } else
- lprcat("\nThank You.");
- bottomline();
+ act_donation_pray();
return;
case '\33':
@@ -95,51 +48,25 @@ oaltar()
case 'd':
lprcat(" desecrate");
- if (rnd(100) < 60) {
- createmonster(makemonst(level + 2) + 8);
- c[AGGRAVATE] += 2500;
- } 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");
+ act_desecrate_altar();
return;
case 'i':
case '\33':
ignore();
- if (rnd(100) < 30) {
- createmonster(makemonst(level + 1));
- c[AGGRAVATE] += rnd(450);
- } else
- lprcat("\nnothing happens");
+ act_ignore_altar();
return;
};
}
}
/*
- function to cast a +3 protection on the player
- */
-static void
-ohear()
-{
- lprcat("\nYou have been heard!");
- if (c[ALTPRO] == 0)
- c[MOREDEFENSES] += 3;
- c[ALTPRO] += 500; /* protection field */
- bottomline();
-}
-
-/*
subroutine to process a throne object
*/
void
othrone(arg)
int arg;
{
- int i, k;
lprcat("\nDo you (p) pry off jewels, (s) sit down");
iopts();
@@ -148,34 +75,12 @@ othrone(arg)
switch (ttgetch()) {
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");
+ act_remove_gems(arg);
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");
+ act_sit_throne(arg);
return;
case 'i':
@@ -221,7 +126,7 @@ odeadthrone()
void
ochest()
{
- int i, k;
+
lprcat("\nDo you (t) take it, (o) try to open it");
iopts();
while (1) {
@@ -229,42 +134,7 @@ ochest()
switch (ttgetch()) {
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 %ld hit points damage!", (long) i);
- checkloss(i);
- switch (rnd(10)) { /* see if he gets a
- * curse */
- 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;
- beep();
- lprcat("\nA sickness engulfs you!");
- 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");
+ act_open_chest(playerx, playery);
return;
case 't':
@@ -287,7 +157,7 @@ ochest()
void
ofountain()
{
- int x;
+
cursors();
lprcat("\nDo you (d) drink, (w) wash yourself");
iopts();
@@ -295,32 +165,7 @@ ofountain()
switch (ttgetch()) {
case 'd':
lprcat("drink");
- if (rnd(1501) < 2) {
- lprcat("\nOops! You seem to have caught the dreadful sleep!");
- beep();
- lflush();
- sleep(3);
- died(280);
- return;
- }
- x = rnd(100);
- if (x < 7) {
- c[HALFDAM] += 200 + rnd(200);
- lprcat("\nYou feel a sickness coming on");
- } else if (x < 13)
- quaffpotion(23); /* see invisible */
- 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");
- item[playerx][playery] = ODEADFOUNTAIN; /* dead fountain */
- know[playerx][playery] = 0;
- }
+ act_drink_fountain();
return;
case '\33':
@@ -330,21 +175,7 @@ ofountain()
case 'w':
lprcat("wash yourself");
- if (rnd(100) < 11) {
- x = rnd((level << 2) + 2);
- lprintf("\nOh no! The water was foul! You suffer %ld hit points!", (long) x);
- lastnum = 273;
- losehp(x);
- bottomline();
- cursors();
- } else if (rnd(100) < 29)
- lprcat("\nYou got the dirt off!");
- else if (rnd(100) < 31)
- lprcat("\nThis water seems to be hard water! The dirt didn't come off!");
- else if (rnd(100) < 34)
- createmonster(WATERLORD); /* make water lord */
- else
- lprcat("\nnothing seems to have happened");
+ act_wash_fountain();
return;
}
}