OSDN Git Service

Implement permanently repeatedly weak/heavy cursing effects.
authoriks <iks@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 31 Jan 2013 07:08:33 +0000 (07:08 +0000)
committeriks <iks@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 31 Jan 2013 07:08:33 +0000 (07:08 +0000)
src/artifact.c
src/defines.h
src/dungeon.c
src/files.c
src/flavor.c
src/init1.c
src/object1.c
src/object2.c
src/spells3.c
src/wizard1.c
src/xtra1.c

index f064c56..42a8664 100644 (file)
@@ -199,6 +199,8 @@ static void curse_artifact(object_type * o_ptr)
        if (one_in_(3)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
        if (one_in_(2)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
        if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+       if (one_in_(6)) add_flag(o_ptr->art_flags, TR_ADD_L_CURSE);
+       if (one_in_(9)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
        if (one_in_(2)) add_flag(o_ptr->art_flags, TR_TELEPORT);
        else if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_TELE);
 
index f890e8b..2aeeaaf 100644 (file)
 #define TR_ESP_UNIQUE          115
 #define TR_FULL_NAME           116
 #define TR_FIXED_FLAVOR        117
+#define TR_ADD_L_CURSE         118
+#define TR_ADD_H_CURSE         119
 
-#define TR_FLAG_MAX            118
+#define TR_FLAG_MAX            120
 #define TR_FLAG_SIZE           4
 
 
index aae3364..545fb7c 100644 (file)
@@ -1499,6 +1499,17 @@ static object_type *choose_cursed_obj_name(u32b flag)
                        choices[number] = i;
                        number++;
                }
+               else if ((flag == TRC_ADD_L_CURSE) || (flag == TRC_ADD_H_CURSE))
+               {
+                       u32b cf = (flag == TRC_ADD_L_CURSE) ? TR_ADD_L_CURSE : TR_ADD_H_CURSE;
+                       u32b flgs[4];
+                       object_flags(o_ptr, flgs);
+                       if (have_flag(flgs, cf))
+                       {
+                               choices[number] = i;
+                               number++;
+                       }
+               }
        }
 
        /* Choice one of them */
@@ -2883,7 +2894,6 @@ static void process_world_aux_mutation(void)
        }
 }
 
-
 /*
  * Handle curse effects once every 10 game turns
  */
index ee1c47c..be4f3bd 100644 (file)
@@ -3005,6 +3005,8 @@ static void display_flag_aux(int row, int col, cptr header,
                /* Check flags */
                if (mode & DP_CURSE)
                {
+                       if ((mode & DP_CURSE) && (have_flag(flgs, TR_ADD_L_CURSE) || have_flag(flgs, TR_ADD_H_CURSE)))
+                               c_put_str(TERM_L_DARK, "+", row, col);
                        if ((mode & DP_CURSE) && (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE)))
                                c_put_str(TERM_WHITE, "+", row, col);
                        if ((mode & DP_CURSE) && (o_ptr->curse_flags & TRC_PERMA_CURSE))
index 1c5203e..a11ab49 100644 (file)
@@ -646,6 +646,8 @@ static flag_insc_table flag_insc_misc[] =
        { "ÅÜ", "Ag", TR_AGGRAVATE, -1 },
        { "½Ë", "Bs", TR_BLESSED, -1 },
        { "´÷", "Ty", TR_TY_CURSE, -1 },
+       { "¼ö", "C-", TR_ADD_L_CURSE, -1 },
+       { "ëÇ", "C+", TR_ADD_H_CURSE, -1 },
        { NULL, NULL, 0, -1 }
 };
 
@@ -805,6 +807,8 @@ static flag_insc_table flag_insc_misc[] =
        { "Ag", TR_AGGRAVATE, -1 },
        { "Bs", TR_BLESSED, -1 },
        { "Ty", TR_TY_CURSE, -1 },
+       { "C-", TR_ADD_L_CURSE, -1 },
+       { "C+", TR_ADD_H_CURSE, -1 },
        { NULL, 0, -1 }
 };
 
index ba9accb..cff1c4f 100644 (file)
@@ -748,8 +748,8 @@ static cptr k_info_flags[] =
        "TELEPORT",
        "AGGRAVATE",
        "BLESSED",
-       "XXX3",
-       "XXX4",
+       "XXX3", /* Fake flag for Smith */
+       "XXX4", /* Fake flag for Smith */
        "XXX5",
 
        "KILL_ANIMAL",
@@ -774,6 +774,8 @@ static cptr k_info_flags[] =
        "ESP_UNIQUE",
        "FULL_NAME",
        "FIXED_FLAVOR",
+       "ADD_L_CURSE",
+       "ADD_H_CURSE",
 };
 
 
index 4da8509..0e7806c 100644 (file)
@@ -2636,7 +2636,7 @@ info[i++] = "
 #endif
 
        }
-       if (o_ptr->curse_flags & TRC_ADD_L_CURSE)
+       if ((o_ptr->curse_flags & TRC_ADD_L_CURSE) || have_flag(flgs, TR_ADD_L_CURSE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¼å¤¤¼ö¤¤¤òÁý¤ä¤¹¡£";
@@ -2645,7 +2645,7 @@ info[i++] = "
 #endif
 
        }
-       if (o_ptr->curse_flags & TRC_ADD_H_CURSE)
+       if ((o_ptr->curse_flags & TRC_ADD_H_CURSE) || have_flag(flgs, TR_ADD_H_CURSE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¶¯ÎϤʼö¤¤¤òÁý¤ä¤¹¡£";
index 1670ac4..fa62929 100644 (file)
@@ -1027,6 +1027,8 @@ s32b flag_cost(object_type *o_ptr, int plusses)
        }
        if (have_flag(flgs, TR_AGGRAVATE)) total -= 10000;
        if (have_flag(flgs, TR_BLESSED)) total += 750;
+       if (o_ptr->curse_flags & TR_ADD_L_CURSE) total -= 5000;
+       if (o_ptr->curse_flags & TR_ADD_H_CURSE) total -= 12500;
        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;
@@ -7362,6 +7364,8 @@ static void drain_essence(void)
        old_name2 = o_ptr->name2;
        old_timeout = o_ptr->timeout;
        if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE | TRC_PERMA_CURSE)) dec--;
+       if (have_flag(old_flgs, TR_ADD_L_CURSE)) dec--;
+       if (have_flag(old_flgs, TR_ADD_H_CURSE)) dec--;
        if (have_flag(old_flgs, TR_AGGRAVATE)) dec--;
        if (have_flag(old_flgs, TR_NO_TELE)) dec--;
        if (have_flag(old_flgs, TR_DRAIN_EXP)) dec--;
index 232975f..4a3f487 100644 (file)
@@ -3532,6 +3532,8 @@ s = "
        if (object_is_cursed(o_ptr))
        {
                if (((o_ptr->curse_flags & TRC_HEAVY_CURSE) && (randint1(100) < 33)) ||
+                       have_flag(flgs, TR_ADD_L_CURSE) ||
+                       have_flag(flgs, TR_ADD_H_CURSE) ||
                    (o_ptr->curse_flags & TRC_PERMA_CURSE))
                {
 #ifdef JP
index 3d6b424..e154bc2 100644 (file)
@@ -845,21 +845,21 @@ static const flag_desc misc_flags3_desc[] =
        { TR_SH_COLD,            "Î䵤¥ª¡¼¥é" },
        { TR_NO_TELE,            "È¿¥Æ¥ì¥Ý¡¼¥È" },
        { TR_NO_MAGIC,           "È¿ËâË¡" },
-       { TR_LEVITATION,            "ÉâÍ·" },
+       { TR_LEVITATION,         "ÉâÍ·" },
        { TR_SEE_INVIS,          "²Ä»ëÆ©ÌÀ" },
        { TR_TELEPATHY,          "¥Æ¥ì¥Ñ¥·¡¼" },
-       { TR_ESP_ANIMAL,             "ưʪ´¶ÃÎ" },
-       { TR_ESP_UNDEAD,             "ÉԻശÃÎ" },
-       { TR_ESP_DEMON,              "°­Ëâ´¶ÃÎ" },
-       { TR_ESP_ORC,                "¥ª¡¼¥¯´¶ÃÎ" },
-       { TR_ESP_TROLL,              "¥È¥í¥ë´¶ÃÎ" },
-       { TR_ESP_GIANT,              "µð¿Í´¶ÃÎ" },
-       { TR_ESP_DRAGON,             "¥É¥é¥´¥ó´¶ÃÎ" },
-       { TR_ESP_HUMAN,              "¿Í´Ö´¶ÃÎ" },
-       { TR_ESP_EVIL,               "¼Ù°­´¶ÃÎ" },
-       { TR_ESP_GOOD,               "Á±ÎÉ´¶ÃÎ" },
-       { TR_ESP_NONLIVING,          "̵À¸Êª´¶ÃÎ" },
-       { TR_ESP_UNIQUE,             "¥æ¥Ë¡¼¥¯´¶ÃÎ" },
+       { TR_ESP_ANIMAL,         "ưʪ´¶ÃÎ" },
+       { TR_ESP_UNDEAD,         "ÉԻശÃÎ" },
+       { TR_ESP_DEMON,          "°­Ëâ´¶ÃÎ" },
+       { TR_ESP_ORC,            "¥ª¡¼¥¯´¶ÃÎ" },
+       { TR_ESP_TROLL,          "¥È¥í¥ë´¶ÃÎ" },
+       { TR_ESP_GIANT,          "µð¿Í´¶ÃÎ" },
+       { TR_ESP_DRAGON,         "¥É¥é¥´¥ó´¶ÃÎ" },
+       { TR_ESP_HUMAN,          "¿Í´Ö´¶ÃÎ" },
+       { TR_ESP_EVIL,           "¼Ù°­´¶ÃÎ" },
+       { TR_ESP_GOOD,           "Á±ÎÉ´¶ÃÎ" },
+       { TR_ESP_NONLIVING,      "̵À¸Êª´¶ÃÎ" },
+       { TR_ESP_UNIQUE,         "¥æ¥Ë¡¼¥¯´¶ÃÎ" },
        { TR_SLOW_DIGEST,        "Ãپò½" },
        { TR_REGEN,              "µÞ®²óÉü" },
        { TR_WARNING,            "·Ù¹ð" },
@@ -878,6 +878,18 @@ static const flag_desc misc_flags3_desc[] =
        { TR_LEVITATION,            "Levitation" },
        { TR_SEE_INVIS,          "See Invisible" },
        { TR_TELEPATHY,          "ESP" },
+       { TR_ESP_ANIMAL,         "Sense Animal" },
+       { TR_ESP_UNDEAD,         "Sense Undead" },
+       { TR_ESP_DEMON,          "Sense Demon" },
+       { TR_ESP_ORC,            "Sense Orc" },
+       { TR_ESP_TROLL,          "Sense Troll" },
+       { TR_ESP_GIANT,          "Sense Giant" },
+       { TR_ESP_DRAGON,         "Sense Dragon" },
+       { TR_ESP_HUMAN,          "Sense Human" },
+       { TR_ESP_EVIL,           "Sense Evil" },
+       { TR_ESP_GOOD,           "Sense Good" },
+       { TR_ESP_NONLIVING,      "Sense Nonliving" },
+       { TR_ESP_UNIQUE,         "Sense Unique" },
        { TR_SLOW_DIGEST,        "Slow Digestion" },
        { TR_REGEN,              "Regeneration" },
        { TR_WARNING,            "Warning" },
@@ -1270,6 +1282,22 @@ static void analyze_misc_magic(object_type *o_ptr, cptr *misc_list)
                        *misc_list++ = "Cursed";
 #endif
                }
+               if (have_flag(flgs, TR_ADD_L_CURSE))
+               {
+#ifdef JP
+                       *misc_list++ = "¼ö¤¤¤òÁý¤ä¤¹";
+#else
+                       *misc_list++ = "Cursing";
+#endif
+               }
+               if (have_flag(flgs, TR_ADD_H_CURSE))
+               {
+#ifdef JP
+                       *misc_list++ = "¶¯ÎϤʼö¤¤¤òÁý¤ä¤¹";
+#else
+                       *misc_list++ = "Heavily Cursing";
+#endif
+               }
        }
 
        /* Terminate the description list */
index 2309f9d..4cd3354 100644 (file)
@@ -4120,6 +4120,8 @@ void calc_bonuses(void)
                if (have_flag(flgs, TR_AGGRAVATE))   p_ptr->cursed |= TRC_AGGRAVATE;
                if (have_flag(flgs, TR_DRAIN_EXP))   p_ptr->cursed |= TRC_DRAIN_EXP;
                if (have_flag(flgs, TR_TY_CURSE))    p_ptr->cursed |= TRC_TY_CURSE;
+               if (have_flag(flgs, TR_ADD_L_CURSE)) p_ptr->cursed |= TRC_ADD_L_CURSE;
+               if (have_flag(flgs, TR_ADD_H_CURSE)) p_ptr->cursed |= TRC_ADD_H_CURSE;
                if (have_flag(flgs, TR_DEC_MANA))    p_ptr->dec_mana = TRUE;
                if (have_flag(flgs, TR_BLESSED))     p_ptr->bless_blade = TRUE;
                if (have_flag(flgs, TR_XTRA_MIGHT))  p_ptr->xtra_might = TRUE;