diff options
author | dholland <dholland@NetBSD.org> | 2008-02-19 06:05:26 +0000 |
---|---|---|
committer | dholland <dholland@NetBSD.org> | 2008-02-19 06:05:26 +0000 |
commit | c3de34fcf8f28f8b1d0090907c4eb2116be93d2e (patch) | |
tree | 3e6bd42fed76dea2dcfeea18d7a3fe05be8f5be5 /larn/moreobj.c | |
parent | e56d75c2f9cc30dd639b9070119f0159aec6e97e (diff) | |
download | bsdgames-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.c | 195 |
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; } } |