|
|
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: 3296 (0xce0)
Types: TextFile
Names: »condition.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Abermud/condition.c«
/*
** Condition evaluator for the system
*/
#include "kernel.h"
#include "condact.h"
#ifdef RCSID
static char RCS[] =
"$Header: condition.c,v 1.1 89/03/13 09:35:52 rsalz Exp $";
#endif /* RCSID */
condeval(n, p2)
int n, p2;
{
int a, b, r, p;
p = prmmod(p2);
a = n & NOT;
switch (n & COND) {
case LEVEQ:
r = plev(mynum) == p;
break;
case LEVLT:
r = plev(mynum) < p;
break;
case IN:
r = ploc(mynum) == p;
break;
case GOT:
r = iscarrby(p, mynum);
break;
case AVL:
r = isavl(p);
break;
case IFDEAF:
r = ail_deaf;
break;
case IFDUMB:
r = ail_dumb;
break;
case IFBLIND:
r = ail_blind;
break;
case IFCRIPPLED:
r = ail_crip;
break;
case IFFIGHTING:
r = in_fight;
break;
case PFLAG:
r = ptstflg(p, getnext());
break;
case STATE:
r = state(p) == getnext();
break;
case EQc:
r = globaldata[p] == getnext();
break;
case LT:
r = globaldata[p] < getnext();
break;
case GT:
r = globaldata[p] > getnext();
break;
case VISLT:
r = pvis(p) < getnext();
break;
case VISEQ:
r = pvis(p) == getnext();
break;
case CANSEE:
r = pvis(p) <= plev(mynum);
break;
case STRLT:
r = pstr(mynum) < p;
break;
case STREQ:
r = pstr(mynum) == p;
break;
case ISIN:
r = iscontin(p, getnext());
break;
case HERE:
r = ishere(p);
break;
case PLGOT:
r = iscarrby(p, getnext());
break;
case DESTROYED:
r = otstbit(p, 0);
break;
case CHANCE:
r = randperc() < p;
break;
case OBIT:
r = otstbit(p, getnext());
break;
case FORCED:
r = isforce;
break;
case INLT:
r = ploc(mynum) < p;
break;
case INGT:
r = ploc(mynum) > p;
break;
case ISME:
r = p == mynum;
break;
case DARK:
r = isdark();
break;
case OBJAT:
r = oloc(p) == getnext() && ocarrf(p) == 0;
break;
case CHANCELEV:
r = randperc() < p * plev(mynum);
break;
case WIZ:
r = plev(mynum) > 9;
break;
case AWIZ:
r = plev(mynum) > 9999;
break;
case OP:
r = op(pname(mynum));
break;
case PLWORN:
r = iswornby(p, getnext());
break;
case PAR:
parameters[pptr++] = p2;
r = 1;
break;
case TSTSEX:
r = psex(mynum) == p;
break;
case WPN:
r = pwpn(mynum) == p;
break;
case ENEMY:
r = fighting == p;
break;
case CANGO:
r = cango(p);
break;
case PREP:
r = prep == p;
break;
case ALONE:
r = tscale() == 100;
break;
case WILLFITIN:
r = willhold(p, getnext());
break;
case ISMONSTER:
r = p > 16;
break;
case CANCARRY:
r = cancarry(p);
break;
case OBYTEEQ:
b = getnext();
r = obyte(p, b) == getnext();
break;
case OBYTEGT:
b = getnext();
r = obyte(p, b) > getnext();
break;
case OBYTEZ:
r = obyte(p, getnext()) == 0;
break;
case HASANY:
r = ohany((int)(1 << p)) == 1;
break;
case HELPED:
r = ptothlp(mynum) > 0;
break;
case PHERE:
r = ploc(p) == ploc(mynum);
break;
default:
mudlog("bad condition - code %d", (char *)n);
crapup("Something unexpectedly nasty has happened");
}
return a ? !r : r;
}
cango(d)
int d;
{
if (getexit(ploc(mynum), d) == 0)
return 0;
if (getexit(ploc(mynum), d) < 0)
return 1;
if (getexit(ploc(mynum), d) < 1000)
return 0;
if (state(getexit(ploc(mynum), d) - 1000) == 0)
return 1;
return 0;
}