Home | History | Annotate | Line # | Download | only in larn
moreobj.c revision 1.11.26.1
      1  1.11.26.1      yamt /*	$NetBSD: moreobj.c,v 1.11.26.1 2012/10/30 18:58:24 yamt Exp $	*/
      2        1.2   mycroft 
      3        1.4  christos /*
      4        1.4  christos  * moreobj.c 		Larn is copyrighted 1986 by Noah Morgan.
      5        1.4  christos  *
      6        1.4  christos  * Routines in this file:
      7        1.4  christos  *
      8        1.4  christos  * oaltar() othrone() ochest() ofountain()
      9        1.1       cgd  */
     10        1.4  christos #include <sys/cdefs.h>
     11        1.4  christos #ifndef lint
     12  1.11.26.1      yamt __RCSID("$NetBSD: moreobj.c,v 1.11.26.1 2012/10/30 18:58:24 yamt Exp $");
     13        1.4  christos #endif				/* not lint */
     14        1.4  christos #include <stdlib.h>
     15        1.4  christos #include <unistd.h>
     16        1.1       cgd #include "header.h"
     17        1.4  christos #include "extern.h"
     18        1.1       cgd 
     19        1.6       jsm static void fch(int, long *);
     20        1.1       cgd 
     21        1.1       cgd /*
     22        1.1       cgd  *	subroutine to process an altar object
     23        1.1       cgd  */
     24        1.4  christos void
     25  1.11.26.1      yamt oaltar(void)
     26        1.4  christos {
     27        1.1       cgd 
     28        1.4  christos 	lprcat("\nDo you (p) pray  (d) desecrate");
     29        1.4  christos 	iopts();
     30        1.4  christos 	while (1) {
     31        1.4  christos 		while (1)
     32        1.9  dholland 			switch (ttgetch()) {
     33        1.4  christos 			case 'p':
     34        1.4  christos 				lprcat(" pray\nDo you (m) give money or (j) just pray? ");
     35        1.4  christos 				while (1)
     36        1.9  dholland 					switch (ttgetch()) {
     37        1.4  christos 					case 'j':
     38       1.11  dholland 						act_just_pray();
     39        1.4  christos 						return;
     40        1.4  christos 
     41        1.4  christos 					case 'm':
     42       1.11  dholland 						act_donation_pray();
     43        1.4  christos 						return;
     44        1.4  christos 
     45        1.4  christos 					case '\33':
     46        1.4  christos 						return;
     47        1.4  christos 					};
     48        1.4  christos 
     49        1.4  christos 			case 'd':
     50        1.4  christos 				lprcat(" desecrate");
     51       1.11  dholland 				act_desecrate_altar();
     52        1.4  christos 				return;
     53        1.4  christos 
     54        1.4  christos 			case 'i':
     55        1.4  christos 			case '\33':
     56        1.4  christos 				ignore();
     57       1.11  dholland 				act_ignore_altar();
     58        1.4  christos 				return;
     59        1.4  christos 			};
     60        1.1       cgd 	}
     61        1.4  christos }
     62        1.1       cgd 
     63        1.1       cgd /*
     64        1.1       cgd 	subroutine to process a throne object
     65        1.1       cgd  */
     66        1.4  christos void
     67  1.11.26.1      yamt othrone(int arg)
     68        1.4  christos {
     69        1.4  christos 
     70        1.4  christos 	lprcat("\nDo you (p) pry off jewels, (s) sit down");
     71        1.4  christos 	iopts();
     72        1.4  christos 	while (1) {
     73        1.4  christos 		while (1)
     74        1.9  dholland 			switch (ttgetch()) {
     75        1.4  christos 			case 'p':
     76        1.4  christos 				lprcat(" pry off");
     77       1.11  dholland 				act_remove_gems(arg);
     78        1.4  christos 				return;
     79        1.4  christos 
     80        1.4  christos 			case 's':
     81        1.4  christos 				lprcat(" sit down");
     82       1.11  dholland 				act_sit_throne(arg);
     83        1.4  christos 				return;
     84        1.4  christos 
     85        1.4  christos 			case 'i':
     86        1.4  christos 			case '\33':
     87        1.4  christos 				ignore();
     88        1.4  christos 				return;
     89        1.4  christos 			};
     90        1.1       cgd 	}
     91        1.4  christos }
     92        1.1       cgd 
     93        1.4  christos void
     94  1.11.26.1      yamt odeadthrone(void)
     95        1.4  christos {
     96        1.4  christos 	int    k;
     97        1.1       cgd 
     98        1.4  christos 	lprcat("\nDo you (s) sit down");
     99        1.4  christos 	iopts();
    100        1.4  christos 	while (1) {
    101        1.4  christos 		while (1)
    102        1.9  dholland 			switch (ttgetch()) {
    103        1.4  christos 			case 's':
    104        1.4  christos 				lprcat(" sit down");
    105        1.4  christos 				k = rnd(101);
    106        1.4  christos 				if (k < 35) {
    107        1.4  christos 					lprcat("\nZaaaappp!  You've been teleported!\n");
    108        1.4  christos 					beep();
    109        1.4  christos 					oteleport(0);
    110        1.4  christos 				} else
    111        1.4  christos 					lprcat("\nnothing happens");
    112        1.4  christos 				return;
    113        1.4  christos 
    114        1.4  christos 			case 'i':
    115        1.4  christos 			case '\33':
    116        1.4  christos 				ignore();
    117        1.4  christos 				return;
    118        1.4  christos 			};
    119        1.1       cgd 	}
    120        1.4  christos }
    121        1.1       cgd 
    122        1.1       cgd /*
    123        1.1       cgd 	subroutine to process a throne object
    124        1.1       cgd  */
    125        1.4  christos void
    126  1.11.26.1      yamt ochest(void)
    127        1.4  christos {
    128       1.11  dholland 
    129        1.4  christos 	lprcat("\nDo you (t) take it, (o) try to open it");
    130        1.4  christos 	iopts();
    131        1.4  christos 	while (1) {
    132        1.4  christos 		while (1)
    133        1.9  dholland 			switch (ttgetch()) {
    134        1.4  christos 			case 'o':
    135        1.4  christos 				lprcat(" open it");
    136       1.11  dholland 				act_open_chest(playerx, playery);
    137        1.4  christos 				return;
    138        1.4  christos 
    139        1.4  christos 			case 't':
    140        1.4  christos 				lprcat(" take");
    141        1.4  christos 				if (take(OCHEST, iarg[playerx][playery]) == 0)
    142        1.4  christos 					item[playerx][playery] = know[playerx][playery] = 0;
    143        1.4  christos 				return;
    144        1.4  christos 
    145        1.4  christos 			case 'i':
    146        1.4  christos 			case '\33':
    147        1.4  christos 				ignore();
    148        1.4  christos 				return;
    149        1.4  christos 			};
    150        1.1       cgd 	}
    151        1.4  christos }
    152        1.1       cgd 
    153        1.1       cgd /*
    154       1.10  dholland 	process a fountain object
    155        1.1       cgd  */
    156        1.4  christos void
    157  1.11.26.1      yamt ofountain(void)
    158        1.4  christos {
    159       1.11  dholland 
    160        1.1       cgd 	cursors();
    161        1.4  christos 	lprcat("\nDo you (d) drink, (w) wash yourself");
    162        1.4  christos 	iopts();
    163        1.4  christos 	while (1)
    164        1.9  dholland 		switch (ttgetch()) {
    165        1.4  christos 		case 'd':
    166        1.4  christos 			lprcat("drink");
    167       1.11  dholland 			act_drink_fountain();
    168        1.4  christos 			return;
    169        1.1       cgd 
    170        1.1       cgd 		case '\33':
    171        1.4  christos 		case 'i':
    172        1.4  christos 			ignore();
    173        1.4  christos 			return;
    174        1.1       cgd 
    175        1.4  christos 		case 'w':
    176        1.4  christos 			lprcat("wash yourself");
    177       1.11  dholland 			act_wash_fountain();
    178        1.4  christos 			return;
    179        1.1       cgd 		}
    180        1.4  christos }
    181        1.1       cgd 
    182        1.1       cgd /*
    183        1.1       cgd 	***
    184        1.1       cgd 	FCH
    185        1.1       cgd 	***
    186        1.1       cgd 
    187        1.1       cgd 	subroutine to process an up/down of a character attribute for ofountain
    188        1.1       cgd  */
    189        1.1       cgd static void
    190  1.11.26.1      yamt fch(int how, long *x)
    191        1.4  christos {
    192        1.4  christos 	if (how < 0) {
    193        1.4  christos 		lprcat(" went down by one!");
    194        1.4  christos 		--(*x);
    195        1.4  christos 	} else {
    196        1.4  christos 		lprcat(" went up by one!");
    197        1.4  christos 		(*x)++;
    198        1.4  christos 	}
    199        1.1       cgd 	bottomline();
    200        1.4  christos }
    201        1.1       cgd 
    202        1.1       cgd /*
    203        1.1       cgd 	a subroutine to raise or lower character levels
    204        1.1       cgd 	if x > 0 they are raised   if x < 0 they are lowered
    205        1.1       cgd  */
    206        1.4  christos void
    207  1.11.26.1      yamt fntchange(int how)
    208        1.4  christos {
    209        1.4  christos 	long   j;
    210        1.1       cgd 	lprc('\n');
    211        1.4  christos 	switch (rnd(9)) {
    212        1.4  christos 	case 1:
    213        1.4  christos 		lprcat("Your strength");
    214        1.4  christos 		fch(how, &c[0]);
    215        1.4  christos 		break;
    216        1.4  christos 	case 2:
    217        1.4  christos 		lprcat("Your intelligence");
    218        1.4  christos 		fch(how, &c[1]);
    219        1.4  christos 		break;
    220        1.4  christos 	case 3:
    221        1.4  christos 		lprcat("Your wisdom");
    222        1.4  christos 		fch(how, &c[2]);
    223        1.4  christos 		break;
    224        1.4  christos 	case 4:
    225        1.4  christos 		lprcat("Your constitution");
    226        1.4  christos 		fch(how, &c[3]);
    227        1.4  christos 		break;
    228        1.4  christos 	case 5:
    229        1.4  christos 		lprcat("Your dexterity");
    230        1.4  christos 		fch(how, &c[4]);
    231        1.4  christos 		break;
    232        1.4  christos 	case 6:
    233        1.4  christos 		lprcat("Your charm");
    234        1.4  christos 		fch(how, &c[5]);
    235        1.4  christos 		break;
    236        1.4  christos 	case 7:
    237        1.4  christos 		j = rnd(level + 1);
    238        1.4  christos 		if (how < 0) {
    239        1.7  dholland 			lprintf("You lose %ld hit point", (long) j);
    240        1.4  christos 			if (j > 1)
    241        1.4  christos 				lprcat("s!");
    242        1.4  christos 			else
    243        1.4  christos 				lprc('!');
    244        1.4  christos 			losemhp((int) j);
    245        1.4  christos 		} else {
    246        1.7  dholland 			lprintf("You gain %ld hit point", (long) j);
    247        1.4  christos 			if (j > 1)
    248        1.4  christos 				lprcat("s!");
    249        1.4  christos 			else
    250        1.4  christos 				lprc('!');
    251        1.4  christos 			raisemhp((int) j);
    252        1.4  christos 		}
    253        1.4  christos 		bottomline();
    254        1.4  christos 		break;
    255        1.4  christos 
    256        1.4  christos 	case 8:
    257        1.4  christos 		j = rnd(level + 1);
    258        1.4  christos 		if (how > 0) {
    259        1.7  dholland 			lprintf("You just gained %ld spell", (long) j);
    260        1.4  christos 			raisemspells((int) j);
    261        1.4  christos 			if (j > 1)
    262        1.4  christos 				lprcat("s!");
    263        1.4  christos 			else
    264        1.4  christos 				lprc('!');
    265        1.4  christos 		} else {
    266        1.7  dholland 			lprintf("You just lost %ld spell", (long) j);
    267        1.4  christos 			losemspells((int) j);
    268        1.4  christos 			if (j > 1)
    269        1.4  christos 				lprcat("s!");
    270        1.4  christos 			else
    271        1.4  christos 				lprc('!');
    272        1.4  christos 		}
    273        1.4  christos 		bottomline();
    274        1.4  christos 		break;
    275        1.4  christos 
    276        1.4  christos 	case 9:
    277        1.4  christos 		j = 5 * rnd((level + 1) * (level + 1));
    278        1.4  christos 		if (how < 0) {
    279        1.7  dholland 			lprintf("You just lost %ld experience point", (long) j);
    280        1.4  christos 			if (j > 1)
    281        1.4  christos 				lprcat("s!");
    282        1.4  christos 			else
    283        1.4  christos 				lprc('!');
    284        1.4  christos 			loseexperience((long) j);
    285        1.4  christos 		} else {
    286        1.7  dholland 			lprintf("You just gained %ld experience point", (long) j);
    287        1.4  christos 			if (j > 1)
    288        1.4  christos 				lprcat("s!");
    289        1.4  christos 			else
    290        1.4  christos 				lprc('!');
    291        1.4  christos 			raiseexperience((long) j);
    292        1.1       cgd 		}
    293        1.4  christos 		break;
    294        1.4  christos 	}
    295        1.1       cgd 	cursors();
    296        1.4  christos }
    297