Argila2.0/
Argila2.0/pp/
Argila2.0/pp/lib/save/objs/g/
Argila2.0/pp/lib/save/player/g/
Argila2.0/pp/regions/
Argila2.0/pp/regions/Lscripts/
Argila2.0/pp/src/lib/
/*------------------------------------------------------------------------\
|  utils.h : Utility Macros                           www.yourmud.org     | 
|  Copyright (C) 2006, Project Argila: Auroness                           |
|                                                                         |
|  All rights reserved. See Licensing documents included.                 |
|                                                                         |
|  Based upon Shadows of Isildur RPI Engine                               |
|  Copyright C. W. McHenry [Traithe], 2004                                |
|  Derived under license from DIKU GAMMA (0.0).                           |
\------------------------------------------------------------------------*/

#define MEMCHK(x) {printf("===%s: ",x); \
  myinfo=mallinfo(); printf("%12d %12d\n",myinfo.hblkhd,myinfo.uordblks);}
#define TRUE  1
#define FALSE 0
#define LOWER(c) (((c)>='A'  && (c) <= 'Z') ? ((c)+('a'-'A')) : (c))
#define UPPER(c) (((c)>='a'  && (c) <= 'z') ? ((c)+('A'-'a')) : (c) )
#define ISNEWL(ch) ((ch) == '\n' || (ch) == '\r') 
#define IF_STR(st) ((st) ? (st) : "\0")
#define CAP(st)  (*(st) = UPPER(*(st)), st)
#define LOW(st)  (*(st) = LOWER(*(st)), st)
#define CREATE(result, type, number)  do {\
	if (!((result) = (type *) alloc ((number) * sizeof(type), 16)))\
		{ perror("CREATE: alloc failure"); abort(); } } while(0)
#define IS_SET(flag,bit)  ((flag) & (bit))
#define IS_AFFECTED(ch,skill) ( IS_SET((ch)->affected_by, (skill)) )

#define IS_NIGHT ( !sun_light )

#define IS_LIGHT(room)  !is_dark (room)

#define SET_BIT(var,bit)  ((var) = (var) | (bit))

#define REMOVE_BIT(var,bit)  ((var) = (var) & ~(bit) )

#define CAN_SEE(sub, obj)	( ( (IS_LIGHT (obj->room) ||					   \
								 get_affect (sub, MAGIC_AFFECT_INFRAVISION) || IS_SET (sub->affected_by, AFF_INFRAVIS)) &&	   \
																			   \
								(!get_affect (obj, MAGIC_AFFECT_INVISIBILITY) ||	   \
								 get_affect (sub, MAGIC_AFFECT_SEE_INVISIBLE)) &&	   \
																			   \
								!((obj->room->sector_type == SECT_WOODS ||     \
								   obj->room->sector_type == SECT_FOREST ||    \
								   obj->room->sector_type == SECT_HILLS) &&    \
								  (get_affect (obj, MAGIC_AFFECT_CONCEALMENT) &&			   \
								   !get_affect (sub, MAGIC_AFFECT_SENSE_LIFE))) &&    \
																			   \
								!get_affect (obj, MAGIC_HIDDEN) &&			   \
                                                                               \
								!is_blind (sub) &&                             	\
								!IS_SET (obj->flags, FLAG_WIZINVIS) &&		\
								(weather_info[obj->room->zone].state != HEAVY_SNOW || IS_SET (obj->room->room_flags, INDOORS)) ) ||		   \
														   \
							  !IS_MORTAL (sub) )

#define HSHR(ch) ((ch)->sex ?					\
	(((ch)->sex == 1) ? "his" : "her") : "its")

#define HSSH(ch) ((ch)->sex ?					\
	(((ch)->sex == 1) ? "he" : "she") : "it")

#define HMHR(ch) ((ch)->sex ? 					\
	(((ch)->sex == 1) ? "him" : "her") : "it")	

#define ANA(obj) (strchr("aeiouyAEIOUY", *(obj)->name) ? "An" : "A")

#define SANA(obj) (strchr("aeiouyAEIOUY", *(obj)->name) ? "an" : "a")

#define IS_NPC(ch) (IS_SET((ch)->act, ACT_ISNPC))

#define IS_MORTAL(ch)	(!GET_TRUST(ch))
#define GET_POS(ch)     ((ch)->position)
#define GET_COND(ch, i) ((ch)->conditions[(i)])
#define GET_TRUST(ch)	(get_trust (ch))
#define GET_NAME(ch)    ((ch)->tname)
#define GET_NAMES(ch)    ((ch)->name)
#define GET_AGE(ch)     (age(ch).year)
#define GET_STR(ch)     ((ch)->tmp_str)
#define GET_DEX(ch)     ((ch)->tmp_dex)
#define GET_INT(ch)     ((ch)->tmp_intel)
#define GET_WIL(ch)		((ch)->tmp_wil)
#define GET_AUR(ch)		((ch)->tmp_aur)
#define GET_CON(ch)     ((ch)->tmp_con)
#define GET_AGI(ch)		((ch)->tmp_agi)
#define GET_AC(ch)      ((ch)->armor)
#define GET_HIT(ch)     ((ch)->hit)
#define GET_DAM(ch)	(get_damage_total(ch))
#define GET_MAX_HIT(ch) ((ch)->max_hit)
#define GET_MOVE(ch)    ((ch)->move)
#define GET_MAX_MOVE(ch) ((ch)->max_move)
#define GET_CASH(ch)    ((ch)->cash)
#define GET_SEX(ch)     ((ch)->sex)
#define GET_SPEAKS(ch)  ((ch)->speaks)
#define GET_OFFENSE(ch) ((ch)->offense)
#define GET_DAMROLL(ch) ((ch)->mob->damroll)
#define AWAKE(ch) (GET_POS(ch) > POSITION_SLEEPING)
#define WAIT_STATE(ch, cycle)  (((ch)->desc) ? (ch)->desc->wait = (cycle) : 0)
#define GET_FLAG(ch,flag) (IS_SET ((ch)->flags, flag))

/* Object And Carry related macros */

#define CAN_SEE_OBJ(sub, obj)	can_see_obj (sub, obj)

#define IS_OBJ_VIS(sub, obj)										\
	( (( !IS_SET((obj)->obj_flags.extra_flags, ITEM_INVISIBLE) || 	\
	     get_affect (sub, MAGIC_AFFECT_SEE_INVISIBLE) ) &&					\
		 !is_blind (sub))                                           \
         || obj->location == WEAR_BLINDFOLD                         \
	     || !IS_MORTAL(sub))

#define GET_ITEM_TYPE(obj) ((obj)->obj_flags.type_flag)

#define CAN_WEAR(obj, part) (IS_SET((obj)->obj_flags.wear_flags,part))
#define IS_WEARABLE(obj) ((obj)->obj_flags.wear_flags &            \
				(ITEM_WEAR_BODY | ITEM_WEAR_LEGS | ITEM_WEAR_ARMS)) 

#define GET_OBJ_WEIGHT(obj) ((obj)->obj_flags.weight)
#define OBJ_MASS(obj) obj_mass(obj)

#define CAN_CARRY_W(ch) calc_lookup (ch, REG_MISC, MISC_MAX_CARRY_W)
#define CAN_CARRY_N(ch) (IS_MOUNT (ch) ? 0 : calc_lookup (ch, REG_MISC, MISC_MAX_CARRY_N))

#define IS_CARRYING_W(ch) carrying(ch)
#define IS_CARRYING_N(ch) ((ch)->carry_items)

#define IS_ENCUMBERED(ch) (GET_STR (ch) * enc_tab [1].str_mult_wt < IS_CARRYING_W (ch))

#define CAN_CARRY_OBJ(ch,obj)  \
   (((IS_CARRYING_W(ch) + GET_OBJ_WEIGHT(obj)) <= CAN_CARRY_W(ch)) &&   \
    ((IS_CARRYING_N(ch) + 1) <= CAN_CARRY_N(ch)))

#define CAN_GET_OBJ(ch, obj)   \
   (CAN_WEAR((obj), ITEM_TAKE) && CAN_CARRY_OBJ((ch),(obj)) &&          \
    CAN_SEE_OBJ((ch),(obj)))

#define IS_OBJ_STAT(obj,stat) (IS_SET((obj)->obj_flags.extra_flags,stat))



/* char name/short_desc(for mobs) or someone?  */

#define PERS(ch, vict)  (CAN_SEE((vict), (ch)) ? \
	char_short((ch)) : "someone")


#define OBJS(obj, vict) (CAN_SEE_OBJ((vict), (obj)) ? \
	obj_short_desc (obj) : "something")

#define OBJN(obj, vict) (CAN_SEE_OBJ((vict), (obj)) ? \
	fname((obj)->name) : "something")

#define OUTSIDE(ch) (!IS_SET((ch)->room->room_flags,INDOORS) && \
			ch->room->sector_type != SECT_INSIDE && ch->room->sector_type != SECT_UNDERWATER)

#define PASSAGE(ch, door)  ((ch)->room->dir_option[door])

#define CAN_GO(ch, door) (PASSAGE(ch,door)  &&  (PASSAGE(ch,door)->to_room != NOWHERE) \
                          && !IS_SET(PASSAGE(ch, door)->exit_info, PASSAGE_CLOSED))

#define CAN_FLEE_SOMEWHERE(ch) (CAN_GO(ch, DIR_NORTH) || CAN_GO(ch, DIR_SOUTH) || \
								CAN_GO(ch, DIR_EAST) || CAN_GO(ch, DIR_WEST))

#define SWIM_ONLY(room) ((room)->sector_type == SECT_OCEAN || \
					 	(room)->sector_type == SECT_REEF ||  \
						(room)->sector_type == SECT_RIVER || \
						(room)->sector_type == SECT_LAKE || \
						(room)->sector_type == SECT_UNDERWATER || \
						is_room_affected (room->affects, MAGIC_ROOM_FLOOD) )

#define IS_SWIMMING(ch) SWIM_ONLY((ch)->room)

#define IS_DROWNING(ch) (IS_SWIMMING(ch) && IS_MORTAL(ch)) && \
				(get_affect (ch, AFFECT_HOLDING_BREATH) && \
				get_affect (ch, AFFECT_HOLDING_BREATH)->a.spell.duration <= 0)

#define IS_FROZEN(zone) (IS_SET(zone_table[(zone)].flags,Z_FROZEN))

#define IS_SUBDUEE(ch) (is_he_here (ch, (ch)->subdue, 0) && \
                        GET_FLAG (ch, FLAG_SUBDUEE))
#define IS_SUBDUER(ch) (is_he_here (ch, (ch)->subdue, 0) && \
                        GET_FLAG (ch, FLAG_SUBDUER))

#define IS_MOUNT(ch) (IS_SET (ch->act, ACT_MOUNT))

#define IS_RIDER(ch) (is_he_here (ch, (ch)->mount, 0) && \
                      !IS_SET (ch->act, ACT_MOUNT))
#define IS_RIDEE(ch) (is_he_here (ch, (ch)->mount, 0) && \
                      IS_SET (ch->act, ACT_MOUNT))

#define IS_HITCHER(ch) (is_he_here (ch, (ch)->hitchee, 0) &&	\
						ch->hitchee->hitcher == ch)
#define IS_HITCHEE(ch) (is_he_here (ch, (ch)->hitcher, 0) &&	\
						ch->hitcher->hitchee == ch)

#define IS_TABLE(obj) (GET_ITEM_TYPE (obj) == ITEM_CONTAINER && \
                       IS_SET (obj->obj_flags.extra_flags, ITEM_TABLE))

#define TOGGLE(flag, bit) { if ( IS_SET (flag, bit) )          \
                               REMOVE_BIT (flag, bit);         \
                            else                               \
                               SET_BIT (flag, bit);            \
						  }

#define SEND_TO_Q(messg, desc)  write_to_q ((messg), &(desc)->output)

#define bzero(a,b) (memset((a), '\0', (b)), (void) 0)

#define IS_SPACE(c)	((c) == ' ' || (c) == '\t')

#ifdef NOVELL
#define sigmask(m) ((unsigned long) 1 << ((m) - 1 ))
#endif