buddha/bin/
buddha/cnf/
buddha/lib/
buddha/lib/etc/boards/
buddha/lib/house/
buddha/lib/misc/
buddha/lib/plralias/ZZZ/
buddha/lib/plrfiles/
buddha/lib/plrfiles/ZZZ/
buddha/lib/plrobjs/
buddha/lib/plrobjs/ZZZ/
buddha/lib/world/
buddha/lib/world/gld/
buddha/src/
buddha/src/doc/
/* ******************************************************************** *
 * FILE        : assemblies.h                  Copyright (C) 1999 Geoff Davis
*
 * USAGE: Definitions, constants and prototypes for assembly engine.   *
 * -------------------------------------------------------------------- *
 * 1999 MAY 07 gdavis/azrael@laker.net Initial implementation.         *
 * ******************************************************************** */

#if !defined( __ASSEMBLIES_H__ )
#define __ASSEMBLIES_H__

/* ******************************************************************** *
 * Preprocessor constants.                                             *
 * ******************************************************************** */

/* Assembly type: Used in ASSEMBLY.iAssemblyType */
#define ASSM_ASSEMBLE          0       // Assembly must be assembled.
#define ASSM_BAKE              1       // Assembly must be baked.
#define ASSM_BREW              2       // Assembly must be brewed.
#define ASSM_CRAFT             3       // Assembly must be crafted.
#define ASSM_FLETCH            4       // Assembly must be fletched.
#define ASSM_KNIT              5       // Assembly must be knitted.
#define ASSM_MAKE              6       // Assembly must be made.
#define ASSM_MIX               7       // Assembly must be mixed.
#define ASSM_THATCH            8       // Assembly must be thatched.
#define ASSM_WEAVE             9       // Assembly must be woven.

#define MAX_ASSM               10      // Number of assembly types.

/* ******************************************************************** *
 * Type aliases.                                                       *
 * ******************************************************************** */

typedef struct assembly_data   ASSEMBLY;
typedef struct component_data  COMPONENT;

/* ******************************************************************** *
 * Structure definitions.                                              *
 * ******************************************************************** */

/* Assembly structure definition. */
struct assembly_data {
  long         lVnum;                  /* Vnum of the object assembled. */
  long         lNumComponents;         /* Number of components. */
  unsigned char        uchAssemblyType;        /* Type of assembly (ASSM_xxx).
*/
  struct component_data *pComponents;          /* Array of component info. */
};

/* Assembly component structure definition. */
struct component_data {
  bool         bExtract;               /* Extract the object after use. */
  bool         bInRoom;                /* Component in room, not inven. */
  long         lVnum;                  /* Vnum of the component object. */
};

/* ******************************************************************** *
 * Prototypes for assemblies.c.
*
 * ******************************************************************** */

void           assemblyBootAssemblies( void );
void           assemblySaveAssemblies( void );
void           assemblyListToChar( struct char_data *pCharacter );

bool           assemblyAddComponent( long lVnum, long lComponentVnum,
                 bool bExtract, bool bInRoom );
bool           assemblyCheckComponents( long lVnum, struct char_data
                 *pCharacter );
bool           assemblyCreate( long lVnum, int iAssembledType );
bool           assemblyDestroy( long lVnum );
bool           assemblyHasComponent( long lVnum, long lComponentVnum );
bool           assemblyRemoveComponent( long lVnum, long lComponentVnum );

int            assemblyGetType( long lVnum );

long           assemblyCountComponents( long lVnum );
long           assemblyFindAssembly( const char *pszAssemblyName );
long           assemblyGetAssemblyIndex( long lVnum );
long           assemblyGetComponentIndex( ASSEMBLY *pAssembly,
                 long lComponentVnum );

ASSEMBLY*      assemblyGetAssemblyPtr( long lVnum );

/* ******************************************************************** */

#endif