OSDN Git Service

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