|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 9022 (0x233e) Types: TextFile Names: »moreobj.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec6/larn/moreobj.c«
/* moreobj.c Larn is copyrighted 1986 by Noah Morgan. * * Routines in this file: * * oaltar() * othrone() * ochest() * ofountain() */ #include "header.h" /* * ****** * OALTAR * ****** * * subroutine to process an altar object */ oaltar() { unsigned long k; lprcat("\nDo you (p) pray (d) desecrate"); iopts(); while (1) { while (1) switch(getchar()) { case 'p': lprcat(" pray\nDo you (m) give money or (j) just pray? "); while (1) switch(getchar()) { 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)); return; case 'm': lprcat("\n\n"); cursor(1,24); cltoeoln(); cursor(1,23); cltoeoln(); lprcat("how much do you donate? "); k = readnum((long)c[GOLD]); if (c[GOLD]<k) { lprcat("\nYou don't have that much!"); return; } c[GOLD] -= k; if (k < c[GOLD]/10 || k<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(); return; case '\33': return; }; 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"); return; case 'i': case '\33': ignore(); if (rnd(100)<30) { createmonster(makemonst(level+1)); c[AGGRAVATE] += rnd(450); } else lprcat("\nnothing happens"); return; }; } } /* function to cast a +3 protection on the player */ static ohear() { lprcat("\nYou have been heard!"); if (c[ALTPRO]==0) c[MOREDEFENSES]+=3; c[ALTPRO] += 500; /* protection field */ bottomline(); } /* ******* OTHRONE ******* subroutine to process a throne object */ othrone(arg) int arg; { register int i,k; lprcat("\nDo you (p) pry off jewels, (s) sit down"); iopts(); while (1) { while (1) switch(getchar()) { 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"); 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"); return; case 'i': case '\33': ignore(); return; }; } } odeadthrone() { register int k; lprcat("\nDo you (s) sit down"); iopts(); while (1) { while (1) switch(getchar()) { 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; }; } } /* ****** OCHEST ****** subroutine to process a throne object */ ochest() { register int i,k; lprcat("\nDo you (t) take it, (o) try to open it"); iopts(); while (1) { while (1) switch(getchar()) { 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 %d 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"); 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; }; } } /* ********* OFOUNTAIN ********* */ ofountain() { register int x; cursors(); lprcat("\nDo you (d) drink, (w) wash yourself"); iopts(); while (1) switch(getchar()) { 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; } return; case '\33': case 'i': ignore(); return; case 'w': lprcat("wash yourself"); if (rnd(100) < 11) { x=rnd((level<<2)+2); lprintf("\nOh no! The water was foul! You suffer %d 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"); return; } } /* a subroutine to raise or lower character levels if x > 0 they are raised if x < 0 they are lowered */ fntchange(how) int how; { register 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 %d hit point",(long)j); if (j>1) lprcat("s!"); else lprc('!'); losemhp((int)j); } else { lprintf("You gain %d 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 %d spell",(long)j); raisemspells((int)j); if (j>1) lprcat("s!"); else lprc('!'); } else { lprintf("You just lost %d 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 %d experience point",(long)j); if (j>1) lprcat("s!"); else lprc('!'); loseexperience((long)j); } else { lprintf("You just gained %d experience point",(long)j); if (j>1) lprcat("s!"); else lprc('!'); raiseexperience((long)j); } break; } cursors(); } /* *** FCH *** subroutine to process an up/down of a character attribute for ofountain */ static fch(how,x) int how; long *x; { if (how < 0) { lprcat(" went down by one!"); --(*x); } else { lprcat(" went up by one!"); (*x)++; } bottomline(); }