6D/
6D/area/
6D/boards/
6D/city/
6D/color/
6D/corpses/
6D/councils/
6D/htowns/
6D/news/
6D/specials/
6D/src/specials/
6D/src/trades/
/* Codebase macros - Change as you might need.
 * Yes, Rogel, you can gloat all you want. You win, this is cleaner, though not by a whole lot.
 */

#ifndef __I3CFG_H__
#define __I3CFG_H__

#ifndef I3CIRCLE
#define CH_I3DATA(ch)           ((ch)->pcdata->i3chardata)
#define CH_I3LEVEL(ch)          ((ch)->level)
#define CH_I3NAME(ch)           ((ch)->name)
#define CH_I3SEX(ch)            ((ch)->sex)
#define CH_I3TITLE(ch)          ((ch)->pcdata->title)
#endif

#if defined(I3SMAUG) || defined(I3CHRONICLES)
#define SMAUGSOCIAL
#define SOCIAL_DATA SOCIALTYPE
#define CH_I3RANK(ch)           ((ch)->pcdata->rank)
#endif

#ifdef I3ROM
#define first_descriptor descriptor_list
#define CH_I3RANK(ch)           (title_table[(ch)->Class][(ch)->level][(ch)->sex == SEX_FEMALE ? 1 : 0])
#endif

#ifdef I3MERC
#define first_descriptor descriptor_list
#define CH_I3RANK(ch)           (title_table[(ch)->Class][(ch)->level][(ch)->sex == SEX_FEMALE ? 1 : 0])
#endif

#ifdef I3UENVY
#define SMAUGSOCIAL
#define SOCIAL_DATA SOC_INDEX_DATA
SOC_INDEX_DATA         *find_social(char *command);

#define first_descriptor descriptor_list
#define I3MAXPLAYERS sysdata.max_players
#define CH_I3DATA(ch)      ((ch)->pcdata->i3chardata)
#define CH_I3LEVEL(ch)     ((ch)->level)
#define CH_I3NAME(ch)      ((ch)->name)
#define CH_I3TITLE(ch)     ((ch)->pcdata->title)
#define CH_I3RANK(ch)      (title_table[(ch)->Class][(ch)->level][(ch)->sex == SEX_FEMALE ? 1 : 0])
#define CH_I3SEX(ch)       ((ch)->sex)
#endif

#ifdef I3UENVY
#define SMAUGSOCIAL
#define SOCIAL_DATA SOC_INDEX_DATA
SOC_INDEX_DATA         *find_social(char *command);

#define first_descriptor descriptor_list
#define CH_I3RANK(ch)           (title_table[(ch)->Class][(ch)->level][(ch)->sex == SEX_FEMALE ? 1 : 0])
#endif

#ifdef I3ACK
#define first_descriptor first_desc
#define CH_I3RANK(ch)           (class_table[(ch)->Class].who_name)
#endif

/* Blasted circle, always gotta do thing the hard way! */
#ifdef I3CIRCLE
#define SMAUGSOCIAL

   /*
    * This should be in an act.social.h, if it existed. Introducing
    * it in an I3 patch would be too intrusive. 
    */
struct social_messg
{
  int                     act_nr;
  int                     hide;
  int                     min_victim_position;
  char                   *char_no_arg;
  char                   *others_no_arg;
  char                   *char_found;
  char                   *others_found;
  char                   *vict_found;
  char                   *not_found;
  char                   *char_auto;
  char                   *others_auto;
};

extern struct social_messg *soc_mess_list;
struct social_messg    *find_social(const char *name);

typedef struct social_messg SOCIAL_DATA;
typedef struct char_data CHAR_DATA;
typedef struct descriptor_data DESCRIPTOR_DATA;

extern const char      *class_abbrevs[];

const char             *title_female(int chclass, int level);
const char             *title_male(int chclass, int level);

#define first_descriptor         descriptor_list
#define URANGE(a, b, c)          ((b) < (a) ? (a) : ((b) > (c) ? (c) : (b)))
#define CH_I3DATA(ch)           ((ch)->player_specials->i3chardata)
#define CH_I3LEVEL(ch)          GET_LEVEL(ch)
#define CH_I3NAME(ch)           GET_NAME(ch)
#define CH_I3TITLE(ch)          GET_TITLE(ch)
#define CH_I3RANK(ch)           (GET_SEX(ch) == SEX_FEMALE ? title_female(GET_CLASS(ch), GET_LEVEL(ch))	\
								: title_male(GET_CLASS(ch), GET_LEVEL(ch)))
#define CH_I3SEX(ch)            GET_SEX(ch)
#endif

#endif