2 * @brief 個々のアイテム種別について、未鑑定名/鑑定後の正式な名前を取得する処理
7 #include "flavor/tval-description-switcher.h"
8 #include "flavor/flavor-util.h"
9 #include "locale/english.h"
10 #include "monster-race/monster-race.h"
11 #include "object-enchant/trg-types.h"
12 #include "object/object-kind.h"
13 #include "system/monster-race-definition.h"
14 #include "system/object-type-definition.h"
15 #include "util/enum-converter.h"
18 #include "monster-race/race-flags1.h"
19 #include "player-info/class-info.h"
22 static void describe_monster_ball(flavor_type *flavor_ptr)
24 const auto r_idx = i2enum<MonsterRaceId>(flavor_ptr->o_ptr->pval);
25 auto *r_ptr = &r_info[r_idx];
26 if (!flavor_ptr->known) {
30 if (!MonsterRace(r_idx).is_valid()) {
31 flavor_ptr->modstr = _(" (空)", " (empty)");
36 sprintf(flavor_ptr->tmp_val2, " (%s)", r_ptr->name.c_str());
37 flavor_ptr->modstr = flavor_ptr->tmp_val2;
39 flavor_ptr->t = format("%s", r_ptr->name.c_str());
40 if (r_ptr->kind_flags.has_not(MonsterKindType::UNIQUE)) {
41 sprintf(flavor_ptr->tmp_val2, " (%s%s)", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
42 flavor_ptr->modstr = flavor_ptr->tmp_val2;
44 sprintf(flavor_ptr->tmp_val2, "(%s)", flavor_ptr->t);
45 flavor_ptr->modstr = flavor_ptr->t;
50 static void describe_statue(flavor_type *flavor_ptr)
52 const auto r_idx = i2enum<MonsterRaceId>(flavor_ptr->o_ptr->pval);
53 auto *r_ptr = &r_info[r_idx];
55 flavor_ptr->modstr = r_ptr->name.c_str();
57 flavor_ptr->t = format("%s", r_ptr->name.c_str());
58 if (r_ptr->kind_flags.has_not(MonsterKindType::UNIQUE)) {
59 sprintf(flavor_ptr->tmp_val2, "%s%s", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
60 flavor_ptr->modstr = flavor_ptr->tmp_val2;
62 flavor_ptr->modstr = flavor_ptr->t;
67 static void describe_corpse(flavor_type *flavor_ptr)
69 const auto r_idx = i2enum<MonsterRaceId>(flavor_ptr->o_ptr->pval);
70 auto *r_ptr = &r_info[r_idx];
71 flavor_ptr->modstr = r_ptr->name.c_str();
73 flavor_ptr->basenm = "#%";
75 if (r_ptr->kind_flags.has(MonsterKindType::UNIQUE)) {
76 flavor_ptr->basenm = "& % of #";
78 flavor_ptr->basenm = "& # %";
83 static void describe_amulet(flavor_type *flavor_ptr)
85 if (flavor_ptr->aware && (flavor_ptr->o_ptr->is_fixed_artifact() || flavor_ptr->k_ptr->gen_flags.has(ItemGenerationTraitType::INSTA_ART))) {
89 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
90 if (!flavor_ptr->flavor) {
91 flavor_ptr->basenm = _("%のアミュレット", "& Amulet~ of %");
92 } else if (flavor_ptr->aware) {
93 flavor_ptr->basenm = _("%の#アミュレット", "& # Amulet~ of %");
95 flavor_ptr->basenm = _("#アミュレット", "& # Amulet~");
99 static void describe_ring(flavor_type *flavor_ptr)
101 if (flavor_ptr->aware && (flavor_ptr->o_ptr->is_fixed_artifact() || flavor_ptr->k_ptr->gen_flags.has(ItemGenerationTraitType::INSTA_ART))) {
105 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
106 if (!flavor_ptr->flavor) {
107 flavor_ptr->basenm = _("%の指輪", "& Ring~ of %");
108 } else if (flavor_ptr->aware) {
109 flavor_ptr->basenm = _("%の#指輪", "& # Ring~ of %");
111 flavor_ptr->basenm = _("#指輪", "& # Ring~");
114 if (!flavor_ptr->k_ptr->to_h && !flavor_ptr->k_ptr->to_d && (flavor_ptr->o_ptr->to_h || flavor_ptr->o_ptr->to_d)) {
115 flavor_ptr->show_weapon = true;
119 static void describe_staff(flavor_type *flavor_ptr)
121 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
122 if (!flavor_ptr->flavor) {
123 flavor_ptr->basenm = _("%の杖", "& Staff~ of %");
124 } else if (flavor_ptr->aware) {
125 flavor_ptr->basenm = _("%の#杖", "& # Staff~ of %");
127 flavor_ptr->basenm = _("#杖", "& # Staff~");
131 static void describe_wand(flavor_type *flavor_ptr)
133 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
134 if (!flavor_ptr->flavor) {
135 flavor_ptr->basenm = _("%の魔法棒", "& Wand~ of %");
136 } else if (flavor_ptr->aware) {
137 flavor_ptr->basenm = _("%の#魔法棒", "& # Wand~ of %");
139 flavor_ptr->basenm = _("#魔法棒", "& # Wand~");
143 static void describe_rod(flavor_type *flavor_ptr)
145 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
146 if (!flavor_ptr->flavor) {
147 flavor_ptr->basenm = _("%のロッド", "& Rod~ of %");
148 } else if (flavor_ptr->aware) {
149 flavor_ptr->basenm = _("%の#ロッド", "& # Rod~ of %");
151 flavor_ptr->basenm = _("#ロッド", "& # Rod~");
155 static void describe_scroll(flavor_type *flavor_ptr)
157 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
158 if (!flavor_ptr->flavor) {
159 flavor_ptr->basenm = _("%の巻物", "& Scroll~ of %");
160 } else if (flavor_ptr->aware) {
161 flavor_ptr->basenm = _("「#」と書かれた%の巻物", "& Scroll~ titled \"#\" of %");
163 flavor_ptr->basenm = _("「#」と書かれた巻物", "& Scroll~ titled \"#\"");
167 static void describe_potion(flavor_type *flavor_ptr)
169 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
170 if (!flavor_ptr->flavor) {
171 flavor_ptr->basenm = _("%の薬", "& Potion~ of %");
172 } else if (flavor_ptr->aware) {
173 flavor_ptr->basenm = _("%の#薬", "& # Potion~ of %");
175 flavor_ptr->basenm = _("#薬", "& # Potion~");
179 static void describe_food(flavor_type *flavor_ptr)
181 if (flavor_ptr->k_ptr->flavor_name.empty()) {
185 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
186 if (!flavor_ptr->flavor) {
187 flavor_ptr->basenm = _("%のキノコ", "& Mushroom~ of %");
188 } else if (flavor_ptr->aware) {
189 flavor_ptr->basenm = _("%の#キノコ", "& # Mushroom~ of %");
191 flavor_ptr->basenm = _("#キノコ", "& # Mushroom~");
195 static void describe_book_life(flavor_type *flavor_ptr)
198 flavor_ptr->basenm = "生命の魔法書%";
200 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
201 flavor_ptr->basenm = "& Book~ of Life Magic %";
203 flavor_ptr->basenm = "& Life Spellbook~ %";
208 static void describe_book_sorcery(flavor_type *flavor_ptr)
211 flavor_ptr->basenm = "仙術の魔法書%";
213 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
214 flavor_ptr->basenm = "& Book~ of Sorcery %";
216 flavor_ptr->basenm = "& Sorcery Spellbook~ %";
221 static void describe_book_nature(flavor_type *flavor_ptr)
224 flavor_ptr->basenm = "自然の魔法書%";
226 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
227 flavor_ptr->basenm = "& Book~ of Nature Magic %";
229 flavor_ptr->basenm = "& Nature Spellbook~ %";
234 static void describe_book_chaos(flavor_type *flavor_ptr)
237 flavor_ptr->basenm = "カオスの魔法書%";
239 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
240 flavor_ptr->basenm = "& Book~ of Chaos Magic %";
242 flavor_ptr->basenm = "& Chaos Spellbook~ %";
247 static void describe_book_death(flavor_type *flavor_ptr)
250 flavor_ptr->basenm = "暗黒の魔法書%";
252 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
253 flavor_ptr->basenm = "& Book~ of Death Magic %";
255 flavor_ptr->basenm = "& Death Spellbook~ %";
260 static void describe_book_trump(flavor_type *flavor_ptr)
263 flavor_ptr->basenm = "トランプの魔法書%";
265 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
266 flavor_ptr->basenm = "& Book~ of Trump Magic %";
268 flavor_ptr->basenm = "& Trump Spellbook~ %";
273 static void describe_book_arcane(flavor_type *flavor_ptr)
276 flavor_ptr->basenm = "秘術の魔法書%";
278 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
279 flavor_ptr->basenm = "& Book~ of Arcane Magic %";
281 flavor_ptr->basenm = "& Arcane Spellbook~ %";
286 static void describe_book_craft(flavor_type *flavor_ptr)
289 flavor_ptr->basenm = "匠の魔法書%";
291 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
292 flavor_ptr->basenm = "& Book~ of Craft Magic %";
294 flavor_ptr->basenm = "& Craft Spellbook~ %";
299 static void describe_book_demon(flavor_type *flavor_ptr)
302 flavor_ptr->basenm = "悪魔の魔法書%";
304 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
305 flavor_ptr->basenm = "& Book~ of Daemon Magic %";
307 flavor_ptr->basenm = "& Daemon Spellbook~ %";
312 static void describe_book_crusade(flavor_type *flavor_ptr)
315 flavor_ptr->basenm = "破邪の魔法書%";
317 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
318 flavor_ptr->basenm = "& Book~ of Crusade Magic %";
320 flavor_ptr->basenm = "& Crusade Spellbook~ %";
325 static void describe_book_hex(flavor_type *flavor_ptr)
328 flavor_ptr->basenm = "呪術の魔法書%";
330 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
331 flavor_ptr->basenm = "& Book~ of Hex Magic %";
333 flavor_ptr->basenm = "& Hex Spellbook~ %";
338 void switch_tval_description(flavor_type *flavor_ptr)
340 switch (flavor_ptr->o_ptr->tval) {
341 case ItemKindType::NONE:
342 flavor_ptr->basenm = _("(なし)", "(Nothing)");
344 case ItemKindType::SKELETON:
345 case ItemKindType::BOTTLE:
346 case ItemKindType::JUNK:
347 case ItemKindType::SPIKE:
348 case ItemKindType::FLASK:
349 case ItemKindType::CHEST:
350 case ItemKindType::WHISTLE:
352 case ItemKindType::CAPTURE:
353 describe_monster_ball(flavor_ptr);
355 case ItemKindType::FIGURINE:
356 case ItemKindType::STATUE:
357 describe_statue(flavor_ptr);
359 case ItemKindType::CORPSE:
360 describe_corpse(flavor_ptr);
362 case ItemKindType::SHOT:
363 case ItemKindType::BOLT:
364 case ItemKindType::ARROW:
365 case ItemKindType::BOW:
366 case ItemKindType::HAFTED:
367 case ItemKindType::POLEARM:
368 case ItemKindType::SWORD:
369 case ItemKindType::DIGGING:
370 flavor_ptr->show_weapon = true;
372 case ItemKindType::BOOTS:
373 case ItemKindType::GLOVES:
374 case ItemKindType::CLOAK:
375 case ItemKindType::CROWN:
376 case ItemKindType::HELM:
377 case ItemKindType::SHIELD:
378 case ItemKindType::SOFT_ARMOR:
379 case ItemKindType::HARD_ARMOR:
380 case ItemKindType::DRAG_ARMOR:
381 flavor_ptr->show_armour = true;
383 case ItemKindType::LITE:
385 case ItemKindType::AMULET:
386 describe_amulet(flavor_ptr);
388 case ItemKindType::RING:
389 describe_ring(flavor_ptr);
391 case ItemKindType::CARD:
393 case ItemKindType::STAFF:
394 describe_staff(flavor_ptr);
396 case ItemKindType::WAND:
397 describe_wand(flavor_ptr);
399 case ItemKindType::ROD:
400 describe_rod(flavor_ptr);
402 case ItemKindType::SCROLL:
403 describe_scroll(flavor_ptr);
405 case ItemKindType::POTION:
406 describe_potion(flavor_ptr);
408 case ItemKindType::FOOD:
409 describe_food(flavor_ptr);
411 case ItemKindType::PARCHMENT:
412 flavor_ptr->basenm = _("羊皮紙 - %", "& Parchment~ - %");
414 case ItemKindType::LIFE_BOOK:
415 describe_book_life(flavor_ptr);
417 case ItemKindType::SORCERY_BOOK:
418 describe_book_sorcery(flavor_ptr);
420 case ItemKindType::NATURE_BOOK:
421 describe_book_nature(flavor_ptr);
423 case ItemKindType::CHAOS_BOOK:
424 describe_book_chaos(flavor_ptr);
426 case ItemKindType::DEATH_BOOK:
427 describe_book_death(flavor_ptr);
429 case ItemKindType::TRUMP_BOOK:
430 describe_book_trump(flavor_ptr);
432 case ItemKindType::ARCANE_BOOK:
433 describe_book_arcane(flavor_ptr);
435 case ItemKindType::CRAFT_BOOK:
436 describe_book_craft(flavor_ptr);
438 case ItemKindType::DEMON_BOOK:
439 describe_book_demon(flavor_ptr);
441 case ItemKindType::CRUSADE_BOOK:
442 describe_book_crusade(flavor_ptr);
444 case ItemKindType::MUSIC_BOOK:
445 flavor_ptr->basenm = _("歌集%", "& Song Book~ %");
447 case ItemKindType::HISSATSU_BOOK:
448 flavor_ptr->basenm = _("& 武芸の書%", "Book~ of Kendo %");
450 case ItemKindType::HEX_BOOK:
451 describe_book_hex(flavor_ptr);
453 case ItemKindType::GOLD:
454 strcpy(flavor_ptr->buf, flavor_ptr->basenm);
457 strcpy(flavor_ptr->buf, _("(なし)", "(nothing)"));