AM_CONFIG_HEADER(src/autoconf.h)
-AM_INIT_AUTOMAKE(hengband, 1.0.10)
+AM_INIT_AUTOMAKE(hengband, 1.0.11)
AC_ARG_WITH(setgid,
[ --with-setgid=NAME install hengband as group NAME],
F:STR | DEX | HIDE_TYPE | RES_DISEN | RES_NEXUS | IM_FIRE |
F:HOLD_LIFE | RES_NETHER | RES_CONF | RES_CHAOS | RES_POIS | IM_COLD |
F:AGGRAVATE | CURSED | SHOW_MODS | HEAVY_CURSE | TY_CURSE | TELEPORT
-
+F:RANDOM_CURSE1
# The Set of Cesti of Fingolfin
P:0:4d6:-40:-60:-50
F:SPEED | IM_FIRE | RES_FIRE | BRAND_FIRE | RES_DISEN | RES_FEAR |
F:AGGRAVATE | CURSED | HEAVY_CURSE | SHOW_MODS | TY_CURSE | LITE
+F:RANDOM_CURSE2
D:Ë̲¤¿ÀÏäˤª¤¤¤Æ±ê¤Îµð¿Í¥¹¥ë¥È¤¬À¤³¦¤Ë²Ð¤òÊü¤Ã¤¿Ç³¤¨¤ë·õ¤À¡£
# The Cutlass 'Gondricam'
P:0:8d6:0:30:0
F:STEALTH | INT | WIS | AGGRAVATE | CURSED | HEAVY_CURSE |
F:SHOW_MODS | CHAOTIC | IMPACT | SPEED
+F:RANDOM_CURSE0
D:¥Þ¥¤¥¯¥í¥ó¥Õ¥È¤Ë¤è¤Ã¤Æºî¤é¤ì¤¿¤â¤Î¤Ç¡¢½Å¤¯¤ÆÇ˲õÎϤ¬¤¢¤ë¡£
D:»ÈÍѤ¹¤ë¼Ô¤ËºÒ¤¤¤ò¤â¤¿¤é¤¹¡£
W:0:36:0:0
C:20:20:10:0
F:SEE_INVIS | AGGRAVATE | HEAVY_CURSE | CURSED
+F:RANDOM_CURSE2
# 103 (unused)
W:50:0:2:0
A:50/1
F:CURSED | TELEPORT | WIS | CHR | HIDE_TYPE
+F:RANDOM_CURSE0
N:150:̵ÃÎ
E:Stupidity
P:0:7d7:-5:-5:5
F:CURSED | HEAVY_CURSE | STR | INT | WIS | DEX | CON | CHR |
F:TY_CURSE | NO_TELE | NO_MAGIC | REGEN |
-F:HIDE_TYPE
+F:HIDE_TYPE | RANDOM_CURSE2
##### Scrolls #####
if (o_ptr->to_h > 0) o_ptr->to_h = 0 - (o_ptr->to_h + randint1(4));
if (o_ptr->to_d > 0) o_ptr->to_d = 0 - (o_ptr->to_d + randint1(4));
- o_ptr->art_flags3 |= (TR3_HEAVY_CURSE | TR3_CURSED);
+ o_ptr->curse_flags |= (TRC_HEAVY_CURSE | TRC_CURSED);
+ o_ptr->art_flags3 &= ~(TR3_BLESSED);
- if (one_in_(4)) o_ptr->art_flags3 |= TR3_PERMA_CURSE;
+ if (one_in_(4)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
if (one_in_(3)) o_ptr->art_flags3 |= TR3_TY_CURSE;
if (one_in_(2)) o_ptr->art_flags3 |= TR3_AGGRAVATE;
if (one_in_(3)) o_ptr->art_flags3 |= TR3_DRAIN_EXP;
if ((p_ptr->pclass != CLASS_WARRIOR) && (p_ptr->pclass != CLASS_ARCHER) && (p_ptr->pclass != CLASS_CAVALRY) && (p_ptr->pclass != CLASS_BERSERKER) && (p_ptr->pclass != CLASS_SMITH) && one_in_(3))
o_ptr->art_flags3 |= TR3_NO_MAGIC;
-
- o_ptr->ident |= IDENT_CURSED;
}
else
{
o_ptr->art_flags3 |=
- (TR3_CURSED | TR3_HEAVY_CURSE | TR3_AGGRAVATE | TR3_TY_CURSE);
- o_ptr->ident |= IDENT_CURSED;
+ (TR3_AGGRAVATE | TR3_TY_CURSE);
+ o_ptr->curse_flags |=
+ (TRC_CURSED | TRC_HEAVY_CURSE);
+ o_ptr->curse_flags |= get_curse(2, o_ptr);
return;
}
}
{
if (p_ptr->pclass != CLASS_SAMURAI)
{
- o_ptr->art_flags3 |= (TR3_NO_MAGIC | TR3_HEAVY_CURSE);
- o_ptr->ident |= IDENT_CURSED;
+ o_ptr->art_flags3 |= (TR3_NO_MAGIC);
+ o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
}
}
if (one_in_(2)) give_resistance = TRUE;
else give_power = TRUE;
}
-#if 0
- switch (o_ptr->name1)
- {
- case ART_JULIAN:
- case ART_ARVEDUI:
- case ART_CASPANION:
- case ART_HITHLOMIR:
- case ART_ROHIRRIM:
- case ART_CELEGORM:
- case ART_ANARION:
- case ART_THRANDUIL:
- case ART_LUTHIEN:
- case ART_THROR:
- case ART_THORIN:
- case ART_NIMTHANC:
- case ART_DETHANC:
- case ART_NARTHANC:
- case ART_STING:
- case ART_TURMIL:
- case ART_THALKETTOTH:
- case ART_JIZO:
- {
- /* Give a resistance */
- give_resistance = TRUE;
- }
- break;
- case ART_MAEDHROS:
- case ART_GLAMDRING:
- case ART_ORCRIST:
- case ART_ANDURIL:
- case ART_ZARCUTHRA:
- case ART_GURTHANG:
- case ART_SOULSWORD:
- case ART_BRAND:
- case ART_DAWN:
- case ART_BUCKLAND:
- case ART_AZAGHAL:
- {
- /* Give a resistance OR a power */
- if (one_in_(2)) give_resistance = TRUE;
- else give_power = TRUE;
- }
- break;
- case ART_NENYA:
- case ART_VILYA:
- case ART_BERUTHIEL:
- case ART_THINGOL:
- case ART_ULMO:
- case ART_GANDALF:
- {
- /* Give a power */
- give_power = TRUE;
- }
- break;
- case ART_CRIMSON:
- case ART_POWER:
- case ART_AMBER:
- case ART_AULE:
- {
- /* Give both */
- give_power = TRUE;
- give_resistance = TRUE;
- }
- break;
- }
-#endif
if (give_power)
{
q_ptr->to_d = a_ptr->to_d;
q_ptr->weight = a_ptr->weight;
- /* Hack -- acquire "cursed" flag */
- if (a_ptr->flags3 & TR3_CURSED) q_ptr->ident |= (IDENT_CURSED);
+ /* Hack -- extract the "cursed" flag */
+ if (a_ptr->gen_flags & TRG_CURSED) q_ptr->curse_flags |= (TRC_CURSED);
+ if (a_ptr->gen_flags & TRG_HEAVY_CURSE) q_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+ if (a_ptr->gen_flags & TRG_PERMA_CURSE) q_ptr->curse_flags |= (TRC_PERMA_CURSE);
+ if (a_ptr->gen_flags & (TRG_RANDOM_CURSE0)) q_ptr->curse_flags |= get_curse(0, q_ptr);
+ if (a_ptr->gen_flags & (TRG_RANDOM_CURSE1)) q_ptr->curse_flags |= get_curse(1, q_ptr);
+ if (a_ptr->gen_flags & (TRG_RANDOM_CURSE2)) q_ptr->curse_flags |= get_curse(2, q_ptr);
random_artifact_resistance(q_ptr, a_ptr);
{
int tmp = p_ptr->lev*6+(p_ptr->skill_stl+10)*4;
if (p_ptr->monlite && (mode != HISSATSU_NYUSIN)) tmp /= 3;
- if (p_ptr->aggravate) tmp /= 2;
+ if (p_ptr->cursed & TRC_AGGRAVATE) tmp /= 2;
if (r_ptr->level > (p_ptr->lev*p_ptr->lev/20+10)) tmp /= 3;
if (m_ptr->csleep && m_ptr->ml)
{
j = 100;
if (!(summon_named_creature(y, x, q_ptr->pval, FALSE, FALSE, FALSE,
- (bool)!(q_ptr->ident & IDENT_CURSED))))
+ (bool)!(cursed_p(q_ptr)))))
#ifdef JP
msg_print("¿Í·Á¤ÏDZ¤¸¶Ê¤¬¤êºÕ¤±»¶¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª");
#else
msg_print("The Figurine writhes and then shatters.");
#endif
- else if (q_ptr->ident & IDENT_CURSED)
+ else if (cursed_p(q_ptr))
#ifdef JP
msg_print("¤³¤ì¤Ï¤¢¤Þ¤êÎɤ¯¤Ê¤¤µ¤¤¬¤¹¤ë¡£");
#else
/* Item is cursed */
if (cursed_p(o_ptr))
{
- u32b f1, f2, f3;
-
- /* Extract the flags */
- object_flags(o_ptr, &f1, &f2, &f3);
-
- if ((f3 & TR3_PERMA_CURSE) || (p_ptr->pclass != CLASS_BERSERKER))
+ if ((o_ptr->curse_flags & TRC_PERMA_CURSE) || (p_ptr->pclass != CLASS_BERSERKER))
{
/* Oops */
#ifdef JP
return;
}
- if (((f3 & TR3_HEAVY_CURSE) && one_in_(7)) || one_in_(4))
+ if (((o_ptr->curse_flags & TRC_HEAVY_CURSE) && one_in_(7)) || one_in_(4))
{
#ifdef JP
msg_print("¼ö¤ï¤ì¤¿ÁõÈ÷¤òÎϤŤ¯¤ÇÇí¤¬¤·¤¿¡ª");
msg_print("You teared a cursed equipment off by sheer strength!");
#endif
- /* Uncurse it */
- o_ptr->ident &= ~(IDENT_CURSED);
-
/* Hack -- Assume felt */
o_ptr->ident |= (IDENT_SENSE);
- if (o_ptr->art_flags3 & TR3_CURSED)
- o_ptr->art_flags3 &= ~(TR3_CURSED);
-
- if (o_ptr->art_flags3 & TR3_HEAVY_CURSE)
- o_ptr->art_flags3 &= ~(TR3_HEAVY_CURSE);
+ o_ptr->curse_flags = 0L;
/* Take note */
o_ptr->feeling = FEEL_NONE;
msg_format("Examining %s...", o_name);
#endif
-
/* Describe it fully */
#ifdef JP
if (!identify_fully_aux(o_ptr)) msg_print("ÆäËÊѤï¤Ã¤¿¤È¤³¤í¤Ï¤Ê¤¤¤è¤¦¤À¡£");
{ "¼Í", "Xs", TR3_XTRA_SHOTS, 3, 0 },
{ "ÅÜ", "Ag", TR3_AGGRAVATE, 3, 0 },
{ "½Ë", "Bs", TR3_BLESSED, 3, 0 },
+#if 0
{ "±Ê¼ö", "Pc", TR3_PERMA_CURSE, 3, 0 },
{ "¼ö", "Cu", TR3_HEAVY_CURSE, 3, TR3_PERMA_CURSE },
{ "´÷", "Ty", TR3_TY_CURSE, 3, 0 },
+#endif
{ NULL, 0, 0, 0 }
};
{ "Xs", TR3_XTRA_SHOTS, 3, 0 },
{ "Ag", TR3_AGGRAVATE, 3, 0 },
{ "Bs", TR3_BLESSED, 3, 0 },
+#if 0
{ "Pc", TR3_PERMA_CURSE, 3, 0 },
{ "Cu", TR3_HEAVY_CURSE, 3, TR3_PERMA_CURSE },
{ "Ty", TR3_TY_CURSE, 3, 0 },
+#endif
#if 0
{ "De", TR3_DRAIN_EXP, 3, 0 },
#endif
{
chance -= 3 * (p_ptr->lev - level);
}
- if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance += 10;
+ chance += p_ptr->to_m_chance;
if (p_ptr->heavy_spell) chance += 20;
if(p_ptr->dec_mana && p_ptr->easy_spell) chance-=4;
else if (p_ptr->easy_spell) chance-=3;
{
chance -= 3 * (p_ptr->lev - level);
}
- if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance += 10;
+ chance += p_ptr->to_m_chance;
if (p_ptr->heavy_spell) chance += 20;
if(p_ptr->dec_mana && p_ptr->easy_spell) chance-=4;
else if (p_ptr->easy_spell) chance-=3;
#define FAKE_VERSION 0
#define FAKE_VER_MAJOR 11
#define FAKE_VER_MINOR 0
-#define FAKE_VER_PATCH 10
+#define FAKE_VER_PATCH 11
#define ANGBAND_2_8_1
#define ZANGBAND
#define IDENT_KNOWN 0x08 /* Item abilities are known */
#define IDENT_STOREB 0x10 /* Item is storebought !!!! */
#define IDENT_MENTAL 0x20 /* Item information is known */
+#if 0
#define IDENT_CURSED 0x40 /* Item is temporarily cursed */
+#endif
#define IDENT_BROKEN 0x80 /* Item is permanently worthless */
#define TR2_SUST_DEX 0x00000008L
#define TR2_SUST_CON 0x00000010L
#define TR2_SUST_CHR 0x00000020L
-#define TR2_RIDING 0x00000040L /* Later */
+#define TR2_RIDING 0x00000040L /* Later */
#define TR2_XXX2 0x00000080L /* Later */
#define TR2_IM_ACID 0x00000100L
#define TR2_IM_ELEC 0x00000200L
#define TR3_TELEPORT 0x04000000L /* Item teleports player */
#define TR3_AGGRAVATE 0x08000000L /* Item aggravates monsters */
#define TR3_BLESSED 0x10000000L /* Item is Blessed */
-#define TR3_CURSED 0x20000000L /* Item is Cursed */
-#define TR3_HEAVY_CURSE 0x40000000L /* Item is Heavily Cursed */
-#define TR3_PERMA_CURSE 0x80000000L /* Item is Perma Cursed */
#define TRG_INSTA_ART 0x00000001L /* Item must be an artifact */
#define TRG_XTRA_L_RES 0x00000080L /* Extra lordly resistance */
#define TRG_XTRA_D_RES 0x00000100L /* Extra dragon resistance */
#define TRG_XTRA_RES 0x00000200L /* Extra resistance */
+#define TRG_CURSED 0x00000400L /* Item is Cursed */
+#define TRG_HEAVY_CURSE 0x00000800L /* Item is Heavily Cursed */
+#define TRG_PERMA_CURSE 0x00001000L /* Item is Perma Cursed */
+#define TRG_RANDOM_CURSE0 0x00002000L /* Item is Random Cursed */
+#define TRG_RANDOM_CURSE1 0x00004000L /* Item is Random Cursed */
+#define TRG_RANDOM_CURSE2 0x00008000L /* Item is Random Cursed */
/*
TR1_TUNNEL | TR1_SPEED | TR1_BLOWS)
+#define MAX_CURSE 17
+
+#define TRC_CURSED 0x00000001L
+#define TRC_HEAVY_CURSE 0x00000002L
+#define TRC_PERMA_CURSE 0x00000004L
+#define TRC_XXX1 0x00000008L
+#define TRC_TY_CURSE 0x00000010L
+#define TRC_AGGRAVATE 0x00000020L
+#define TRC_DRAIN_EXP 0x00000040L
+#define TRC_SLOW_REGEN 0x00000080L
+#define TRC_ADD_L_CURSE 0x00000100L
+#define TRC_ADD_H_CURSE 0x00000200L
+#define TRC_CALL_ANIMAL 0x00000400L
+#define TRC_CALL_DEMON 0x00000800L
+#define TRC_CALL_DRAGON 0x00001000L
+#define TRC_COWARDICE 0x00002000L
+#define TRC_TELEPORT 0x00004000L
+#define TRC_LOW_MELEE 0x00008000L
+#define TRC_LOW_AC 0x00010000L
+#define TRC_LOW_MAGIC 0x00020000L
+#define TRC_FAST_DIGEST 0x00040000L
+#define TRC_DRAIN_HP 0x00080000L
+#define TRC_DRAIN_MANA 0x00100000L
+
+#define TRC_TELEPORT_SELF 0x00000001L
+#define TRC_CHAINSWORD 0x00000002L
+
+#define TRC_HEAVY_MASK \
+ (TRC_TY_CURSE | TRC_AGGRAVATE | TRC_DRAIN_EXP | TRC_ADD_H_CURSE | \
+ TRC_CALL_DEMON | TRC_CALL_DRAGON)
+
+#define TRC_P_FLAG_MASK \
+ (TRC_TY_CURSE | TRC_DRAIN_EXP | TRC_ADD_L_CURSE | TRC_ADD_H_CURSE | \
+ TRC_CALL_ANIMAL | TRC_CALL_DEMON | TRC_CALL_DRAGON | TRC_COWARDICE | \
+ TRC_TELEPORT | TRC_DRAIN_HP | TRC_DRAIN_MANA)
+
/*** Monster blow constants ***/
* Cursed items.
*/
#define cursed_p(T) \
- ((T)->ident & (IDENT_CURSED))
+ ((T)->curse_flags)
/*
gere_music(p_ptr->magic_num1[0]);
}
+/* Choose one of items that have cursed flag */
+object_type *choose_cursed_obj_name(u32b flag)
+{
+ int i;
+ int choices[INVEN_TOTAL-INVEN_RARM];
+ int number = 0;
+
+ /* Paranoia -- Player has no warning-item */
+ if (!(p_ptr->cursed & flag)) return NULL;
+
+ /* Search Inventry */
+ for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
+ {
+ object_type *o_ptr = &inventory[i];
+
+ if (o_ptr->curse_flags & flag)
+ {
+ choices[number] = i;
+ number++;
+ }
+ }
+
+ /* Choice one of them */
+ return (&inventory[choices[randint0(number)]]);
+}
+
+
/*
* Handle certain things once every 10 game turns
*/
/* Regeneration takes more food */
if (p_ptr->regenerate) i += 20;
if (p_ptr->special_defense & (KAMAE_MASK | KATA_MASK)) i+= 20;
+ if (p_ptr->cursed & TRC_FAST_DIGEST) i += 30;
/* Slow digestion takes less food */
if (p_ptr->slow_digest) i -= 5;
/* Minimal digestion */
if (i < 1) i = 1;
+ /* Maximal digestion */
+ if (i > 100) i = 100;
/* Digest some food */
(void)set_food(p_ptr->food - i);
{
regen_amount /= 2;
}
+ if (p_ptr->cursed & TRC_SLOW_REGEN)
+ {
+ regen_amount /= 5;
+ }
}
/*** Process Inventory ***/
- /* Handle experience draining */
- if (p_ptr->exp_drain)
+ if ((p_ptr->cursed & TRC_P_FLAG_MASK) && !p_ptr->wild_mode)
{
- if (randint0(100) < 25)
+ /*
+ * Hack: Uncursed teleporting items (e.g. Trump Weapons)
+ * can actually be useful!
+ */
+ if ((p_ptr->cursed & TRC_TELEPORT_SELF) && one_in_(100))
+ {
+#ifdef JP
+if (get_check_strict("¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©", 1))
+#else
+ if (get_check("Teleport? "))
+#endif
+ {
+ disturb(0, 0);
+ teleport_player(50);
+ }
+ }
+ /* Make a chainsword noise */
+ if ((p_ptr->cursed & TRC_CHAINSWORD) && one_in_(CHAINSWORD_NOISE))
+ {
+ char noise[1024];
+#ifdef JP
+if (!get_rnd_line("chainswd_j.txt", 0, noise))
+#else
+ if (!get_rnd_line("chainswd.txt", 0, noise))
+#endif
+ msg_print(noise);
+ disturb(FALSE, FALSE);
+ }
+ /* TY Curse */
+ if ((p_ptr->cursed & TRC_TY_CURSE) && one_in_(TY_CURSE_CHANCE))
+ {
+ int count = 0;
+ (void)activate_ty_curse(FALSE, &count);
+ }
+ /* Handle experience draining */
+ if ((p_ptr->cursed & TRC_DRAIN_EXP) && one_in_(4))
{
p_ptr->exp -= (p_ptr->lev+1)/2;
if (p_ptr->exp < 0) p_ptr->exp = 0;
if (p_ptr->max_exp < 0) p_ptr->max_exp = 0;
check_experience();
}
- }
-
- /* Rarely, take damage from the Jewel of Judgement */
- if (one_in_(999) && !p_ptr->anti_magic)
- {
- if ((inventory[INVEN_LITE].tval) &&
- (inventory[INVEN_LITE].sval == SV_LITE_THRAIN))
+ /* Add light curse (Later) */
+ if ((p_ptr->cursed & TRC_ADD_L_CURSE) && one_in_(4000))
{
+ u32b new_curse;
+ bool changed = FALSE;
+ object_type *o_ptr;
+ char o_name[MAX_NLEN];
+
+ o_ptr = choose_cursed_obj_name(TRC_ADD_L_CURSE);
+ object_desc(o_name, o_ptr, FALSE, 0);
+
+ new_curse = get_curse(0, o_ptr);
+ if (!(o_ptr->curse_flags & new_curse))
+ {
+ changed = TRUE;
+ o_ptr->curse_flags |= new_curse;
+ }
+ if (changed)
+ {
#ifdef JP
-msg_print("¡Ø¿³È½¤ÎÊõÀС٤Ϥ¢¤Ê¤¿¤ÎÂÎÎϤòµÛ¼ý¤·¤¿¡ª");
-take_hit(DAMAGE_LOSELIFE, MIN(p_ptr->lev, 50), "¿³È½¤ÎÊõÀÐ", -1);
+msg_format("°°Õ¤ËËþ¤Á¤¿¹õ¤¤¥ª¡¼¥é¤¬%s¤ò¤È¤ê¤Þ¤¤¤¿...", o_name);
#else
- msg_print("The Jewel of Judgement drains life from you!");
- take_hit(DAMAGE_LOSELIFE, MIN(p_ptr->lev, 50), "the Jewel of Judgement", -1);
+ msg_format("There is a malignant black aura surrounding %s...", o_name);
#endif
+ o_ptr->feeling = FEEL_NONE;
+ }
+ p_ptr->update |= (PU_BONUS);
}
- }
+ /* Add heavy curse (Later) */
+ if ((p_ptr->cursed & TRC_ADD_H_CURSE) && one_in_(4000))
+ {
+ u32b new_curse;
+ bool changed = FALSE;
+ object_type *o_ptr;
+ char o_name[MAX_NLEN];
+ o_ptr = choose_cursed_obj_name(TRC_ADD_H_CURSE);
+ object_desc(o_name, o_ptr, FALSE, 0);
- /* Process equipment */
- for (j = 0, i = INVEN_RARM; i < INVEN_TOTAL; i++)
- {
- /* Get the object */
- o_ptr = &inventory[i];
+ new_curse = get_curse(1, o_ptr);
+ if (!(o_ptr->curse_flags & new_curse))
+ {
+ changed = TRUE;
+ o_ptr->curse_flags |= new_curse;
+ }
+ if (changed)
+ {
+#ifdef JP
+msg_format("°°Õ¤ËËþ¤Á¤¿¹õ¤¤¥ª¡¼¥é¤¬%s¤ò¤È¤ê¤Þ¤¤¤¿...", o_name);
+#else
+ msg_format("There is a malignant black aura surrounding %s...", o_name);
+#endif
- object_flags(o_ptr, &f1, &f2, &f3);
+ o_ptr->feeling = FEEL_NONE;
+ }
+ p_ptr->update |= (PU_BONUS);
+ }
+ /* Call animal */
+ if ((p_ptr->cursed & TRC_CALL_ANIMAL) && one_in_(1500))
+ {
+ if (summon_specific(0, py, px, dun_level, SUMMON_ANIMAL,
+ TRUE, FALSE, FALSE, TRUE, TRUE))
+ {
+ char o_name[MAX_NLEN];
- /* Skip non-objects */
- if (!o_ptr->k_idx) continue;
+ object_desc(o_name, choose_cursed_obj_name(TRC_CALL_ANIMAL), FALSE, 0);
+#ifdef JP
+msg_format("%s¤¬Æ°Êª¤ò°ú¤´ó¤»¤¿¡ª", o_name);
+#else
+ msg_format("%s have attracted an animal!", o_name);
+#endif
- if (!p_ptr->inside_battle)
+ disturb(0, 0);
+ }
+ }
+ /* Call demon */
+ if ((p_ptr->cursed & TRC_CALL_DEMON) && one_in_(666))
{
- /* TY Curse */
- if ((f3 & TR3_TY_CURSE) && one_in_(TY_CURSE_CHANCE))
+ if (summon_specific(0, py, px, dun_level, SUMMON_DEMON,
+ TRUE, FALSE, FALSE, TRUE, TRUE))
{
- int count = 0;
+ char o_name[MAX_NLEN];
+
+ object_desc(o_name, choose_cursed_obj_name(TRC_CALL_DEMON), FALSE, 0);
+#ifdef JP
+msg_format("%s¤¬°Ëâ¤ò°ú¤´ó¤»¤¿¡ª", o_name);
+#else
+ msg_format("%s have attracted a demon!", o_name);
+#endif
- (void)activate_ty_curse(FALSE, &count);
+ disturb(0, 0);
}
+ }
+ /* Call dragon */
+ if ((p_ptr->cursed & TRC_CALL_DRAGON) && one_in_(400))
+ {
+ if (summon_specific(0, py, px, dun_level, SUMMON_DRAGON,
+ TRUE, FALSE, FALSE, TRUE, TRUE))
+ {
+ char o_name[MAX_NLEN];
+
+ object_desc(o_name, choose_cursed_obj_name(TRC_CALL_DRAGON), FALSE, 0);
+#ifdef JP
+msg_format("%s¤¬¥É¥é¥´¥ó¤ò°ú¤´ó¤»¤¿¡ª", o_name);
+#else
+ msg_format("%s have attracted an animal!", o_name);
+#endif
- /* Make a chainsword noise */
- if ((o_ptr->name1 == ART_CHAINSWORD) && one_in_(CHAINSWORD_NOISE))
+ disturb(0, 0);
+ }
+ }
+ if ((p_ptr->cursed & TRC_COWARDICE) && one_in_(1500))
+ {
+ if (!(p_ptr->resist_fear || p_ptr->hero || p_ptr->shero))
{
- char noise[1024];
+ disturb(0, 0);
#ifdef JP
-if (!get_rnd_line("chainswd_j.txt", 0, noise))
+msg_print("¤È¤Æ¤â°Å¤¤... ¤È¤Æ¤â¶²¤¤¡ª");
#else
- if (!get_rnd_line("chainswd.txt", 0, noise))
+ msg_print("It's so dark... so scary!");
#endif
- msg_print(noise);
- disturb(FALSE, FALSE);
+ set_afraid(p_ptr->afraid + 13 + randint1(26));
}
+ }
+ /* Teleport player */
+ if ((p_ptr->cursed & TRC_TELEPORT) && one_in_(100) && !p_ptr->anti_tele)
+ {
+ disturb(0, 0);
- /*
- * Hack: Uncursed teleporting items (e.g. Trump Weapons)
- * can actually be useful!
- */
- if ((f3 & TR3_TELEPORT) && (randint0(100) < 1))
- {
- if ((o_ptr->ident & IDENT_CURSED) && !p_ptr->anti_tele)
- {
- disturb(0, 0);
+ /* Teleport player */
+ teleport_player(40);
+ }
+ /* Handle HP draining */
+ if ((p_ptr->cursed & TRC_DRAIN_HP) && one_in_(666))
+ {
+ char o_name[MAX_NLEN];
- /* Teleport player */
- teleport_player(40);
- }
- else
- {
- if (p_ptr->wild_mode || (o_ptr->inscription &&
- (strchr(quark_str(o_ptr->inscription),'.'))))
- {
- /* Do nothing */
- /* msg_print("Teleport aborted.") */ ;
- }
+ object_desc(o_name, choose_cursed_obj_name(TRC_DRAIN_HP), FALSE, 0);
#ifdef JP
-else if (get_check_strict("¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©", 1))
+msg_format("%s¤Ï¤¢¤Ê¤¿¤ÎÂÎÎϤòµÛ¼ý¤·¤¿¡ª", o_name);
#else
- else if (get_check("Teleport? "))
+ msg_format("%s drains HP from you!", o_name);
#endif
+ take_hit(DAMAGE_LOSELIFE, MIN(p_ptr->lev*2, 100), o_name, -1);
+ }
+ /* Handle mana draining */
+ if ((p_ptr->cursed & TRC_DRAIN_MANA) && one_in_(666))
+ {
+ char o_name[MAX_NLEN];
- {
- disturb(0, 0);
- teleport_player(50);
- }
- }
+ object_desc(o_name, choose_cursed_obj_name(TRC_DRAIN_MANA), FALSE, 0);
+#ifdef JP
+msg_format("%s¤Ï¤¢¤Ê¤¿¤ÎËâÎϤòµÛ¼ý¤·¤¿¡ª", o_name);
+#else
+ msg_format("%s drains mana from you!", o_name);
+#endif
+ p_ptr->csp -= MIN(p_ptr->lev, 50);
+ if (p_ptr->csp < 0)
+ {
+ p_ptr->csp = 0;
+ p_ptr->csp_frac = 0;
}
+ p_ptr->redraw |= PR_MANA;
}
+ }
+
+ /* Rarely, take damage from the Jewel of Judgement */
+ if (one_in_(999) && !p_ptr->anti_magic)
+ {
+ if ((inventory[INVEN_LITE].tval) &&
+ (inventory[INVEN_LITE].sval == SV_LITE_THRAIN))
+ {
+#ifdef JP
+msg_print("¡Ø¿³È½¤ÎÊõÀС٤Ϥ¢¤Ê¤¿¤ÎÂÎÎϤòµÛ¼ý¤·¤¿¡ª");
+take_hit(DAMAGE_LOSELIFE, MIN(p_ptr->lev, 50), "¿³È½¤ÎÊõÀÐ", -1);
+#else
+ msg_print("The Jewel of Judgement drains life from you!");
+ take_hit(DAMAGE_LOSELIFE, MIN(p_ptr->lev, 50), "the Jewel of Judgement", -1);
+#endif
+
+ }
+ }
+
+
+ /* Process equipment */
+ for (j = 0, i = INVEN_RARM; i < INVEN_TOTAL; i++)
+ {
+ /* Get the object */
+ o_ptr = &inventory[i];
+
+ /* Skip non-objects */
+ if (!o_ptr->k_idx) continue;
/* Recharge activatable objects */
if (o_ptr->timeout > 0)
object_copy(q_ptr, o_ptr);
q_ptr->discount = 0;
- q_ptr->ident &= ~(IDENT_CURSED);
- q_ptr->art_flags3 &= ~(TR3_CURSED | TR3_HEAVY_CURSE | TR3_PERMA_CURSE | TR3_TY_CURSE);
+ q_ptr->curse_flags = 0L;
if (o_ptr->name1)
{
extern bool make_attack_normal(int m_idx);
extern bool make_attack_spell(int m_idx);
extern void process_monsters(void);
+extern u32b get_curse(int power, object_type *o_ptr);
extern void curse_equipment(int chance, int heavy_chance);
extern void mon_take_hit_mon(bool is_psy_spear, int m_idx, int dam, bool *fear, cptr note, int who);
extern bool process_the_world(int num, int who, bool vs_player);
u32b im_f[], u32b vul_f)
{
int i;
- u32b f[3];
+ u32b f[4];
bool vuln = FALSE;
if ((vul_f & flag1) && !((im_f[0] | im_f[1] | im_f[2]) & flag1))
for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
{
object_type *o_ptr;
- f[0] = f[1] = f[2] = 0L;
+ f[0] = f[1] = f[2] = f[3] = 0L;
/* Object */
o_ptr = &inventory[i];
/* Known flags */
object_flags_known(o_ptr, &f[0], &f[1], &f[2]);
+ f[3] = o_ptr->curse_flags;
/* Default */
c_put_str((byte)(vuln ? TERM_RED : TERM_SLATE), ".", row, col);
/* Player flags */
player_flags(&f[0], &f[1], &f[2]);
+ f[3] = 0L;
/* Default */
c_put_str((byte)(vuln ? TERM_RED : TERM_SLATE), ".", row, col);
/* Timed player flags */
tim_player_flags(&f[0], &f[1], &f[2], TRUE);
+ f[3] = 0L;
/* Check flags */
if (f[n-1] & flag1) c_put_str((byte)(vuln ? TERM_ORANGE : TERM_YELLOW), "#", row, col);
display_player_flag_aux(row+6, col, "µÞ²óÉü :", 3, TR3_REGEN, 0, im_f[2], vul_f[2]);
display_player_flag_aux(row+7, col, "ÉâÍ· :", 3, TR3_FEATHER, 0, im_f[2], vul_f[2]);
display_player_flag_aux(row+8, col, "±Ê±ó¸÷¸» :", 3, TR3_LITE, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+9, col, "¼ö¤¤ :", 3, (TR3_CURSED | TR3_HEAVY_CURSE), TR3_PERMA_CURSE, im_f[2], vul_f[2]);
+display_player_flag_aux(row+9, col, "¼ö¤¤ :", 4, (TRC_CURSED | TRC_HEAVY_CURSE), TRC_PERMA_CURSE, im_f[2], vul_f[2]);
#else
display_player_flag_aux(row+0, col, "Speed :", 1, TR1_SPEED, 0, im_f[0], vul_f[0]);
display_player_flag_aux(row+1, col, "FreeAction:", 2, TR2_FREE_ACT, 0, im_f[1], vul_f[1]);
display_player_flag_aux(row+6, col, "Regene. :", 3, TR3_REGEN, 0, im_f[2], vul_f[2]);
display_player_flag_aux(row+7, col, "Levitation:", 3, TR3_FEATHER, 0, im_f[2], vul_f[2]);
display_player_flag_aux(row+8, col, "Perm Lite :", 3, TR3_LITE, 0, im_f[2], vul_f[2]);
- display_player_flag_aux(row+9, col, "Cursed :", 3, (TR3_CURSED | TR3_HEAVY_CURSE), TR3_PERMA_CURSE, im_f[2], vul_f[2]);
+ display_player_flag_aux(row+9, col, "Cursed :", 4, (TRC_CURSED | TRC_HEAVY_CURSE), TRC_PERMA_CURSE, im_f[2], vul_f[2]);
#endif
}
"¥Æ¥ì¥Ý¡¼¥È",
"È¿´¶",
"½ËÊ¡",
-"¼ö¤¤",
-"½Å¤¤¼ö¤¤",
-"±Ê±ó¤Î¼ö¤¤"
+NULL,
+NULL,
+NULL,
#else
"NoTeleport",
"AntiMagic",
"Teleport",
"Aggravate",
"Blessed",
- "Cursed",
- "Hvy Curse",
- "Prm Curse"
+ NULL,
+ NULL,
+ NULL,
#endif
};
"TELEPORT",
"AGGRAVATE",
"BLESSED",
- "CURSED",
- "HEAVY_CURSE",
- "PERMA_CURSE"
+ "XXX1",
+ "XXX2",
+ "XXX3",
};
"XTRA_L_RES",
"XTRA_D_RES",
"XTRA_RES",
- "XXX",
- "XXX",
- "XXX",
- "XXX",
- "XXX",
- "XXX",
+ "CURSED",
+ "HEAVY_CURSE",
+ "PERMA_CURSE",
+ "RANDOM_CURSE0",
+ "RANDOM_CURSE1",
+ "RANDOM_CURSE2",
"XXX",
"XXX",
"XXX",
rd_u32b(&o_ptr->art_flags2);
rd_u32b(&o_ptr->art_flags3);
+ if (z_older_than(11, 0, 11))
+ {
+ o_ptr->curse_flags = 0L;
+ if (o_ptr->ident & 0x40)
+ {
+ o_ptr->curse_flags |= TRC_CURSED;
+ if (o_ptr->art_flags3 & 0x40000000L) o_ptr->curse_flags |= TRC_HEAVY_CURSE;
+ if (o_ptr->art_flags3 & 0x80000000L) o_ptr->curse_flags |= TRC_PERMA_CURSE;
+ if (o_ptr->name1)
+ {
+ artifact_type *a_ptr = &a_info[o_ptr->name1];
+ if (a_ptr->gen_flags & (TRG_HEAVY_CURSE)) o_ptr->curse_flags |= TRC_HEAVY_CURSE;
+ if (a_ptr->gen_flags & (TRG_PERMA_CURSE)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
+ }
+ else if (o_ptr->name2)
+ {
+ ego_item_type *e_ptr = &e_info[o_ptr->name2];
+ if (e_ptr->gen_flags & (TRG_HEAVY_CURSE)) o_ptr->curse_flags |= TRC_HEAVY_CURSE;
+ if (e_ptr->gen_flags & (TRG_PERMA_CURSE)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
+ }
+ }
+ o_ptr->art_flags3 &= (0x1FFFFFFFL);
+ }
+ else
+ {
+ rd_u32b(&o_ptr->curse_flags);
+ }
+
/* Monster holding object */
rd_s16b(&o_ptr->held_m_idx);
if (spell.manedam) chance = chance * mane_dam[i] / spell.manedam;
- if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance += 10;
- if (p_ptr->pseikaku == SEIKAKU_KIREMONO) chance -= 3;
- if ((p_ptr->pseikaku == SEIKAKU_GAMAN) || (p_ptr->pseikaku == SEIKAKU_CHIKARA)) chance++;
+ chance += p_ptr->to_m_chance;
/* Extract the minimum failure rate */
minfail = adj_mag_fail[p_ptr->stat_ind[spell.use_stat]];
{
int tmp = p_ptr->lev*6+(p_ptr->skill_stl+10)*4;
if (p_ptr->monlite) tmp /= 3;
- if (p_ptr->aggravate) tmp /= 2;
+ if (p_ptr->cursed & TRC_AGGRAVATE) tmp /= 2;
if (r_ptr->level > (p_ptr->lev*p_ptr->lev/20+10)) tmp /= 3;
/* Low-level monsters will find it difficult to locate the player. */
if (randint0(tmp) > (r_ptr->level+20)) aware = FALSE;
u32b notice = 0;
/* Hack -- handle non-aggravation */
- if (!p_ptr->aggravate) notice = randint0(1024);
+ if (!(p_ptr->cursed & TRC_AGGRAVATE)) notice = randint0(1024);
/* Nightmare monsters are more alert */
if (ironman_nightmare) notice /= 2;
if (m_ptr->cdis < 50) d = (100 / m_ptr->cdis);
/* Hack -- handle aggravation */
- if (p_ptr->aggravate) d = m_ptr->csleep;
+ if (p_ptr->cursed & TRC_AGGRAVATE) d = m_ptr->csleep;
/* Still asleep */
if (m_ptr->csleep > d)
}
/* No one wants to be your friend if you're aggravating */
- if (is_friendly(m_ptr) && p_ptr->aggravate)
+ if (is_friendly(m_ptr) && (p_ptr->cursed & TRC_AGGRAVATE))
gets_angry = TRUE;
/* Paranoia... no pet uniques outside wizard mode -- TY */
/* Handle "sight" and "aggravation" */
else if ((m_ptr->cdis <= MAX_SIGHT) &&
- (player_has_los_bold(fy, fx) || p_ptr->aggravate))
+ (player_has_los_bold(fy, fx) || (p_ptr->cursed & TRC_AGGRAVATE)))
{
/* We can "see" or "feel" the player */
test = TRUE;
chance += 5 * (mana_cost - p_ptr->csp);
}
- if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance += 10;
- if (p_ptr->pseikaku == SEIKAKU_KIREMONO) chance -= 3;
- if ((p_ptr->pseikaku == SEIKAKU_GAMAN) || (p_ptr->pseikaku == SEIKAKU_CHIKARA)) chance++;
+ chance += p_ptr->to_m_chance;
/* Extract the minimum failure rate */
minfail = adj_mag_fail[p_ptr->stat_ind[mp_ptr->spell_stat]];
/* Reduce failure rate by "effective" level adjustment */
chance -= 3 * (plev - spell.min_lev);
- if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance += 10;
- if (p_ptr->pseikaku == SEIKAKU_KIREMONO) chance -= 3;
- if ((p_ptr->pseikaku == SEIKAKU_GAMAN) || (p_ptr->pseikaku == SEIKAKU_CHIKARA)) chance++;
+ chance += p_ptr->to_m_chance;
/* Reduce failure rate by INT/WIS adjustment */
chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[mp_ptr->spell_stat]] - 1);
}
+u32b get_curse(int power, object_type *o_ptr)
+{
+ u32b new_curse;
+
+ while(1)
+ {
+ new_curse = (1 << (randint0(MAX_CURSE)+4));
+ if (power == 2)
+ {
+ if (!(new_curse & TRC_HEAVY_MASK)) continue;
+ }
+ else if (power == 0)
+ {
+ if (new_curse & TRC_HEAVY_MASK) continue;
+ }
+ if (((o_ptr->tval < TV_BOW) || (o_ptr->tval > TV_SWORD)) && (new_curse == TRC_LOW_MELEE)) continue;
+ if (((o_ptr->tval < TV_BOOTS) || (o_ptr->tval > TV_DRAG_ARMOR)) && (new_curse == TRC_LOW_AC)) continue;
+ break;
+ }
+ return new_curse;
+}
+
void curse_equipment(int chance, int heavy_chance)
{
bool changed = FALSE;
+ int curse_power = 0;
+ u32b new_curse;
u32b o1, o2, o3;
object_type *o_ptr = &inventory[INVEN_RARM + randint0(12)];
+ char o_name[MAX_NLEN];
if (randint1(100) > chance) return;
object_flags(o_ptr, &o1, &o2, &o3);
+ object_desc(o_name, o_ptr, FALSE, 0);
/* Extra, biased saving throw for blessed items */
if ((o3 & TR3_BLESSED) && (randint1(888) > chance))
{
- char o_name[MAX_NLEN];
- object_desc(o_name, o_ptr, FALSE, 0);
#ifdef JP
msg_format("%s¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡ª", o_name,
#else
if ((randint1(100) <= heavy_chance) &&
(o_ptr->name1 || o_ptr->name2 || o_ptr->art_name))
{
- if (!(o3 & TR3_HEAVY_CURSE))
+ if (!(o_ptr->curse_flags & TRC_HEAVY_CURSE))
changed = TRUE;
- o_ptr->art_flags3 |= TR3_HEAVY_CURSE;
- o_ptr->art_flags3 |= TR3_CURSED;
- o_ptr->ident |= IDENT_CURSED;
+ o_ptr->curse_flags |= TRC_HEAVY_CURSE;
+ o_ptr->curse_flags |= TRC_CURSED;
+ curse_power++;
}
else
{
- if (!(o_ptr->ident & IDENT_CURSED))
+ if (!cursed_p(o_ptr))
changed = TRUE;
- o_ptr->art_flags3 |= TR3_CURSED;
- o_ptr->ident |= IDENT_CURSED;
+ o_ptr->curse_flags |= TRC_CURSED;
+ }
+ if (heavy_chance >= 50) curse_power = 2;
+
+ new_curse = get_curse(curse_power, o_ptr);
+ if (!(o_ptr->curse_flags & new_curse))
+ {
+ changed = TRUE;
+ o_ptr->curse_flags |= new_curse;
}
if (changed)
{
#ifdef JP
-msg_print("°°Õ¤ËËþ¤Á¤¿¹õ¤¤¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤ò¤È¤ê¤Þ¤¤¤¿...");
+msg_format("°°Õ¤ËËþ¤Á¤¿¹õ¤¤¥ª¡¼¥é¤¬%s¤ò¤È¤ê¤Þ¤¤¤¿...", o_name);
#else
- msg_print("There is a malignant black aura surrounding you...");
+ msg_format("There is a malignant black aura surrounding %s...", o_name);
#endif
o_ptr->feeling = FEEL_NONE;
}
+ p_ptr->update |= (PU_BONUS);
}
for (i=INVEN_RARM;i<INVEN_TOTAL;i++)
{
o_ptr = &inventory[i];
- if(!(o_ptr->ident & IDENT_CURSED))
+ if(!cursed_p(o_ptr))
{
object_flags(o_ptr, &f1, &f2, &f3);
for (i=INVEN_RARM;i<INVEN_TOTAL;i++)
{
o_ptr = &inventory[i];
- if(!(o_ptr->ident & IDENT_CURSED))
+ if(!cursed_p(o_ptr))
{
object_flags(o_ptr, &f1, &f2, &f3);
if (plev > spell.level) chance -= 3 * (plev - spell.level);
else chance += (spell.level - plev);
- if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance += 10;
- if (p_ptr->pseikaku == SEIKAKU_KIREMONO) chance -= 3;
- if ((p_ptr->pseikaku == SEIKAKU_GAMAN) || (p_ptr->pseikaku == SEIKAKU_CHIKARA)) chance++;
+ chance += p_ptr->to_m_chance;
/* Reduce failure rate by INT/WIS adjustment */
chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[A_INT]] - 1);
if (plev > spell.level) chance -= 3 * (plev - spell.level);
else chance += (spell.level - plev);
- if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance += 10;
- if (p_ptr->pseikaku == SEIKAKU_KIREMONO) chance -= 3;
- if ((p_ptr->pseikaku == SEIKAKU_GAMAN) || (p_ptr->pseikaku == SEIKAKU_CHIKARA)) chance++;
+ chance += p_ptr->to_m_chance;
/* Reduce failure rate by INT/WIS adjustment */
chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[A_INT]] - 1);
(*f1) = a_ptr->flags1;
(*f2) = a_ptr->flags2;
(*f3) = a_ptr->flags3;
- if (!cursed_p(o_ptr))
- {
- (*f3) &= ~(TR3_HEAVY_CURSE | TR3_CURSED);
- }
}
/* Ego-item */
(*f1) = a_ptr->flags1;
(*f2) = a_ptr->flags2;
(*f3) = a_ptr->flags3;
-
- if (!cursed_p(o_ptr))
- {
- (*f3) &= ~(TR3_HEAVY_CURSE | TR3_CURSED);
- }
}
/* Random artifact ! */
(*f2) |= (TR2_RES_ACID | TR2_RES_ELEC | TR2_RES_FIRE | TR2_RES_COLD);;
}
}
-
- if (cursed_p(o_ptr))
- {
- if (o_ptr->art_flags3 & TR3_CURSED)
- (*f3) |= (TR3_CURSED);
- if (o_ptr->art_flags3 & TR3_HEAVY_CURSE)
- (*f3) |= (TR3_HEAVY_CURSE);
- }
}
}
- if (f3 & (TR3_DRAIN_EXP))
+ if (f3 & TR3_BLESSED)
{
#ifdef JP
-info[i++] = "¤½¤ì¤Ï·Ð¸³ÃͤòµÛ¤¤¼è¤ë¡£";
+info[i++] = "¤½¤ì¤Ï¿À¤Ë½ËÊ¡¤µ¤ì¤Æ¤¤¤ë¡£";
#else
- info[i++] = "It drains experience.";
+ info[i++] = "It has been blessed by the gods.";
#endif
}
- if (f3 & (TR3_TELEPORT))
+
+ if (cursed_p(o_ptr))
{
+ if (o_ptr->curse_flags & TRC_PERMA_CURSE)
+ {
#ifdef JP
-info[i++] = "¤½¤ì¤Ï¥é¥ó¥À¥à¤Ê¥Æ¥ì¥Ý¡¼¥È¤ò°ú¤µ¯¤³¤¹¡£";
+info[i++] = "¤½¤ì¤Ï±Ê±ó¤Î¼ö¤¤¤¬¤«¤±¤é¤ì¤Æ¤¤¤ë¡£";
#else
- info[i++] = "It induces random teleportation.";
+ info[i++] = "It is permanently cursed.";
+#endif
+
+ }
+ else if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¶¯ÎϤʼö¤¤¤¬¤«¤±¤é¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "It is heavily cursed.";
+#endif
+
+ }
+ else
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¼ö¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "It is cursed.";
#endif
+ }
}
- if (f3 & TR3_AGGRAVATE)
+
+ if ((f3 & TR3_TY_CURSE) || (o_ptr->curse_flags & TRC_TY_CURSE))
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤ÏÂÀ¸Å¤Î²Ò¡¹¤·¤¤±åÇ°¤¬½É¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "It carries an ancient foul curse.";
+#endif
+
+ }
+ if ((f3 & TR3_AGGRAVATE) || (o_ptr->curse_flags & TRC_AGGRAVATE))
{
#ifdef JP
info[i++] = "¤½¤ì¤ÏÉÕ¶á¤Î¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤ë¡£";
#endif
}
+ if ((f3 & (TR3_DRAIN_EXP)) || (o_ptr->curse_flags & TRC_DRAIN_EXP))
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï·Ð¸³ÃͤòµÛ¤¤¼è¤ë¡£";
+#else
+ info[i++] = "It drains experience.";
+#endif
- if (f3 & TR3_BLESSED)
+ }
+ if (o_ptr->curse_flags & TRC_SLOW_REGEN)
{
#ifdef JP
-info[i++] = "¤½¤ì¤Ï¿À¤Ë½ËÊ¡¤µ¤ì¤Æ¤¤¤ë¡£";
+info[i++] = "¤½¤ì¤Ï²óÉüÎϤò¼å¤á¤ë¡£";
#else
- info[i++] = "It has been blessed by the gods.";
+ info[i++] = "It nanka.";
#endif
}
+ if (o_ptr->curse_flags & TRC_ADD_L_CURSE)
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¼å¤¤¼ö¤¤¤òÁý¤ä¤¹¡£";
+#else
+ info[i++] = "It nanka.";
+#endif
- if (cursed_p(o_ptr))
+ }
+ if (o_ptr->curse_flags & TRC_ADD_H_CURSE)
{
- if (f3 & TR3_PERMA_CURSE)
- {
#ifdef JP
-info[i++] = "¤½¤ì¤Ï±Ê±ó¤Î¼ö¤¤¤¬¤«¤±¤é¤ì¤Æ¤¤¤ë¡£";
+info[i++] = "¤½¤ì¤Ï¶¯ÎϤʼö¤¤¤òÁý¤ä¤¹¡£";
#else
- info[i++] = "It is permanently cursed.";
+ info[i++] = "It nanka.";
#endif
- }
- else if (f3 & TR3_HEAVY_CURSE)
- {
+ }
+ if (o_ptr->curse_flags & TRC_CALL_ANIMAL)
+ {
#ifdef JP
-info[i++] = "¤½¤ì¤Ï¶¯ÎϤʼö¤¤¤¬¤«¤±¤é¤ì¤Æ¤¤¤ë¡£";
+info[i++] = "¤½¤ì¤Ïưʪ¤ò¸Æ¤Ó´ó¤»¤ë¡£";
#else
- info[i++] = "It is heavily cursed.";
+ info[i++] = "It nanka.";
#endif
- }
- else
- {
+ }
+ if (o_ptr->curse_flags & TRC_CALL_DEMON)
+ {
#ifdef JP
-info[i++] = "¤½¤ì¤Ï¼ö¤ï¤ì¤Æ¤¤¤ë¡£";
+info[i++] = "¤½¤ì¤Ï°Ëâ¤ò¸Æ¤Ó´ó¤»¤ë¡£";
#else
- info[i++] = "It is cursed.";
+ info[i++] = "It nanka.";
#endif
- }
}
+ if (o_ptr->curse_flags & TRC_CALL_DRAGON)
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¥É¥é¥´¥ó¤ò¸Æ¤Ó´ó¤»¤ë¡£";
+#else
+ info[i++] = "It nanka.";
+#endif
- if (f3 & TR3_TY_CURSE)
+ }
+ if (o_ptr->curse_flags & TRC_COWARDICE)
{
#ifdef JP
-info[i++] = "¤½¤ì¤ÏÂÀ¸Å¤Î²Ò¡¹¤·¤¤±åÇ°¤¬½É¤Ã¤Æ¤¤¤ë¡£";
+info[i++] = "¤½¤ì¤Ï¶²ÉÝ´¶¤ò°ú¤µ¯¤³¤¹¡£";
#else
- info[i++] = "It carries an ancient foul curse.";
+ info[i++] = "It nanka.";
+#endif
+
+ }
+ if ((f3 & (TR3_TELEPORT)) || (o_ptr->curse_flags & TRC_TELEPORT))
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¥é¥ó¥À¥à¤Ê¥Æ¥ì¥Ý¡¼¥È¤ò°ú¤µ¯¤³¤¹¡£";
+#else
+ info[i++] = "It induces random teleportation.";
+#endif
+
+ }
+ if (o_ptr->curse_flags & TRC_LOW_MELEE)
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¹¶·â¤ò³°¤·¤ä¤¹¤¤¡£";
+#else
+ info[i++] = "It nanka.";
+#endif
+
+ }
+ if (o_ptr->curse_flags & TRC_LOW_AC)
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¹¶·â¤ò¼õ¤±¤ä¤¹¤¤¡£";
+#else
+ info[i++] = "It nanka.";
+#endif
+
+ }
+ if (o_ptr->curse_flags & TRC_LOW_MAGIC)
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤ÏËâË¡¤ò¾§¤¨¤Ë¤¯¤¯¤¹¤ë¡£";
+#else
+ info[i++] = "It nanka.";
+#endif
+
+ }
+ if (o_ptr->curse_flags & TRC_FAST_DIGEST)
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¤¢¤Ê¤¿¤Î¿·ÄÄÂå¼Õ¤ò®¤¯¤¹¤ë¡£";
+#else
+ info[i++] = "It nanka.";
+#endif
+
+ }
+ if (o_ptr->curse_flags & TRC_DRAIN_HP)
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¤¢¤Ê¤¿¤ÎÂÎÎϤòµÛ¤¤¼è¤ë¡£";
+#else
+ info[i++] = "It nanka.";
+#endif
+
+ }
+ if (o_ptr->curse_flags & TRC_DRAIN_MANA)
+ {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¤¢¤Ê¤¿¤ÎËâÎϤòµÛ¤¤¼è¤ë¡£";
+#else
+ info[i++] = "It nanka.";
#endif
}
if (f3 & TR3_DRAIN_EXP) total -= 12500;
if (f3 & TR3_TELEPORT)
{
- if (o_ptr->ident & IDENT_CURSED)
+ if (cursed_p(o_ptr))
total -= 7500;
else
total += 250;
}
if (f3 & TR3_AGGRAVATE) total -= 10000;
if (f3 & TR3_BLESSED) total += 750;
- if (f3 & TR3_CURSED) total -= 5000;
- if (f3 & TR3_HEAVY_CURSE) total -= 12500;
- if (f3 & TR3_PERMA_CURSE) total -= 15000;
+ if (o_ptr->curse_flags & TRC_CURSED) total -= 5000;
+ if (o_ptr->curse_flags & TRC_HEAVY_CURSE) total -= 12500;
+ if (o_ptr->curse_flags & TRC_PERMA_CURSE) total -= 15000;
/* Also, give some extra for activatable powers... */
if (o_ptr->art_name && (o_ptr->art_flags3 & TR3_ACTIVATE))
return (0);
/* Hack -- Require identical "cursed" status */
- if ((o_ptr->ident & (IDENT_CURSED)) != (j_ptr->ident & (IDENT_CURSED))) return (0);
+ if (o_ptr->curse_flags != j_ptr->curse_flags) return (0);
/* Hack -- Require identical "broken" status */
if ((o_ptr->ident & (IDENT_BROKEN)) != (j_ptr->ident & (IDENT_BROKEN))) return (0);
if (get_object_cost(o_ptr) <= 0) o_ptr->ident |= (IDENT_BROKEN);
/* Hack -- cursed items are always "cursed" */
- if (k_ptr->flags3 & (TR3_CURSED)) o_ptr->ident |= (IDENT_CURSED);
+ if (k_ptr->gen_flags & (TRG_CURSED)) o_ptr->curse_flags |= (TRC_CURSED);
+ if (k_ptr->gen_flags & (TRG_HEAVY_CURSE)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+ if (k_ptr->gen_flags & (TRG_PERMA_CURSE)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
+ if (k_ptr->gen_flags & (TRG_RANDOM_CURSE0)) o_ptr->curse_flags |= get_curse(0, o_ptr);
+ if (k_ptr->gen_flags & (TRG_RANDOM_CURSE1)) o_ptr->curse_flags |= get_curse(1, o_ptr);
+ if (k_ptr->gen_flags & (TRG_RANDOM_CURSE2)) o_ptr->curse_flags |= get_curse(2, o_ptr);
}
}
/* Cursed (if "bad") */
- if (o_ptr->to_h + o_ptr->to_d < 0) o_ptr->ident |= (IDENT_CURSED);
+ if (o_ptr->to_h + o_ptr->to_d < 0) o_ptr->curse_flags |= TRC_CURSED;
}
if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DIAMOND_EDGE)) return;
}
/* Cursed (if "bad") */
- if (o_ptr->to_a < 0) o_ptr->ident |= (IDENT_CURSED);
+ if (o_ptr->to_a < 0) o_ptr->curse_flags |= TRC_CURSED;
}
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Reverse pval */
o_ptr->pval = 0 - (o_ptr->pval);
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Reverse pval */
o_ptr->pval = 0 - (o_ptr->pval);
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Reverse pval */
o_ptr->pval = 0 - (o_ptr->pval);
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Reverse pval */
o_ptr->pval = 0 - (o_ptr->pval);
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Penalize */
o_ptr->pval = 0 - (1 + m_bonus(5, level));
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Penalize */
o_ptr->to_a = 0 - (5 + m_bonus(10, level));
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Reverse bonus */
o_ptr->to_d = 0 - o_ptr->to_d;
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Reverse tohit */
o_ptr->to_h = 0 - o_ptr->to_h;
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Reverse toac */
o_ptr->to_a = 0 - o_ptr->to_a;
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Reverse bonuses */
o_ptr->to_h = 0 - o_ptr->to_h;
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
/* Reverse bonuses */
o_ptr->pval = 0 - o_ptr->pval;
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= TRC_CURSED;
if (power > 0) power = 0 - power;
break;
}
}
- if (one_in_(400) && (power > 0) && !(o_ptr->ident & IDENT_CURSED) && (level > 79))
+ if (one_in_(400) && (power > 0) && !cursed_p(o_ptr) && (level > 79))
{
o_ptr->pval = MIN(o_ptr->pval,4);
/* Randart amulet */
}
}
/* Uncurse it */
- o_ptr->ident &= ~(IDENT_CURSED);
-
- if (o_ptr->art_flags3 & TR3_CURSED)
- o_ptr->art_flags3 &= ~(TR3_CURSED);
-
- if (o_ptr->art_flags3 & TR3_HEAVY_CURSE)
- o_ptr->art_flags3 &= ~(TR3_HEAVY_CURSE);
+ o_ptr->curse_flags = 0L;
}
else if ((power == -2) && one_in_(2))
{
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= (TRC_CURSED | TRC_HEAVY_CURSE);
}
break;
}
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= (TRC_CURSED);
/* Reverse bonuses */
o_ptr->pval = 0 - o_ptr->pval;
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= (TRC_CURSED);
/* Reverse bonuses */
o_ptr->pval = 0 - o_ptr->pval;
{
if (power < 0)
{
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= (TRC_CURSED);
}
break;
}
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= (TRC_CURSED);
/* Reverse bonuses */
o_ptr->pval = 0 - (o_ptr->pval);
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= (TRC_CURSED);
/* Penalize */
o_ptr->pval = 0 - (randint1(5) + m_bonus(5, level));
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= (TRC_CURSED);
/* Reverse bonuses */
o_ptr->pval = 0 - o_ptr->pval;
break;
}
}
- if (one_in_(150) && (power > 0) && !(o_ptr->ident & IDENT_CURSED) && (level > 79))
+ if (one_in_(150) && (power > 0) && !cursed_p(o_ptr) && (level > 79))
{
o_ptr->pval = MIN(o_ptr->pval,4);
/* Randart amulet */
}
}
/* Uncurse it */
- o_ptr->ident &= ~(IDENT_CURSED);
-
- if (o_ptr->art_flags3 & TR3_CURSED)
- o_ptr->art_flags3 &= ~(TR3_CURSED);
-
- if (o_ptr->art_flags3 & TR3_HEAVY_CURSE)
- o_ptr->art_flags3 &= ~(TR3_HEAVY_CURSE);
+ o_ptr->curse_flags = 0L;
}
else if ((power == -2) && one_in_(2))
{
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= (TRC_CURSED | TRC_HEAVY_CURSE);
}
break;
}
o_ptr->ident |= (IDENT_BROKEN);
/* Cursed */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags |= (TRC_CURSED);
}
#endif
break;
o_ptr->pval = i;
/* Some figurines are cursed */
- if (one_in_(6)) o_ptr->ident |= IDENT_CURSED;
+ if (one_in_(6)) o_ptr->curse_flags |= TRC_CURSED;
if (cheat_peek)
{
#endif
r_name + r_ptr->name, check - 1,
- !(o_ptr->ident & IDENT_CURSED) ? "" : " {cursed}");
+ !cursed_p(o_ptr) ? "" : " {cursed}");
}
break;
if (!a_ptr->cost) o_ptr->ident |= (IDENT_BROKEN);
/* Hack -- extract the "cursed" flag */
- if (a_ptr->flags3 & TR3_CURSED) o_ptr->ident |= (IDENT_CURSED);
+ if (a_ptr->gen_flags & TRG_CURSED) o_ptr->curse_flags |= (TRC_CURSED);
+ if (a_ptr->gen_flags & TRG_HEAVY_CURSE) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+ if (a_ptr->gen_flags & TRG_PERMA_CURSE) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
+ if (a_ptr->gen_flags & (TRG_RANDOM_CURSE0)) o_ptr->curse_flags |= get_curse(0, o_ptr);
+ if (a_ptr->gen_flags & (TRG_RANDOM_CURSE1)) o_ptr->curse_flags |= get_curse(1, o_ptr);
+ if (a_ptr->gen_flags & (TRG_RANDOM_CURSE2)) o_ptr->curse_flags |= get_curse(2, o_ptr);
/* Mega-Hack -- increase the rating */
rating += 10;
if (!e_ptr->cost) o_ptr->ident |= (IDENT_BROKEN);
/* Hack -- acquire "cursed" flag */
- if (e_ptr->flags3 & (TR3_CURSED)) o_ptr->ident |= (IDENT_CURSED);
+ if (e_ptr->gen_flags & TRG_CURSED) o_ptr->curse_flags |= (TRC_CURSED);
+ if (e_ptr->gen_flags & TRG_HEAVY_CURSE) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+ if (e_ptr->gen_flags & TRG_PERMA_CURSE) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
+ if (e_ptr->gen_flags & (TRG_RANDOM_CURSE0)) o_ptr->curse_flags |= get_curse(0, o_ptr);
+ if (e_ptr->gen_flags & (TRG_RANDOM_CURSE1)) o_ptr->curse_flags |= get_curse(1, o_ptr);
+ if (e_ptr->gen_flags & (TRG_RANDOM_CURSE2)) o_ptr->curse_flags |= get_curse(2, o_ptr);
if (e_ptr->gen_flags & (TRG_ONE_SUSTAIN)) one_sustain(o_ptr);
if (e_ptr->gen_flags & (TRG_XTRA_POWER)) one_ability(o_ptr);
if (!get_object_cost(o_ptr)) o_ptr->ident |= (IDENT_BROKEN);
/* Hack -- acquire "cursed" flag */
- if (k_ptr->flags3 & (TR3_CURSED)) o_ptr->ident |= (IDENT_CURSED);
+ if (k_ptr->gen_flags & (TRG_CURSED)) o_ptr->curse_flags |= (TRC_CURSED);
+ if (k_ptr->gen_flags & (TRG_HEAVY_CURSE)) o_ptr->curse_flags |= TRC_HEAVY_CURSE;
+ if (k_ptr->gen_flags & (TRG_PERMA_CURSE)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
+ if (k_ptr->gen_flags & (TRG_RANDOM_CURSE0)) o_ptr->curse_flags |= get_curse(0, o_ptr);
+ if (k_ptr->gen_flags & (TRG_RANDOM_CURSE1)) o_ptr->curse_flags |= get_curse(1, o_ptr);
+ if (k_ptr->gen_flags & (TRG_RANDOM_CURSE2)) o_ptr->curse_flags |= get_curse(2, o_ptr);
}
}
old_dd = o_ptr->dd;
old_pval = o_ptr->pval;
old_name2 = o_ptr->name2;
- if (old_f3 & (TR3_CURSED | TR3_HEAVY_CURSE | TR3_PERMA_CURSE)) dec--;
+ if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE | TRC_PERMA_CURSE)) dec--;
if (old_f3 & (TR3_AGGRAVATE)) dec--;
if (old_f3 & (TR3_NO_TELE)) dec--;
if (old_f3 & (TR3_DRAIN_EXP)) dec--;
wr_u32b(o_ptr->art_flags2);
wr_u32b(o_ptr->art_flags3);
+ wr_u32b(o_ptr->curse_flags);
+
/* Held by monster index */
wr_s16b(o_ptr->held_m_idx);
if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
}
- else if (p_ptr->aggravate)
+ else if (p_ptr->cursed & TRC_AGGRAVATE)
{
#ifdef JP
note = "¤Ï¤¢¤Ê¤¿¤ËŨ°Õ¤òÊú¤¤¤Æ¤¤¤ë¡ª";
obvious = FALSE;
if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
}
- else if (p_ptr->aggravate)
+ else if (p_ptr->cursed & TRC_AGGRAVATE)
{
#ifdef JP
note = "¤Ï¤¢¤Ê¤¿¤ËŨ°Õ¤òÊú¤¤¤Æ¤¤¤ë¡ª";
obvious = FALSE;
if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
}
- else if (p_ptr->aggravate)
+ else if (p_ptr->cursed & TRC_AGGRAVATE)
{
#ifdef JP
note = "¤Ï¤¢¤Ê¤¿¤ËŨ°Õ¤òÊú¤¤¤Æ¤¤¤ë¡ª";
obvious = FALSE;
if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
}
- else if (p_ptr->aggravate)
+ else if (p_ptr->cursed & TRC_AGGRAVATE)
{
#ifdef JP
note = "¤Ï¤¢¤Ê¤¿¤ËŨ°Õ¤òÊú¤¤¤Æ¤¤¤ë¡ª";
obvious = FALSE;
if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
}
- else if (p_ptr->aggravate)
+ else if (p_ptr->cursed & TRC_AGGRAVATE)
{
#ifdef JP
note = "¤Ï¤¢¤Ê¤¿¤ËŨ°Õ¤òÊú¤¤¤Æ¤¤¤ë¡ª";
#endif
}
- if (p_ptr->aggravate)
+ if (p_ptr->cursed & TRC_TY_CURSE)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê±åÇ°¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_AGGRAVATE)
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤Æ¤¤¤ë¡£";
#endif
}
- if (p_ptr->teleport)
+ if (p_ptr->cursed & TRC_DRAIN_EXP)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï·Ð¸³ÃͤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_SLOW_REGEN)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Î²óÉüÎϤÏÈó¾ï¤ËÃÙ¤¤¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_ADD_L_CURSE)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï..."; /* nanka */
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_ADD_H_CURSE)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï..."; /* nanka */
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_CALL_ANIMAL)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ïưʪ¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_CALL_DEMON)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï°Ëâ¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_CALL_DRAGON)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_COWARDICE)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹²²É¤ˤʤ롣";
+#else
+ info[i++] = "You are subject to cowardice.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_TELEPORT)
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î°ÌÃ֤ϤҤ¸¤ç¤¦¤ËÉÔ°ÂÄê¤À¡£";
#endif
}
+ if (p_ptr->cursed & TRC_LOW_MELEE)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¹¶·â¤ò³°¤·¤ä¤¹¤¤¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_LOW_AC)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤ò¼õ¤±¤ä¤¹¤¤¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_LOW_MAGIC)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤ò¼ºÇÔ¤·¤ä¤¹¤¤¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_FAST_DIGEST)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¤¹¤°¤ªÊ¢¤¬¤Ø¤ë¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_DRAIN_HP)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏÂÎÎϤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_DRAIN_MANA)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏËâÎϤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You nanka.";
+#endif
+
+ }
if (p_ptr->blessed)
{
#ifdef JP
/* Attempt to uncurse items being worn */
for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
{
- u32b f1, f2, f3;
-
object_type *o_ptr = &inventory[i];
/* Skip non-objects */
/* Uncursed already */
if (!cursed_p(o_ptr)) continue;
- /* Extract the flags */
- object_flags(o_ptr, &f1, &f2, &f3);
-
/* Heavily Cursed Items need a special spell */
- if (!all && (f3 & TR3_HEAVY_CURSE)) continue;
+ if (!all && (o_ptr->curse_flags & TRC_HEAVY_CURSE)) continue;
/* Perma-Cursed Items can NEVER be uncursed */
- if (f3 & TR3_PERMA_CURSE) continue;
+ if (o_ptr->curse_flags & TRC_PERMA_CURSE) continue;
/* Uncurse it */
- o_ptr->ident &= ~(IDENT_CURSED);
+ o_ptr->curse_flags = 0L;
/* Hack -- Assume felt */
o_ptr->ident |= (IDENT_SENSE);
- if (o_ptr->art_flags3 & TR3_CURSED)
- o_ptr->art_flags3 &= ~(TR3_CURSED);
-
- if (o_ptr->art_flags3 & TR3_HEAVY_CURSE)
- o_ptr->art_flags3 &= ~(TR3_HEAVY_CURSE);
-
/* Take note */
o_ptr->feeling = FEEL_NONE;
*/
static void break_curse(object_type *o_ptr)
{
- u32b f1, f2, f3;
-
- /* Extract the flags */
- object_flags(o_ptr, &f1, &f2, &f3);
-
- if (cursed_p(o_ptr) && !(f3 & TR3_PERMA_CURSE) && !(f3 & TR3_HEAVY_CURSE) && (randint0(100) < 25))
+ if (cursed_p(o_ptr) && !(o_ptr->curse_flags & TRC_PERMA_CURSE) && !(o_ptr->curse_flags & TRC_HEAVY_CURSE) && (randint0(100) < 25))
{
#ifdef JP
msg_print("¤«¤±¤é¤ì¤Æ¤¤¤¿¼ö¤¤¤¬ÂǤÁÇˤé¤ì¤¿¡ª");
msg_print("The curse is broken!");
#endif
+ o_ptr->curse_flags = 0L;
- o_ptr->ident &= ~(IDENT_CURSED);
o_ptr->ident |= (IDENT_SENSE);
- if (o_ptr->art_flags3 & TR3_CURSED)
- o_ptr->art_flags3 &= ~(TR3_CURSED);
-
o_ptr->feeling = FEEL_NONE;
}
}
/* Extract the flags */
object_flags(o_ptr, &f1, &f2, &f3);
- if (o_ptr->ident & IDENT_CURSED)
+ if (cursed_p(o_ptr))
{
- if (((f3 & TR3_HEAVY_CURSE) && (randint1(100) < 33)) ||
- (f3 & TR3_PERMA_CURSE))
+ if (((o_ptr->curse_flags & TRC_HEAVY_CURSE) && (randint1(100) < 33)) ||
+ (o_ptr->curse_flags & TRC_PERMA_CURSE))
{
#ifdef JP
msg_format("%s¤òʤ¤¦¹õ¤¤¥ª¡¼¥é¤Ï½ËÊ¡¤òÄ·¤ÍÊÖ¤·¤¿¡ª",
/* Uncurse it */
- o_ptr->ident &= ~(IDENT_CURSED);
+ o_ptr->curse_flags = 0L;
/* Hack -- Assume felt */
o_ptr->ident |= (IDENT_SENSE);
chance += 5 * (shouhimana - p_ptr->csp);
}
- if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance += 10;
- if (p_ptr->pseikaku == SEIKAKU_KIREMONO) chance -= 3;
- if ((p_ptr->pseikaku == SEIKAKU_GAMAN) || (p_ptr->pseikaku == SEIKAKU_CHIKARA)) chance++;
+ chance += p_ptr->to_m_chance;
if (((realm + 1) != p_ptr->realm1) && ((p_ptr->pclass == CLASS_MAGE) || (p_ptr->pclass == CLASS_PRIEST))) chance += 5;
/* Extract the minimum failure rate */
o_ptr->art_flags3 |= TR3_IGNORE_ACID;
- if ((o_ptr->to_a < 0) && !(o_ptr->ident & IDENT_CURSED))
+ if ((o_ptr->to_a < 0) && !cursed_p(o_ptr))
{
#ifdef JP
msg_format("%s¤Ï¿·ÉÊƱÍͤˤʤä¿¡ª",o_name);
o_ptr->art_flags3 = 0;
/* Curse it */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags = TRC_CURSED;
/* Break it */
o_ptr->ident |= (IDENT_BROKEN);
/* Curse it */
- o_ptr->ident |= (IDENT_CURSED);
+ o_ptr->curse_flags = TRC_CURSED;
/* Break it */
o_ptr->ident |= (IDENT_BROKEN);
u32b art_flags2; /* Flags, set 2 for the random artifacts of*/
u32b art_flags3; /* Flags, set 3 Zangband */
+ u32b curse_flags; /* Flags for curse */
+
s16b next_o_idx; /* Next object in stack (if any) */
s16b held_m_idx; /* Monster holding us (if any) */
bool sustain_con; /* Keep constitution */
bool sustain_chr; /* Keep charisma */
- bool aggravate; /* Aggravate monsters */
- bool teleport; /* Random teleporting */
+ u32b cursed; /* Player is cursed */
bool sutemi;
bool counter;
- bool exp_drain; /* Experience draining */
-
bool can_swim; /* No damage falling */
bool ffall; /* No damage falling */
bool lite; /* Permanent light */
s16b to_d_m; /* Bonus to dam (misc) */
s16b to_a; /* Bonus to ac */
+ s16b to_m_chance; /* Minusses to cast chance */
+
bool ryoute;
bool migite;
bool hidarite;
*misc_list++ = "Ancient Curse";
#endif
}
- if (f3 & TR3_PERMA_CURSE)
+ if (o_ptr->curse_flags & TRC_PERMA_CURSE)
{
#ifdef JP
*misc_list++ = "±Ê±ó¤Î¼ö¤¤";
*misc_list++ = "Permanently Cursed";
#endif
}
- else if (f3 & TR3_HEAVY_CURSE)
+ else if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
{
#ifdef JP
*misc_list++ = "¶¯ÎϤʼö¤¤";
#endif
}
/* else */
- else if (f3 & TR3_CURSED)
+ else if (o_ptr->curse_flags & TRC_CURSED)
{
#ifdef JP
*misc_list++ = "¼ö¤¤";
prt("+------------FLAGS1------------+", 10, j);
prt("AFFECT........SLAY........BRAND.", 11, j);
- prt(" mr cvae xsqpaefc", 12, j);
- prt("siwdccsissidsahanvudotgddhuoclio", 13, j);
- prt("tnieohtrtrnipttmiinmrrnrrraiierl", 14, j);
- prt("rtsxnarylcfgdkcpmldncltggpksdced", 15, j);
+ prt(" mf cvae xsqpaefc", 12, j);
+ prt("siwdccsossidsahanvudotgddhuoclio", 13, j);
+ prt("tnieohtctrnipttmiinmrrnrrraiierl", 14, j);
+ prt("rtsxnarelcfgdkcpmldncltggpksdced", 15, j);
prt_binary(f1, 16, j);
prt("+------------FLAGS2------------+", 17, j);
prt("SUST....IMMUN.RESIST............", 18, j);
- prt(" aefctrpsaefcpfldbc sn ", 19, j);
- prt("siwdcc clioheatcliooeialoshtncd", 20, j);
- prt("tnieoh ierlrfraierliatrnnnrhehi", 21, j);
- prt("rtsxna..dcedwlatdcedsrekdfddrxss", 22, j);
+ prt(" r aefctrpsaefcpfldbc sn ", 19, j);
+ prt("siwdcci clioheatcliooeialoshtncd", 20, j);
+ prt("tnieohd ierlrfraierliatrnnnrhehi", 21, j);
+ prt("rtsxnae.dcedwlatdcedsrekdfddrxss", 22, j);
prt_binary(f2, 23, j);
prt("+------------FLAGS3------------+", 10, j+32);
- prt("fe cnn t stdrmsiiii d abchp", 11, j+32);
- prt("aa aoomywhs lleeieihgggg rtgluvr", 12, j+32);
- prt("uu utmacaih eielgggonnnnaaerercc", 13, j+32);
- prt("rr reanurdo vtieeehtrrrrcilassuu", 14, j+32);
- prt("aa algarnew ienpsntsaefctnevserr", 15, j+32);
+ prt("fe cnn t stdrmsiiii d ab ", 11, j+32);
+ prt("aa aoomywhs lleeieihgggg rtgl ", 12, j+32);
+ prt("uu utmacaih eielgggonnnnaaere ", 13, j+32);
+ prt("rr reanurdo vtieeehtrrrrcilas ", 14, j+32);
+ prt("aa algarnew ienpsntsaefctnevs ", 15, j+32);
prt_binary(f3, 16, j+32);
}
static void do_cmd_wiz_cure_all(void)
{
/* Remove curses */
- (void)remove_all_curse();
+// (void)remove_all_curse();
/* Restore stats */
(void)res_stat(A_STR);
p_ptr->to_h_m = 0;
p_ptr->to_d_m = 0;
+ p_ptr->to_m_chance = 0;
+
/* Start with "normal" speed */
p_ptr->pspeed = 110;
p_ptr->tval_ammo = 0;
/* Clear all the flags */
- p_ptr->aggravate = FALSE;
- p_ptr->teleport = FALSE;
- p_ptr->exp_drain = FALSE;
+ p_ptr->cursed = 0L;
p_ptr->bless_blade = FALSE;
p_ptr->xtra_might = FALSE;
p_ptr->impact[0] = FALSE;
}
/* Sexy Gal */
- if (p_ptr->pseikaku == SEIKAKU_SEXY) p_ptr->aggravate = TRUE;
+ if (p_ptr->pseikaku == SEIKAKU_SEXY) p_ptr->cursed |= (TRC_AGGRAVATE);
+ if (p_ptr->pseikaku == SEIKAKU_NAMAKE) p_ptr->to_m_chance += 10;
+ if (p_ptr->pseikaku == SEIKAKU_KIREMONO) p_ptr->to_m_chance -= 3;
+ if ((p_ptr->pseikaku == SEIKAKU_GAMAN) || (p_ptr->pseikaku == SEIKAKU_CHIKARA)) p_ptr->to_m_chance++;
/* Lucky man */
if (p_ptr->pseikaku == SEIKAKU_LUCKY) p_ptr->muta3 |= MUT3_GOOD_LUCK;
/* Skip non-objects */
if (!o_ptr->k_idx) continue;
- if (o_ptr->tval == TV_CAPTURE) continue;
/* Extract the item flags */
object_flags(o_ptr, &f1, &f2, &f3);
+ p_ptr->cursed |= (o_ptr->curse_flags & (0xFFFFFFF0L));
+ if (o_ptr->name1 == ART_CHAINSWORD) p_ptr->cursed |= TRC_CHAINSWORD;
+
/* Affect stats */
if (f1 & (TR1_STR)) p_ptr->stat_add[A_STR] += o_ptr->pval;
if (f1 & (TR1_INT)) p_ptr->stat_add[A_INT] += o_ptr->pval;
if (f3 & (TR3_XTRA_SHOTS)) extra_shots++;
/* Various flags */
+ if (f3 & (TR3_AGGRAVATE)) p_ptr->cursed |= TRC_AGGRAVATE;
+ if (f3 & (TR3_DRAIN_EXP)) p_ptr->cursed |= TRC_DRAIN_EXP;
+ if (f3 & (TR3_TY_CURSE)) p_ptr->cursed |= TRC_TY_CURSE;
if (f3 & (TR3_DEC_MANA)) p_ptr->dec_mana = TRUE;
- if (f3 & (TR3_AGGRAVATE)) p_ptr->aggravate = TRUE;
- if (f3 & (TR3_TELEPORT)) p_ptr->teleport = TRUE;
- if (f3 & (TR3_DRAIN_EXP)) p_ptr->exp_drain = TRUE;
if (f3 & (TR3_BLESSED)) p_ptr->bless_blade = TRUE;
if (f3 & (TR3_XTRA_MIGHT)) p_ptr->xtra_might = TRUE;
if (f3 & (TR3_SLOW_DIGEST)) p_ptr->slow_digest = TRUE;
if (f2 & (TR2_HOLD_LIFE)) p_ptr->hold_life = TRUE;
if (f3 & (TR3_WARNING)) p_ptr->warning = TRUE;
+ if (f3 & (TR3_TELEPORT))
+ {
+ if (cursed_p(o_ptr)) p_ptr->cursed |= TRC_TELEPORT;
+ else if (!o_ptr->inscription || !(strchr(quark_str(o_ptr->inscription),'.')))
+ p_ptr->cursed |= TRC_TELEPORT_SELF;
+ }
+
/* Immunity flags */
if (f2 & (TR2_IM_FIRE)) p_ptr->immune_fire = TRUE;
if (f2 & (TR2_IM_ACID)) p_ptr->immune_acid = TRUE;
if (o_ptr->name2 == EGO_AMU_FOOL) p_ptr->heavy_spell = TRUE;
if (o_ptr->name2 == EGO_AMU_NAIVETY) down_saving = TRUE;
+ if (o_ptr->curse_flags & TRC_LOW_MAGIC)
+ {
+ if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
+ {
+ p_ptr->to_m_chance += 10;
+ }
+ else
+ {
+ p_ptr->to_m_chance += 3;
+ }
+ }
+
+ if (o_ptr->tval == TV_CAPTURE) continue;
+
/* Modify the base armor class */
p_ptr->ac += o_ptr->ac;
/* Apply the mental bonuses to armor class, if known */
if (object_known_p(o_ptr)) p_ptr->dis_to_a += o_ptr->to_a;
+ if (o_ptr->curse_flags & TRC_LOW_MELEE)
+ {
+ int slot = i - INVEN_RARM;
+ if (slot < 2)
+ {
+ if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
+ {
+ p_ptr->to_h[slot] -= 15;
+ if (o_ptr->ident & IDENT_MENTAL) p_ptr->dis_to_h[slot] -= 15;
+ }
+ else
+ {
+ p_ptr->to_h[slot] -= 5;
+ if (o_ptr->ident & IDENT_MENTAL) p_ptr->dis_to_h[slot] -= 5;
+ }
+ }
+ else
+ {
+ if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
+ {
+ p_ptr->to_h_b -= 15;
+ if (o_ptr->ident & IDENT_MENTAL) p_ptr->dis_to_h_b -= 15;
+ }
+ else
+ {
+ p_ptr->to_h_b -= 5;
+ if (o_ptr->ident & IDENT_MENTAL) p_ptr->dis_to_h_b -= 5;
+ }
+ }
+ }
+
+ if (o_ptr->curse_flags & TRC_LOW_AC)
+ {
+ if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
+ {
+ p_ptr->to_a -= 30;
+ if (o_ptr->ident & IDENT_MENTAL) p_ptr->dis_to_a -= 30;
+ }
+ else
+ {
+ p_ptr->to_a -= 10;
+ if (o_ptr->ident & IDENT_MENTAL) p_ptr->dis_to_a -= 10;
+ }
+ }
+
/* Hack -- do not apply "weapon" bonuses */
if (i == INVEN_RARM && buki_motteruka(i)) continue;
if (i == INVEN_LARM && buki_motteruka(i)) continue;
}
}
+ if (p_ptr->cursed & TRC_TELEPORT) p_ptr->cursed &= ~(TRC_TELEPORT_SELF);
+
/* Monks get extra ac for armour _not worn_ */
if (((p_ptr->pclass == CLASS_MONK) || (p_ptr->pclass == CLASS_FORCETRAINER)) && !heavy_armor())
{
p_ptr->skill_tht += ((cp_ptr->x_thb * p_ptr->lev / 10) + (ap_ptr->a_thb * p_ptr->lev / 50));
- if ((prace_is_(RACE_S_FAIRY)) && (p_ptr->pseikaku != SEIKAKU_SEXY) && p_ptr->aggravate)
+ if ((prace_is_(RACE_S_FAIRY)) && (p_ptr->pseikaku != SEIKAKU_SEXY) && (p_ptr->cursed & TRC_AGGRAVATE))
{
- p_ptr->aggravate = FALSE;
+ p_ptr->cursed &= ~(TRC_AGGRAVATE);
p_ptr->skill_stl = MIN(p_ptr->skill_stl - 3, (p_ptr->skill_stl + 2) / 2);
}