oextra obj.h follow-up (trunk only)
Just add some notes to obj.h around oextra.
This commit is contained in:
+52
-5
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)obj.h 3.5 2006/04/14 */
|
/* SCCS Id: @(#)obj.h 3.5 2006/04/15 */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -14,8 +14,9 @@ union vptrs {
|
|||||||
struct monst *v_ocarry; /* point back to carrying monst */
|
struct monst *v_ocarry; /* point back to carrying monst */
|
||||||
};
|
};
|
||||||
|
|
||||||
/***
|
/****
|
||||||
** oextra -- collection of all object extensions
|
*** oextra -- collection of all object extensions
|
||||||
|
** (see the note at the bottom of this file before adding oextra fields)
|
||||||
*/
|
*/
|
||||||
struct oextra {
|
struct oextra {
|
||||||
char *oname; /* ptr to name of object */
|
char *oname; /* ptr to name of object */
|
||||||
@@ -113,6 +114,12 @@ struct obj {
|
|||||||
struct oextra *oextra; /* pointer to oextra struct */
|
struct oextra *oextra; /* pointer to oextra struct */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define newobj() (struct obj *)alloc(sizeof(struct obj))
|
||||||
|
|
||||||
|
/***
|
||||||
|
** oextra referencing and testing macros
|
||||||
|
*/
|
||||||
|
|
||||||
#define ONAME(o) ((o)->oextra->oname)
|
#define ONAME(o) ((o)->oextra->oname)
|
||||||
#define OMID(o) ((o)->oextra->omid)
|
#define OMID(o) ((o)->oextra->omid)
|
||||||
#define OMONST(o) ((o)->oextra->omonst)
|
#define OMONST(o) ((o)->oextra->omonst)
|
||||||
@@ -125,8 +132,6 @@ struct obj {
|
|||||||
#define has_olong(o) ((o)->oextra && OLONG(o))
|
#define has_olong(o) ((o)->oextra && OLONG(o))
|
||||||
#define has_omailcmd(o) ((o)->oextra && OMAILCMD(o))
|
#define has_omailcmd(o) ((o)->oextra && OMAILCMD(o))
|
||||||
|
|
||||||
#define newobj() (struct obj *)alloc(sizeof(struct obj))
|
|
||||||
|
|
||||||
/* Weapons and weapon-tools */
|
/* Weapons and weapon-tools */
|
||||||
/* KMH -- now based on skill categories. Formerly:
|
/* KMH -- now based on skill categories. Formerly:
|
||||||
* #define is_sword(otmp) (otmp->oclass == WEAPON_CLASS && \
|
* #define is_sword(otmp) (otmp->oclass == WEAPON_CLASS && \
|
||||||
@@ -317,4 +322,46 @@ struct obj {
|
|||||||
#define CONTAINED_TOO 0x1
|
#define CONTAINED_TOO 0x1
|
||||||
#define BURIED_TOO 0x2
|
#define BURIED_TOO 0x2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Notes for adding new oextra structures:
|
||||||
|
*
|
||||||
|
* 1. Add the structure definition and any required macros in an appropriate
|
||||||
|
* header file that precedes this one.
|
||||||
|
* 2. Add a pointer to your new struct to the oextra struct in this file.
|
||||||
|
* 3. Add a referencing macro at the bottom of this file after the mextra
|
||||||
|
* struct (see ONAME, OMONST, OMIN, OLONG, or OMAILCMD for examples).
|
||||||
|
* 4. Add a testing macro after the set of referencing macros
|
||||||
|
* (see has_oname(), has_omonst(), has_omin(), has_olong(),
|
||||||
|
* has_omailcmd() for examples).
|
||||||
|
* 5. Create a newXX(otmp) function and possibly a free_XX(otmp) function
|
||||||
|
* in an appropriate new or existing source file and add a prototype
|
||||||
|
* for it to include/extern.h. The majority of these are currently
|
||||||
|
* located in mkobj.c for convenience.
|
||||||
|
*
|
||||||
|
* void FDECL(newXX, (struct obj *));
|
||||||
|
* void FDECL(free_XX, (struct obj *));
|
||||||
|
*
|
||||||
|
* void
|
||||||
|
* newxx(otmp)
|
||||||
|
* struct obj *otmp;
|
||||||
|
* {
|
||||||
|
* if (!otmp->mextra) otmp->oextra = newoextra();
|
||||||
|
* if (!XX(otmp)) {
|
||||||
|
* XX(otmp) = (struct XX *)alloc(sizeof(struct xx));
|
||||||
|
* (void) memset((genericptr_t) XX(otmp),
|
||||||
|
* 0, sizeof(struct xx));
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* 6. Adjust size_obj() in src/cmd.c appropriately.
|
||||||
|
* 7. Adjust dealloc_oextra() in src/mkobj.c to clean up
|
||||||
|
* properly during obj deallocation.
|
||||||
|
* 8. Adjust copy_oextra() in src/mkobj.c to make duplicate
|
||||||
|
* copies of your struct or data onto another obj struct.
|
||||||
|
* 9. Adjust restobj() in src/restore.c to deal with your
|
||||||
|
* struct or data during a restore.
|
||||||
|
* 10. Adjust saveobj() in src/save.c to deal with your
|
||||||
|
* struct or data during a save.
|
||||||
|
*/
|
||||||
|
|
||||||
#endif /* OBJ_H */
|
#endif /* OBJ_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user