Correct return types for all of the action handling functions in actions, so it's clear we're not just using arbitrary ints
This commit is contained in:
parent
2a5dac3d8c
commit
e7dc3eab5d
2 changed files with 35 additions and 34 deletions
63
actions.c
63
actions.c
|
@ -13,9 +13,9 @@
|
||||||
#include "dungeon.h"
|
#include "dungeon.h"
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
static int fill(verb_t, obj_t);
|
static phase_codes_t fill(verb_t, obj_t);
|
||||||
|
|
||||||
static int attack(command_t command)
|
static phase_codes_t attack(command_t command)
|
||||||
/* Attack. Assume target if unambiguous. "Throw" also links here.
|
/* Attack. Assume target if unambiguous. "Throw" also links here.
|
||||||
* Attackable objects fall into two categories: enemies (snake,
|
* Attackable objects fall into two categories: enemies (snake,
|
||||||
* dwarf, etc.) and others (bird, clam, machine). Ambiguous if 2
|
* dwarf, etc.) and others (bird, clam, machine). Ambiguous if 2
|
||||||
|
@ -84,6 +84,7 @@ static int attack(command_t command)
|
||||||
if (obj == VEND) {
|
if (obj == VEND) {
|
||||||
state_change(VEND,
|
state_change(VEND,
|
||||||
game.prop[VEND] == VEND_BLOCKS ? VEND_UNBLOCKS : VEND_BLOCKS);
|
game.prop[VEND] == VEND_BLOCKS ? VEND_UNBLOCKS : VEND_BLOCKS);
|
||||||
|
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,7 +186,7 @@ static int attack(command_t command)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bigwords(vocab_t id)
|
static phase_codes_t bigwords(vocab_t id)
|
||||||
/* FEE FIE FOE FOO (AND FUM). Advance to next state if given in proper order.
|
/* FEE FIE FOE FOO (AND FUM). Advance to next state if given in proper order.
|
||||||
* Look up foo in special section of vocab to determine which word we've got.
|
* Look up foo in special section of vocab to determine which word we've got.
|
||||||
* Last word zips the eggs back to the giant room (unless already there). */
|
* Last word zips the eggs back to the giant room (unless already there). */
|
||||||
|
@ -254,7 +255,7 @@ static void blast(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vbreak(verb_t verb, obj_t obj)
|
static phase_codes_t 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) {
|
||||||
|
@ -281,7 +282,7 @@ static int vbreak(verb_t verb, obj_t obj)
|
||||||
return (GO_CLEAROBJ);
|
return (GO_CLEAROBJ);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int brief(void)
|
static phase_codes_t brief(void)
|
||||||
/* Brief. Intransitive only. Suppress full descriptions after first time. */
|
/* Brief. Intransitive only. Suppress full descriptions after first time. */
|
||||||
{
|
{
|
||||||
game.abbnum = 10000;
|
game.abbnum = 10000;
|
||||||
|
@ -290,7 +291,7 @@ static int brief(void)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vcarry(verb_t verb, obj_t obj)
|
static phase_codes_t 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. */
|
||||||
|
@ -459,7 +460,7 @@ static int chain(verb_t verb)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int discard(verb_t verb, obj_t obj)
|
static phase_codes_t 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. */
|
||||||
|
@ -563,7 +564,7 @@ static int discard(verb_t verb, obj_t obj)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int drink(verb_t verb, obj_t obj)
|
static phase_codes_t 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. */
|
||||||
{
|
{
|
||||||
|
@ -593,7 +594,7 @@ static int drink(verb_t verb, obj_t obj)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int eat(verb_t verb, obj_t obj)
|
static phase_codes_t 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. */
|
||||||
{
|
{
|
||||||
|
@ -623,7 +624,7 @@ static int eat(verb_t verb, obj_t obj)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int extinguish(verb_t verb, obj_t obj)
|
static phase_codes_t 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) {
|
||||||
|
@ -659,7 +660,7 @@ static int extinguish(verb_t verb, obj_t obj)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int feed(verb_t verb, obj_t obj)
|
static phase_codes_t 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. */
|
||||||
{
|
{
|
||||||
|
@ -719,7 +720,7 @@ static int feed(verb_t verb, obj_t obj)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fill(verb_t verb, obj_t obj)
|
phase_codes_t 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.) */
|
||||||
{
|
{
|
||||||
|
@ -795,7 +796,7 @@ int fill(verb_t verb, obj_t obj)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int find(verb_t verb, obj_t obj)
|
static phase_codes_t 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)) {
|
||||||
|
@ -821,7 +822,7 @@ static int find(verb_t verb, obj_t obj)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fly(verb_t verb, obj_t obj)
|
static phase_codes_t 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) {
|
||||||
|
@ -857,7 +858,7 @@ static int fly(verb_t verb, obj_t obj)
|
||||||
return GO_TERMINATE;
|
return GO_TERMINATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int inven(void)
|
static phase_codes_t inven(void)
|
||||||
/* Inventory. If object, treat same as find. Else report on current burden. */
|
/* Inventory. If object, treat same as find. Else report on current burden. */
|
||||||
{
|
{
|
||||||
bool empty = true;
|
bool empty = true;
|
||||||
|
@ -878,7 +879,7 @@ static int inven(void)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int light(verb_t verb, obj_t obj)
|
static phase_codes_t 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) {
|
||||||
|
@ -916,7 +917,7 @@ static int light(verb_t verb, obj_t obj)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int listen(void)
|
static phase_codes_t listen(void)
|
||||||
/* Listen. Intransitive only. Print stuff based on object sound proprties. */
|
/* Listen. Intransitive only. Print stuff based on object sound proprties. */
|
||||||
{
|
{
|
||||||
vocab_t sound = locations[game.loc].sound;
|
vocab_t sound = locations[game.loc].sound;
|
||||||
|
@ -949,7 +950,7 @@ static int listen(void)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lock(verb_t verb, obj_t obj)
|
static phase_codes_t 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) {
|
||||||
|
@ -1032,7 +1033,7 @@ static int lock(verb_t verb, obj_t obj)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pour(verb_t verb, obj_t obj)
|
static phase_codes_t 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. */
|
||||||
{
|
{
|
||||||
|
@ -1077,7 +1078,7 @@ static int pour(verb_t verb, obj_t obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int quit(void)
|
static phase_codes_t quit(void)
|
||||||
/* Quit. Intransitive only. Verify intent and exit if that's what he wants. */
|
/* Quit. Intransitive only. Verify intent and exit if that's what he wants. */
|
||||||
{
|
{
|
||||||
if (yes(arbitrary_messages[REALLY_QUIT], arbitrary_messages[OK_MAN], arbitrary_messages[OK_MAN]))
|
if (yes(arbitrary_messages[REALLY_QUIT], arbitrary_messages[OK_MAN], arbitrary_messages[OK_MAN]))
|
||||||
|
@ -1085,7 +1086,7 @@ static int quit(void)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read(command_t command)
|
static phase_codes_t read(command_t command)
|
||||||
/* Read. Print stuff based on objtxt. Oyster (?) is special case. */
|
/* Read. Print stuff based on objtxt. Oyster (?) is special case. */
|
||||||
{
|
{
|
||||||
if (command.obj == INTRANSITIVE) {
|
if (command.obj == INTRANSITIVE) {
|
||||||
|
@ -1112,7 +1113,7 @@ static int read(command_t command)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int reservoir(void)
|
static phase_codes_t reservoir(void)
|
||||||
/* Z'ZZZ (word gets recomputed at startup; different each game). */
|
/* Z'ZZZ (word gets recomputed at startup; different each game). */
|
||||||
{
|
{
|
||||||
if (!AT(RESER) && game.loc != LOC_RESBOTTOM) {
|
if (!AT(RESER) && game.loc != LOC_RESBOTTOM) {
|
||||||
|
@ -1132,7 +1133,7 @@ static int reservoir(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rub(verb_t verb, obj_t obj)
|
static phase_codes_t 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) {
|
||||||
|
@ -1150,7 +1151,7 @@ static int rub(verb_t verb, obj_t obj)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int say(command_t command)
|
static phase_codes_t say(command_t command)
|
||||||
/* Say. Echo WD2. Magic words override. */
|
/* Say. Echo WD2. Magic words override. */
|
||||||
{
|
{
|
||||||
if (command.word[1].type == MOTION &&
|
if (command.word[1].type == MOTION &&
|
||||||
|
@ -1175,14 +1176,14 @@ static int say(command_t command)
|
||||||
return GO_CLEAROBJ;
|
return GO_CLEAROBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int throw_support(vocab_t spk)
|
static phase_codes_t throw_support(vocab_t spk)
|
||||||
{
|
{
|
||||||
rspeak(spk);
|
rspeak(spk);
|
||||||
drop(AXE, game.loc);
|
drop(AXE, game.loc);
|
||||||
return GO_MOVE;
|
return GO_MOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int throw (command_t command)
|
static phase_codes_t throw (command_t command)
|
||||||
/* Throw. Same as discard unless axe. Then same as attack except
|
/* Throw. Same as discard unless axe. Then same as attack except
|
||||||
* ignore bird, and if dwarf is present then one might be killed.
|
* ignore bird, and if dwarf is present then one might be killed.
|
||||||
* (Only way to do so!) Axe also special for dragon, bear, and
|
* (Only way to do so!) Axe also special for dragon, bear, and
|
||||||
|
@ -1243,7 +1244,7 @@ static int throw (command_t command)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int wake(verb_t verb, obj_t obj)
|
static phase_codes_t 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 ||
|
||||||
|
@ -1256,7 +1257,7 @@ static int wake(verb_t verb, obj_t obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int seed(verb_t verb, const char *arg)
|
static phase_codes_t seed(verb_t verb, const char *arg)
|
||||||
/* Set seed */
|
/* Set seed */
|
||||||
{
|
{
|
||||||
int32_t seed = strtol(arg, NULL, 10);
|
int32_t seed = strtol(arg, NULL, 10);
|
||||||
|
@ -1266,7 +1267,7 @@ static int seed(verb_t verb, const char *arg)
|
||||||
return GO_TOP;
|
return GO_TOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int waste(verb_t verb, turn_t turns)
|
static phase_codes_t waste(verb_t verb, turn_t turns)
|
||||||
/* Burn turns */
|
/* Burn turns */
|
||||||
{
|
{
|
||||||
game.limit -= turns;
|
game.limit -= turns;
|
||||||
|
@ -1274,7 +1275,7 @@ static int waste(verb_t verb, turn_t turns)
|
||||||
return GO_TOP;
|
return GO_TOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int wave(verb_t verb, obj_t obj)
|
static phase_codes_t 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 ||
|
||||||
|
@ -1320,7 +1321,7 @@ static int wave(verb_t verb, obj_t obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int action(command_t command)
|
phase_codes_t action(command_t command)
|
||||||
/* Analyse a verb. Remember what it was, go back for object if second word
|
/* Analyse a verb. Remember what it was, go back for object if second word
|
||||||
* unless verb is "say", which snarfs arbitrary second word.
|
* unless verb is "say", which snarfs arbitrary second word.
|
||||||
*/
|
*/
|
||||||
|
|
6
advent.h
6
advent.h
|
@ -102,7 +102,7 @@ typedef enum scorebonus {none, splatter, defeat, victory} score_t;
|
||||||
* These were at one time FORTRAN line numbers.
|
* These were at one time FORTRAN line numbers.
|
||||||
* The values don't matter, but perturb their order at your peril.
|
* The values don't matter, but perturb their order at your peril.
|
||||||
*/
|
*/
|
||||||
enum phase_codes {
|
typedef enum {
|
||||||
GO_TERMINATE,
|
GO_TERMINATE,
|
||||||
GO_MOVE,
|
GO_MOVE,
|
||||||
GO_TOP,
|
GO_TOP,
|
||||||
|
@ -111,7 +111,7 @@ enum phase_codes {
|
||||||
GO_WORD2,
|
GO_WORD2,
|
||||||
GO_UNKNOWN,
|
GO_UNKNOWN,
|
||||||
GO_DWARFWAKE,
|
GO_DWARFWAKE,
|
||||||
};
|
} phase_codes_t;
|
||||||
|
|
||||||
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 verb_t; // index into an actions array */
|
||||||
|
@ -235,7 +235,7 @@ extern int suspend(void);
|
||||||
extern int resume(void);
|
extern int resume(void);
|
||||||
extern int restore(FILE *);
|
extern int restore(FILE *);
|
||||||
extern long initialise(void);
|
extern long initialise(void);
|
||||||
extern int action(command_t);
|
extern phase_codes_t action(command_t);
|
||||||
extern void state_change(obj_t, int);
|
extern void state_change(obj_t, int);
|
||||||
extern bool is_valid(struct game_t);
|
extern bool is_valid(struct game_t);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue