OSDN Git Service

Add Doxygen comment to bldg.c.
[hengband/hengband.git] / src / avatar.c
1 /*!
2     @file avatar.c
3     @brief ¥¦¥ë¥Æ¥£¥Þ£´¤ò»²¹Í¤Ë¤·¤¿ÆÁ¤Î¥·¥¹¥Æ¥à¤Î¼ÂÁõ / Enable an Ultima IV style "avatar" game where you try to achieve perfection in various virtues.
4     @date 2013/12/23
5     @author
6     Topi Ylinen 1998\n
7     f1toyl@uta.fi\n
8     topi.ylinen@noodi.fi\n
9     \n
10     Copyright (c) 1989 James E. Wilson, Christopher J. Stuart
11     This software may be copied and distributed for educational, research, and
12     not for profit purposes provided that this copyright and statement are
13     included in all such copies.
14 */
15
16
17 #include "angband.h"
18
19 /*!
20  * ÆÁ¤Î̾¾Î / The names of the virtues
21  */
22 cptr virtue[MAX_VIRTUE] =
23 {
24 #ifdef JP
25         "¾ð",
26         "ÍÀ",
27         "Àµ",
28         "µ¾",
29         "¼±",
30         "À¿",
31         "·¼",
32         "Èë",
33         "±¿",
34         "Á³",
35         "Ĵ",
36         "³è",
37         "»à",
38         "Ǧ",
39         "Àá",
40         "¶Ð",
41         "ͦ",
42         "¸Ä",
43 #else
44         "Compassion",
45         "Honour",
46         "Justice",
47         "Sacrifice",
48         "Knowledge",
49         "Faith",
50         "Enlightenment",
51         "Mysticism",
52         "Chance",
53         "Nature",
54         "Harmony",
55         "Vitality",
56         "Unlife",
57         "Patience",
58         "Temperance",
59         "Diligence",
60         "Valour",
61         "Individualism",
62 #endif
63 };
64
65 /*!
66  * @brief ³ºÅö¤ÎÆÁ¤¬¥×¥ì¥¤¥ä¡¼¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë¤«Èݤ«¤Ë±þ¤¸¤Ä¤Ä¡¢Âç¾®¤òÈæ³Ó¤¹¤ë¡£
67  * @details ÆÁ¤¬¤Ê¤¤¾ì¹ç¤ÏÃÍ0¤È¤·¤ÆÈæ³Ó¤¹¤ë¡£
68  * @param type Èæ³Ó¤·¤¿¤¤ÆÁ¤ÎID
69  * @param num Èæ³Ó´ð½àÃÍ
70  * @param tekitou VIRTUE_LARGE = ´ð½àÃͤè¤êÂ礭¤¤¤« / VIRTUE_SMALL = ´ð½àÃͤè¤ê¾®¤µ¤¤¤«
71  * @return Èæ³Ó¤Î¿¿µ¶ÃͤòÊÖ¤¹
72  * @todo °ú¿ô̾¤òľ¤·¤Æ¤ª¤¯
73  */
74 bool compare_virtue(int type, int num, int tekitou)
75 {
76         int vir;
77         if (virtue_number(type))
78                 vir = p_ptr->virtues[virtue_number(type) - 1];
79         else
80                 vir = 0;
81
82         switch (tekitou)
83         {
84         case VIRTUE_LARGE:
85                 if (vir > num) return TRUE;
86                 else return FALSE;
87         case VIRTUE_SMALL:
88                 if (vir < num) return TRUE;
89                 else return FALSE;
90         }
91
92         return FALSE;
93 }
94
95 /*!
96  * @brief ¥×¥ì¥¤¥ä¡¼¤Î»ØÄê¤ÎÆÁ¤¬²¿ÈÖÌܤΥ¹¥í¥Ã¥È¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¤«¤òÊÖ¤¹¡£ / Aux function
97  * @param type ³Îǧ¤·¤¿¤¤ÆÁ¤ÎID
98  * @return ¥¹¥í¥Ã¥È¤¬¤¢¤ë¤Ê¤é¤Ð¥¹¥í¥Ã¥È¤ÎID(0¡Á7)+1¡¢¤Ê¤¤¾ì¹ç¤Ï0¤òÊÖ¤¹¡£
99  */
100 int virtue_number(int type)
101 {
102         int i;
103
104         /* Search */
105         for (i = 0; i < 8; i++)
106         {
107                 if (p_ptr->vir_types[i] == type) return i + 1;
108         }
109
110         /* No match */
111         return 0;
112 }
113
114 /*!
115  * @brief ¥×¥ì¥¤¥ä¡¼¤Î¿¦¶È¤ä¼ï²¤Ë°Í¸¤·¤Ê¤¤¥é¥ó¥À¥à¤ÊÆÁ¤ò¼èÆÀ¤¹¤ë / Aux function
116  * @param which ³Îǧ¤·¤¿¤¤ÆÁ¤ÎID
117  * @return ¤Ê¤·
118  */
119 static void get_random_virtue(int which)
120 {
121         int type = 0;
122
123         /* Randomly choose a type */
124         while (!(type) || virtue_number(type))
125         {
126                 switch (randint1(29))
127                 {
128                 case 1: case 2: case 3:
129                         type = V_SACRIFICE;
130                         break;
131                 case 4: case 5: case 6:
132                         type = V_COMPASSION;
133                         break;
134                 case 7: case 8: case 9: case 10: case 11: case 12:
135                         type = V_VALOUR;
136                         break;
137                 case 13: case 14: case 15: case 16: case 17:
138                         type = V_HONOUR;
139                         break;
140                 case 18: case 19: case 20: case 21:
141                         type = V_JUSTICE;
142                         break;
143                 case 22: case 23:
144                         type = V_TEMPERANCE;
145                         break;
146                 case 24: case 25:
147                         type = V_HARMONY;
148                         break;
149                 case 26: case 27: case 28:
150                         type = V_PATIENCE;
151                         break;
152                 default:
153                         type = V_DILIGENCE;
154                         break;
155                 }
156         }
157
158         /* Chosen */
159         p_ptr->vir_types[which] = type;
160 }
161
162 /*!
163  * @brief ¥×¥ì¥¤¥ä¡¼¤ÎÁª¤ó¤ÀËâË¡Îΰè¤Ë±þ¤¸¤ÆÂбþ¤¹¤ëÆÁ¤òÊÖ¤¹¡£
164  * @param realm ËâË¡Îΰè¤ÎID
165  * @return Âбþ¤¹¤ëÆÁ¤ÎID
166  */
167 static s16b get_realm_virtues(byte realm)
168 {
169         switch (realm)
170         {
171         case REALM_LIFE:
172                 if (virtue_number(V_VITALITY)) return V_TEMPERANCE;
173                 else return V_VITALITY;
174         case REALM_SORCERY:
175                 if (virtue_number(V_KNOWLEDGE)) return V_ENCHANT;
176                 else return V_KNOWLEDGE;
177         case REALM_NATURE:
178                 if (virtue_number(V_NATURE)) return V_HARMONY;
179                 else return V_NATURE;
180         case REALM_CHAOS:
181                 if (virtue_number(V_CHANCE)) return V_INDIVIDUALISM;
182                 else return V_CHANCE;
183         case REALM_DEATH:
184                 return V_UNLIFE;
185         case REALM_TRUMP:
186                 return V_KNOWLEDGE;
187         case REALM_ARCANE:
188                 return 0;
189         case REALM_CRAFT:
190                 if (virtue_number(V_ENCHANT)) return V_INDIVIDUALISM;
191                 else return V_ENCHANT;
192         case REALM_DAEMON:
193                 if (virtue_number(V_JUSTICE)) return V_FAITH;
194                 else return V_JUSTICE;
195         case REALM_CRUSADE:
196                 if (virtue_number(V_JUSTICE)) return V_HONOUR;
197                 else return V_JUSTICE;
198         case REALM_HEX:
199                 if (virtue_number(V_COMPASSION)) return V_JUSTICE;
200                 else return V_COMPASSION;
201         };
202
203         return 0;
204 }
205
206
207 /*!
208  * @brief ºîÀ®Ãæ¤Î¥×¥ì¥¤¥ä¡¼¥­¥ã¥é¥¯¥¿¡¼¤ËÆÁ8¼ïÎà¤òÍ¿¤¨¤ë¡£ / Select virtues & reset values for a new character
209  * @details ¿¦¶È¤Ë±þ¤¸¤Æ1¡Á4¼ï¤¬¸ÇÄê¡¢¼ï²¤Ë±þ¤¸¤Æ1¼ïÎबͿ¤¨¤é¤ì¡¢¸å¤Ï½ÅÊ£¤Ê¤¯¥é¥ó¥À¥à¤ËÁªÂò¤µ¤ì¤ë¡£
210  * @param ¤Ê¤·
211  * @return ¤Ê¤·
212  */
213 void get_virtues(void)
214 {
215         int i = 0, j = 0;
216         s16b tmp_vir;
217
218         /* Reset */
219         for (i = 0; i < 8; i++)
220         {
221                 p_ptr->virtues[i] = 0;
222                 p_ptr->vir_types[i] = 0;
223         }
224
225         i = 0;
226
227         /* Get pre-defined types */
228         /* 1 or more virtues based on class */
229         switch (p_ptr->pclass)
230         {
231         case CLASS_WARRIOR:
232         case CLASS_SAMURAI:
233                 p_ptr->vir_types[i++] = V_VALOUR;
234                 p_ptr->vir_types[i++] = V_HONOUR;
235                 break;
236         case CLASS_MAGE:
237                 p_ptr->vir_types[i++] = V_KNOWLEDGE;
238                 p_ptr->vir_types[i++] = V_ENCHANT;
239                 break;
240         case CLASS_PRIEST:
241                 p_ptr->vir_types[i++] = V_FAITH;
242                 p_ptr->vir_types[i++] = V_TEMPERANCE;
243                 break;
244         case CLASS_ROGUE:
245         case CLASS_SNIPER:
246                 p_ptr->vir_types[i++] = V_HONOUR;
247                 break;
248         case CLASS_RANGER:
249         case CLASS_ARCHER:
250                 p_ptr->vir_types[i++] = V_NATURE;
251                 p_ptr->vir_types[i++] = V_TEMPERANCE;
252                 break;
253         case CLASS_PALADIN:
254                 p_ptr->vir_types[i++] = V_JUSTICE;
255                 p_ptr->vir_types[i++] = V_VALOUR;
256                 p_ptr->vir_types[i++] = V_HONOUR;
257                 p_ptr->vir_types[i++] = V_FAITH;
258                 break;
259         case CLASS_WARRIOR_MAGE:
260         case CLASS_RED_MAGE:
261                 p_ptr->vir_types[i++] = V_ENCHANT;
262                 p_ptr->vir_types[i++] = V_VALOUR;
263                 break;
264         case CLASS_CHAOS_WARRIOR:
265                 p_ptr->vir_types[i++] = V_CHANCE;
266                 p_ptr->vir_types[i++] = V_INDIVIDUALISM;
267                 break;
268         case CLASS_MONK:
269         case CLASS_FORCETRAINER:
270                 p_ptr->vir_types[i++] = V_FAITH;
271                 p_ptr->vir_types[i++] = V_HARMONY;
272                 p_ptr->vir_types[i++] = V_TEMPERANCE;
273                 p_ptr->vir_types[i++] = V_PATIENCE;
274                 break;
275         case CLASS_MINDCRAFTER:
276         case CLASS_MIRROR_MASTER:
277                 p_ptr->vir_types[i++] = V_HARMONY;
278                 p_ptr->vir_types[i++] = V_ENLIGHTEN;
279                 p_ptr->vir_types[i++] = V_PATIENCE;
280                 break;
281         case CLASS_HIGH_MAGE:
282         case CLASS_SORCERER:
283                 p_ptr->vir_types[i++] = V_ENLIGHTEN;
284                 p_ptr->vir_types[i++] = V_ENCHANT;
285                 p_ptr->vir_types[i++] = V_KNOWLEDGE;
286                 break;
287         case CLASS_TOURIST:
288                 p_ptr->vir_types[i++] = V_ENLIGHTEN;
289                 p_ptr->vir_types[i++] = V_CHANCE;
290                 break;
291         case CLASS_IMITATOR:
292                 p_ptr->vir_types[i++] = V_CHANCE;
293                 break;
294         case CLASS_BLUE_MAGE:
295                 p_ptr->vir_types[i++] = V_CHANCE;
296                 p_ptr->vir_types[i++] = V_KNOWLEDGE;
297                 break;
298         case CLASS_BEASTMASTER:
299                 p_ptr->vir_types[i++] = V_NATURE;
300                 p_ptr->vir_types[i++] = V_CHANCE;
301                 p_ptr->vir_types[i++] = V_VITALITY;
302                 break;
303         case CLASS_MAGIC_EATER:
304                 p_ptr->vir_types[i++] = V_ENCHANT;
305                 p_ptr->vir_types[i++] = V_KNOWLEDGE;
306                 break;
307         case CLASS_BARD:
308                 p_ptr->vir_types[i++] = V_HARMONY;
309                 p_ptr->vir_types[i++] = V_COMPASSION;
310                 break;
311         case CLASS_CAVALRY:
312                 p_ptr->vir_types[i++] = V_VALOUR;
313                 p_ptr->vir_types[i++] = V_HARMONY;
314                 break;
315         case CLASS_BERSERKER:
316                 p_ptr->vir_types[i++] = V_VALOUR;
317                 p_ptr->vir_types[i++] = V_INDIVIDUALISM;
318                 break;
319         case CLASS_SMITH:
320                 p_ptr->vir_types[i++] = V_HONOUR;
321                 p_ptr->vir_types[i++] = V_KNOWLEDGE;
322                 break;
323         case CLASS_NINJA:
324                 p_ptr->vir_types[i++] = V_PATIENCE;
325                 p_ptr->vir_types[i++] = V_KNOWLEDGE;
326                 p_ptr->vir_types[i++] = V_FAITH;
327                 p_ptr->vir_types[i++] = V_UNLIFE;
328                 break;
329         };
330
331         /* Get one virtue based on race */
332         switch (p_ptr->prace)
333         {
334         case RACE_HUMAN: case RACE_HALF_ELF: case RACE_DUNADAN:
335                 p_ptr->vir_types[i++] = V_INDIVIDUALISM;
336                 break;
337         case RACE_ELF: case RACE_SPRITE: case RACE_ENT:
338                 p_ptr->vir_types[i++] = V_NATURE;
339                 break;
340         case RACE_HOBBIT: case RACE_HALF_OGRE:
341                 p_ptr->vir_types[i++] = V_TEMPERANCE;
342                 break;
343         case RACE_DWARF: case RACE_KLACKON: case RACE_ANDROID:
344                 p_ptr->vir_types[i++] = V_DILIGENCE;
345                 break;
346         case RACE_GNOME: case RACE_CYCLOPS:
347                 p_ptr->vir_types[i++] = V_KNOWLEDGE;
348                 break;
349         case RACE_HALF_ORC: case RACE_AMBERITE: case RACE_KOBOLD:
350                 p_ptr->vir_types[i++] = V_HONOUR;
351                 break;
352         case RACE_HALF_TROLL: case RACE_BARBARIAN:
353                 p_ptr->vir_types[i++] = V_VALOUR;
354                 break;
355         case RACE_HIGH_ELF: case RACE_KUTAR:
356                 p_ptr->vir_types[i++] = V_VITALITY;
357                 break;
358         case RACE_HALF_GIANT: case RACE_GOLEM: case RACE_ANGEL: case RACE_DEMON:
359                 p_ptr->vir_types[i++] = V_JUSTICE;
360                 break;
361         case RACE_HALF_TITAN:
362                 p_ptr->vir_types[i++] = V_HARMONY;
363                 break;
364         case RACE_YEEK:
365                 p_ptr->vir_types[i++] = V_SACRIFICE;
366                 break;
367         case RACE_MIND_FLAYER:
368                 p_ptr->vir_types[i++] = V_ENLIGHTEN;
369                 break;
370         case RACE_DARK_ELF: case RACE_DRACONIAN: case RACE_S_FAIRY:
371                 p_ptr->vir_types[i++] = V_ENCHANT;
372                 break;
373         case RACE_NIBELUNG:
374                 p_ptr->vir_types[i++] = V_PATIENCE;
375                 break;
376         case RACE_IMP:
377                 p_ptr->vir_types[i++] = V_FAITH;
378                 break;
379         case RACE_ZOMBIE: case RACE_SKELETON:
380         case RACE_VAMPIRE: case RACE_SPECTRE:
381                 p_ptr->vir_types[i++] = V_UNLIFE;
382                 break;
383         case RACE_BEASTMAN:
384                 p_ptr->vir_types[i++] = V_CHANCE;
385                 break;
386         }
387
388         /* Get a virtue for realms */
389         if (p_ptr->realm1)
390         {
391                 tmp_vir = get_realm_virtues(p_ptr->realm1);
392                 if (tmp_vir) p_ptr->vir_types[i++] = tmp_vir;
393         }
394         if (p_ptr->realm2)
395         {
396                 tmp_vir = get_realm_virtues(p_ptr->realm2);
397                 if (tmp_vir) p_ptr->vir_types[i++] = tmp_vir;
398         }
399
400         /* Eliminate doubles */
401         for (i = 0; i < 8; i++)
402         {
403                 for (j = i + 1; j < 8; j++)
404                 {
405                         if ((p_ptr->vir_types[j] != 0) && (p_ptr->vir_types[j] == p_ptr->vir_types[i]))
406                                 p_ptr->vir_types[j] = 0;
407                 }
408         }
409
410         /* Fill in the blanks */
411         for (i = 0; i < 8; i++)
412         {
413                 if (p_ptr->vir_types[i] == 0) get_random_virtue(i);
414         }
415 }
416
417 /*!
418  * @brief Âбþ¤¹¤ëÆÁ¤ò¥×¥ì¥¤¥ä¡¼¤¬¥¹¥í¥Ã¥È¤ËÅÐÏ¿¤·¤Æ¤¤¤ë¾ì¹ç¤Ë²Ã¸º¤ò¹Ô¤¦¡£
419  * @detail ÈϰϤÏ-125¡Á125¡¢´ðËÜŪ¤ËÀäÂÐÃͤ¬Â礭¤¤¤Û¤ÉÀäÂÐÃͤ¬¾å¤¬¤ê¿É¤¯¤Ê¤ë¡£
420  * @param virtue ÆÁ¤ÎID
421  * @param amount ²Ã¸ºÎÌ
422  * @return ¤Ê¤·
423  */
424 void chg_virtue(int virtue, int amount)
425 {
426         int i = 0;
427
428         for (i = 0; i < 8; i++)
429         {
430                 if (p_ptr->vir_types[i] == virtue)
431                 {
432                         if (amount > 0)
433                         {
434                                 if ((amount + p_ptr->virtues[i] > 50) && one_in_(2))
435                                 {
436                                         p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 50);
437                                         return;
438                                 }
439                                 if ((amount + p_ptr->virtues[i] > 80) && one_in_(2))
440                                 {
441                                         p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 80);
442                                         return;
443                                 }
444                                 if ((amount + p_ptr->virtues[i] > 100) && one_in_(2))
445                                 {
446                                         p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 100);
447                                         return;
448                                 }
449                                 if (amount + p_ptr->virtues[i] > 125)
450                                         p_ptr->virtues[i] = 125;
451                                 else
452                                         p_ptr->virtues[i] = p_ptr->virtues[i] + amount;
453                         }
454                         else
455                         {
456                                 if ((amount + p_ptr->virtues[i] < -50) && one_in_(2))
457                                 {
458                                         p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -50);
459                                         return;
460                                 }
461                                 if ((amount + p_ptr->virtues[i] < -80) && one_in_(2))
462                                 {
463                                         p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -80);
464                                         return;
465                                 }
466                                 if ((amount + p_ptr->virtues[i] < -100) && one_in_(2))
467                                 {
468                                         p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -100);
469                                         return;
470                                 }
471                                 if (amount + p_ptr->virtues[i] < -125)
472                                         p_ptr->virtues[i] = -125;
473                                 else
474                                         p_ptr->virtues[i] = p_ptr->virtues[i] + amount;
475                         }
476                         p_ptr->update |= (PU_BONUS);
477                         return;
478                 }
479         }
480 }
481
482 /*!
483  * @brief Âбþ¤¹¤ëÆÁ¤ò¥×¥ì¥¤¥ä¡¼¤¬¥¹¥í¥Ã¥È¤ËÅÐÏ¿¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¸ÇÄêÃͤò¥»¥Ã¥È¤¹¤ë¡£
484  * @param virtue ÆÁ¤ÎID
485  * @param amount ¥»¥Ã¥È¤·¤¿¤¤ÃÍ¡£
486  * @return ¤Ê¤·
487  */
488 void set_virtue(int virtue, int amount)
489 {
490         int i = 0;
491
492         for (i = 0; i < 8; i++)
493         {
494                 if (p_ptr->vir_types[i] == virtue)
495                 {
496                         p_ptr->virtues[i] = amount;
497                         return;
498                 }
499         }
500 }
501
502 /*!
503  * @brief ÆÁ¤Î¥À¥ó¥×ɽ¼¨¤ò¹Ô¤¦¡£
504  * @param OutFile ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿¡£
505  * @return ¤Ê¤·
506  */
507 void dump_virtues(FILE *OutFile)
508 {
509         int v_nr = 0;
510
511         if (!OutFile) return;
512
513         for (v_nr = 0; v_nr < 8; v_nr++)
514         {
515                 char v_name [20];
516                 int tester = p_ptr->virtues[v_nr];
517
518                 strcpy(v_name, virtue[(p_ptr->vir_types[v_nr])-1]);
519
520                 if (p_ptr->vir_types[v_nr] == 0 || p_ptr->vir_types[v_nr] > MAX_VIRTUE)
521 #ifdef JP
522                         fprintf(OutFile, "¤ª¤Ã¤È¡£%s¤Î¾ðÊó¤Ê¤·¡£", v_name);
523 #else
524                         fprintf(OutFile, "Oops. No info about %s.", v_name);
525 #endif
526
527                 else if (tester < -100)
528 #ifdef JP
529                         fprintf(OutFile, "[%s]¤ÎÂжË",
530 #else
531                         fprintf(OutFile, "You are the polar opposite of %s.",
532 #endif
533
534                                 v_name);
535                 else if (tester < -80)
536 #ifdef JP
537                         fprintf(OutFile, "[%s]¤ÎÂçŨ",
538 #else
539                         fprintf(OutFile, "You are an arch-enemy of %s.",
540 #endif
541
542                                 v_name);
543                 else if (tester < -60)
544 #ifdef JP
545                         fprintf(OutFile, "[%s]¤Î¶¯Å¨",
546 #else
547                         fprintf(OutFile, "You are a bitter enemy of %s.",
548 #endif
549
550                                 v_name);
551                 else if (tester < -40)
552 #ifdef JP
553                         fprintf(OutFile, "[%s]¤ÎŨ",
554 #else
555                         fprintf(OutFile, "You are an enemy of %s.",
556 #endif
557
558                                 v_name);
559                 else if (tester < -20)
560 #ifdef JP
561                         fprintf(OutFile, "[%s]¤Îºá¼Ô",
562 #else
563                         fprintf(OutFile, "You have sinned against %s.",
564 #endif
565
566                                 v_name);
567                 else if (tester < 0)
568 #ifdef JP
569                         fprintf(OutFile, "[%s]¤ÎÌÂÆ»¼Ô",
570 #else
571                         fprintf(OutFile, "You have strayed from the path of %s.",
572 #endif
573
574                                 v_name);
575                 else if (tester == 0)
576 #ifdef JP
577                         fprintf(OutFile,"[%s]¤ÎÃæΩ¼Ô",
578 #else
579                         fprintf(OutFile,"You are neutral to %s.",
580 #endif
581
582                                 v_name);
583                 else if (tester < 20)
584 #ifdef JP
585                         fprintf(OutFile,"[%s]¤Î¾®ÆÁ¼Ô",
586 #else
587                         fprintf(OutFile,"You are somewhat virtuous in %s.",
588 #endif
589
590                                 v_name);
591                 else if (tester < 40)
592 #ifdef JP
593                         fprintf(OutFile,"[%s]¤ÎÃæÆÁ¼Ô",
594 #else
595                         fprintf(OutFile,"You are virtuous in %s.",
596 #endif
597
598                                 v_name);
599                 else if (tester < 60)
600 #ifdef JP
601                         fprintf(OutFile,"[%s]¤Î¹âÆÁ¼Ô",
602 #else
603                         fprintf(OutFile,"You are very virtuous in %s.",
604 #endif
605
606                                 v_name);
607                 else if (tester < 80)
608 #ifdef JP
609                         fprintf(OutFile,"[%s]¤ÎÇƼÔ",
610 #else
611                         fprintf(OutFile,"You are a champion of %s.",
612 #endif
613
614                                 v_name);
615                 else if (tester < 100)
616 #ifdef JP
617                         fprintf(OutFile,"[%s]¤Î°ÎÂç¤ÊÇƼÔ",
618 #else
619                         fprintf(OutFile,"You are a great champion of %s.",
620 #endif
621
622                                 v_name);
623                 else
624 #ifdef JP
625                         fprintf(OutFile,"[%s]¤Î¶ñ¸½¼Ô",
626 #else
627                         fprintf(OutFile,"You are the living embodiment of %s.",
628 #endif
629
630                                 v_name);
631
632             fprintf(OutFile, "\n");
633         }
634 }