* "(FAKE_VER_MAJOR-10).(FAKE_VER_MINOR).(FAKE_VER_PATCH)".
*/
#define FAKE_VERSION 0
-#define FAKE_VER_MAJOR 11
-#define FAKE_VER_MINOR 7
+#define FAKE_VER_MAJOR 12
+#define FAKE_VER_MINOR 1
#define FAKE_VER_PATCH 0
*
* Upper compatibility is always guaranteed.
*/
-#define H_VER_MAJOR 1
-#define H_VER_MINOR 7
+#define H_VER_MAJOR 2
+#define H_VER_MINOR 1
#define H_VER_PATCH 0
-#define H_VER_EXTRA 5
+#define H_VER_EXTRA 0
#define ANGBAND_2_8_1
/* Check is the quest index is "fixed" */
#define is_fixed_quest_idx(Q_IDX) (((Q_IDX) < MIN_RANDOM_QUEST) || ((Q_IDX) > MAX_RANDOM_QUEST))
+#define QUEST_TOWER1 5
+#define QUEST_TOWER2 6
+#define QUEST_TOWER3 7
#define QUEST_OBERON 8
#define QUEST_SERPENT 9
/*
* Arena constants
*/
-#define MAX_ARENA_MONS 38 /* -KMW- */
+#define MAX_ARENA_MONS 41 /* -KMW- */
#define ARENA_DEFEATED_OLD_VER (-(MAX_SHORT))
/*
* Maximum number of player "class" types (see "table.c", etc)
*/
-#define MAX_CLASS 27
+#define MAX_CLASS 28
#define MAX_SEIKAKU 12
/*
* Random energy
*/
-#define ENERGY_NEED() (randnor(100, 31))
+#define ENERGY_NEED() (randnor(100, 25))
/*
*/
#define TOWN_DAWN 10000 /* Number of ticks from dawn to dawn XXX */
#define TURNS_PER_TICK 10L /* Number of energy-gain-turns per ticks */
+#define MAX_DAYS 20000 /* Maximum days */
#define BREAK_GLYPH 550 /* Rune of protection resistance */
#define BREAK_MINOR_GLYPH 299 /* For explosive runes */
#define BTH_PLUS_ADJ 3 /* Adjust BTH per plus-to-hit */
#define GREAT_OBJ 10
/*
- * There is a 1/50 (2%) chance of inflating the requested monster_level
+ * There is a 1/25 (4%) chance of inflating the requested monster_level
* during the creation of a monsters (see "get_mon_num()" in "monster.c").
* Lower values yield harder monsters more often.
*/
-#define NASTY_MON 50 /* 1/chance of inflated monster level */
+#define NASTY_MON_BASE 25
+#define NASTY_MON_MAX 3
+#define NASTY_MON_PLUS_MAX 25
/* 1/x chance of hurting even if invulnerable! */
#define PENETRATE_INVULNERABILITY 13
#define CH_DAEMON 0x100
#define CH_CRUSADE 0x200
-#define CH_MUSIC 0x10000
-#define CH_HISSATSU 0x20000
+#define CH_MUSIC 0x08000 /* This is 16th bit */
+#define CH_HISSATSU 0x10000
+#define CH_HEX 0x20000
/*
#define MIN_TECHNIC 16
#define REALM_MUSIC 16
#define REALM_HISSATSU 17
-#define MAX_REALM 17
+#define REALM_HEX 18
+#define MAX_REALM 18
#define VALID_REALM (MAX_REALM + MAX_MAGIC - MIN_TECHNIC + 1)
#define NUM_TECHNIC (MAX_REALM - MIN_TECHNIC + 1)
#define RACE_DEMON 32
#define RACE_DUNADAN 33
#define RACE_S_FAIRY 34
-#define RACE_KUTA 35
+#define RACE_KUTAR 35
#define RACE_ANDROID 36
/*
#define CLASS_SMITH 24
#define CLASS_MIRROR_MASTER 25
#define CLASS_NINJA 26
+#define CLASS_SNIPER 27
#define SEIKAKU_FUTUU 0
#define SEIKAKU_CHIKARA 1
#define TELEPORT_DEC_VALOUR 0x00000004
+/* Types of doors */
+#define DOOR_DEFAULT -1
+#define DOOR_DOOR 0
+#define DOOR_GLASS_DOOR 1
+#define DOOR_CURTAIN 2
+
+#define MAX_DOOR_TYPES 3
+
+#define feat_locked_door_random(DOOR_TYPE) \
+ (feat_door[(DOOR_TYPE)].num_locked ? \
+ feat_door[(DOOR_TYPE)].locked[randint0(feat_door[(DOOR_TYPE)].num_locked)] : feat_none)
+
+#define feat_jammed_door_random(DOOR_TYPE) \
+ (feat_door[(DOOR_TYPE)].num_jammed ? \
+ feat_door[(DOOR_TYPE)].jammed[randint0(feat_door[(DOOR_TYPE)].num_jammed)] : feat_none)
+
+
/* Types of normal traps */
#define NOT_TRAP -1
#define TRAP_TRAPDOOR 0
#define ART_LUTHIEN 49
#define ART_TUOR 50
#define ART_MOOK 205
+#define ART_HEAVENLY_MAIDEN 233
/* Gloves */
#define ART_CAMBELEG 52
#define ART_GOTHMOG 212
#define ART_JIZO 213
#define ART_FUNDIN 214
+#define ART_AESCULAPIUS 225
/* Bows */
#define ART_BELTHRONDING 124
#define ART_YOICHI 148
#define ART_HARAD 180
#define ART_NAMAKE_BOW 182
+#define ART_ROBIN_HOOD 221
+#define ART_HELLFIRE 222
/* Arrows */
#define ART_BARD_ARROW 153
#define TV_CRUSADE_BOOK 99
#define TV_MUSIC_BOOK 105
#define TV_HISSATSU_BOOK 106
+#define TV_HEX_BOOK 107
#define TV_GOLD 127 /* Gold can only be picked up by players */
#define TV_EQUIP_BEGIN TV_SHOT
#define SV_RING_SUSTAIN_STR 10
#define SV_RING_SUSTAIN_INT 11
#define SV_RING_SUSTAIN_WIS 12
-#define SV_RING_SUSTAIN_DEX 13
-#define SV_RING_SUSTAIN_CON 14
+#define SV_RING_SUSTAIN_CON 13
+#define SV_RING_SUSTAIN_DEX 14
#define SV_RING_SUSTAIN_CHR 15
#define SV_RING_PROTECTION 16
#define SV_RING_ACID 17
#define PR_STATE 0x00100000L /* Display Extra (State) */
#define PR_SPEED 0x00200000L /* Display Extra (Speed) */
#define PR_STUDY 0x00400000L /* Display Extra (Study) */
-#define PR_MANE 0x00800000L /* Display Extra (Mane) */
+#define PR_IMITATION 0x00800000L /* Display Extra (Imitation) */
#define PR_EXTRA 0x01000000L /* Display Extra Info */
#define PR_BASIC 0x02000000L /* Display Basic Info */
#define PR_MAP 0x04000000L /* Display Map */
#define ACTION_KATA 6
#define ACTION_SING 7
#define ACTION_HAYAGAKE 8
+#define ACTION_SPELL 9
/* Empty hand status */
#define OM_NOMSG 0x02 /* temporary flag to suppress messages */
#define OM_NO_QUERY 0x04 /* Query for auto-pick was already answered as 'No' */
#define OM_AUTODESTROY 0x08 /* Destroy later to avoid illegal inventry shift */
+#define OM_TOUCHED 0x10 /* Object was touched by player */
/*
(bool)(((A)->ap_r_idx == (A)->r_idx) ? TRUE : FALSE)
#define is_original_ap_and_seen(A) \
- (bool)((A)->ml && ((A)->ap_r_idx == (A)->r_idx))
+ (bool)((A)->ml && !p_ptr->image && ((A)->ap_r_idx == (A)->r_idx))
/*
* Is the monster seen by the player?
/*
* Quest status
*/
-#define QUEST_STATUS_UNTAKEN 0
-#define QUEST_STATUS_TAKEN 1
-#define QUEST_STATUS_COMPLETED 2
-#define QUEST_STATUS_REWARDED 3
-#define QUEST_STATUS_FINISHED 4
-#define QUEST_STATUS_FAILED 5
-#define QUEST_STATUS_FAILED_DONE 6
+#define QUEST_STATUS_UNTAKEN 0
+#define QUEST_STATUS_TAKEN 1
+#define QUEST_STATUS_COMPLETED 2
+#define QUEST_STATUS_REWARDED 3
+#define QUEST_STATUS_FINISHED 4
+#define QUEST_STATUS_FAILED 5
+#define QUEST_STATUS_FAILED_DONE 6
+#define QUEST_STATUS_STAGE_COMPLETED 7
/*
* Quest type
#define QUEST_TYPE_KILL_NUMBER 5
#define QUEST_TYPE_KILL_ALL 6
#define QUEST_TYPE_RANDOM 7
+#define QUEST_TYPE_TOWER 8
/*
* Initialization flags
#define QUEST_FLAG_SILENT 0x01 /* no messages fro completion */
#define QUEST_FLAG_PRESET 0x02 /* quest is outside the main dungeon */
#define QUEST_FLAG_ONCE 0x04 /* quest is marked finished after leaving */
+#define QUEST_FLAG_TOWER 0x08 /* Tower quest is special */
/*
* Available graphic modes
#define NIKKI_NAMED_PET 21
#define NIKKI_PAT_TELE 22
+#define RECORD_NAMED_PET_NAME 0
+#define RECORD_NAMED_PET_UNNAME 1
+#define RECORD_NAMED_PET_DISMISS 2
+#define RECORD_NAMED_PET_DEATH 3
+#define RECORD_NAMED_PET_MOVED 4
+#define RECORD_NAMED_PET_LOST_SIGHT 5
+#define RECORD_NAMED_PET_DESTROY 6
+#define RECORD_NAMED_PET_EARTHQUAKE 7
+#define RECORD_NAMED_PET_GENOCIDE 8
+#define RECORD_NAMED_PET_WIZ_ZAP 9
+#define RECORD_NAMED_PET_TELE_LEVEL 10
+#define RECORD_NAMED_PET_BLAST 11
+#define RECORD_NAMED_PET_HEAL_LEPER 12
+#define RECORD_NAMED_PET_COMPACT 13
+#define RECORD_NAMED_PET_LOSE_PARENT 14
+
#define MAX_MANE 16
#define MAX_MONSPELLS 96
#define MONSPELL_TYPE_BOLT 1
#define MON_BEGGAR 12
#define MON_LEPER 13
#define MON_BLACK_MARKET 14
+#define MON_LION_HEART 19
#define MON_GHB 39
#define MON_NOV_PRIEST 45
#define MON_GRIP 53
#define MON_BLUE_HORROR 189
#define MON_GOLD_COINS 195
#define MON_VORPAL_BUNNY 205
+#define MON_MASTER_YEEK 224
#define MON_PRIEST 225
#define MON_D_ELF_PRIEST 226
#define MON_TIGER 230
#define MON_UMBER_HULK 283
#define MON_ORC_CAPTAIN 285
#define MON_BERSERKER 293
+#define MON_IMP 296
#define MON_SHAGRAT 314
#define MON_GORBAG 315
#define MON_STONE_GIANT 321
+#define MON_LIZARD_KING 332
+#define MON_WYVERN 334
+#define MON_SABRE_TIGER 339
#define MON_D_ELF_LORD 348
#define MON_FIRE_VOR 354
#define MON_WATER_VOR 355
#define MON_GWAIHIR 410
#define MON_ANGEL 417
#define MON_ADAMANT_COINS 423
+#define MON_COLBRAN 435
#define MON_SPIRIT_NAGA 436
#define MON_GACHAPIN 441
#define MON_BASILISK 453
#define MON_SHADOW_DRAKE 471
#define MON_GHOST 477
#define MON_OGRE_SHAMAN 479
+#define MON_GHOUL_KING 483
#define MON_NINJA 485
#define MON_BICLOPS 490
#define MON_IVORY_MONK 492
#define MON_MANDOR 598
#define MON_SHIM_VOR 600
#define MON_SERAPH 605
+#define MON_BARON_HELL 609
#define MON_KAVLAX 616
#define MON_ETTIN 621
#define MON_VAMPIRE_LORD 623
#define MON_JUBJUB 640
+#define MON_G_C_DRAKE 646
#define MON_CLUB_DEMON 648
+#define MON_F_ANGEL 652
#define MON_D_ELF_SORC 657
#define MON_MASTER_LICH 658
#define MON_RINALDO 660
#define MON_JACK_SHADOWS 670
#define MON_LLOIGOR 682
#define MON_DREADMASTER 690
+#define MON_DROLEM 691
#define MON_DAWN 693
#define MON_NAZGUL 696
#define MON_SMAUG 697
#define MON_STORMBRINGER 698
#define MON_ULTRA_PALADIN 699
#define MON_G_TITAN 702
+#define MON_S_TYRANNO 705
#define MON_FAFNER 712
#define MON_G_BALROG 720
#define MON_TIME_HOUND 725
#define MON_BRAND 773
#define MON_SHADOWLORD 774
#define MON_ARCHLICH 776
+#define MON_JABBERWOCK 778
#define MON_CHAOS_HOUND 779
#define MON_ULT_BEHOLDER 781
#define MON_SHAMBLER 786
#define MON_D_ELF_SHADE 886
#define MON_MANA_HOUND 887
#define MON_VENOM_WYRM 890
+#define MON_TROLL_KING 894
#define MON_BAZOOKER 896
#define MON_SHARD_VOR 897
+#define MON_ELF_LORD 900
#define MON_MASTER_MYS 916
#define MON_G_MASTER_MYS 917
#define MON_IE 921
#define MON_CHAMELEON 1040
#define MON_CHAMELEON_K 1041
#define MON_TOPAZ_MONK 1047
+#define MON_M_MINDCRAFTER 1056
+#define MON_ELDER_VAMPIRE 1058
#define MON_NOBORTA 1059
#define MON_MORI_TROLL 1060
#define MON_BARNEY 1061
#define MON_GROO 1062
#define MON_LOUSY 1063
+#define MON_WYRM_SPACE 1064
#define MON_JIZOTAKO 1065
#define MON_TANUKI 1067
+#define MON_HATOPOPPO 1083
/* Maximum "Nazguls" number */
#define MAX_NAZGUL_NUM 5
#define DF1_WATER_RIVER 0x00000040L
#define DF1_LAVA_RIVER 0x00000080L
#define DF1_CURTAIN 0x00000100L
-#define DF1_XXX09 0x00000200L
+#define DF1_GLASS_DOOR 0x00000200L
#define DF1_CAVE 0x00000400L
#define DF1_CAVERN 0x00000800L
#define DF1_XXX12 0x00001000L
#define DF1_NO_VAULT 0x00200000L
#define DF1_ARENA 0x00400000L
#define DF1_DESTROY 0x00800000L
-#define DF1_XXX24 0x01000000L
+#define DF1_GLASS_ROOM 0x01000000L
#define DF1_NO_CAVE 0x02000000L
#define DF1_NO_MAGIC 0x04000000L
#define DF1_NO_MELEE 0x08000000L
#define IS_FAST() (p_ptr->fast || music_singing(MUSIC_SPEED) || music_singing(MUSIC_SHERO))
#define IS_INVULN() (p_ptr->invuln || music_singing(MUSIC_INVULN))
#define IS_HERO() (p_ptr->hero || music_singing(MUSIC_HERO) || music_singing(MUSIC_SHERO))
-#define IS_BLESSED() (p_ptr->blessed || music_singing(MUSIC_BLESS))
+#define IS_BLESSED() (p_ptr->blessed || music_singing(MUSIC_BLESS) || hex_spelling(HEX_BLESS))
#define IS_OPPOSE_ACID() (p_ptr->oppose_acid || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU))
#define IS_OPPOSE_ELEC() (p_ptr->oppose_elec || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU))
#define IS_OPPOSE_FIRE() (p_ptr->oppose_fire || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU))
#define IS_OPPOSE_COLD() (p_ptr->oppose_cold || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU))
#define IS_OPPOSE_POIS() (p_ptr->oppose_pois || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU))
-#define IS_TIM_ESP() (p_ptr->tim_esp || music_singing(MUSIC_MIND))
+#define IS_TIM_ESP() (p_ptr->tim_esp || music_singing(MUSIC_MIND) || (p_ptr->concent >= CONCENT_TELE_THRESHOLD))
#define IS_TIM_STEALTH() (p_ptr->tim_stealth || music_singing(MUSIC_STEALTH))
+/* Multishadow effects is determined by turn */
+#define CHECK_MULTISHADOW() (p_ptr->multishadow && (turn & 1))
+
/* Is "teleport level" ineffective to this target? */
#define TELE_LEVEL_IS_INEFF(TARGET) \
(p_ptr->inside_arena || p_ptr->inside_battle || \
*/
#define SCROBJ_FAKE_OBJECT 0x00000001
#define SCROBJ_FORCE_DETAIL 0x00000002
+
+/*
+ * For travel command (auto run)
+ */
+#define TRAVEL
+
+/* Sniper */
+#define SP_NONE 0
+#define SP_LITE 1
+#define SP_AWAY 2
+#define SP_FIRE 3
+#define SP_KILL_WALL 4
+#define SP_COLD 5
+#define SP_KILL_TRAP 6
+#define SP_ELEC 7
+#define SP_PIERCE 8
+#define SP_RUSH 9
+#define SP_DOUBLE 10
+#define SP_EXPLODE 11
+#define SP_EVILNESS 12
+#define SP_HOLYNESS 13
+#define SP_FINAL 14
+#define SP_NEEDLE 15
+
+#define CONCENT_RADAR_THRESHOLD 2
+#define CONCENT_TELE_THRESHOLD 5
+
+/* Hex */
+#define hex_spelling_any() \
+ ((p_ptr->realm1 == REALM_HEX) && (p_ptr->magic_num1[0]))
+#define hex_spelling(X) \
+ ((p_ptr->realm1 == REALM_HEX) && (p_ptr->magic_num1[0] & (1L << (X))))
+/* 1st book */
+#define HEX_BLESS 0
+#define HEX_CURE_LIGHT 1
+#define HEX_DEMON_AURA 2
+#define HEX_STINKING_MIST 3
+#define HEX_XTRA_MIGHT 4
+#define HEX_CURSE_WEAPON 5
+#define HEX_DETECT_EVIL 6
+#define HEX_PATIENCE 7
+/* 2nd book */
+#define HEX_ICE_ARMOR 8
+#define HEX_CURE_SERIOUS 9
+#define HEX_INHAIL 10
+#define HEX_VAMP_MIST 11
+#define HEX_RUNESWORD 12
+#define HEX_CONFUSION 13
+#define HEX_BUILDING 14
+#define HEX_ANTI_TELE 15
+/* 3rd book */
+#define HEX_SHOCK_CLOAK 16
+#define HEX_CURE_CRITICAL 17
+#define HEX_RECHARGE 18
+#define HEX_RAISE_DEAD 19
+#define HEX_CURSE_ARMOUR 20
+#define HEX_SHADOW_CLOAK 21
+#define HEX_PAIN_TO_MANA 22
+#define HEX_EYE_FOR_EYE 23
+/* 4th book */
+#define HEX_ANTI_MULTI 24
+#define HEX_RESTORE 25
+#define HEX_DRAIN_CURSE 26
+#define HEX_VAMP_BLADE 27
+#define HEX_STUN_MONSTERS 28
+#define HEX_SHADOW_MOVE 29
+#define HEX_ANTI_MAGIC 30
+#define HEX_REVENGE 31