|
|
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 a
Length: 7786 (0x1e6a)
Types: TextFile
Names: »action.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Abermud/action.c«
/*
** Standard actions
*/
#include "kernel.h"
#include "condact.h"
#ifdef RCSID
static char RCS[] =
"$Header: action.c,v 1.1 89/03/13 09:35:20 rsalz Exp $";
#endif /* RCSID */
/*
** This function processes a database table entry action statement
** of any form. Return may be jumpaway().
*/
stdaction(n)
int n;
{
int a, b, c, x, y;
switch (n) {
case NULL:
break; /* Do nothing */
case GAIN:
setpscore(mynum, pscore(mynum) + getpar());
calibme();
break; /* Gain points */
case LOSE:
setpscore(mynum, pscore(mynum) - getpar());
calibme();
break; /* Lose points */
case WOUND:
setpstr(mynum, pstr(mynum) - getpar());
calibme();
break; /* Wounded and take damage */
case HEAL:
setpstr(mynum, pstr(mynum) + getpar());
calibme();
break; /* Healed damage */
case INC:
a = getpar(); /* Increase state of object */
setobjstate(a, state(a) + 1);
if (state(a) > omaxstate(a))
setobjstate(a, omaxstate(a));
break;
case DEC:
a = getpar(); /* Decrease state of object */
if (state(a))
setobjstate(a, state(a) - 1);
break;
case ADD:
a = getpar();
globaldata[a] += getpar();
break; /* Flag Operations */
case SUB:
a = getpar();
globaldata[a] -= getpar();
break;
case MUL:
a = getpar();
globaldata[a] *= getpar();
break;
case LET:
a = getpar();
globaldata[a] = getpar();
break;
case DIV:
a = getpar();
globaldata[a] /= getparnz();
break;
case MOD:
a = getpar();
globaldata[a] %= getparnz();
break;
case PUT:
a = getpar();
setoloc(a, getpar(), 0);
break; /* Put object in room */
case PUTIN:
a = getpar();
setoloc(a, getpar(), 3);
break; /* Put object in container */
case PUTCARR:
a = getpar();
setoloc(a, getpar(), 1);
break; /* Put object carried by user */
case PUTWORN:
a = getpar();
setoloc(a, getpar(), 2);
break; /* Put object worn by user */
case OK:
bprintf("Ok.\n"); /* Print ok and exit table */
/* FALLTHROUGH */
case DONE:
jumpaway();
case DESTROY:
osetbit(getpar(), 0);
break; /* Destroy object */
case QUIT:
loseme();
crapup(messages[getpar()]); /* Message exit */
case DIE:
delpers(pname(mynum));
zapped = 1; /* Dont save */
loseme();
crapup(messages[getpar()]);
case PUTWITH:
a = getpar();
b = getpar();
setoloc(a, oloc(b), ocarrf(b));
break; /* put obj by obj */
case GOBY:
teletrap(oloc(getpar()));
break; /* Goto object */
case DISPROOM:
disploc();
break; /* Describe current room */
case GOTO:
teletrap(getpar()); /* Jump to room */
break;
case SWAP: /* Swap 2 object positions */
a = getpar();
b = getpar();
x = oloc(a);
y = ocarrf(a);
setoloc(a, oloc(b), ocarrf(b));
setoloc(b, x, y);
break;
case POBJ:
bprintf("%s", oname(getpar()));
break; /* Print object name */
case PPLAYER:
bprintf("%s", pname(getpar()));
break; /* Print player name */
case PNUMBER:
bprintf("%d", getpar());
break; /* Print number */
case SETLEVEL:
setplev(mynum, getpar());
calibme();
break; /* Set level */
/* Setlevel to mortal levels results in calibration resetting ! */
case SETVIS:
setpvis(mynum, getpar());
break;
case COPYFL:
globaldata[getpar()] = globaldata[getpar()];
break; /* Copy flag to flag */
case LOBJAT:
listobject(getpar(), 0);
break;
case LOBJIN:
listobject(getpar(), 3);
break;
case LOBJCARR:
listobject(getpar(), 1);
break; /* List items in things */
case CREATE:
oclrbit(getpar(), 0);
break;
case DOOBJS:
break; /* UNIMP */
case DOPLS:
break; /* UNIMP */
case SETSTATE:
a = getpar();
setobjstate(a, (int) getpar());
break; /* Set object state */
/* Most of the actions below this point do major sections of code.
* Quite a few still contain in wired special cases, which want removing
* so be careful. */
case INVEN:
inventory();
break;
case EXITS:
exits();
break;
case MOVE:
dodirn(getpar());
break; /* 0=n 1=e etc... */
case SETIN:
setincom();
break;
case SETOUT:
setoutcom();
break;
case SETMIN:
setmincom();
break;
case SETMOUT:
setmoutcom();
break;
case TELL:
tellcom();
break;
case SAY:
saycom();
break;
case SHOUT:
shoutcom();
break;
case WIZACT:
wizcom();
break;
case ARCH:
awizcom();
break;
case BUG:
bugcom();
break;
case TYPO:
typocom();
break;
case BLIND:
ail_blind = 1;
break; /* Thesewill be pflags one day! */
case DEAF:
ail_deaf = 1;
break;
case DUMB:
ail_dumb = 1;
break;
case CRIPPLE:
ail_crip = 1;
break;
case CURE:
ail_blind = 0;
ail_crip = 0;
ail_dumb = 0;
ail_deaf = 0;
break;
case TSS:
tsscom();
break; /* Time sharing escape */
case LISTFILE:
bprintf("\001f%s\001", messages[getpar()]);
break; /* Print a file - using bprintf file include */
case USERS:
usercom();
break;
/*
case BRIEF:
brief_cmd();
break;
*/
case GETOLOC:
a = getpar();
globaldata[getpar()] = oloc(a);
globaldata[getpar()] = ocarrf(a);
break; /* Load object location into flags */
case GETPLOC:
a = getpar();
globaldata[getpar()] = ploc(a);
break; /* Load player location into flags */
case SETSEX:
a = getpar();
setpsex(a, getpar());
break;
case PRONOUNS:
pncom();
break;
case WHO:
whocom();
break;
case GET:
getobj();
break;
case DROP:
dropitem();
break;
case WEAR:
wearcom();
break;
case REMOVE:
removecom();
break;
case GIVE:
givecom();
break;
case STEAL:
stealcom();
break;
case VALUE:
valuecom();
break;
case SCORE:
scorecom();
break;
case WEAPON:
weapcom();
break;
case DROPIN:
putcom();
break;
case FORCE:
forcecom();
break;
case EXORCISE:
exorcom();
break;
case BEG:
begcom();
break;
case TIME:
timecom();
break;
case SETACT:
setcom();
break;
case EXAMINE:
examcom();
break;
case LOCNODES:
loccom();
break;
case DIR:
dircom();
break;
case FOB:
/* Find object and load into flags MAY AFFECT PRONOUNS */
a = getpar();
b = getpar();
(void)getpar();
(void)getpar();
globaldata[a] = fobn(b == 1 ? item1 : item2);
break;
case RESET:
rescom();
break;
case CONVERSE:
convcom();
break;
case SHELL:
shellcom();
break;
case INACT:
incom();
break; /* Action after in is passed thru table seperate */
case GOTOACT:
goloccom();
break;
case PFLAGS:
setpflags();
break;
case PLAYERS:
peoplecom();
break;
case MOBILES:
mobilecom();
break;
case WHERE:
wherecom();
break;
case DECOBYTE:
a = getpar();
b = getpar();
osetbyte(a, b, obyte(a, b) - 1);
break;
case INCOBYTE:
/* Incremenbt object byte flag */
a = getpar();
b = getpar();
osetbyte(a, b, obyte(a, b) + 1);
break;
case SETOBYTE:
a = getpar();
b = getpar();
c = getpar();
osetbyte(a, b, c);
break;
case PROVOKE:
/* Do monster 0 point hit - starts fight if you with it */
woundmn(getpar(), 0);
break;
case MOVEMON:
/* Move player with NO messages about transfer - players as well as
* monsters */
a = getpar();
setploc(a, getpar());
break;
case WOUNDMON:
/* Wound a mobile - COMMAND CANNOT APLY TO PLAYERS, IF WOULD KILL */
a = getpar();
woundmn(a, getpar());
break;
case KILL:
killcom();
break;
case LOOK:
look_cmd();
break;
case BROAD:
broad(messages[getpar()]);
break;
case KILLPL:
killplcom();
break;
default:
if (n > 1999)
bprintf("%s", messages[n - 2000]); /* Analyse message groups */
else if (n > 199)
bprintf("%s\n", messages[n - 200]);
else
bprintf("**Invalid Action.\n");
}
}
disploc()
{
lookin(ploc(mynum));
}
listobject(x, y)
int x, y;
{
aobjsat(x, y, 0);
}