1 1.13 rillig /* $NetBSD: moreobj.c,v 1.13 2021/05/02 12:50:45 rillig Exp $ */ 2 1.2 mycroft 3 1.4 christos /* 4 1.4 christos * moreobj.c Larn is copyrighted 1986 by Noah Morgan. 5 1.13 rillig * 6 1.4 christos * Routines in this file: 7 1.13 rillig * 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.13 rillig __RCSID("$NetBSD: moreobj.c,v 1.13 2021/05/02 12:50:45 rillig 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.12 dholland 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.12 dholland 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.12 dholland 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.12 dholland 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.12 dholland 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.12 dholland 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.12 dholland 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