|
|
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 c
Length: 2825 (0xb09)
Types: TextFile
Names: »cvdie.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Crystal/cvdie.c«
/* cvdie.c
************************************************************************/
#include <stdio.h>
#include <string.h>
#include "cvobj.h"
#include "cvorcs.h"
#include "cvocab.h"
#include "cvlocs.h"
#include "cvmisc.h"
/* "You're dead, Jim." You got yourself killed somehow, clown. The
* easiest way is to go to location DEAD, which is the destination of
* some entries in travel structures. We allow this 'maxdie' times,
* where maxdie is automatically initialized based on the number of
* snide messages we have available (and how much orange smoke...) in
* messages around rmsg[81]. Each death results in a message (81,83,...)
* which offers reincarnation; if accepted, this results in message 82, 84,
* etc. The last time, if he wants another chance, he gets a snide
* remark (what else? so what's new?) as we exit. When reincarnated,
* all objects being carried get moved to 'oldlc2' (presumably the last
* place prior to getting killed) without change of prop number. The lamp
* is turned off and left outside the building (only if he was carrying
* it, of course). He himself is left outside the privy (and heaven help
* him if he tries to "hope" back into the cave without the lamp!).
*
* 'oldlc2' is zapped so he can't just "retreat".
*/
void
die()
{
register int yea;
register struct cvobj *curobj ;
blklin = TRUE ;
if ( (UNICRN->conn1.where == oldlc2)
&& (loc == oldlc2)
&& (UNICRN->prop) ) {
pspeak(UNICRN,5); /* very lucky! */
UNICRN->prop = 1 ;
loc = oldlc2;
} else {
if (closing || demo) {
rspeak(131);
++numdie;
finish = TRUE;
return ;
}
yea = yes(81+numdie*2,82+numdie*2,54) ;
++numdie;
if ((numdie == maxdie) || !yea) {finish = TRUE; return; }
if (TOTING(LAMP)) {
move(LAMP,LAMPLOC);
LAMP->prop = 0 ;
}
loc = LAMPLOC;
move(COMPASS,LAMPLOC);
/* the following may be confusing. GIANT and PRIEST
* represent the same thing to the adventurer, but
* here they are represented by an 'object' and a
* 'monster'.
*/
if ((GIANT->prop == 1) && PRIEST->dseen) destry(GIANT);
} /* may or may not be dead; objects still get dropped */
/* drop all objects (still) being carried.
Throw away if over water. */
newloc = (oldlc2->flags & DROWN) ? LOST : oldlc2 ;
for (curobj = cvobj; curobj->desc != NULL; ++curobj)
if (TOTING(curobj)) move(curobj,newloc); /* drop them */
if (RUG->prop == 1) RUG->prop = 0 ; /* get off the rug */
if ((BOAT->prop/2) == 1) BOAT->prop -= 2; /* leave the boat */
if ( ( LNUM(SCROLL->conn1.where) == 91)
|| INMAZE(SCROLL->conn1.where))
move(SCROLL,&(cvloc[SCROLL->iloc]));
if ( (LNUM(MEDAL->conn1.where) == CAPE->iloc)
|| (LNUM(MEDAL->conn1.where) == SPICE->iloc) )
move(MEDAL,&(cvloc[MEDAL->iloc]));
if (SKELTN->prop == 1) SKELTN->prop = 2;
newloc = oldloc = loc ;
}