3 #include "spells-object.h"
4 #include "object-hook.h"
7 * @brief「弾/矢の製造」処理 / do_cmd_cast calls this function if the player's class is 'archer'.
8 * Hook to determine if an object is contertible in an arrow/bolt
9 * @return 製造を実際に行ったらTRUE、キャンセルしたらFALSEを返す
11 bool create_ammo(void)
20 GAME_TEXT o_name[MAX_NLEN];
25 sprintf(com, _("[S]弾, [A]矢, [B]クロスボウの矢 :", "Create [S]hots, Create [A]rrow or Create [B]olt ?"));
26 else if (p_ptr->lev >= 10)
27 sprintf(com, _("[S]弾, [A]矢:", "Create [S]hots or Create [A]rrow ?"));
29 sprintf(com, _("[S]弾:", "Create [S]hots ?"));
33 msg_print(_("混乱してる!", "You are too confused!"));
39 msg_print(_("目が見えない!", "You are blind!"));
45 if (!get_com(com, &ch, TRUE))
49 if (ch == 'S' || ch == 's')
54 if ((ch == 'A' || ch == 'a') && (p_ptr->lev >= 10))
59 if ((ch == 'B' || ch == 'b') && (p_ptr->lev >= 20))
66 /**********Create shots*********/
73 if (!get_rep_dir(&dir, FALSE)) return FALSE;
74 y = p_ptr->y + ddy[dir];
75 x = p_ptr->x + ddx[dir];
78 if (!have_flag(f_info[get_feat_mimic(c_ptr)].flags, FF_CAN_DIG))
80 msg_print(_("そこには岩石がない。", "You need pile of rubble."));
83 else if (!cave_have_flag_grid(c_ptr, FF_CAN_DIG) || !cave_have_flag_grid(c_ptr, FF_HURT_ROCK))
85 msg_print(_("硬すぎて崩せなかった。", "You failed to make ammo."));
92 /* Hack -- Give the player some small firestones */
93 object_prep(q_ptr, lookup_kind(TV_SHOT, (OBJECT_SUBTYPE_VALUE)m_bonus(1, p_ptr->lev) + 1));
94 q_ptr->number = (byte)rand_range(15, 30);
97 apply_magic(q_ptr, p_ptr->lev, AM_NO_FIXED_ART);
100 slot = inven_carry(q_ptr);
102 object_desc(o_name, q_ptr, 0);
103 msg_format(_("%sを作った。", "You make some ammo."), o_name);
105 /* Auto-inscription */
106 if (slot >= 0) autopick_alter_item(slot, FALSE);
108 /* Destroy the wall */
109 cave_alter_feat(y, x, FF_HURT_ROCK);
111 p_ptr->update |= (PU_FLOW);
114 /**********Create arrows*********/
121 item_tester_hook = item_tester_hook_convertible;
123 q = _("どのアイテムから作りますか? ", "Convert which item? ");
124 s = _("材料を持っていない。", "You have no item to convert.");
125 q_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR));
126 if (!q_ptr) return FALSE;
130 /* Hack -- Give the player some small firestones */
131 object_prep(q_ptr, lookup_kind(TV_ARROW, (OBJECT_SUBTYPE_VALUE)m_bonus(1, p_ptr->lev) + 1));
132 q_ptr->number = (byte)rand_range(5, 10);
135 apply_magic(q_ptr, p_ptr->lev, AM_NO_FIXED_ART);
137 q_ptr->discount = 99;
139 object_desc(o_name, q_ptr, 0);
140 msg_format(_("%sを作った。", "You make some ammo."), o_name);
144 inven_item_increase(item, -1);
145 inven_item_describe(item);
146 inven_item_optimize(item);
150 floor_item_increase(0 - item, -1);
151 floor_item_describe(0 - item);
152 floor_item_optimize(0 - item);
155 slot = inven_carry(q_ptr);
157 /* Auto-inscription */
158 if (slot >= 0) autopick_alter_item(slot, FALSE);
160 /**********Create bolts*********/
167 item_tester_hook = item_tester_hook_convertible;
169 q = _("どのアイテムから作りますか? ", "Convert which item? ");
170 s = _("材料を持っていない。", "You have no item to convert.");
172 q_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR));
173 if (!q_ptr) return FALSE;
177 /* Hack -- Give the player some small firestones */
178 object_prep(q_ptr, lookup_kind(TV_BOLT, (OBJECT_SUBTYPE_VALUE)m_bonus(1, p_ptr->lev) + 1));
179 q_ptr->number = (byte)rand_range(4, 8);
182 apply_magic(q_ptr, p_ptr->lev, AM_NO_FIXED_ART);
184 q_ptr->discount = 99;
186 object_desc(o_name, q_ptr, 0);
187 msg_format(_("%sを作った。", "You make some ammo."), o_name);
191 inven_item_increase(item, -1);
192 inven_item_describe(item);
193 inven_item_optimize(item);
197 floor_item_increase(0 - item, -1);
198 floor_item_describe(0 - item);
199 floor_item_optimize(0 - item);
202 slot = inven_carry(q_ptr);
204 /* Auto-inscription */
205 if (slot >= 0) autopick_alter_item(slot, FALSE);