Semantic type for verb

This commit is contained in:
NHOrus 2017-07-06 18:35:43 +03:00
parent cca3686f2f
commit 8f5c262e6d
2 changed files with 24 additions and 23 deletions

View file

@ -4,7 +4,7 @@
#include "advent.h" #include "advent.h"
#include "dungeon.h" #include "dungeon.h"
static int fill(token_t, token_t); static int fill(verb_t, obj_t);
static int attack(struct command_t *command) static int attack(struct command_t *command)
/* Attack. Assume target if unambiguous. "Throw" also links here. /* Attack. Assume target if unambiguous. "Throw" also links here.
@ -12,7 +12,7 @@ static int attack(struct command_t *command)
* dwarf, etc.) and others (bird, clam, machine). Ambiguous if 2 * dwarf, etc.) and others (bird, clam, machine). Ambiguous if 2
* enemies, or no enemies but 2 others. */ * enemies, or no enemies but 2 others. */
{ {
vocab_t verb = command->verb; verb_t verb = command->verb;
obj_t obj = command->obj; obj_t obj = command->obj;
if (obj == INTRANSITIVE) { if (obj == INTRANSITIVE) {
@ -245,7 +245,7 @@ static void blast(void)
} }
} }
static int vbreak(vocab_t verb, obj_t obj) static int vbreak(verb_t verb, obj_t obj)
/* Break. Only works for mirror in repository and, of course, the vase. */ /* Break. Only works for mirror in repository and, of course, the vase. */
{ {
switch (obj) { switch (obj) {
@ -280,14 +280,14 @@ static int brief(void)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int vcarry(token_t verb, obj_t obj) static int vcarry(verb_t verb, obj_t obj)
/* Carry an object. Special cases for bird and cage (if bird in cage, can't /* Carry an object. Special cases for bird and cage (if bird in cage, can't
* take one without the other). Liquids also special, since they depend on * take one without the other). Liquids also special, since they depend on
* status of bottle. Also various side effects, etc. */ * status of bottle. Also various side effects, etc. */
{ {
if (obj == INTRANSITIVE) { if (obj == INTRANSITIVE) {
/* Carry, no object given yet. OK if only one object present. */ /* Carry, no object given yet. OK if only one object present. */
if (game.atloc[game.loc] == 0 || if (game.atloc[game.loc] == NO_OBJECT ||
game.link[game.atloc[game.loc]] != 0 || game.link[game.atloc[game.loc]] != 0 ||
atdwrf(game.loc) > 0) atdwrf(game.loc) > 0)
return GO_UNKNOWN; return GO_UNKNOWN;
@ -295,7 +295,7 @@ static int vcarry(token_t verb, obj_t obj)
} }
if (TOTING(obj)) { if (TOTING(obj)) {
rspeak(ALREADY_CARRYING); speak(actions[verb].message);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
@ -398,7 +398,7 @@ static int vcarry(token_t verb, obj_t obj)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int chain(token_t verb) static int chain(verb_t verb)
/* Do something to the bear's chain */ /* Do something to the bear's chain */
{ {
if (verb != LOCK) { if (verb != LOCK) {
@ -445,7 +445,7 @@ static int chain(token_t verb)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int discard(token_t verb, obj_t obj) static int discard(verb_t verb, obj_t obj)
/* Discard object. "Throw" also comes here for most objects. Special cases for /* Discard object. "Throw" also comes here for most objects. Special cases for
* bird (might attack snake or dragon) and cage (might contain bird) and vase. * bird (might attack snake or dragon) and cage (might contain bird) and vase.
* Drop coins at vending machine for extra batteries. */ * Drop coins at vending machine for extra batteries. */
@ -526,7 +526,7 @@ static int discard(token_t verb, obj_t obj)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int drink(token_t verb, obj_t obj) static int drink(verb_t verb, obj_t obj)
/* Drink. If no object, assume water and look for it here. If water is in /* Drink. If no object, assume water and look for it here. If water is in
* the bottle, drink that, else must be at a water loc, so drink stream. */ * the bottle, drink that, else must be at a water loc, so drink stream. */
{ {
@ -556,7 +556,7 @@ static int drink(token_t verb, obj_t obj)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int eat(token_t verb, obj_t obj) static int eat(verb_t verb, obj_t obj)
/* Eat. Intransitive: assume food if present, else ask what. Transitive: food /* Eat. Intransitive: assume food if present, else ask what. Transitive: food
* ok, some things lose appetite, rest are ridiculous. */ * ok, some things lose appetite, rest are ridiculous. */
{ {
@ -585,7 +585,7 @@ static int eat(token_t verb, obj_t obj)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int extinguish(token_t verb, obj_t obj) static int extinguish(verb_t verb, obj_t obj)
/* Extinguish. Lamp, urn, dragon/volcano (nice try). */ /* Extinguish. Lamp, urn, dragon/volcano (nice try). */
{ {
if (obj == INTRANSITIVE) { if (obj == INTRANSITIVE) {
@ -621,7 +621,7 @@ static int extinguish(token_t verb, obj_t obj)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int feed(token_t verb, obj_t obj) static int feed(verb_t verb, obj_t obj)
/* Feed. If bird, no seed. Snake, dragon, troll: quip. If dwarf, make him /* Feed. If bird, no seed. Snake, dragon, troll: quip. If dwarf, make him
* mad. Bear, special. */ * mad. Bear, special. */
{ {
@ -681,7 +681,7 @@ static int feed(token_t verb, obj_t obj)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
int fill(token_t verb, obj_t obj) int fill(verb_t verb, obj_t obj)
/* Fill. Bottle or urn must be empty, and liquid available. (Vase /* Fill. Bottle or urn must be empty, and liquid available. (Vase
* is nasty.) */ * is nasty.) */
{ {
@ -757,7 +757,7 @@ int fill(token_t verb, obj_t obj)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int find(token_t verb, obj_t obj) static int find(verb_t verb, obj_t obj)
/* Find. Might be carrying it, or it might be here. Else give caveat. */ /* Find. Might be carrying it, or it might be here. Else give caveat. */
{ {
if (TOTING(obj)) { if (TOTING(obj)) {
@ -783,7 +783,7 @@ static int find(token_t verb, obj_t obj)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int fly(token_t verb, obj_t obj) static int fly(verb_t verb, obj_t obj)
/* Fly. Snide remarks unless hovering rug is here. */ /* Fly. Snide remarks unless hovering rug is here. */
{ {
if (obj == INTRANSITIVE) { if (obj == INTRANSITIVE) {
@ -840,7 +840,7 @@ static int inven(void)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int light(token_t verb, obj_t obj) static int light(verb_t verb, obj_t obj)
/* Light. Applicable only to lamp and urn. */ /* Light. Applicable only to lamp and urn. */
{ {
if (obj == INTRANSITIVE) { if (obj == INTRANSITIVE) {
@ -908,7 +908,7 @@ static int listen(void)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int lock(token_t verb, obj_t obj) static int lock(verb_t verb, obj_t obj)
/* Lock, unlock, no object given. Assume various things if present. */ /* Lock, unlock, no object given. Assume various things if present. */
{ {
if (obj == INTRANSITIVE) { if (obj == INTRANSITIVE) {
@ -987,7 +987,7 @@ static int lock(token_t verb, obj_t obj)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
static int pour(token_t verb, obj_t obj) static int pour(verb_t verb, obj_t obj)
/* Pour. If no object, or object is bottle, assume contents of bottle. /* Pour. If no object, or object is bottle, assume contents of bottle.
* special tests for pouring water or oil on plant or rusty door. */ * special tests for pouring water or oil on plant or rusty door. */
{ {
@ -1087,7 +1087,7 @@ static int reservoir(void)
} }
} }
static int rub(token_t verb, obj_t obj) static int rub(verb_t verb, obj_t obj)
/* Rub. Yields various snide remarks except for lit urn. */ /* Rub. Yields various snide remarks except for lit urn. */
{ {
if (obj == URN && game.prop[URN] == URN_LIT) { if (obj == URN && game.prop[URN] == URN_LIT) {
@ -1200,7 +1200,7 @@ static int throw (struct command_t *command)
} }
} }
static int wake(token_t verb, obj_t obj) static int wake(verb_t verb, obj_t obj)
/* Wake. Only use is to disturb the dwarves. */ /* Wake. Only use is to disturb the dwarves. */
{ {
if (obj != DWARF || if (obj != DWARF ||
@ -1213,7 +1213,7 @@ static int wake(token_t verb, obj_t obj)
} }
} }
static int wave(token_t verb, obj_t obj) static int wave(verb_t verb, obj_t obj)
/* Wave. No effect unless waving rod at fissure or at bird. */ /* Wave. No effect unless waving rod at fissure or at bird. */
{ {
if (obj != ROD || if (obj != ROD ||

View file

@ -114,8 +114,9 @@ enum phase_codes {
GO_DWARFWAKE, GO_DWARFWAKE,
}; };
typedef long token_t; // word token - someday this will be char[TOKLEN+1] typedef long token_t; // word token - someday this will be char[TOKLEN+1] */
typedef long vocab_t; // index into a vocabulary array */ typedef long vocab_t; // index into a vocabulary array */
typedef long verb_t; // index into an actions array */
typedef long obj_t; // index into the object array */ typedef long obj_t; // index into the object array */
typedef long loc_t; // index into the locations array */ typedef long loc_t; // index into the locations array */
@ -191,7 +192,7 @@ struct settings_t {
struct command_t { struct command_t {
enum speechpart part; enum speechpart part;
vocab_t verb; verb_t verb;
obj_t obj; obj_t obj;
token_t wd1; token_t wd1;
token_t wd2; token_t wd2;