|
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); }