zim/area/
zim/bin/
zim/clans/plists/
zim/corefiles/
zim/doc/muddy/
zim/gods/
zim/log/
zim/player/
zim/skill_tree/
zim/tmp/
/*-
 * Copyright (c) 2006 Zsuzsu <little_zsuzsu@hotmail.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $Id: waffects.h 851 2006-04-22 13:34:00Z zsuzsu $
 */

/*
 * materials - stuff things are made out of
 */

#ifndef _MATERIAL_H_
#define _MATERIAL_H_

#define MAT_UNKNOWN	0

#define MAT_TYPE_UNKNOWN 0
#define MAT_TYPE_METAL	 1
#define MAT_TYPE_WOOD	 2
#define MAT_TYPE_ANIMAL	 3
#define MAT_TYPE_PLANT	 4
#define MAT_TYPE_STONE	 5
#define MAT_TYPE_GEM	 6
#define MAT_TYPE_LIQUID	 7
#define MAT_TYPE_GAS	 8
#define MAT_TYPE_ENERGY	 9
#define MAT_TYPE_MAGIC	 10

#define MAT_NONE	(0)
#define MAT_BURNS	(A)	/*heat*/
#define MAT_MELTS	(B)	/*heat*/
#define MAT_FLOATS	(C)	/*water*/
#define	MAT_EVAPORATES	(D)	/*heat*/
#define MAT_RUSTS	(E)	/*water*/
#define MAT_FUSES	(F)	/*electricity */
#define MAT_ROTS	(G)
#define MAT_FRAGILE	(H)
#define MAT_NOCLEAVE	(I)	/*can you cleave it*/

typedef struct material_t	material_t;

struct material_t
{
	material_t 		*next;
	const char 		*name;
	int			type;
	flag64_t		flags;
	int			density;
	int			rigidity;
	int			fragility;
	int			cost;
	int			bp_cost;
	int			noisy;
	int			antimagic;
	int			resist[DAM_MAX];
	int			vuln[DAM_MAX];
};

/* global variables */
extern varr materials;
extern flag_t   armor_class_types[];
extern flag_t	material_types[];
extern flag_t	material_flags[];

#define MATERIAL(i)		((material_t *) VARR_GET(&materials, i))
#define material_lookup(i)	((material_t *) varr_get(&materials, i))
#define MAT_DEFAULT_MOB		material_lookup_name("flesh")

/* free/delete */
material_t *	material_new	(void);
void		material_free	(material_t *pmat);
const char *	material_name	(int i);
int		material_lookup_name	(const char *name);

#endif