#include "rooms.h" // Level-based macros and defines #define LVL_ELOHIM 75 #define LVL_MERLON 74 #define LVL_ULUTIU 73 #define LVL_SPIRIT 72 #define LVL_SHADE 71 #define Elohim(ch) (!IS_NPC(ch) && (Level(ch) >= LVL_ELOHIM)) #define Merlon(ch) (!IS_NPC(ch) && (Level(ch) >= LVL_MERLON)) #define Ulutiu(ch) (!IS_NPC(ch) && (Level(ch) >= LVL_ULUTIU)) #define Spirit(ch) (!IS_NPC(ch) && (Level(ch) >= LVL_SPIRIT)) #define Shade(ch) (!IS_NPC(ch) && (Level(ch) >= LVL_SHADE)) #define SendChar(mess, ch) send_to_char(mess, ch) #define SendDesc(mess, d) write_to_output(mess, d) // Macros for loops... #define CharsInRoom(ch, tch) for((tch) = Adjacents(ch); (tch); \ (tch) = NextInRoom(tch)) #define Descriptors(d) for ((d) = descriptor_list; (d); (d) = (d)->next) extern char *tprintf(char *format,...); #define wordmatch(char, string) isname(char, string) #define partword(char, string) isname_or_abbr(char, string) #define Age(ch) (age(ch).year) #define AFKString(ch) ((ch)->player.afk_str) #define PName(ch) ((ch)->player.name) #define SDesc(ch) ((ch)->player.short_descr) #define Name(ch) (IS_NPC(ch) ? \ (ch)->player.short_descr : (ch)->player.name) #define Title(ch) ((ch)->player.title) #define Level(ch) ((ch)->player.level) #define Password(ch) ((ch)->player.passwd) #define Class(ch) ((ch)->player.class) #define Race(ch) ((ch)->player.race) #define Home(ch) ((ch)->player.hometown) #define Height(ch) ((ch)->player.height) #define Weight(ch) ((ch)->player.weight) #define Sex(ch) ((ch)->player.sex) #define Str(ch) ((ch)->aff_abils.str) #define StrAdd(ch) ((ch)->aff_abils.str_add) #define Dex(ch) ((ch)->aff_abils.dex) #define Int(ch) ((ch)->aff_abils.intel) #define Wis(ch) ((ch)->aff_abils.wis) #define Con(ch) ((ch)->aff_abils.con) #define Cha(ch) ((ch)->aff_abils.cha) #define Experience(ch) ((ch)->points.exp) #define AC(ch) ((ch)->points.armor) #define Hits(ch) ((ch)->points.hit) #define MaxHits(ch) ((ch)->points.max_hit) #define Moves(ch) ((ch)->points.move) #define MaxMoves(ch) ((ch)->points.max_move) #define Mana(ch) ((ch)->points.mana) #define MaxMana(ch) ((ch)->points.max_mana) #define Gold(ch) ((ch)->points.gold) #define BankGold(ch) ((ch)->points.bank_gold) #define Hitroll(ch) ((ch)->points.hitroll) #define Damroll(ch) ((ch)->points.damroll) #define Position(ch) ((ch)->specials.position) #define IDNum(ch) ((ch)->pc_specials->saved.idnum) #define CarryingW(ch) ((ch)->specials.carry_weight) #define CarryingN(ch) ((ch)->specials.carry_items) #define Fighting(ch) ((ch)->specials.fighting) #define Hunting(ch) ((ch)->specials.hunting) #define SaveThr(ch, i) ((ch)->specials.saved.apply_saving_throw[i]) #define Alignment(ch) ((ch)->specials.saved.alignment) #define Loadroom(ch) ((ch)->pc_specials->saved.load_room) #define PageLength(ch) ((ch)->pc_specials->saved.page_length) #define Practices(ch) ((ch)->pc_specials->saved.spells_to_learn) #define InvisLevel(ch) ((ch)->pc_specials->saved.invis_level) #define WimpLevel(ch) ((ch)->pc_specials->saved.wimp_level) #define FreezeLevel(ch) ((ch)->pc_specials->saved.freeze_level) #define BadPws(ch) ((ch)->pc_specials->saved.bad_pws) #define Talks(ch, i) ((ch)->pc_specials->saved.talks[i]) #define Poofin(ch) ((ch)->pc_specials->saved.poofIn) #define Poofout(ch) ((ch)->pc_specials->saved.poofOut) #define Walkin(ch) ((ch)->pc_specials->walkin) #define Walkout(ch) ((ch)->pc_specials->walkout) #define LastOLCTarg(ch) ((ch)->pc_specials->last_olc_targ) #define LastOLCMode(ch) ((ch)->pc_specials->last_olc_mode) #define Aliases(ch) ((ch)->pc_specials->aliases) #define LastTell(ch) ((ch)->pc_specials->last_tell) #define Skill(ch, i) ((ch)->pc_specials->saved.skills[i]) #define Spell(ch, i) ((ch)->pc_specials->saved.spells[i]) #define WProf(ch, i) ((ch)->pc_specials->saved.wprofs[i]) #define SkillSet(ch, i, pct) { (ch)->pc_specials->saved.skills[i] = pct; } #define TempSkill(ch, i) ((ch)->tskills[i]) #define TempSkillSet(ch, i, pct) { (ch)->tskills[i] = pct; } #define Equip(ch, i) ((ch)->equipment[i]) #define MobSpec(ch) (IS_MOB(ch) ? (mob_index[(ch->nr)].func) : NULL) #define MobRnum(mob) ((mob)->nr) #define MobVnum(mob) (IS_MOB(mob) ? \ mob_index[MobRnum(mob)].virtual : -1) #define MobWait(ch) ((ch)->mob_specials.wait_state) #define DefaultPos(ch) ((ch)->mob_specials.default_pos) #define Memory(ch) ((ch)->mob_specials.memory) #define Good(ch) (Alignment(ch) >= 350) #define Evil(ch) (Alignment(ch) <= -350) #define Neutral(ch) (!IS_GOOD(ch) && !IS_EVIL(ch)) #define Master(ch) ((ch)->master) #define Followers(ch) ((ch)->followers) #define LogFlags(ch) ((ch)->pc_specials->saved.syslog_flags) #define LogFlagged(ch, flag) (IS_SET(LogFlags(ch), (flag))) #define IsMortallyW(ch) (Position(ch) == POS_MORTALLYW) #define IsIncap(ch) (Position(ch) == POS_INCAP) #define IsStunned(ch) (Position(ch) == POS_STUNNED) #define IsSleeping(ch) (Position(ch) == POS_SLEEPING) #define IsResting(ch) (Position(ch) == POS_RESTING) #define IsSitting(ch) (Position(ch) == POS_SITTING) #define IsStanding(ch) (Position(ch) == POS_STANDING) #define IsFighting(ch) (Position(ch) == POS_FIGHTING) #define IsFlying(ch) (Position(ch) == POS_FLYING) /***************************************************************************** * Configurable color prototypes. */ #define ColAuction(ch) ((ch)->pc_specials->saved.color.auction) #define ColBlink(ch) ((ch)->pc_specials->saved.color.blink) #define ColBold(ch) ((ch)->pc_specials->saved.color.bold) #define ColCharacters(ch) ((ch)->pc_specials->saved.color.characters) #define ColClan(ch) ((ch)->pc_specials->saved.color.clan) #define ColCombat(ch) ((ch)->pc_specials->saved.color.combat) #define ColDescription(ch) ((ch)->pc_specials->saved.color.description) #define ColDanger(ch) ((ch)->pc_specials->saved.color.danger) #define ColExamples(ch) ((ch)->pc_specials->saved.color.examples) #define ColExits(ch) ((ch)->pc_specials->saved.color.exits) #define ColGossip(ch) ((ch)->pc_specials->saved.color.gossip) #define ColGroup(ch) ((ch)->pc_specials->saved.color.group) #define ColHit(ch) ((ch)->pc_specials->saved.color.hit) #define ColImmorts(ch) ((ch)->pc_specials->saved.color.immorts) #define ColLog(ch) ((ch)->pc_specials->saved.color.log) #define ColMobiles(ch) ((ch)->pc_specials->saved.color.mobiles) #define ColNormal(ch) ((ch)->pc_specials->saved.color.normal) #define ColObjects(ch) ((ch)->pc_specials->saved.color.objects) #define ColReverse(ch) ((ch)->pc_specials->saved.color.reverse) #define ColRoomName(ch) ((ch)->pc_specials->saved.color.rname) #define ColSay(ch) ((ch)->pc_specials->saved.color.say) #define ColShout(ch) ((ch)->pc_specials->saved.color.shout) #define ColSocials(ch) ((ch)->pc_specials->saved.color.socials) #define ColTell(ch) ((ch)->pc_specials->saved.color.tell) #define ColWeather(ch) ((ch)->pc_specials->saved.color.weather) #define ColWounded(ch) ((ch)->pc_specials->saved.color.wounded) /***************************************************************************** * Class-related prototypes. */ #define Assassin(ch) (Class(ch) == CLASS_ASSASSIN) #define Bard(ch) (Class(ch) == CLASS_BARD) #define Cleric(ch) (Class(ch) == CLASS_CLERIC) #define Druid(ch) (Class(ch) == CLASS_DRUID) #define Mage(ch) (Class(ch) == CLASS_MAGIC_USER) #define Psionic(ch) (Class(ch) == CLASS_PSIONIC) #define Ranger(ch) (Class(ch) == CLASS_RANGER) #define Rogue(ch) (Class(ch) == CLASS_ROGUE) #define Warrior(ch) (Class(ch) == CLASS_WARRIOR) #define Creating(d) (STATE(d) == CON_OEDIT || STATE(d) == CON_REDIT || \ STATE(d) == CON_MEDIT || STATE(d) == CON_SEDIT || \ STATE(d) == CON_ZEDIT) #define YesNo(d) ((d)->yn_mode) #define Facing(ch) ((ch)->facing) #define InRoom(ch) ((ch)->in_room) #define NextInRoom(ch) ((ch)->next_in_room) #define InZone(ch) (world[InRoom(ch)].zone) #define Adjacents(ch) (world[InRoom(ch)].people) #define InSameRoom(ch1, ch2) (InRoom(ch1) == InRoom(ch2)) #define InSameZone(ch1, ch2) (InZone(ch1) == InZone(ch2)) /***************************************************************************** * AFF_XX flag prototypes. */ #define AffDetectAlign(ch) (AFF_FLAGGED(ch, AFF_DETECT_ALIGN)) #define AffDetectInvis(ch) (AFF_FLAGGED(ch, AFF_DETECT_INVIS)) #define AffDetectMagic(ch) (AFF_FLAGGED(ch, AFF_DETECT_MAGIC)) #define AffDustCloak(ch) (AFF_FLAGGED(ch, AFF_DUSTCLOAK)) #define AffEnergyControl(ch) (AFF_FLAGGED(ch, AFF_ENERGY_CONTROL)) #define AffFirewall(ch) (AFF_FLAGGED(ch, AFF_FIREWALL)) #define AffFreshSwim(ch) (AFF_FLAGGED(ch, AFF_FRESHSWIM)) #define AffInfravision(ch) (AFF_FLAGGED(ch, AFF_INFRAVISION)) #define AffMindShield(ch) (AFF_FLAGGED(ch, AFF_MIND_SHIELD)) #define AffNoTrack(ch) (AFF_FLAGGED(ch, AFF_NOTRACK)) #define AffSaltSwim(ch) (AFF_FLAGGED(ch, AFF_SALTSWIM)) #define AffSanctuary(ch) (AFF_FLAGGED(ch, AFF_SANCTUARY)) #define AffSenseLife(ch) (AFF_FLAGGED(ch, AFF_SENSE_LIFE)) #define AffSleep(ch) (AFF_FLAGGED(ch, AFF_SLEEP)) #define AffThornwall(ch) (AFF_FLAGGED(ch, AFF_THORNWALL)) #define AffWarcry(ch) (AFF_FLAGGED(ch, AFF_WARCRY)) #define AffWaterwalk(ch) (AFF_FLAGGED(ch, AFF_WATERWALK)) #define Blinded(ch) (AFF_FLAGGED(ch, AFF_BLIND)) #define Charmed(ch) (AFF_FLAGGED(ch, AFF_CHARM)) #define Cursed(ch) (AFF_FLAGGED(ch, AFF_CURSE)) #define Flying(ch) (AFF_FLAGGED(ch, AFF_FLYING)) #define Grouped(ch) (AFF_FLAGGED(ch, AFF_GROUP)) #define Hiding(ch) (AFF_FLAGGED(ch, AFF_HIDE)) #define Invisible(ch) (AFF_FLAGGED(ch, AFF_INVISIBLE)) #define Poisoned(ch) (AFF_FLAGGED(ch, AFF_POISON)) #define ProtFromEvil(ch) (AFF_FLAGGED(ch, AFF_PROTECT_EVIL)) #define ProtFromGood(ch) (AFF_FLAGGED(ch, AFF_PROTECT_GOOD)) #define Silenced(ch) (AFF_FLAGGED(ch, AFF_SILENCE)) #define Sneaking(ch) (AFF_FLAGGED(ch, AFF_SNEAK)) /***************************************************************************** * PLR_XX flag prototypes. */ #define AFK(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_AFK)) #define ClanLeader(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_CLANLEADER)) #define Crash(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_CRASH)) #define CryoSaved(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_CRYO)) #define Deleted(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_DELETED)) #define Enforcer(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_ENFORCER)) #define Frozen(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_FROZEN)) #define InvisStart(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_INVSTART)) #define It(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_IT)) #define Java(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_JAVA)) #define Killer(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_KILLER)) #define LoadInRoom(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_LOADROOM)) #define Mailing(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_MAILING)) #define NoColor(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_NOCOLOR)) #define NoDelete(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_NODELETE)) #define NoShout(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_NOSHOUT)) #define NoTitle(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_NOTITLE)) #define NoWizlist(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_NOWIZLIST)) #define SiteOk(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_SITEOK)) #define Stone(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_STONE)) #define Thief(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_THIEF)) #define Writing(ch) (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_WRITING)) /***************************************************************************** * PRF_XX flag prototypes. */ #define AutoAssist(ch) (PRF_FLAGGED(ch, PRF_AUTOASS)) #define AutoCond(ch) (PRF_FLAGGED(ch, PRF_AUTOCOND)) #define AutoExit(ch) (PRF_FLAGGED(ch, PRF_AUTOEXIT)) #define AutoShare(ch) (PRF_FLAGGED(ch, PRF_AUTOSHARE)) #define Brief(ch) (PRF_FLAGGED(ch, PRF_BRIEF)) #define Chatting(ch) (PRF_FLAGGED(ch, PRF_CHAT)) #define ClanChannel(ch) (PRF_FLAGGED(ch, PRF_CLAN_CH)) #define Color1(ch) (PRF_FLAGGED(ch, PRF_COLOR_1)) #define Color2(ch) (PRF_FLAGGED(ch, PRF_COLOR_2)) #define Compact(ch) (PRF_FLAGGED(ch, PRF_COMPACT)) #define Deaf(ch) (PRF_FLAGGED(ch, PRF_DEAF)) #define DispHits(ch) (PRF_FLAGGED(ch, PRF_DISPHP)) #define DispMana(ch) (PRF_FLAGGED(ch, PRF_DISPMANA)) #define DispMove(ch) (PRF_FLAGGED(ch, PRF_DISPMOVE)) #define Grumpy(ch) (PRF_FLAGGED(ch, PRF_GRUMPY)) #define Happy(ch) (PRF_FLAGGED(ch, PRF_HAPPY)) #define HolyLight(ch) (PRF_FLAGGED(ch, PRF_HOLYLIGHT)) #define Log1(ch) (PRF_FLAGGED(ch, PRF_LOG1)) #define Log2(ch) (PRF_FLAGGED(ch, PRF_LOG2)) #define NoArena(ch) (PRF_FLAGGED(ch, PRF_NOARENA)) #define NoAuction(ch) (PRF_FLAGGED(ch, PRF_NOAUCT)) #define NoCongrat(ch) (PRF_FLAGGED(ch, PRF_NOGRATZ)) #define NoPublic(ch) (PRF_FLAGGED(ch, PRF_NOPUBLIC)) #define NoHassle(ch) (PRF_FLAGGED(ch, PRF_NOHASSLE)) #define NoInterWiz(ch) (PRF_FLAGGED(ch, PRF_NOINTWIZ)) #define NoMenu(ch) (PRF_FLAGGED(ch, PRF_NOMENU)) #define NoMusic(ch) (PRF_FLAGGED(ch, PRF_NOMUSIC)) #define NoPrompt(ch) (PRF_FLAGGED(ch, PRF_NOPROMPT)) #define NoRepeat(ch) (PRF_FLAGGED(ch, PRF_NOREPEAT)) #define NoTell(ch) (PRF_FLAGGED(ch, PRF_NOTELL)) #define NoWiz(ch) (PRF_FLAGGED(ch, PRF_NOWIZ)) #define Questing(ch) (PRF_FLAGGED(ch, PRF_QUEST)) #define RoomFlags(ch) (PRF_FLAGGED(ch, PRF_ROOMFLAGS)) #define Summonable(ch) (PRF_FLAGGED(ch, PRF_SUMMONABLE)) /***************************************************************************** * Immunity/Meta Immunity/Susceptibility prototypes. */ #define MetaImmune(ch, bit) (IS_SET(MetaImmuneFlags(ch), bit)) /***************************************************************************** * MOB_XX flag prototypes. */ #define MobAggressive(ch) (MOB_FLAGGED(ch, MOB_AGGRESSIVE)) #define MobAggrEvil(ch) (MOB_FLAGGED(ch, MOB_AGGR_EVIL)) #define MobAggrGood(ch) (MOB_FLAGGED(ch, MOB_AGGR_GOOD)) #define MobAggrNeutral(ch) (MOB_FLAGGED(ch, MOB_AGGR_NEUTRAL)) #define MobAware(ch) (MOB_FLAGGED(ch, MOB_AWARE)) #define MobGreet(ch) (MOB_FLAGGED(ch, MOB_GREET)) #define MobHelper(ch) (MOB_FLAGGED(ch, MOB_HELPER)) #define MobMemory(ch) (MOB_FLAGGED(ch, MOB_MEMORY)) #define MobMountable(ch) (MOB_FLAGGED(ch, MOB_MOUNTABLE)) #define MobNoBash(ch) (MOB_FLAGGED(ch, MOB_NOBASH)) #define MobNoBlind(ch) (MOB_FLAGGED(ch, MOB_NOBLIND)) #define MobNoCharm(ch) (MOB_FLAGGED(ch, MOB_NOCHARM)) #define MobNoKill(ch) (MOB_FLAGGED(ch, MOB_NOKILL)) #define MobNoSleep(ch) (MOB_FLAGGED(ch, MOB_NOSLEEP)) #define MobNoSummon(ch) (MOB_FLAGGED(ch, MOB_NOSUMMON)) #define Polymorphed(ch) (MOB_FLAGGED(ch, MOB_POLYMORPHED)) #define MobScavenger(ch) (MOB_FLAGGED(ch, MOB_SCAVENGER)) #define MobSentinel(ch) (MOB_FLAGGED(ch, MOB_SENTINEL)) #define MobSpecial(ch) (MOB_FLAGGED(ch, MOB_SPEC)) #define MobStayZone(ch) (MOB_FLAGGED(ch, MOB_STAY_ZONE)) #define MobTame(ch) (MOB_FLAGGED(ch, MOB_TAME)) #define MobWimpy(ch) (MOB_FLAGGED(ch, MOB_WIMPY)) /***************************************************************************** * PRG_XX flag prototypes. */ #define Programs(ch) ((ch)->char_specials.prog) #define HasProgram(ch, prg) (IS_NPC(ch) && IS_SET(Programs(ch), (prg))) #define Executes(ch, prg) ((prg) (ch, ch, 0, "")) #define PrgCommand(prg, ch, vict, cmd, arg) ((prg) (ch, vict, cmd, arg)) #define JanitorPrg(ch) (HasProgram(ch, PRG_JANITOR))