OSDN Git Service

[Fix] モンスターボールで鑑定済みのときに捕まえたモンスター名が見えなくなっていたので修正。 / Fix that an identified capture...
[hengband/hengband.git] / src / flavor / tval-description-switcher.c
1 /*!
2  * @brief 個々のアイテム種別について、未鑑定名/鑑定後の正式な名前を取得する処理
3  * @date 2020/07/07
4  * @author Hourier
5  */
6
7 #include "flavor/tval-description-switcher.h"
8 #include "flavor/flavor-util.h"
9 #include "monster-race/monster-race.h"
10 #include "object-enchant/trg-types.h"
11 #include "object-hook/hook-enchant.h"
12 #include "object/object-kind.h"
13 #ifdef JP
14 #else
15 #include "locale/english.h"
16 #include "monster-race/race-flags1.h"
17 #include "player/player-class.h"
18 #endif
19
20 static void describe_monster_ball(flavor_type *flavor_ptr)
21 {
22     monster_race *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
23     if (!flavor_ptr->known)
24         return;
25
26     if (!flavor_ptr->o_ptr->pval) {
27         flavor_ptr->modstr = _(" (空)", " (empty)");
28         return;
29     }
30
31 #ifdef JP
32     sprintf(flavor_ptr->tmp_val2, " (%s)", r_name + r_ptr->name);
33     flavor_ptr->modstr = flavor_ptr->tmp_val2;
34 #else
35     flavor_ptr->t = r_name + r_ptr->name;
36     if (!(r_ptr->flags1 & RF1_UNIQUE)) {
37         sprintf(flavor_ptr->tmp_val2, " (%s%s)", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
38         flavor_ptr->modstr = flavor_ptr->tmp_val2;
39     } else {
40         sprintf(flavor_ptr->tmp_val2, "(%s)", flavor_ptr->t);
41         flavor_ptr->modstr = flavor_ptr->t;
42     }
43 #endif
44 }
45
46 static void describe_statue(flavor_type *flavor_ptr)
47 {
48     monster_race *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
49 #ifdef JP
50     flavor_ptr->modstr = r_name + r_ptr->name;
51 #else
52     flavor_ptr->t = r_name + r_ptr->name;
53     if (!(r_ptr->flags1 & RF1_UNIQUE)) {
54         sprintf(flavor_ptr->tmp_val2, "%s%s", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
55         flavor_ptr->modstr = flavor_ptr->tmp_val2;
56     } else
57         flavor_ptr->modstr = flavor_ptr->t;
58 #endif
59 }
60
61 static void describe_corpse(flavor_type *flavor_ptr)
62 {
63     monster_race *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
64     flavor_ptr->modstr = r_name + r_ptr->name;
65 #ifdef JP
66     flavor_ptr->basenm = "#%";
67 #else
68     if (r_ptr->flags1 & RF1_UNIQUE)
69         flavor_ptr->basenm = "& % of #";
70     else
71         flavor_ptr->basenm = "& # %";
72 #endif
73 }
74
75 static void describe_amulet(flavor_type *flavor_ptr)
76 {
77     if (flavor_ptr->aware && (object_is_fixed_artifact(flavor_ptr->o_ptr) || ((flavor_ptr->k_ptr->gen_flags & TRG_INSTA_ART) != 0)))
78         return;
79
80     flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
81     if (!flavor_ptr->flavor)
82         flavor_ptr->basenm = _("%のアミュレット", "& Amulet~ of %");
83     else if (flavor_ptr->aware)
84         flavor_ptr->basenm = _("%の#アミュレット", "& # Amulet~ of %");
85     else
86         flavor_ptr->basenm = _("#アミュレット", "& # Amulet~");
87 }
88
89 static void describe_ring(flavor_type *flavor_ptr)
90 {
91     if (flavor_ptr->aware && (object_is_fixed_artifact(flavor_ptr->o_ptr) || (flavor_ptr->k_ptr->gen_flags & TRG_INSTA_ART) != 0))
92         return;
93
94     flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
95     if (!flavor_ptr->flavor)
96         flavor_ptr->basenm = _("%の指輪", "& Ring~ of %");
97     else if (flavor_ptr->aware)
98         flavor_ptr->basenm = _("%の#指輪", "& # Ring~ of %");
99     else
100         flavor_ptr->basenm = _("#指輪", "& # Ring~");
101
102     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))
103         flavor_ptr->show_weapon = TRUE;
104 }
105
106 static void describe_staff(flavor_type *flavor_ptr)
107 {
108     flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
109     if (!flavor_ptr->flavor)
110         flavor_ptr->basenm = _("%の杖", "& Staff~ of %");
111     else if (flavor_ptr->aware)
112         flavor_ptr->basenm = _("%の#杖", "& # Staff~ of %");
113     else
114         flavor_ptr->basenm = _("#杖", "& # Staff~");
115 }
116
117 static void describe_wand(flavor_type *flavor_ptr)
118 {
119     flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
120     if (!flavor_ptr->flavor)
121         flavor_ptr->basenm = _("%の魔法棒", "& Wand~ of %");
122     else if (flavor_ptr->aware)
123         flavor_ptr->basenm = _("%の#魔法棒", "& # Wand~ of %");
124     else
125         flavor_ptr->basenm = _("#魔法棒", "& # Wand~");
126 }
127
128 static void describe_rod(flavor_type *flavor_ptr)
129 {
130     flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
131     if (!flavor_ptr->flavor)
132         flavor_ptr->basenm = _("%のロッド", "& Rod~ of %");
133     else if (flavor_ptr->aware)
134         flavor_ptr->basenm = _("%の#ロッド", "& # Rod~ of %");
135     else
136         flavor_ptr->basenm = _("#ロッド", "& # Rod~");
137 }
138
139 static void describe_scroll(flavor_type *flavor_ptr)
140 {
141     flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
142     if (!flavor_ptr->flavor)
143         flavor_ptr->basenm = _("%の巻物", "& Scroll~ of %");
144     else if (flavor_ptr->aware)
145         flavor_ptr->basenm = _("「#」と書かれた%の巻物", "& Scroll~ titled \"#\" of %");
146     else
147         flavor_ptr->basenm = _("「#」と書かれた巻物", "& Scroll~ titled \"#\"");
148 }
149
150 static void describe_potion(flavor_type *flavor_ptr)
151 {
152     flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
153     if (!flavor_ptr->flavor)
154         flavor_ptr->basenm = _("%の薬", "& Potion~ of %");
155     else if (flavor_ptr->aware)
156         flavor_ptr->basenm = _("%の#薬", "& # Potion~ of %");
157     else
158         flavor_ptr->basenm = _("#薬", "& # Potion~");
159 }
160
161 static void describe_food(flavor_type *flavor_ptr)
162 {
163     if (!flavor_ptr->k_ptr->flavor_name)
164         return;
165
166     flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
167     if (!flavor_ptr->flavor)
168         flavor_ptr->basenm = _("%のキノコ", "& Mushroom~ of %");
169     else if (flavor_ptr->aware)
170         flavor_ptr->basenm = _("%の#キノコ", "& # Mushroom~ of %");
171     else
172         flavor_ptr->basenm = _("#キノコ", "& # Mushroom~");
173 }
174
175 static void describe_book_life(flavor_type *flavor_ptr)
176 {
177 #ifdef JP
178     flavor_ptr->basenm = "生命の魔法書%";
179 #else
180     if (mp_ptr->spell_book == TV_LIFE_BOOK)
181         flavor_ptr->basenm = "& Book~ of Life Magic %";
182     else
183         flavor_ptr->basenm = "& Life Spellbook~ %";
184 #endif
185 }
186
187 static void describe_book_sorcery(flavor_type *flavor_ptr)
188 {
189 #ifdef JP
190     flavor_ptr->basenm = "仙術の魔法書%";
191 #else
192     if (mp_ptr->spell_book == TV_LIFE_BOOK)
193         flavor_ptr->basenm = "& Book~ of Sorcery %";
194     else
195         flavor_ptr->basenm = "& Sorcery Spellbook~ %";
196 #endif
197 }
198
199 static void describe_book_nature(flavor_type *flavor_ptr)
200 {
201 #ifdef JP
202     flavor_ptr->basenm = "自然の魔法書%";
203 #else
204     if (mp_ptr->spell_book == TV_LIFE_BOOK)
205         flavor_ptr->basenm = "& Book~ of Nature Magic %";
206     else
207         flavor_ptr->basenm = "& Nature Spellbook~ %";
208 #endif
209 }
210
211 static void describe_book_chaos(flavor_type *flavor_ptr)
212 {
213 #ifdef JP
214     flavor_ptr->basenm = "カオスの魔法書%";
215 #else
216     if (mp_ptr->spell_book == TV_LIFE_BOOK)
217         flavor_ptr->basenm = "& Book~ of Chaos Magic %";
218     else
219         flavor_ptr->basenm = "& Chaos Spellbook~ %";
220 #endif
221 }
222
223 static void describe_book_death(flavor_type *flavor_ptr)
224 {
225 #ifdef JP
226     flavor_ptr->basenm = "暗黒の魔法書%";
227 #else
228     if (mp_ptr->spell_book == TV_LIFE_BOOK)
229         flavor_ptr->basenm = "& Book~ of Death Magic %";
230     else
231         flavor_ptr->basenm = "& Death Spellbook~ %";
232 #endif
233 }
234
235 static void describe_book_trump(flavor_type *flavor_ptr)
236 {
237 #ifdef JP
238     flavor_ptr->basenm = "トランプの魔法書%";
239 #else
240     if (mp_ptr->spell_book == TV_LIFE_BOOK)
241         flavor_ptr->basenm = "& Book~ of Trump Magic %";
242     else
243         flavor_ptr->basenm = "& Trump Spellbook~ %";
244 #endif
245 }
246
247 static void describe_book_arcane(flavor_type *flavor_ptr)
248 {
249 #ifdef JP
250     flavor_ptr->basenm = "秘術の魔法書%";
251 #else
252     if (mp_ptr->spell_book == TV_LIFE_BOOK)
253         flavor_ptr->basenm = "& Book~ of Arcane Magic %";
254     else
255         flavor_ptr->basenm = "& Arcane Spellbook~ %";
256 #endif
257 }
258
259 static void describe_book_craft(flavor_type *flavor_ptr)
260 {
261 #ifdef JP
262     flavor_ptr->basenm = "匠の魔法書%";
263 #else
264     if (mp_ptr->spell_book == TV_LIFE_BOOK)
265         flavor_ptr->basenm = "& Book~ of Craft Magic %";
266     else
267         flavor_ptr->basenm = "& Craft Spellbook~ %";
268 #endif
269 }
270
271 static void describe_book_demon(flavor_type *flavor_ptr)
272 {
273 #ifdef JP
274     flavor_ptr->basenm = "悪魔の魔法書%";
275 #else
276     if (mp_ptr->spell_book == TV_LIFE_BOOK)
277         flavor_ptr->basenm = "& Book~ of Daemon Magic %";
278     else
279         flavor_ptr->basenm = "& Daemon Spellbook~ %";
280 #endif
281 }
282
283 static void describe_book_crusade(flavor_type *flavor_ptr)
284 {
285 #ifdef JP
286     flavor_ptr->basenm = "破邪の魔法書%";
287 #else
288     if (mp_ptr->spell_book == TV_LIFE_BOOK)
289         flavor_ptr->basenm = "& Book~ of Crusade Magic %";
290     else
291         flavor_ptr->basenm = "& Crusade Spellbook~ %";
292 #endif
293 }
294
295 static void describe_book_hex(flavor_type *flavor_ptr)
296 {
297 #ifdef JP
298     flavor_ptr->basenm = "呪術の魔法書%";
299 #else
300     if (mp_ptr->spell_book == TV_LIFE_BOOK)
301         flavor_ptr->basenm = "& Book~ of Hex Magic %";
302     else
303         flavor_ptr->basenm = "& Hex Spellbook~ %";
304 #endif
305 }
306
307 void switch_tval_description(flavor_type *flavor_ptr)
308 {
309     switch (flavor_ptr->o_ptr->tval) {
310     case TV_SKELETON:
311     case TV_BOTTLE:
312     case TV_JUNK:
313     case TV_SPIKE:
314     case TV_FLASK:
315     case TV_CHEST:
316     case TV_WHISTLE:
317         break;
318     case TV_CAPTURE:
319         describe_monster_ball(flavor_ptr);
320         break;
321     case TV_FIGURINE:
322     case TV_STATUE:
323         describe_statue(flavor_ptr);
324         break;
325     case TV_CORPSE:
326         describe_corpse(flavor_ptr);
327         break;
328     case TV_SHOT:
329     case TV_BOLT:
330     case TV_ARROW:
331     case TV_BOW:
332     case TV_HAFTED:
333     case TV_POLEARM:
334     case TV_SWORD:
335     case TV_DIGGING:
336         flavor_ptr->show_weapon = TRUE;
337         break;
338     case TV_BOOTS:
339     case TV_GLOVES:
340     case TV_CLOAK:
341     case TV_CROWN:
342     case TV_HELM:
343     case TV_SHIELD:
344     case TV_SOFT_ARMOR:
345     case TV_HARD_ARMOR:
346     case TV_DRAG_ARMOR:
347         flavor_ptr->show_armour = TRUE;
348         break;
349     case TV_LITE:
350         break;
351     case TV_AMULET:
352         describe_amulet(flavor_ptr);
353         break;
354     case TV_RING:
355         describe_ring(flavor_ptr);
356         break;
357     case TV_CARD:
358         break;
359     case TV_STAFF:
360         describe_staff(flavor_ptr);
361         break;
362     case TV_WAND:
363         describe_wand(flavor_ptr);
364         break;
365     case TV_ROD:
366         describe_rod(flavor_ptr);
367         break;
368     case TV_SCROLL:
369         describe_scroll(flavor_ptr);
370         break;
371     case TV_POTION:
372         describe_potion(flavor_ptr);
373         break;
374     case TV_FOOD:
375         describe_food(flavor_ptr);
376         break;
377     case TV_PARCHMENT:
378         flavor_ptr->basenm = _("羊皮紙 - %", "& Parchment~ - %");
379         break;
380     case TV_LIFE_BOOK:
381         describe_book_life(flavor_ptr);
382         break;
383     case TV_SORCERY_BOOK:
384         describe_book_sorcery(flavor_ptr);
385         break;
386     case TV_NATURE_BOOK:
387         describe_book_nature(flavor_ptr);
388         break;
389     case TV_CHAOS_BOOK:
390         describe_book_chaos(flavor_ptr);
391         break;
392     case TV_DEATH_BOOK:
393         describe_book_death(flavor_ptr);
394         break;
395     case TV_TRUMP_BOOK:
396         describe_book_trump(flavor_ptr);
397         break;
398     case TV_ARCANE_BOOK:
399         describe_book_arcane(flavor_ptr);
400         break;
401     case TV_CRAFT_BOOK:
402         describe_book_craft(flavor_ptr);
403         break;
404     case TV_DEMON_BOOK:
405         describe_book_demon(flavor_ptr);
406         break;
407     case TV_CRUSADE_BOOK:
408         describe_book_crusade(flavor_ptr);
409         break;
410     case TV_MUSIC_BOOK:
411         flavor_ptr->basenm = _("歌集%", "& Song Book~ %");
412         break;
413     case TV_HISSATSU_BOOK:
414         flavor_ptr->basenm = _("& 武芸の書%", "Book~ of Kendo %");
415         break;
416     case TV_HEX_BOOK:
417         describe_book_hex(flavor_ptr);
418         break;
419     case TV_GOLD:
420         strcpy(flavor_ptr->buf, flavor_ptr->basenm);
421         return;
422     default:
423         strcpy(flavor_ptr->buf, _("(なし)", "(nothing)"));
424         return;
425     }
426 }