monster_race *r_ptr = &r_info[r_idx];
/* Decline town monsters */
-/* if (!monster_dungeon(r_idx)) return FALSE; */
+/* if (!mon_hook_dungeon(r_idx)) return FALSE; */
/* Decline unique monsters */
/* if (r_ptr->flags1 & (RF1_UNIQUE)) return (FALSE); */
-/* if (r_ptr->flags7 & (RF7_UNIQUE_7)) return (FALSE); */
+/* if (r_ptr->flags7 & (RF7_NAZGUL)) return (FALSE); */
if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return (FALSE);
if (r_ptr->flags2 & (RF2_MULTIPLY)) return (FALSE);
clear_bldg(4,18);
#ifdef JP
- prt("»àÂΤò»ý¤Áµ¢¤ë¤È¾Þ¶â¤òº¹¤·¾å¤²¤Þ¤¹¡£",4 ,10);
+ prt("»àÂΤò»ý¤Áµ¢¤ì¤ÐÊó½·¤òº¹¤·¾å¤²¤Þ¤¹¡£",4 ,10);
c_put_str(TERM_YELLOW, "¸½ºß¤Î¾Þ¶â¼ó", 6, 10);
#else
prt("Offer a prize when you bring a wanted monster's corpse",4 ,10);
for (i = 0; i < MAX_KUBI; i++)
{
- char buf[160];
+ byte color;
+ cptr done_mark;
monster_race *r_ptr = &r_info[(kubi_r_idx[i] > 10000 ? kubi_r_idx[i] - 10000 : kubi_r_idx[i])];
- sprintf(buf,"%-40s ---- ",r_name + r_ptr->name);
- prt(buf, y+7, 10);
if (kubi_r_idx[i] > 10000)
+ {
+ color = TERM_RED;
#ifdef JP
- c_put_str(TERM_RED,"ºÑ", y+7, 56);
+ done_mark = "(ºÑ)";
#else
- c_put_str(TERM_RED,"done", y+7, 56);
+ done_mark = "(done)";
#endif
+ }
else
{
- sprintf(buf,"$%d", 300 * (r_ptr->level + 1));
- prt(buf, y+7, 56);
+ color = TERM_WHITE;
+ done_mark = "";
}
+
+ c_prt(color, format("%s %s", r_name + r_ptr->name, done_mark), y+7, 10);
+
y = (y+1) % 10;
if (!y && (i < MAX_KUBI -1))
{
}
}
+
+/* List of prize object */
+static struct {
+ s16b tval;
+ s16b sval;
+} prize_list[MAX_KUBI] =
+{
+ {TV_POTION, SV_POTION_CURING},
+ {TV_POTION, SV_POTION_SPEED},
+ {TV_POTION, SV_POTION_SPEED},
+ {TV_POTION, SV_POTION_RESISTANCE},
+ {TV_POTION, SV_POTION_ENLIGHTENMENT},
+
+ {TV_POTION, SV_POTION_HEALING},
+ {TV_POTION, SV_POTION_RESTORE_MANA},
+ {TV_SCROLL, SV_SCROLL_STAR_DESTRUCTION},
+ {TV_POTION, SV_POTION_STAR_ENLIGHTENMENT},
+ {TV_SCROLL, SV_SCROLL_SUMMON_PET},
+
+ {TV_SCROLL, SV_SCROLL_GENOCIDE},
+ {TV_POTION, SV_POTION_STAR_HEALING},
+ {TV_POTION, SV_POTION_STAR_HEALING},
+ {TV_POTION, SV_POTION_NEW_LIFE},
+ {TV_SCROLL, SV_SCROLL_MASS_GENOCIDE},
+
+ {TV_POTION, SV_POTION_LIFE},
+ {TV_POTION, SV_POTION_LIFE},
+ {TV_POTION, SV_POTION_AUGMENTATION},
+ {TV_POTION, SV_POTION_INVULNERABILITY},
+ {TV_SCROLL, SV_SCROLL_ARTIFACT},
+};
+
+
+/* Get prize */
static bool kankin(void)
{
int i, j;
char o_name[MAX_NLEN];
object_type *o_ptr;
- for (i = 0;i <= INVEN_LARM; i++)
+ /* Loop for inventory and right/left arm */
+ for (i = 0; i <= INVEN_LARM; i++)
{
o_ptr = &inventory[i];
+
+ /* Living Tsuchinoko worthes $1000000 */
if ((o_ptr->tval == TV_CAPTURE) && (o_ptr->pval == MON_TSUCHINOKO))
{
char buf[MAX_NLEN+20];
change = TRUE;
}
}
- for (i = 0;i <= INVEN_LARM; i++)
+
+ for (i = 0; i < INVEN_PACK; i++)
{
o_ptr = &inventory[i];
+
+ /* Corpse of Tsuchinoko worthes $200000 */
if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_CORPSE) && (o_ptr->pval == MON_TSUCHINOKO))
{
char buf[MAX_NLEN+20];
change = TRUE;
}
}
- for (i = 0;i <= INVEN_LARM; i++)
+
+ for (i = 0; i < INVEN_PACK; i++)
{
o_ptr = &inventory[i];
+
+ /* Bones of Tsuchinoko worthes $100000 */
if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON) && (o_ptr->pval == MON_TSUCHINOKO))
{
char buf[MAX_NLEN+20];
}
}
- for (i = 0;i <= INVEN_LARM; i++)
+ for (i = 0; i < INVEN_PACK; i++)
{
o_ptr = &inventory[i];
- if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_CORPSE) && (o_ptr->pval == today_mon))
+ if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_CORPSE) && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name)))
{
char buf[MAX_NLEN+20];
object_desc(o_name, o_ptr, TRUE, 3);
change = TRUE;
}
}
- for (i = 0;i <= INVEN_LARM; i++)
+
+ for (i = 0; i < INVEN_PACK; i++)
{
o_ptr = &inventory[i];
- if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON) && (o_ptr->pval == today_mon))
+
+ if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON) && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name)))
{
char buf[MAX_NLEN+20];
object_desc(o_name, o_ptr, TRUE, 3);
for (j = 0; j < MAX_KUBI; j++)
{
- for (i = 0;i <= INVEN_LARM; i++)
+ /* Need reverse order --- Positions will be changed in the loop */
+ for (i = INVEN_PACK-1; i >= 0; i--)
{
o_ptr = &inventory[i];
- if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_CORPSE) && (o_ptr->pval == kubi_r_idx[j]))
+ if ((o_ptr->tval == TV_CORPSE) && (o_ptr->pval == kubi_r_idx[j]))
{
char buf[MAX_NLEN+20];
+ int num, k;
+ object_type forge;
+
object_desc(o_name, o_ptr, TRUE, 3);
#ifdef JP
- sprintf(buf, "%s ¤ò´¹¶â¤·¤Þ¤¹¤«¡©",o_name);
+ sprintf(buf, "%s¤òÅϤ·¤Þ¤¹¤«¡©",o_name);
#else
- sprintf(buf, "Convert %s into money? ",o_name);
+ sprintf(buf, "Hand %s over? ",o_name);
#endif
- if (get_check(buf))
- {
+ if (!get_check(buf)) continue;
+
+#if 0 /* Obsorated */
#ifdef JP
- msg_format("¾Þ¶â %ld¡ð¤ò¼ê¤ËÆþ¤ì¤¿¡£", (r_info[kubi_r_idx[j]].level + 1) * 300 * o_ptr->number);
+ msg_format("¾Þ¶â %ld¡ð¤ò¼ê¤ËÆþ¤ì¤¿¡£", (r_info[kubi_r_idx[j]].level + 1) * 300 * o_ptr->number);
#else
- msg_format("You get %ldgp.", (r_info[kubi_r_idx[j]].level + 1) * 300 * o_ptr->number);
+ msg_format("You get %ldgp.", (r_info[kubi_r_idx[j]].level + 1) * 300 * o_ptr->number);
#endif
- p_ptr->au += (r_info[kubi_r_idx[j]].level+1) * 300 * o_ptr->number;
- p_ptr->redraw |= (PR_GOLD);
- inven_item_increase(i, -o_ptr->number);
- inven_item_describe(i);
- inven_item_optimize(i);
- chg_virtue(V_JUSTICE, 5);
- kubi_r_idx[j] += 10000;
+ p_ptr->au += (r_info[kubi_r_idx[j]].level+1) * 300 * o_ptr->number;
+ p_ptr->redraw |= (PR_GOLD);
+ inven_item_increase(i, -o_ptr->number);
+ inven_item_describe(i);
+ inven_item_optimize(i);
+ chg_virtue(V_JUSTICE, 5);
+ kubi_r_idx[j] += 10000;
+
+ change = TRUE;
+#endif /* Obsorated */
+
+ /* Hand it first */
+ inven_item_increase(i, -o_ptr->number);
+ inven_item_describe(i);
+ inven_item_optimize(i);
+
+ chg_virtue(V_JUSTICE, 5);
+ kubi_r_idx[j] += 10000;
+
+ /* Count number of unique corpses already handed */
+ for (num = 0, k = 0; k < MAX_KUBI; k++)
+ {
+ if (kubi_r_idx[k] >= 10000) num++;
}
+
+#ifdef JP
+ msg_format("¤³¤ì¤Ç¹ç·× %d ¥Ý¥¤¥ó¥È³ÍÆÀ¤·¤Þ¤·¤¿¡£", num);
+#else
+ msg_format("You earned %d point%s total.", num, (num > 1 ? "s" : ""));
+#endif
+
+ /* Prepare to make a prize */
+ object_prep(&forge, lookup_kind(prize_list[num-1].tval, prize_list[num-1].sval));
+ apply_magic(&forge, object_level, AM_NO_FIXED_ART);
+
+ /* Identify it fully */
+ object_aware(&forge);
+ object_known(&forge);
+
+ /*
+ * Hand it --- Assume there is an empty slot.
+ * Since a corpse is handed at first,
+ * there is at least one empty slot.
+ */
+ (void)inven_carry(&forge);
+
+ /* Describe the object */
+ object_desc(o_name, &forge, TRUE, 3);
+#ifdef JP
+ msg_format("%s ¤òÌã¤Ã¤¿¡£",o_name);
+#else
+ msg_format("You get %s. ",o_name);
+#endif
+
change = TRUE;
}
}
}
else
{
- int oldturn = turn;
+ s32b oldturn = turn;
#ifdef JP
do_cmd_write_nikki(NIKKI_BUNSHOU, 0, "½É²°¤ËÇñ¤Þ¤Ã¤¿¡£");
#else
do_cmd_write_nikki(NIKKI_BUNSHOU, 0, "stay over night at the inn");
#endif
turn = (turn / (TURNS_PER_TICK*TOWN_DAWN/2) + 1) * (TURNS_PER_TICK*TOWN_DAWN/2);
+
+ if (dungeon_turn < dungeon_turn_limit)
+ {
+ dungeon_turn += MIN(turn - oldturn, TURNS_PER_TICK*250);
+ if (dungeon_turn > dungeon_turn_limit) dungeon_turn = dungeon_turn_limit;
+ }
+
+ prevent_turn_overflow();
+
if (((oldturn + TURNS_PER_TICK * TOWN_DAWN / 4) % (TURNS_PER_TICK * TOWN_DAWN)) > TURNS_PER_TICK * TOWN_DAWN/4) do_cmd_write_nikki(NIKKI_HIGAWARI, 0, NULL);
p_ptr->chp = p_ptr->mhp;
- dungeon_turn += MIN(turn - oldturn, TURNS_PER_TICK*250);
-
if (ironman_nightmare)
{
#ifdef JP
/*
- * Share gold for thieves
- */
-static void share_gold(void)
-{
- int i = (p_ptr->lev * 2) * 10;
-#ifdef JP
-msg_format("¡ð%d ¤ò¼ê¤ËÆþ¤ì¤¿¡£", i);
-#else
- msg_format("You collect %d gold pieces", i);
-#endif
-
- p_ptr->au += i;
-}
-
-
-/*
* Display quest information
*/
static void get_questinfo(int questnum)
if (do_res_stat(A_CON)) paid = TRUE;
if (do_res_stat(A_CHR)) paid = TRUE;
break;
- case BACT_GOLD: /* set timed reward flag */
- if (!p_ptr->rewards[BACT_GOLD])
- {
- share_gold();
- p_ptr->rewards[BACT_GOLD] = TRUE;
- }
- else
- {
-#ifdef JP
- msg_print("º£Æü¤Îʬ¤±Á°¤Ï¤¹¤Ç¤Ë»Ùʧ¤Ã¤¿¤¾¡ª");
-#else
- msg_print("You just had your daily allowance!");
-#endif
- }
- break;
case BACT_ENCHANT_ARROWS:
item_tester_hook = item_tester_hook_ammo;
enchant_item(bcost, 1, 1, 0);
p_ptr->word_recall = 1;
p_ptr->recall_dungeon = select_dungeon;
max_dlv[p_ptr->recall_dungeon] = ((amt > d_info[select_dungeon].maxdepth) ? d_info[select_dungeon].maxdepth : ((amt < d_info[select_dungeon].mindepth) ? d_info[select_dungeon].mindepth : amt));
- if (record_maxdeapth)
+ if (record_maxdepth)
#ifdef JP
do_cmd_write_nikki(NIKKI_TRUMP, select_dungeon, "¥È¥é¥ó¥×¥¿¥ï¡¼¤Ç");
#else
break;
}
case BACT_LOSE_MUTATION:
- if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
+ if (p_ptr->muta1 || p_ptr->muta2 ||
+ (p_ptr->muta3 & ~MUT3_GOOD_LUCK) ||
+ (p_ptr->pseikaku != SEIKAKU_LUCKY &&
+ (p_ptr->muta3 & MUT3_GOOD_LUCK)))
{
while(!lose_mutation(0));
paid = TRUE;