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"
17 #include "monster-race/race-flags1.h"
18 #include "player-info/class-info.h"
21 static void describe_monster_ball(flavor_type *flavor_ptr)
23 auto *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
24 if (!flavor_ptr->known) {
28 if (!flavor_ptr->o_ptr->pval) {
29 flavor_ptr->modstr = _(" (空)", " (empty)");
34 sprintf(flavor_ptr->tmp_val2, " (%s)", r_ptr->name.c_str());
35 flavor_ptr->modstr = flavor_ptr->tmp_val2;
37 flavor_ptr->t = format("%s", r_ptr->name.c_str());
38 if (r_ptr->kind_flags.has_not(MonsterKindType::UNIQUE)) {
39 sprintf(flavor_ptr->tmp_val2, " (%s%s)", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
40 flavor_ptr->modstr = flavor_ptr->tmp_val2;
42 sprintf(flavor_ptr->tmp_val2, "(%s)", flavor_ptr->t);
43 flavor_ptr->modstr = flavor_ptr->t;
48 static void describe_statue(flavor_type *flavor_ptr)
50 auto *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
52 flavor_ptr->modstr = r_ptr->name.c_str();
54 flavor_ptr->t = format("%s", r_ptr->name.c_str());
55 if (r_ptr->kind_flags.has_not(MonsterKindType::UNIQUE)) {
56 sprintf(flavor_ptr->tmp_val2, "%s%s", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
57 flavor_ptr->modstr = flavor_ptr->tmp_val2;
59 flavor_ptr->modstr = flavor_ptr->t;
64 static void describe_corpse(flavor_type *flavor_ptr)
66 auto *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
67 flavor_ptr->modstr = r_ptr->name.c_str();
69 flavor_ptr->basenm = "#%";
71 if (r_ptr->kind_flags.has(MonsterKindType::UNIQUE)) {
72 flavor_ptr->basenm = "& % of #";
74 flavor_ptr->basenm = "& # %";
79 static void describe_amulet(flavor_type *flavor_ptr)
81 if (flavor_ptr->aware && (flavor_ptr->o_ptr->is_fixed_artifact() || flavor_ptr->k_ptr->gen_flags.has(ItemGenerationTraitType::INSTA_ART))) {
85 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
86 if (!flavor_ptr->flavor) {
87 flavor_ptr->basenm = _("%のアミュレット", "& Amulet~ of %");
88 } else if (flavor_ptr->aware) {
89 flavor_ptr->basenm = _("%の#アミュレット", "& # Amulet~ of %");
91 flavor_ptr->basenm = _("#アミュレット", "& # Amulet~");
95 static void describe_ring(flavor_type *flavor_ptr)
97 if (flavor_ptr->aware && (flavor_ptr->o_ptr->is_fixed_artifact() || flavor_ptr->k_ptr->gen_flags.has(ItemGenerationTraitType::INSTA_ART))) {
101 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
102 if (!flavor_ptr->flavor) {
103 flavor_ptr->basenm = _("%の指輪", "& Ring~ of %");
104 } else if (flavor_ptr->aware) {
105 flavor_ptr->basenm = _("%の#指輪", "& # Ring~ of %");
107 flavor_ptr->basenm = _("#指輪", "& # Ring~");
110 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)) {
111 flavor_ptr->show_weapon = true;
115 static void describe_staff(flavor_type *flavor_ptr)
117 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
118 if (!flavor_ptr->flavor) {
119 flavor_ptr->basenm = _("%の杖", "& Staff~ of %");
120 } else if (flavor_ptr->aware) {
121 flavor_ptr->basenm = _("%の#杖", "& # Staff~ of %");
123 flavor_ptr->basenm = _("#杖", "& # Staff~");
127 static void describe_wand(flavor_type *flavor_ptr)
129 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
130 if (!flavor_ptr->flavor) {
131 flavor_ptr->basenm = _("%の魔法棒", "& Wand~ of %");
132 } else if (flavor_ptr->aware) {
133 flavor_ptr->basenm = _("%の#魔法棒", "& # Wand~ of %");
135 flavor_ptr->basenm = _("#魔法棒", "& # Wand~");
139 static void describe_rod(flavor_type *flavor_ptr)
141 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
142 if (!flavor_ptr->flavor) {
143 flavor_ptr->basenm = _("%のロッド", "& Rod~ of %");
144 } else if (flavor_ptr->aware) {
145 flavor_ptr->basenm = _("%の#ロッド", "& # Rod~ of %");
147 flavor_ptr->basenm = _("#ロッド", "& # Rod~");
151 static void describe_scroll(flavor_type *flavor_ptr)
153 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
154 if (!flavor_ptr->flavor) {
155 flavor_ptr->basenm = _("%の巻物", "& Scroll~ of %");
156 } else if (flavor_ptr->aware) {
157 flavor_ptr->basenm = _("「#」と書かれた%の巻物", "& Scroll~ titled \"#\" of %");
159 flavor_ptr->basenm = _("「#」と書かれた巻物", "& Scroll~ titled \"#\"");
163 static void describe_potion(flavor_type *flavor_ptr)
165 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
166 if (!flavor_ptr->flavor) {
167 flavor_ptr->basenm = _("%の薬", "& Potion~ of %");
168 } else if (flavor_ptr->aware) {
169 flavor_ptr->basenm = _("%の#薬", "& # Potion~ of %");
171 flavor_ptr->basenm = _("#薬", "& # Potion~");
175 static void describe_food(flavor_type *flavor_ptr)
177 if (flavor_ptr->k_ptr->flavor_name.empty()) {
181 flavor_ptr->modstr = flavor_ptr->flavor_k_ptr->flavor_name.c_str();
182 if (!flavor_ptr->flavor) {
183 flavor_ptr->basenm = _("%のキノコ", "& Mushroom~ of %");
184 } else if (flavor_ptr->aware) {
185 flavor_ptr->basenm = _("%の#キノコ", "& # Mushroom~ of %");
187 flavor_ptr->basenm = _("#キノコ", "& # Mushroom~");
191 static void describe_book_life(flavor_type *flavor_ptr)
194 flavor_ptr->basenm = "生命の魔法書%";
196 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
197 flavor_ptr->basenm = "& Book~ of Life Magic %";
199 flavor_ptr->basenm = "& Life Spellbook~ %";
204 static void describe_book_sorcery(flavor_type *flavor_ptr)
207 flavor_ptr->basenm = "仙術の魔法書%";
209 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
210 flavor_ptr->basenm = "& Book~ of Sorcery %";
212 flavor_ptr->basenm = "& Sorcery Spellbook~ %";
217 static void describe_book_nature(flavor_type *flavor_ptr)
220 flavor_ptr->basenm = "自然の魔法書%";
222 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
223 flavor_ptr->basenm = "& Book~ of Nature Magic %";
225 flavor_ptr->basenm = "& Nature Spellbook~ %";
230 static void describe_book_chaos(flavor_type *flavor_ptr)
233 flavor_ptr->basenm = "カオスの魔法書%";
235 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
236 flavor_ptr->basenm = "& Book~ of Chaos Magic %";
238 flavor_ptr->basenm = "& Chaos Spellbook~ %";
243 static void describe_book_death(flavor_type *flavor_ptr)
246 flavor_ptr->basenm = "暗黒の魔法書%";
248 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
249 flavor_ptr->basenm = "& Book~ of Death Magic %";
251 flavor_ptr->basenm = "& Death Spellbook~ %";
256 static void describe_book_trump(flavor_type *flavor_ptr)
259 flavor_ptr->basenm = "トランプの魔法書%";
261 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
262 flavor_ptr->basenm = "& Book~ of Trump Magic %";
264 flavor_ptr->basenm = "& Trump Spellbook~ %";
269 static void describe_book_arcane(flavor_type *flavor_ptr)
272 flavor_ptr->basenm = "秘術の魔法書%";
274 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
275 flavor_ptr->basenm = "& Book~ of Arcane Magic %";
277 flavor_ptr->basenm = "& Arcane Spellbook~ %";
282 static void describe_book_craft(flavor_type *flavor_ptr)
285 flavor_ptr->basenm = "匠の魔法書%";
287 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
288 flavor_ptr->basenm = "& Book~ of Craft Magic %";
290 flavor_ptr->basenm = "& Craft Spellbook~ %";
295 static void describe_book_demon(flavor_type *flavor_ptr)
298 flavor_ptr->basenm = "悪魔の魔法書%";
300 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
301 flavor_ptr->basenm = "& Book~ of Daemon Magic %";
303 flavor_ptr->basenm = "& Daemon Spellbook~ %";
308 static void describe_book_crusade(flavor_type *flavor_ptr)
311 flavor_ptr->basenm = "破邪の魔法書%";
313 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
314 flavor_ptr->basenm = "& Book~ of Crusade Magic %";
316 flavor_ptr->basenm = "& Crusade Spellbook~ %";
321 static void describe_book_hex(flavor_type *flavor_ptr)
324 flavor_ptr->basenm = "呪術の魔法書%";
326 if (mp_ptr->spell_book == ItemKindType::LIFE_BOOK) {
327 flavor_ptr->basenm = "& Book~ of Hex Magic %";
329 flavor_ptr->basenm = "& Hex Spellbook~ %";
334 void switch_tval_description(flavor_type *flavor_ptr)
336 switch (flavor_ptr->o_ptr->tval) {
337 case ItemKindType::NONE:
338 flavor_ptr->basenm = _("(なし)", "(Nothing)");
340 case ItemKindType::SKELETON:
341 case ItemKindType::BOTTLE:
342 case ItemKindType::JUNK:
343 case ItemKindType::SPIKE:
344 case ItemKindType::FLASK:
345 case ItemKindType::CHEST:
346 case ItemKindType::WHISTLE:
348 case ItemKindType::CAPTURE:
349 describe_monster_ball(flavor_ptr);
351 case ItemKindType::FIGURINE:
352 case ItemKindType::STATUE:
353 describe_statue(flavor_ptr);
355 case ItemKindType::CORPSE:
356 describe_corpse(flavor_ptr);
358 case ItemKindType::SHOT:
359 case ItemKindType::BOLT:
360 case ItemKindType::ARROW:
361 case ItemKindType::BOW:
362 case ItemKindType::HAFTED:
363 case ItemKindType::POLEARM:
364 case ItemKindType::SWORD:
365 case ItemKindType::DIGGING:
366 flavor_ptr->show_weapon = true;
368 case ItemKindType::BOOTS:
369 case ItemKindType::GLOVES:
370 case ItemKindType::CLOAK:
371 case ItemKindType::CROWN:
372 case ItemKindType::HELM:
373 case ItemKindType::SHIELD:
374 case ItemKindType::SOFT_ARMOR:
375 case ItemKindType::HARD_ARMOR:
376 case ItemKindType::DRAG_ARMOR:
377 flavor_ptr->show_armour = true;
379 case ItemKindType::LITE:
381 case ItemKindType::AMULET:
382 describe_amulet(flavor_ptr);
384 case ItemKindType::RING:
385 describe_ring(flavor_ptr);
387 case ItemKindType::CARD:
389 case ItemKindType::STAFF:
390 describe_staff(flavor_ptr);
392 case ItemKindType::WAND:
393 describe_wand(flavor_ptr);
395 case ItemKindType::ROD:
396 describe_rod(flavor_ptr);
398 case ItemKindType::SCROLL:
399 describe_scroll(flavor_ptr);
401 case ItemKindType::POTION:
402 describe_potion(flavor_ptr);
404 case ItemKindType::FOOD:
405 describe_food(flavor_ptr);
407 case ItemKindType::PARCHMENT:
408 flavor_ptr->basenm = _("羊皮紙 - %", "& Parchment~ - %");
410 case ItemKindType::LIFE_BOOK:
411 describe_book_life(flavor_ptr);
413 case ItemKindType::SORCERY_BOOK:
414 describe_book_sorcery(flavor_ptr);
416 case ItemKindType::NATURE_BOOK:
417 describe_book_nature(flavor_ptr);
419 case ItemKindType::CHAOS_BOOK:
420 describe_book_chaos(flavor_ptr);
422 case ItemKindType::DEATH_BOOK:
423 describe_book_death(flavor_ptr);
425 case ItemKindType::TRUMP_BOOK:
426 describe_book_trump(flavor_ptr);
428 case ItemKindType::ARCANE_BOOK:
429 describe_book_arcane(flavor_ptr);
431 case ItemKindType::CRAFT_BOOK:
432 describe_book_craft(flavor_ptr);
434 case ItemKindType::DEMON_BOOK:
435 describe_book_demon(flavor_ptr);
437 case ItemKindType::CRUSADE_BOOK:
438 describe_book_crusade(flavor_ptr);
440 case ItemKindType::MUSIC_BOOK:
441 flavor_ptr->basenm = _("歌集%", "& Song Book~ %");
443 case ItemKindType::HISSATSU_BOOK:
444 flavor_ptr->basenm = _("& 武芸の書%", "Book~ of Kendo %");
446 case ItemKindType::HEX_BOOK:
447 describe_book_hex(flavor_ptr);
449 case ItemKindType::GOLD:
450 strcpy(flavor_ptr->buf, flavor_ptr->basenm);
453 strcpy(flavor_ptr->buf, _("(なし)", "(nothing)"));