Commit 7a533a911c about three weeks
ago reordered a couple of timers. The list of timers in nhlua.c was
overlooked at the time.
The theme room "Ice room" was affected. I'm surprised that sanity
checking while running the fuzzer didn't notice and complain.
72 lines
2.6 KiB
C
72 lines
2.6 KiB
C
/* NetHack 3.7 timeout.h $NHDT-Date: 1705087443 2024/01/12 19:24:03 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.23 $ */
|
|
/* Copyright 1994, Dean Luick */
|
|
/* NetHack may be freely redistributed. See license for details. */
|
|
|
|
#ifndef TIMEOUT_H
|
|
#define TIMEOUT_H
|
|
|
|
/* generic timeout function */
|
|
typedef void (*timeout_proc)(ANY_P *, long);
|
|
|
|
/* kind of timer */
|
|
enum timer_type {
|
|
TIMER_LEVEL = 0, /* event specific to level [melting ice] */
|
|
TIMER_GLOBAL = 1, /* event follows current play [not used] */
|
|
TIMER_OBJECT = 2, /* event follows an object [various] */
|
|
TIMER_MONSTER = 3, /* event follows a monster [not used] */
|
|
NUM_TIMER_KINDS /* 4 */
|
|
};
|
|
|
|
/* save/restore timer ranges */
|
|
#define RANGE_LEVEL 0 /* save/restore timers staying on level */
|
|
#define RANGE_GLOBAL 1 /* save/restore timers following global play */
|
|
|
|
/*
|
|
* Timeout functions. Add an enum here, then put it in the table
|
|
* in timeout.c. "One more level of indirection will fix everything."
|
|
* Also add it to timerstr[] in nhl_get_timertype(nhlua.c); the entries
|
|
* there match these but are spelled diffently.
|
|
*
|
|
* Note: if any are inserted, removed, or reordered then EDITLEVEL
|
|
* needs to be incremented because timeout indices get written into save
|
|
* and bones files if any timers are present while saving. (Adding new
|
|
* ones at the end isn't restricted this way since new indices won't be
|
|
* present in old data.)
|
|
*/
|
|
enum timeout_types {
|
|
ROT_ORGANIC = 0, /* for buried organics */
|
|
ROT_CORPSE,
|
|
REVIVE_MON,
|
|
ZOMBIFY_MON,
|
|
BURN_OBJECT,
|
|
HATCH_EGG,
|
|
FIG_TRANSFORM,
|
|
SHRINK_GLOB,
|
|
MELT_ICE_AWAY,
|
|
|
|
NUM_TIME_FUNCS
|
|
};
|
|
|
|
#define timer_is_pos(ttype) ((ttype) == MELT_ICE_AWAY)
|
|
#define timer_is_obj(ttype) ((ttype) == ROT_ORGANIC \
|
|
|| (ttype) == ROT_CORPSE \
|
|
|| (ttype) == REVIVE_MON \
|
|
|| (ttype) == ZOMBIFY_MON \
|
|
|| (ttype) == BURN_OBJECT \
|
|
|| (ttype) == HATCH_EGG \
|
|
|| (ttype) == FIG_TRANSFORM \
|
|
|| (ttype) == SHRINK_GLOB)
|
|
|
|
/* used in timeout.c */
|
|
typedef struct fe {
|
|
struct fe *next; /* next item in chain */
|
|
long timeout; /* when we time out */
|
|
unsigned long tid; /* timer ID */
|
|
short kind; /* kind of use */
|
|
short func_index; /* what to call when we time out */
|
|
anything arg; /* pointer to timeout argument */
|
|
Bitfield(needs_fixup, 1); /* does arg need to be patched? */
|
|
} timer_element;
|
|
|
|
#endif /* TIMEOUT_H */
|