Replace magic linenumbers with a clearer enum.
This commit is contained in:
parent
b22d6a65b9
commit
9bac28878d
3 changed files with 152 additions and 152 deletions
52
actions.c
52
actions.c
|
@ -977,27 +977,20 @@ static int wave(token_t obj)
|
|||
* "goto".
|
||||
*/
|
||||
|
||||
int action(FILE *input, long STARTAT, long verb, long obj)
|
||||
int action(FILE *input, enum speechpart part, long verb, long obj)
|
||||
/* Analyse a verb. Remember what it was, go back for object if second word
|
||||
* unless verb is "say", which snarfs arbitrary second word.
|
||||
*/
|
||||
{
|
||||
int kk;
|
||||
switch(STARTAT) {
|
||||
case 4000: goto L4000;
|
||||
case 4090: goto L4090;
|
||||
case 5000: goto L5000;
|
||||
}
|
||||
BUG(99);
|
||||
|
||||
L4000:
|
||||
switch(part)
|
||||
{
|
||||
case intransitive:
|
||||
SPK=ACTSPK[verb];
|
||||
if (WD2 > 0 && verb != SAY) return(2800);
|
||||
if (verb == SAY)obj=WD2;
|
||||
if (obj > 0) goto L4090;
|
||||
|
||||
/* Analyse an intransitive verb (ie, no object given yet). */
|
||||
|
||||
if (obj == 0) {
|
||||
/* Analyse an intransitive verb (ie, no object given yet). */
|
||||
switch (verb-1) {
|
||||
case 0: /* CARRY */ return carry(INTRANSITIVE);
|
||||
case 1: /* DROP */ return(8000);
|
||||
|
@ -1035,10 +1028,12 @@ L4000:
|
|||
case 33: /* ZZZZ */ return reservoir();
|
||||
}
|
||||
BUG(23);
|
||||
|
||||
/* Analyse a transitive verb. */
|
||||
|
||||
L4090: switch (verb-1) {
|
||||
}
|
||||
/* FALLTHRU */
|
||||
case transitive:
|
||||
L4090:
|
||||
/* Analyse a transitive verb. */
|
||||
switch (verb-1) {
|
||||
case 0: /* CARRY */ return carry(obj);
|
||||
case 1: /* DROP */ return discard(obj, false);
|
||||
case 2: /* SAY */ return say();
|
||||
|
@ -1075,17 +1070,17 @@ L4090: switch (verb-1) {
|
|||
case 33: /* ZZZZ */ return reservoir();
|
||||
}
|
||||
BUG(24);
|
||||
|
||||
/* Analyse an object word. See if the thing is here, whether we've got a verb
|
||||
* yet, and so on. Object must be here unless verb is "find" or "invent(ory)"
|
||||
* (and no new verb yet to be analysed). Water and oil are also funny, since
|
||||
* they are never actually dropped at any location, but might be here inside
|
||||
* the bottle or urn or as a feature of the location. */
|
||||
|
||||
L5000:
|
||||
case unknown:
|
||||
/* Analyse an object word. See if the thing is here, whether
|
||||
* we've got a verb yet, and so on. Object must be here
|
||||
* unless verb is "find" or "invent(ory)" (and no new verb
|
||||
* yet to be analysed). Water and oil are also funny, since
|
||||
* they are never actually dropped at any location, but might
|
||||
* be here inside the bottle or urn or as a feature of the
|
||||
* location. */
|
||||
if (!HERE(obj))
|
||||
goto L5100;
|
||||
L5010:
|
||||
L5010:
|
||||
if (WD2 > 0)
|
||||
return(2800);
|
||||
if (verb != 0)
|
||||
|
@ -1094,7 +1089,7 @@ L5010:
|
|||
RSPEAK(255);
|
||||
return(2600);
|
||||
|
||||
L5100:
|
||||
L5100:
|
||||
if (obj == GRATE) {
|
||||
if (game.loc == 1 || game.loc == 4 || game.loc == 7)
|
||||
obj=DPRSSN;
|
||||
|
@ -1131,4 +1126,7 @@ L5100:
|
|||
SETPRM(1,WD1,WD1X);
|
||||
RSPEAK(256);
|
||||
return(2012);
|
||||
default:
|
||||
BUG(99);
|
||||
}
|
||||
}
|
||||
|
|
1
advent.h
1
advent.h
|
@ -182,3 +182,4 @@ extern long AMBER, ATTACK, AXE, BACK, BATTER, BEAR,
|
|||
/* everything else */
|
||||
extern long K, SPK, WD1, WD1X, WD2, WD2X;
|
||||
|
||||
enum speechpart {unknown, intransitive, transitive};
|
||||
|
|
9
main.c
9
main.c
|
@ -659,6 +659,7 @@ static bool do_command(FILE *cmdin)
|
|||
long KQ, VERB, KK, V1, V2;
|
||||
long obj, i;
|
||||
static long IGO = 0;
|
||||
enum speechpart part;
|
||||
|
||||
/* Can't leave cave once it's closing (except by main office). */
|
||||
if (OUTSID(game.newloc) && game.newloc != 0 && game.closng) {
|
||||
|
@ -868,11 +869,11 @@ L3000: SETPRM(1,WD1,WD1X);
|
|||
|
||||
/* Verb and object analysis moved to separate module. */
|
||||
|
||||
L4000: i=4000; VERB=K; goto Laction;
|
||||
L4090: i=4090; goto Laction;
|
||||
L5000: i=5000; obj = K;
|
||||
L4000: part=intransitive; VERB=K; goto Laction;
|
||||
L4090: part=transitive; goto Laction;
|
||||
L5000: part=unknown; obj = K;
|
||||
Laction:
|
||||
switch (action(cmdin, i, VERB, obj)) {
|
||||
switch (action(cmdin, part, VERB, obj)) {
|
||||
case 2: return true;
|
||||
case 8: goto L8;
|
||||
case 2000: goto L2000;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue