#include "angband.h"
+#include "artifact.h"
#include "spells-object.h"
#include "object-hook.h"
#include "player-status.h"
if (!get_rep_dir(&dir, FALSE)) return FALSE;
y = p_ptr->y + ddy[dir];
x = p_ptr->x + ddx[dir];
- g_ptr = &grid_array[y][x];
+ g_ptr = ¤t_floor_ptr->grid_array[y][x];
if (!have_flag(f_info[get_feat_mimic(g_ptr)].flags, FF_CAN_DIG))
{
floor_item_describe(0 - item);
floor_item_optimize(0 - item);
}
- take_turn(p_ptr, 100);;
+ take_turn(p_ptr, 100);
return TRUE;
}
}
}
+void acquire_chaos_weapon(player_type *creature_ptr)
+{
+ object_type forge;
+ object_type *q_ptr = &forge;
+ OBJECT_TYPE_VALUE dummy = TV_SWORD;
+ OBJECT_SUBTYPE_VALUE dummy2;
+ switch (randint1(creature_ptr->lev))
+ {
+ case 0: case 1:
+ dummy2 = SV_DAGGER;
+ break;
+ case 2: case 3:
+ dummy2 = SV_MAIN_GAUCHE;
+ break;
+ case 4:
+ dummy2 = SV_TANTO;
+ break;
+ case 5: case 6:
+ dummy2 = SV_RAPIER;
+ break;
+ case 7: case 8:
+ dummy2 = SV_SMALL_SWORD;
+ break;
+ case 9: case 10:
+ dummy2 = SV_BASILLARD;
+ break;
+ case 11: case 12: case 13:
+ dummy2 = SV_SHORT_SWORD;
+ break;
+ case 14: case 15:
+ dummy2 = SV_SABRE;
+ break;
+ case 16: case 17:
+ dummy2 = SV_CUTLASS;
+ break;
+ case 18:
+ dummy2 = SV_WAKIZASHI;
+ break;
+ case 19:
+ dummy2 = SV_KHOPESH;
+ break;
+ case 20:
+ dummy2 = SV_TULWAR;
+ break;
+ case 21:
+ dummy2 = SV_BROAD_SWORD;
+ break;
+ case 22: case 23:
+ dummy2 = SV_LONG_SWORD;
+ break;
+ case 24: case 25:
+ dummy2 = SV_SCIMITAR;
+ break;
+ case 26:
+ dummy2 = SV_NINJATO;
+ break;
+ case 27:
+ dummy2 = SV_KATANA;
+ break;
+ case 28: case 29:
+ dummy2 = SV_BASTARD_SWORD;
+ break;
+ case 30:
+ dummy2 = SV_GREAT_SCIMITAR;
+ break;
+ case 31:
+ dummy2 = SV_CLAYMORE;
+ break;
+ case 32:
+ dummy2 = SV_ESPADON;
+ break;
+ case 33:
+ dummy2 = SV_TWO_HANDED_SWORD;
+ break;
+ case 34:
+ dummy2 = SV_FLAMBERGE;
+ break;
+ case 35:
+ dummy2 = SV_NO_DACHI;
+ break;
+ case 36:
+ dummy2 = SV_EXECUTIONERS_SWORD;
+ break;
+ case 37:
+ dummy2 = SV_ZWEIHANDER;
+ break;
+ case 38:
+ dummy2 = SV_HAYABUSA;
+ break;
+ default:
+ dummy2 = SV_BLADE_OF_CHAOS;
+ }
+
+ object_prep(q_ptr, lookup_kind(dummy, dummy2));
+ q_ptr->to_h = 3 + randint1(dun_level) % 10;
+ q_ptr->to_d = 3 + randint1(dun_level) % 10;
+ one_resistance(q_ptr);
+ q_ptr->name2 = EGO_CHAOTIC;
+ (void)drop_near(q_ptr, -1, creature_ptr->y, creature_ptr->x);
+}
+
+
/*!
* @brief 防具呪縛処理 /
* Curse the players armor
return (TRUE);
}
+
+bool perilous_secrets(player_type *creature_ptr)
+{
+ if (!ident_spell(FALSE)) return FALSE;
+
+ if (mp_ptr->spell_book)
+ {
+ /* Sufficient mana */
+ if (20 <= creature_ptr->csp)
+ {
+ /* Use some mana */
+ creature_ptr->csp -= 20;
+ }
+
+ /* Over-exert the player */
+ else
+ {
+ int oops = 20 - creature_ptr->csp;
+
+ /* No mana left */
+ creature_ptr->csp = 0;
+ creature_ptr->csp_frac = 0;
+
+ msg_print(_("石を制御できない!", "You are too weak to control the stone!"));
+ /* Hack -- Bypass free action */
+ (void)set_paralyzed(creature_ptr->paralyzed + randint1(5 * oops + 1));
+
+ /* Confusing. */
+ (void)set_confused(creature_ptr->confused + randint1(5 * oops + 1));
+ }
+ creature_ptr->redraw |= (PR_MANA);
+ }
+ take_hit(DAMAGE_LOSELIFE, damroll(1, 12), _("危険な秘密", "perilous secrets"), -1);
+ /* Confusing. */
+ if (one_in_(5)) (void)set_confused(creature_ptr->confused + randint1(10));
+
+ /* Exercise a little care... */
+ if (one_in_(20)) take_hit(DAMAGE_LOSELIFE, damroll(4, 10), _("危険な秘密", "perilous secrets"), -1);
+ return TRUE;
+
+}
+
+/*!
+ * @brief 固定アーティファクト『ブラッディムーン』の特性を変更する。
+ * @details スレイ2d2種、及びone_resistance()による耐性1d2種、pval2種を得る。
+ * @param o_ptr 対象のオブジェクト構造体(ブラッディムーン)のポインタ
+ * @return なし
+ */
+void get_bloody_moon_flags(object_type *o_ptr)
+{
+ int dummy, i;
+
+ for (i = 0; i < TR_FLAG_SIZE; i++)
+ o_ptr->art_flags[i] = a_info[ART_BLOOD].flags[i];
+
+ dummy = randint1(2) + randint1(2);
+ for (i = 0; i < dummy; i++)
+ {
+ int flag = randint0(26);
+ if (flag >= 20) add_flag(o_ptr->art_flags, TR_KILL_UNDEAD + flag - 20);
+ else if (flag == 19) add_flag(o_ptr->art_flags, TR_KILL_ANIMAL);
+ else if (flag == 18) add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
+ else add_flag(o_ptr->art_flags, TR_CHAOTIC + flag);
+ }
+
+ dummy = randint1(2);
+ for (i = 0; i < dummy; i++) one_resistance(o_ptr);
+
+ for (i = 0; i < 2; i++)
+ {
+ int tmp = randint0(11);
+ if (tmp < A_MAX) add_flag(o_ptr->art_flags, TR_STR + tmp);
+ else add_flag(o_ptr->art_flags, TR_STEALTH + tmp - 6);
+ }
+}
+
+