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/tval-types.h"
13 #include "system/baseitem-info-definition.h"
14 #include "system/item-entity.h"
15 #include "system/monster-race-definition.h"
16 #include "util/enum-converter.h"
19 #include "monster-race/race-flags1.h"
20 #include "player-info/class-info.h"
23 static void describe_monster_ball(flavor_type *flavor_ptr)
25 const auto r_idx = i2enum<MonsterRaceId>(flavor_ptr->o_ptr->pval);
26 auto *r_ptr = &monraces_info[r_idx];
27 if (!flavor_ptr->known) {
31 if (!MonsterRace(r_idx).is_valid()) {
32 flavor_ptr->modstr = _(" (空)", " (empty)");
37 sprintf(flavor_ptr->tmp_val2, " (%s)", r_ptr->name.data());
38 flavor_ptr->modstr = flavor_ptr->tmp_val2;
40 flavor_ptr->t = format("%s", r_ptr->name.data());
41 if (r_ptr->kind_flags.has_not(MonsterKindType::UNIQUE)) {
42 sprintf(flavor_ptr->tmp_val2, " (%s%s)", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
43 flavor_ptr->modstr = flavor_ptr->tmp_val2;
45 sprintf(flavor_ptr->tmp_val2, "(%s)", flavor_ptr->t);
46 flavor_ptr->modstr = flavor_ptr->t;
51 static void describe_statue(flavor_type *flavor_ptr)
53 const auto r_idx = i2enum<MonsterRaceId>(flavor_ptr->o_ptr->pval);
54 auto *r_ptr = &monraces_info[r_idx];
56 flavor_ptr->modstr = r_ptr->name.data();
58 flavor_ptr->t = format("%s", r_ptr->name.data());
59 if (r_ptr->kind_flags.has_not(MonsterKindType::UNIQUE)) {
60 sprintf(flavor_ptr->tmp_val2, "%s%s", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
61 flavor_ptr->modstr = flavor_ptr->tmp_val2;
63 flavor_ptr->modstr = flavor_ptr->t;
68 static void describe_corpse(flavor_type *flavor_ptr)
70 const auto r_idx = i2enum<MonsterRaceId>(flavor_ptr->o_ptr->pval);
71 auto *r_ptr = &monraces_info[r_idx];
72 flavor_ptr->modstr = r_ptr->name.data();
74 flavor_ptr->basenm = "#%";
76 if (r_ptr->kind_flags.has(MonsterKindType::UNIQUE)) {
77 flavor_ptr->basenm = "& % of #";
79 flavor_ptr->basenm = "& # %";
84 static void describe_amulet(flavor_type *flavor_ptr)
86 if (flavor_ptr->aware && (flavor_ptr->o_ptr->is_fixed_artifact() || flavor_ptr->k_ptr->gen_flags.has(ItemGenerationTraitType::INSTA_ART))) {
90 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.data();
91 if (!flavor_ptr->flavor) {
92 flavor_ptr->basenm = _("%のアミュレット", "& Amulet~ of %");
93 } else if (flavor_ptr->aware) {
94 flavor_ptr->basenm = _("%の#アミュレット", "& # Amulet~ of %");
96 flavor_ptr->basenm = _("#アミュレット", "& # Amulet~");
100 static void describe_ring(flavor_type *flavor_ptr)
102 if (flavor_ptr->aware && (flavor_ptr->o_ptr->is_fixed_artifact() || flavor_ptr->k_ptr->gen_flags.has(ItemGenerationTraitType::INSTA_ART))) {
106 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.data();
107 if (!flavor_ptr->flavor) {
108 flavor_ptr->basenm = _("%の指輪", "& Ring~ of %");
109 } else if (flavor_ptr->aware) {
110 flavor_ptr->basenm = _("%の#指輪", "& # Ring~ of %");
112 flavor_ptr->basenm = _("#指輪", "& # Ring~");
115 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)) {
116 flavor_ptr->show_weapon = true;
120 static void describe_staff(flavor_type *flavor_ptr)
122 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.data();
123 if (!flavor_ptr->flavor) {
124 flavor_ptr->basenm = _("%の杖", "& Staff~ of %");
125 } else if (flavor_ptr->aware) {
126 flavor_ptr->basenm = _("%の#杖", "& # Staff~ of %");
128 flavor_ptr->basenm = _("#杖", "& # Staff~");
132 static void describe_wand(flavor_type *flavor_ptr)
134 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.data();
135 if (!flavor_ptr->flavor) {
136 flavor_ptr->basenm = _("%の魔法棒", "& Wand~ of %");
137 } else if (flavor_ptr->aware) {
138 flavor_ptr->basenm = _("%の#魔法棒", "& # Wand~ of %");
140 flavor_ptr->basenm = _("#魔法棒", "& # Wand~");
144 static void describe_rod(flavor_type *flavor_ptr)
146 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.data();
147 if (!flavor_ptr->flavor) {
148 flavor_ptr->basenm = _("%のロッド", "& Rod~ of %");
149 } else if (flavor_ptr->aware) {
150 flavor_ptr->basenm = _("%の#ロッド", "& # Rod~ of %");
152 flavor_ptr->basenm = _("#ロッド", "& # Rod~");
156 static void describe_scroll(flavor_type *flavor_ptr)
158 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.data();
159 if (!flavor_ptr->flavor) {
160 flavor_ptr->basenm = _("%の巻物", "& Scroll~ of %");
161 } else if (flavor_ptr->aware) {
162 flavor_ptr->basenm = _("「#」と書かれた%の巻物", "& Scroll~ titled \"#\" of %");
164 flavor_ptr->basenm = _("「#」と書かれた巻物", "& Scroll~ titled \"#\"");
168 static void describe_potion(flavor_type *flavor_ptr)
170 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.data();
171 if (!flavor_ptr->flavor) {
172 flavor_ptr->basenm = _("%の薬", "& Potion~ of %");
173 } else if (flavor_ptr->aware) {
174 flavor_ptr->basenm = _("%の#薬", "& # Potion~ of %");
176 flavor_ptr->basenm = _("#薬", "& # Potion~");
180 static void describe_food(flavor_type *flavor_ptr)
182 if (flavor_ptr->k_ptr->flavor_name.empty()) {
186 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.data();
187 if (!flavor_ptr->flavor) {
188 flavor_ptr->basenm = _("%のキノコ", "& Mushroom~ of %");
189 } else if (flavor_ptr->aware) {
190 flavor_ptr->basenm = _("%の#キノコ", "& # Mushroom~ of %");
192 flavor_ptr->basenm = _("#キノコ", "& # Mushroom~");
196 static void describe_book_life(flavor_type *flavor_ptr)
199 flavor_ptr->basenm = "生命の魔法書%";
201 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
202 flavor_ptr->basenm = "& Book~ of Life Magic %";
204 flavor_ptr->basenm = "& Life Spellbook~ %";
209 static void describe_book_sorcery(flavor_type *flavor_ptr)
212 flavor_ptr->basenm = "仙術の魔法書%";
214 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
215 flavor_ptr->basenm = "& Book~ of Sorcery %";
217 flavor_ptr->basenm = "& Sorcery Spellbook~ %";
222 static void describe_book_nature(flavor_type *flavor_ptr)
225 flavor_ptr->basenm = "自然の魔法書%";
227 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
228 flavor_ptr->basenm = "& Book~ of Nature Magic %";
230 flavor_ptr->basenm = "& Nature Spellbook~ %";
235 static void describe_book_chaos(flavor_type *flavor_ptr)
238 flavor_ptr->basenm = "カオスの魔法書%";
240 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
241 flavor_ptr->basenm = "& Book~ of Chaos Magic %";
243 flavor_ptr->basenm = "& Chaos Spellbook~ %";
248 static void describe_book_death(flavor_type *flavor_ptr)
251 flavor_ptr->basenm = "暗黒の魔法書%";
253 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
254 flavor_ptr->basenm = "& Book~ of Death Magic %";
256 flavor_ptr->basenm = "& Death Spellbook~ %";
261 static void describe_book_trump(flavor_type *flavor_ptr)
264 flavor_ptr->basenm = "トランプの魔法書%";
266 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
267 flavor_ptr->basenm = "& Book~ of Trump Magic %";
269 flavor_ptr->basenm = "& Trump Spellbook~ %";
274 static void describe_book_arcane(flavor_type *flavor_ptr)
277 flavor_ptr->basenm = "秘術の魔法書%";
279 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
280 flavor_ptr->basenm = "& Book~ of Arcane Magic %";
282 flavor_ptr->basenm = "& Arcane Spellbook~ %";
287 static void describe_book_craft(flavor_type *flavor_ptr)
290 flavor_ptr->basenm = "匠の魔法書%";
292 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
293 flavor_ptr->basenm = "& Book~ of Craft Magic %";
295 flavor_ptr->basenm = "& Craft Spellbook~ %";
300 static void describe_book_demon(flavor_type *flavor_ptr)
303 flavor_ptr->basenm = "悪魔の魔法書%";
305 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
306 flavor_ptr->basenm = "& Book~ of Daemon Magic %";
308 flavor_ptr->basenm = "& Daemon Spellbook~ %";
313 static void describe_book_crusade(flavor_type *flavor_ptr)
316 flavor_ptr->basenm = "破邪の魔法書%";
318 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
319 flavor_ptr->basenm = "& Book~ of Crusade Magic %";
321 flavor_ptr->basenm = "& Crusade Spellbook~ %";
326 static void describe_book_hex(flavor_type *flavor_ptr)
329 flavor_ptr->basenm = "呪術の魔法書%";
331 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
332 flavor_ptr->basenm = "& Book~ of Hex Magic %";
334 flavor_ptr->basenm = "& Hex Spellbook~ %";
339 void switch_tval_description(flavor_type *flavor_ptr)
341 switch (flavor_ptr->o_ptr->tval) {
342 case ItemKindType::NONE:
343 flavor_ptr->basenm = _("(なし)", "(Nothing)");
345 case ItemKindType::SKELETON:
346 case ItemKindType::BOTTLE:
347 case ItemKindType::JUNK:
348 case ItemKindType::SPIKE:
349 case ItemKindType::FLASK:
350 case ItemKindType::CHEST:
351 case ItemKindType::WHISTLE:
353 case ItemKindType::CAPTURE:
354 describe_monster_ball(flavor_ptr);
356 case ItemKindType::FIGURINE:
357 case ItemKindType::STATUE:
358 describe_statue(flavor_ptr);
360 case ItemKindType::CORPSE:
361 describe_corpse(flavor_ptr);
363 case ItemKindType::SHOT:
364 case ItemKindType::BOLT:
365 case ItemKindType::ARROW:
366 case ItemKindType::BOW:
367 case ItemKindType::HAFTED:
368 case ItemKindType::POLEARM:
369 case ItemKindType::SWORD:
370 case ItemKindType::DIGGING:
371 flavor_ptr->show_weapon = true;
373 case ItemKindType::BOOTS:
374 case ItemKindType::GLOVES:
375 case ItemKindType::CLOAK:
376 case ItemKindType::CROWN:
377 case ItemKindType::HELM:
378 case ItemKindType::SHIELD:
379 case ItemKindType::SOFT_ARMOR:
380 case ItemKindType::HARD_ARMOR:
381 case ItemKindType::DRAG_ARMOR:
382 flavor_ptr->show_armour = true;
384 case ItemKindType::LITE:
386 case ItemKindType::AMULET:
387 describe_amulet(flavor_ptr);
389 case ItemKindType::RING:
390 describe_ring(flavor_ptr);
392 case ItemKindType::CARD:
394 case ItemKindType::STAFF:
395 describe_staff(flavor_ptr);
397 case ItemKindType::WAND:
398 describe_wand(flavor_ptr);
400 case ItemKindType::ROD:
401 describe_rod(flavor_ptr);
403 case ItemKindType::SCROLL:
404 describe_scroll(flavor_ptr);
406 case ItemKindType::POTION:
407 describe_potion(flavor_ptr);
409 case ItemKindType::FOOD:
410 describe_food(flavor_ptr);
412 case ItemKindType::PARCHMENT:
413 flavor_ptr->basenm = _("羊皮紙 - %", "& Parchment~ - %");
415 case ItemKindType::LIFE_BOOK:
416 describe_book_life(flavor_ptr);
418 case ItemKindType::SORCERY_BOOK:
419 describe_book_sorcery(flavor_ptr);
421 case ItemKindType::NATURE_BOOK:
422 describe_book_nature(flavor_ptr);
424 case ItemKindType::CHAOS_BOOK:
425 describe_book_chaos(flavor_ptr);
427 case ItemKindType::DEATH_BOOK:
428 describe_book_death(flavor_ptr);
430 case ItemKindType::TRUMP_BOOK:
431 describe_book_trump(flavor_ptr);
433 case ItemKindType::ARCANE_BOOK:
434 describe_book_arcane(flavor_ptr);
436 case ItemKindType::CRAFT_BOOK:
437 describe_book_craft(flavor_ptr);
439 case ItemKindType::DEMON_BOOK:
440 describe_book_demon(flavor_ptr);
442 case ItemKindType::CRUSADE_BOOK:
443 describe_book_crusade(flavor_ptr);
445 case ItemKindType::MUSIC_BOOK:
446 flavor_ptr->basenm = _("歌集%", "& Song Book~ %");
448 case ItemKindType::HISSATSU_BOOK:
449 flavor_ptr->basenm = _("& 武芸の書%", "Book~ of Kendo %");
451 case ItemKindType::HEX_BOOK:
452 describe_book_hex(flavor_ptr);
454 case ItemKindType::GOLD:
455 strcpy(flavor_ptr->buf, flavor_ptr->basenm);
458 strcpy(flavor_ptr->buf, _("(なし)", "(nothing)"));