-/* File: avatar.c */
-
-/*
- * Purpose: Enable an Ultima IV style "avatar" game where you try to
- * achieve perfection in various virtues.
- *
- * Topi Ylinen 1998
- * f1toyl@uta.fi
- * topi.ylinen@noodi.fi
- *
- */
+/*!
+ @file avatar.c
+ @brief ¥¦¥ë¥Æ¥£¥Þ£´¤ò»²¹Í¤Ë¤·¤¿ÆÁ¤Î¥·¥¹¥Æ¥à¤Î¼ÂÁõ / Enable an Ultima IV style "avatar" game where you try to achieve perfection in various virtues.
+ @date 2013/12/23
+ @author
+ Topi Ylinen 1998\n
+ f1toyl@uta.fi\n
+ topi.ylinen@noodi.fi\n
+ \n
+ Copyright (c) 1989 James E. Wilson, Christopher J. Stuart
+ This software may be copied and distributed for educational, research, and
+ not for profit purposes provided that this copyright and statement are
+ included in all such copies.
+*/
-/*
- * Copyright (c) 1989 James E. Wilson, Christopher J. Stuart
- *
- * This software may be copied and distributed for educational, research, and
- * not for profit purposes provided that this copyright and statement are
- * included in all such copies.
- */
#include "angband.h"
-
-/* The names of the virtues */
-
+/*!
+ * ÆÁ¤Î̾¾Î / The names of the virtues
+ */
cptr virtue[MAX_VIRTUE] =
{
#ifdef JP
- "¾ð",
-#else
- "Compassion",
-#endif
-
-#ifdef JP
- "ÍÀ",
-#else
- "Honour",
-#endif
-
-#ifdef JP
- "˵",
-#else
- "Justice",
-#endif
-
-#ifdef JP
- "µ¾",
-#else
- "Sacrifice",
-#endif
-
-#ifdef JP
- "¼±",
-#else
- "Knowledge",
-#endif
-
-#ifdef JP
- "À¿",
-#else
- "Faith",
-#endif
-
-#ifdef JP
- "·¼",
-#else
- "Enlightenment",
-#endif
-
-#ifdef JP
- "Èë",
-#else
- "Mysticism",
-#endif
-
-#ifdef JP
- "±¿",
-#else
- "Chance",
-#endif
-
-#ifdef JP
-"Á³",
-#else
- "Nature",
-#endif
-
-#ifdef JP
- "Ĵ",
-#else
- "Harmony",
-#endif
-
-#ifdef JP
- "³è",
-#else
- "Vitality",
-#endif
-
-#ifdef JP
- "Ȉ",
-#else
- "Unlife",
-#endif
-
-#ifdef JP
- "Ǧ",
-#else
- "Patience",
-#endif
-
-#ifdef JP
- "Àá",
-#else
- "Temperance",
-#endif
-
-#ifdef JP
- "¶Ð",
-#else
- "Diligence",
-#endif
-
-#ifdef JP
- "ͦ",
-#else
- "Valour",
-#endif
-
-#ifdef JP
- "¸Ä",
-#else
- "Individualism",
+ "¾ð",
+ "ÍÀ",
+ "˵",
+ "µ¾",
+ "¼±",
+ "À¿",
+ "·¼",
+ "Èë",
+ "±¿",
+ "Á³",
+ "Ĵ",
+ "³è",
+ "Ȉ",
+ "Ǧ",
+ "Àá",
+ "¶Ð",
+ "ͦ",
+ "¸Ä",
+#else
+ "Compassion",
+ "Honour",
+ "Justice",
+ "Sacrifice",
+ "Knowledge",
+ "Faith",
+ "Enlightenment",
+ "Mysticism",
+ "Chance",
+ "Nature",
+ "Harmony",
+ "Vitality",
+ "Unlife",
+ "Patience",
+ "Temperance",
+ "Diligence",
+ "Valour",
+ "Individualism",
#endif
-
};
-
+/*!
+ * @brief ³ºÅö¤ÎÆÁ¤¬¥×¥ì¥¤¥ä¡¼¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë¤«Èݤ«¤Ë±þ¤¸¤Ä¤Ä¡¢Âç¾®¤òÈæ³Ó¤¹¤ë¡£
+ * @details ÆÁ¤¬¤Ê¤¤¾ì¹ç¤ÏÃÍ0¤È¤·¤ÆÈæ³Ó¤¹¤ë¡£
+ * @param type Èæ³Ó¤·¤¿¤¤ÆÁ¤ÎID
+ * @param num Èæ³Ó´ð½àÃÍ
+ * @param tekitou VIRTUE_LARGE = ´ð½àÃͤè¤êÂ礤¤¤« / VIRTUE_SMALL = ´ð½àÃͤè¤ê¾®¤µ¤¤¤«
+ * @return Èæ³Ó¤Î¿¿µ¶ÃͤòÊÖ¤¹
+ * @todo °ú¿ô̾¤òľ¤·¤Æ¤ª¤¯
+ */
bool compare_virtue(int type, int num, int tekitou)
{
- int vir;
- if (virtue_number(type))
- vir = p_ptr->virtues[virtue_number(type)-1];
- else
- vir = 0;
-
- switch(tekitou)
- {
- case VIRTUE_LARGE:
- if (vir > num) return TRUE;
- else return FALSE;
- break;
- case VIRTUE_SMALL:
- if (vir < num) return TRUE;
- else return FALSE;
- break;
- default:
- break;
- }
- return FALSE;
-}
-
+ int vir;
+ if (virtue_number(type))
+ vir = p_ptr->virtues[virtue_number(type) - 1];
+ else
+ vir = 0;
+
+ switch (tekitou)
+ {
+ case VIRTUE_LARGE:
+ if (vir > num) return TRUE;
+ else return FALSE;
+ case VIRTUE_SMALL:
+ if (vir < num) return TRUE;
+ else return FALSE;
+ }
-/* Aux function */
+ return FALSE;
+}
+/*!
+ * @brief ¥×¥ì¥¤¥ä¡¼¤Î»ØÄê¤ÎÆÁ¤¬²¿ÈÖÌܤΥ¹¥í¥Ã¥È¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¤«¤òÊÖ¤¹¡£ / Aux function
+ * @param type ³Îǧ¤·¤¿¤¤ÆÁ¤ÎID
+ * @return ¥¹¥í¥Ã¥È¤¬¤¢¤ë¤Ê¤é¤Ð¥¹¥í¥Ã¥È¤ÎID(0¡Á7)+1¡¢¤Ê¤¤¾ì¹ç¤Ï0¤òÊÖ¤¹¡£
+ */
int virtue_number(int type)
{
- int i;
+ int i;
- /* Search */
- for (i = 0; i < 8; i++)
- {
- if (p_ptr->vir_types[i] == type) return i+1;
- }
+ /* Search */
+ for (i = 0; i < 8; i++)
+ {
+ if (p_ptr->vir_types[i] == type) return i + 1;
+ }
+ /* No match */
+ return 0;
+}
- /* No match */
- return 0;
+/*!
+ * @brief ¥×¥ì¥¤¥ä¡¼¤Î¿¦¶È¤ä¼ï²¤Ë°Í¸¤·¤Ê¤¤¥é¥ó¥À¥à¤ÊÆÁ¤ò¼èÆÀ¤¹¤ë / Aux function
+ * @param which ³Îǧ¤·¤¿¤¤ÆÁ¤ÎID
+ * @return ¤Ê¤·
+ */
+static void get_random_virtue(int which)
+{
+ int type = 0;
-}
+ /* Randomly choose a type */
+ while (!(type) || virtue_number(type))
+ {
+ switch (randint1(29))
+ {
+ case 1: case 2: case 3:
+ type = V_SACRIFICE;
+ break;
+ case 4: case 5: case 6:
+ type = V_COMPASSION;
+ break;
+ case 7: case 8: case 9: case 10: case 11: case 12:
+ type = V_VALOUR;
+ break;
+ case 13: case 14: case 15: case 16: case 17:
+ type = V_HONOUR;
+ break;
+ case 18: case 19: case 20: case 21:
+ type = V_JUSTICE;
+ break;
+ case 22: case 23:
+ type = V_TEMPERANCE;
+ break;
+ case 24: case 25:
+ type = V_HARMONY;
+ break;
+ case 26: case 27: case 28:
+ type = V_PATIENCE;
+ break;
+ default:
+ type = V_DILIGENCE;
+ break;
+ }
+ }
-/* Aux function */
+ /* Chosen */
+ p_ptr->vir_types[which] = type;
+}
-void get_random_virtue(int which)
+/*!
+ * @brief ¥×¥ì¥¤¥ä¡¼¤ÎÁª¤ó¤ÀËâË¡Îΰè¤Ë±þ¤¸¤ÆÂбþ¤¹¤ëÆÁ¤òÊÖ¤¹¡£
+ * @param realm ËâË¡Îΰè¤ÎID
+ * @return Âбþ¤¹¤ëÆÁ¤ÎID
+ */
+static s16b get_realm_virtues(byte realm)
{
- int type = 0;
-
- /* Randomly choose a type */
- while (!(type) || virtue_number(type))
- {
- switch (randint(29))
- {
- case 1: case 2: case 3:
- type = V_SACRIFICE;
- break;
- case 4: case 5: case 6:
- type = V_COMPASSION;
- break;
- case 7: case 8: case 9: case 10: case 11: case 12:
- type = V_VALOUR;
- break;
- case 13: case 14: case 15: case 16: case 17:
- type = V_HONOUR;
- break;
- case 18: case 19: case 20: case 21:
- type = V_JUSTICE;
- break;
- case 22: case 23:
- type = V_TEMPERANCE;
- break;
- case 24: case 25:
- type = V_HARMONY;
- break;
- case 26: case 27: case 28:
- type = V_PATIENCE;
- break;
- default:
- type = V_DILIGENCE;
- }
- }
-
- /* Chosen */
-
- p_ptr->vir_types[which] = type;
-
+ switch (realm)
+ {
+ case REALM_LIFE:
+ if (virtue_number(V_VITALITY)) return V_TEMPERANCE;
+ else return V_VITALITY;
+ case REALM_SORCERY:
+ if (virtue_number(V_KNOWLEDGE)) return V_ENCHANT;
+ else return V_KNOWLEDGE;
+ case REALM_NATURE:
+ if (virtue_number(V_NATURE)) return V_HARMONY;
+ else return V_NATURE;
+ case REALM_CHAOS:
+ if (virtue_number(V_CHANCE)) return V_INDIVIDUALISM;
+ else return V_CHANCE;
+ case REALM_DEATH:
+ return V_UNLIFE;
+ case REALM_TRUMP:
+ return V_KNOWLEDGE;
+ case REALM_ARCANE:
+ return 0;
+ case REALM_CRAFT:
+ if (virtue_number(V_ENCHANT)) return V_INDIVIDUALISM;
+ else return V_ENCHANT;
+ case REALM_DAEMON:
+ if (virtue_number(V_JUSTICE)) return V_FAITH;
+ else return V_JUSTICE;
+ case REALM_CRUSADE:
+ if (virtue_number(V_JUSTICE)) return V_HONOUR;
+ else return V_JUSTICE;
+ case REALM_HEX:
+ if (virtue_number(V_COMPASSION)) return V_JUSTICE;
+ else return V_COMPASSION;
+ };
+
+ return 0;
}
-/* Select virtues & reset values for a new character */
-void get_virtues()
+/*!
+ * @brief ºîÀ®Ãæ¤Î¥×¥ì¥¤¥ä¡¼¥¥ã¥é¥¯¥¿¡¼¤ËÆÁ8¼ïÎà¤òÍ¿¤¨¤ë¡£ / Select virtues & reset values for a new character
+ * @details ¿¦¶È¤Ë±þ¤¸¤Æ1¡Á4¼ï¤¬¸ÇÄê¡¢¼ï²¤Ë±þ¤¸¤Æ1¼ïÎबͿ¤¨¤é¤ì¡¢¸å¤Ï½ÅÊ£¤Ê¤¯¥é¥ó¥À¥à¤ËÁªÂò¤µ¤ì¤ë¡£
+ * @return ¤Ê¤·
+ */
+void get_virtues(void)
{
- int i = 0, j = 0;
-
- /* Reset */
- for (i = 0; i < 8; i++)
- {
- p_ptr->virtues[i]=0;
- p_ptr->vir_types[i]=0;
- }
-
- i = 0;
-
- /* Get pre-defined types */
- /* 1 or more virtues based on class */
- switch (p_ptr->pclass)
- {
- case CLASS_WARRIOR:
- case CLASS_SAMURAI:
- p_ptr->vir_types[i++] = V_VALOUR;
- p_ptr->vir_types[i++] = V_HONOUR;
- break;
- case CLASS_MAGE:
- p_ptr->vir_types[i++] = V_KNOWLEDGE;
- p_ptr->vir_types[i++] = V_ENCHANT;
- break;
- case CLASS_PRIEST:
- p_ptr->vir_types[i++] = V_FAITH;
- p_ptr->vir_types[i++] = V_TEMPERANCE;
- break;
- case CLASS_ROGUE:
- p_ptr->vir_types[i++] = V_HONOUR;
- break;
- case CLASS_RANGER:
- case CLASS_ARCHER:
- p_ptr->vir_types[i++] = V_NATURE;
- p_ptr->vir_types[i++] = V_TEMPERANCE;
- break;
- case CLASS_PALADIN:
- p_ptr->vir_types[i++] = V_JUSTICE;
- p_ptr->vir_types[i++] = V_VALOUR;
- p_ptr->vir_types[i++] = V_HONOUR;
- p_ptr->vir_types[i++] = V_FAITH;
- break;
- case CLASS_WARRIOR_MAGE:
- case CLASS_RED_MAGE:
- p_ptr->vir_types[i++] = V_ENCHANT;
- p_ptr->vir_types[i++] = V_VALOUR;
- break;
- case CLASS_CHAOS_WARRIOR:
- p_ptr->vir_types[i++] = V_CHANCE;
- p_ptr->vir_types[i++] = V_INDIVIDUALISM;
- break;
- case CLASS_MONK:
- case CLASS_FORCETRAINER:
- p_ptr->vir_types[i++] = V_FAITH;
- p_ptr->vir_types[i++] = V_HARMONY;
- p_ptr->vir_types[i++] = V_TEMPERANCE;
- p_ptr->vir_types[i++] = V_PATIENCE;
- break;
- case CLASS_MINDCRAFTER:
- case CLASS_MIRROR_MASTER:
- p_ptr->vir_types[i++] = V_HARMONY;
- p_ptr->vir_types[i++] = V_ENLIGHTEN;
- p_ptr->vir_types[i++] = V_PATIENCE;
- break;
- case CLASS_HIGH_MAGE:
- case CLASS_SORCERER:
- p_ptr->vir_types[i++] = V_ENLIGHTEN;
- p_ptr->vir_types[i++] = V_ENCHANT;
- p_ptr->vir_types[i++] = V_KNOWLEDGE;
- break;
- case CLASS_TOURIST:
- p_ptr->vir_types[i++] = V_ENLIGHTEN;
- p_ptr->vir_types[i++] = V_CHANCE;
- break;
- case CLASS_IMITATOR:
- p_ptr->vir_types[i++] = V_CHANCE;
- break;
- case CLASS_BLUE_MAGE:
- p_ptr->vir_types[i++] = V_CHANCE;
- p_ptr->vir_types[i++] = V_KNOWLEDGE;
- break;
- case CLASS_BEASTMASTER:
- p_ptr->vir_types[i++] = V_NATURE;
- p_ptr->vir_types[i++] = V_CHANCE;
- p_ptr->vir_types[i++] = V_VITALITY;
- break;
- case CLASS_MAGIC_EATER:
- p_ptr->vir_types[i++] = V_ENCHANT;
- p_ptr->vir_types[i++] = V_KNOWLEDGE;
- break;
- case CLASS_BARD:
- p_ptr->vir_types[i++] = V_HARMONY;
- p_ptr->vir_types[i++] = V_COMPASSION;
- break;
- case CLASS_CAVALRY:
- p_ptr->vir_types[i++] = V_VALOUR;
- p_ptr->vir_types[i++] = V_HARMONY;
- break;
- case CLASS_BERSERKER:
- p_ptr->vir_types[i++] = V_VALOUR;
- p_ptr->vir_types[i++] = V_INDIVIDUALISM;
- break;
- case CLASS_SMITH:
- p_ptr->vir_types[i++] = V_HONOUR;
- p_ptr->vir_types[i++] = V_KNOWLEDGE;
- break;
- case CLASS_NINJA:
- p_ptr->vir_types[i++] = V_PATIENCE;
- p_ptr->vir_types[i++] = V_KNOWLEDGE;
- p_ptr->vir_types[i++] = V_FAITH;
- p_ptr->vir_types[i++] = V_UNLIFE;
- break;
-
- };
-
-
- /* Get one virtue based on race */
- switch (p_ptr->prace)
- {
- case RACE_HUMAN: case RACE_HALF_ELF: case RACE_DUNADAN:
- p_ptr->vir_types[i++] = V_INDIVIDUALISM;
- break;
- case RACE_ELF: case RACE_SPRITE: case RACE_ENT:
- p_ptr->vir_types[i++] = V_NATURE;
- break;
- case RACE_HOBBIT: case RACE_HALF_OGRE:
- p_ptr->vir_types[i++] = V_TEMPERANCE;
- break;
- case RACE_DWARF: case RACE_KLACKON: case RACE_ANDROID:
- p_ptr->vir_types[i++] = V_DILIGENCE;
- break;
- case RACE_GNOME: case RACE_CYCLOPS:
- p_ptr->vir_types[i++] = V_KNOWLEDGE;
- break;
- case RACE_HALF_ORC: case RACE_AMBERITE: case RACE_KOBOLD:
- p_ptr->vir_types[i++] = V_HONOUR;
- break;
- case RACE_HALF_TROLL: case RACE_BARBARIAN:
- p_ptr->vir_types[i++] = V_VALOUR;
- break;
- case RACE_HIGH_ELF: case RACE_KUTA:
- p_ptr->vir_types[i++] = V_VITALITY;
- break;
- case RACE_HALF_GIANT: case RACE_GOLEM: case RACE_ANGEL: case RACE_DEMON:
- p_ptr->vir_types[i++] = V_JUSTICE;
- break;
- case RACE_HALF_TITAN:
- p_ptr->vir_types[i++] = V_HARMONY;
- break;
- case RACE_YEEK:
- p_ptr->vir_types[i++] = V_SACRIFICE;
- break;
- case RACE_MIND_FLAYER:
- p_ptr->vir_types[i++] = V_ENLIGHTEN;
- break;
- case RACE_DARK_ELF: case RACE_DRACONIAN: case RACE_S_FAIRY:
- p_ptr->vir_types[i++] = V_ENCHANT;
- break;
- case RACE_NIBELUNG:
- p_ptr->vir_types[i++] = V_PATIENCE;
- break;
- case RACE_IMP:
- p_ptr->vir_types[i++] = V_FAITH;
- break;
- case RACE_ZOMBIE: case RACE_SKELETON:
- case RACE_VAMPIRE: case RACE_SPECTRE:
- p_ptr->vir_types[i++] = V_UNLIFE;
- break;
- case RACE_BEASTMAN:
- p_ptr->vir_types[i++] = V_CHANCE;
- break;
- }
-
- /* Get a virtue for realm1 */
- if (p_ptr->realm1)
- {
- switch(p_ptr->realm1)
- {
- case REALM_LIFE:
- if (virtue_number(V_FAITH))
- p_ptr->vir_types[i++] = V_VITALITY;
- else p_ptr->vir_types[i++] = V_FAITH;
- break;
- case REALM_SORCERY:
- if (virtue_number(V_KNOWLEDGE))
- p_ptr->vir_types[i++] = V_ENCHANT;
- else p_ptr->vir_types[i++] = V_KNOWLEDGE;
- break;
- case REALM_NATURE:
- if (virtue_number(V_NATURE))
- p_ptr->vir_types[i++] = V_HARMONY;
- else p_ptr->vir_types[i++] = V_NATURE;
- break;
- case REALM_CHAOS:
- if (virtue_number(V_CHANCE))
- p_ptr->vir_types[i++] = V_INDIVIDUALISM;
- else p_ptr->vir_types[i++] = V_CHANCE;
- break;
- case REALM_DEATH:
- p_ptr->vir_types[i++] = V_UNLIFE;
- break;
- case REALM_TRUMP:
- p_ptr->vir_types[i++] = V_KNOWLEDGE;
- break;
- case REALM_ARCANE:
- break;
- case REALM_ENCHANT:
- if (virtue_number(V_ENCHANT))
- p_ptr->vir_types[i++] = V_INDIVIDUALISM;
- else p_ptr->vir_types[i++] = V_ENCHANT;
- break;
- case REALM_DAEMON:
- if (virtue_number(V_JUSTICE))
- p_ptr->vir_types[i++] = V_FAITH;
- else p_ptr->vir_types[i++] = V_JUSTICE;
- break;
- };
- }
-
- /* Get a virtue for realm2 */
-
- if (p_ptr->realm2)
- {
- switch(p_ptr->realm2)
- {
- case REALM_LIFE:
- if (virtue_number(V_FAITH))
- p_ptr->vir_types[i++] = V_VITALITY;
- else p_ptr->vir_types[i++] = V_FAITH;
- break;
- case REALM_SORCERY:
- if (virtue_number(V_ENCHANT))
- p_ptr->vir_types[i++] = V_KNOWLEDGE;
- else p_ptr->vir_types[i++] = V_ENCHANT;
- break;
- case REALM_NATURE:
- if (virtue_number(V_NATURE))
- p_ptr->vir_types[i++] = V_HARMONY;
- else p_ptr->vir_types[i++] = V_NATURE;
- break;
- case REALM_CHAOS:
- if (virtue_number(V_CHANCE))
- p_ptr->vir_types[i++] = V_INDIVIDUALISM;
- else p_ptr->vir_types[i++] = V_CHANCE;
- break;
- case REALM_DEATH:
- p_ptr->vir_types[i++] = V_UNLIFE;
- break;
- case REALM_TRUMP:
- p_ptr->vir_types[i++] = V_KNOWLEDGE;
- break;
- case REALM_ARCANE:
- break;
- case REALM_ENCHANT:
- if (virtue_number(V_ENCHANT))
- p_ptr->vir_types[i++] = V_INDIVIDUALISM;
- else p_ptr->vir_types[i++] = V_ENCHANT;
- break;
- case REALM_DAEMON:
- if (virtue_number(V_JUSTICE))
- p_ptr->vir_types[i++] = V_FAITH;
- else p_ptr->vir_types[i++] = V_JUSTICE;
- break;
- };
- }
-
- /* Eliminate doubles */
- for (i = 0; i < 8; i++)
- {
- for (j = i+1; j < 8; j++)
- {
- if ((p_ptr->vir_types[j] != 0)
- && (p_ptr->vir_types[j] == p_ptr->vir_types[i]))
- p_ptr->vir_types[j] = 0;
- }
- }
-
- /* Fill in the blanks */
-
- for (i = 0; i < 8; i++)
- {
- if (p_ptr->vir_types[i]==0) get_random_virtue(i);
- }
+ int i = 0, j = 0;
+ s16b tmp_vir;
+
+ /* Reset */
+ for (i = 0; i < 8; i++)
+ {
+ p_ptr->virtues[i] = 0;
+ p_ptr->vir_types[i] = 0;
+ }
+
+ i = 0;
+
+ /* Get pre-defined types */
+ /* 1 or more virtues based on class */
+ switch (p_ptr->pclass)
+ {
+ case CLASS_WARRIOR:
+ case CLASS_SAMURAI:
+ p_ptr->vir_types[i++] = V_VALOUR;
+ p_ptr->vir_types[i++] = V_HONOUR;
+ break;
+ case CLASS_MAGE:
+ p_ptr->vir_types[i++] = V_KNOWLEDGE;
+ p_ptr->vir_types[i++] = V_ENCHANT;
+ break;
+ case CLASS_PRIEST:
+ p_ptr->vir_types[i++] = V_FAITH;
+ p_ptr->vir_types[i++] = V_TEMPERANCE;
+ break;
+ case CLASS_ROGUE:
+ case CLASS_SNIPER:
+ p_ptr->vir_types[i++] = V_HONOUR;
+ break;
+ case CLASS_RANGER:
+ case CLASS_ARCHER:
+ p_ptr->vir_types[i++] = V_NATURE;
+ p_ptr->vir_types[i++] = V_TEMPERANCE;
+ break;
+ case CLASS_PALADIN:
+ p_ptr->vir_types[i++] = V_JUSTICE;
+ p_ptr->vir_types[i++] = V_VALOUR;
+ p_ptr->vir_types[i++] = V_HONOUR;
+ p_ptr->vir_types[i++] = V_FAITH;
+ break;
+ case CLASS_WARRIOR_MAGE:
+ case CLASS_RED_MAGE:
+ p_ptr->vir_types[i++] = V_ENCHANT;
+ p_ptr->vir_types[i++] = V_VALOUR;
+ break;
+ case CLASS_CHAOS_WARRIOR:
+ p_ptr->vir_types[i++] = V_CHANCE;
+ p_ptr->vir_types[i++] = V_INDIVIDUALISM;
+ break;
+ case CLASS_MONK:
+ case CLASS_FORCETRAINER:
+ p_ptr->vir_types[i++] = V_FAITH;
+ p_ptr->vir_types[i++] = V_HARMONY;
+ p_ptr->vir_types[i++] = V_TEMPERANCE;
+ p_ptr->vir_types[i++] = V_PATIENCE;
+ break;
+ case CLASS_MINDCRAFTER:
+ case CLASS_MIRROR_MASTER:
+ p_ptr->vir_types[i++] = V_HARMONY;
+ p_ptr->vir_types[i++] = V_ENLIGHTEN;
+ p_ptr->vir_types[i++] = V_PATIENCE;
+ break;
+ case CLASS_HIGH_MAGE:
+ case CLASS_SORCERER:
+ p_ptr->vir_types[i++] = V_ENLIGHTEN;
+ p_ptr->vir_types[i++] = V_ENCHANT;
+ p_ptr->vir_types[i++] = V_KNOWLEDGE;
+ break;
+ case CLASS_TOURIST:
+ p_ptr->vir_types[i++] = V_ENLIGHTEN;
+ p_ptr->vir_types[i++] = V_CHANCE;
+ break;
+ case CLASS_IMITATOR:
+ p_ptr->vir_types[i++] = V_CHANCE;
+ break;
+ case CLASS_BLUE_MAGE:
+ p_ptr->vir_types[i++] = V_CHANCE;
+ p_ptr->vir_types[i++] = V_KNOWLEDGE;
+ break;
+ case CLASS_BEASTMASTER:
+ p_ptr->vir_types[i++] = V_NATURE;
+ p_ptr->vir_types[i++] = V_CHANCE;
+ p_ptr->vir_types[i++] = V_VITALITY;
+ break;
+ case CLASS_MAGIC_EATER:
+ p_ptr->vir_types[i++] = V_ENCHANT;
+ p_ptr->vir_types[i++] = V_KNOWLEDGE;
+ break;
+ case CLASS_BARD:
+ p_ptr->vir_types[i++] = V_HARMONY;
+ p_ptr->vir_types[i++] = V_COMPASSION;
+ break;
+ case CLASS_CAVALRY:
+ p_ptr->vir_types[i++] = V_VALOUR;
+ p_ptr->vir_types[i++] = V_HARMONY;
+ break;
+ case CLASS_BERSERKER:
+ p_ptr->vir_types[i++] = V_VALOUR;
+ p_ptr->vir_types[i++] = V_INDIVIDUALISM;
+ break;
+ case CLASS_SMITH:
+ p_ptr->vir_types[i++] = V_HONOUR;
+ p_ptr->vir_types[i++] = V_KNOWLEDGE;
+ break;
+ case CLASS_NINJA:
+ p_ptr->vir_types[i++] = V_PATIENCE;
+ p_ptr->vir_types[i++] = V_KNOWLEDGE;
+ p_ptr->vir_types[i++] = V_FAITH;
+ p_ptr->vir_types[i++] = V_UNLIFE;
+ break;
+ };
+
+ /* Get one virtue based on race */
+ switch (p_ptr->prace)
+ {
+ case RACE_HUMAN: case RACE_HALF_ELF: case RACE_DUNADAN:
+ p_ptr->vir_types[i++] = V_INDIVIDUALISM;
+ break;
+ case RACE_ELF: case RACE_SPRITE: case RACE_ENT:
+ p_ptr->vir_types[i++] = V_NATURE;
+ break;
+ case RACE_HOBBIT: case RACE_HALF_OGRE:
+ p_ptr->vir_types[i++] = V_TEMPERANCE;
+ break;
+ case RACE_DWARF: case RACE_KLACKON: case RACE_ANDROID:
+ p_ptr->vir_types[i++] = V_DILIGENCE;
+ break;
+ case RACE_GNOME: case RACE_CYCLOPS:
+ p_ptr->vir_types[i++] = V_KNOWLEDGE;
+ break;
+ case RACE_HALF_ORC: case RACE_AMBERITE: case RACE_KOBOLD:
+ p_ptr->vir_types[i++] = V_HONOUR;
+ break;
+ case RACE_HALF_TROLL: case RACE_BARBARIAN:
+ p_ptr->vir_types[i++] = V_VALOUR;
+ break;
+ case RACE_HIGH_ELF: case RACE_KUTAR:
+ p_ptr->vir_types[i++] = V_VITALITY;
+ break;
+ case RACE_HALF_GIANT: case RACE_GOLEM: case RACE_ANGEL: case RACE_DEMON:
+ p_ptr->vir_types[i++] = V_JUSTICE;
+ break;
+ case RACE_HALF_TITAN:
+ p_ptr->vir_types[i++] = V_HARMONY;
+ break;
+ case RACE_YEEK:
+ p_ptr->vir_types[i++] = V_SACRIFICE;
+ break;
+ case RACE_MIND_FLAYER:
+ p_ptr->vir_types[i++] = V_ENLIGHTEN;
+ break;
+ case RACE_DARK_ELF: case RACE_DRACONIAN: case RACE_S_FAIRY:
+ p_ptr->vir_types[i++] = V_ENCHANT;
+ break;
+ case RACE_NIBELUNG:
+ p_ptr->vir_types[i++] = V_PATIENCE;
+ break;
+ case RACE_IMP:
+ p_ptr->vir_types[i++] = V_FAITH;
+ break;
+ case RACE_ZOMBIE: case RACE_SKELETON:
+ case RACE_VAMPIRE: case RACE_SPECTRE:
+ p_ptr->vir_types[i++] = V_UNLIFE;
+ break;
+ case RACE_BEASTMAN:
+ p_ptr->vir_types[i++] = V_CHANCE;
+ break;
+ }
+
+ /* Get a virtue for realms */
+ if (p_ptr->realm1)
+ {
+ tmp_vir = get_realm_virtues(p_ptr->realm1);
+ if (tmp_vir) p_ptr->vir_types[i++] = tmp_vir;
+ }
+ if (p_ptr->realm2)
+ {
+ tmp_vir = get_realm_virtues(p_ptr->realm2);
+ if (tmp_vir) p_ptr->vir_types[i++] = tmp_vir;
+ }
+
+ /* Eliminate doubles */
+ for (i = 0; i < 8; i++)
+ {
+ for (j = i + 1; j < 8; j++)
+ {
+ if ((p_ptr->vir_types[j] != 0) && (p_ptr->vir_types[j] == p_ptr->vir_types[i]))
+ p_ptr->vir_types[j] = 0;
+ }
+ }
+
+ /* Fill in the blanks */
+ for (i = 0; i < 8; i++)
+ {
+ if (p_ptr->vir_types[i] == 0) get_random_virtue(i);
+ }
}
+/*!
+ * @brief Âбþ¤¹¤ëÆÁ¤ò¥×¥ì¥¤¥ä¡¼¤¬¥¹¥í¥Ã¥È¤ËÅÐÏ¿¤·¤Æ¤¤¤ë¾ì¹ç¤Ë²Ã¸º¤ò¹Ô¤¦¡£
+ * @details ÈϰϤÏ-125¡Á125¡¢´ðËÜŪ¤ËÀäÂÐÃͤ¬Â礤¤¤Û¤ÉÀäÂÐÃͤ¬¾å¤¬¤ê¿É¤¯¤Ê¤ë¡£
+ * @param virtue ÆÁ¤ÎID
+ * @param amount ²Ã¸ºÎÌ
+ * @return ¤Ê¤·
+ */
void chg_virtue(int virtue, int amount)
{
- int i = 0;
-
- for (i = 0; i < 8; i++)
- {
- if (p_ptr->vir_types[i] == virtue)
- {
- if (amount > 0)
- {
- if ((amount + p_ptr->virtues[i] > 50) && one_in_(2))
- {
- p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 50);
- return;
- }
- if ((amount + p_ptr->virtues[i] > 80) && one_in_(2))
- {
- p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 80);
- return;
- }
- if ((amount + p_ptr->virtues[i] > 100) && one_in_(2))
- {
- p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 100);
- return;
- }
- if (amount + p_ptr->virtues[i] > 125)
- p_ptr->virtues[i] = 125;
- else
- p_ptr->virtues[i] = p_ptr->virtues[i] + amount;
- }
- else
- {
- if ((amount + p_ptr->virtues[i] < -50) && one_in_(2))
- {
- p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -50);
- return;
- }
- if ((amount + p_ptr->virtues[i] < -80) && one_in_(2))
- {
- p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -80);
- return;
- }
- if ((amount + p_ptr->virtues[i] < -100) && one_in_(2))
+ int i = 0;
+
+ for (i = 0; i < 8; i++)
+ {
+ if (p_ptr->vir_types[i] == virtue)
{
- p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -100);
- return;
+ if (amount > 0)
+ {
+ if ((amount + p_ptr->virtues[i] > 50) && one_in_(2))
+ {
+ p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 50);
+ return;
+ }
+ if ((amount + p_ptr->virtues[i] > 80) && one_in_(2))
+ {
+ p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 80);
+ return;
+ }
+ if ((amount + p_ptr->virtues[i] > 100) && one_in_(2))
+ {
+ p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 100);
+ return;
+ }
+ if (amount + p_ptr->virtues[i] > 125)
+ p_ptr->virtues[i] = 125;
+ else
+ p_ptr->virtues[i] = p_ptr->virtues[i] + amount;
+ }
+ else
+ {
+ if ((amount + p_ptr->virtues[i] < -50) && one_in_(2))
+ {
+ p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -50);
+ return;
+ }
+ if ((amount + p_ptr->virtues[i] < -80) && one_in_(2))
+ {
+ p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -80);
+ return;
+ }
+ if ((amount + p_ptr->virtues[i] < -100) && one_in_(2))
+ {
+ p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -100);
+ return;
+ }
+ if (amount + p_ptr->virtues[i] < -125)
+ p_ptr->virtues[i] = -125;
+ else
+ p_ptr->virtues[i] = p_ptr->virtues[i] + amount;
+ }
+ p_ptr->update |= (PU_BONUS);
+ return;
}
- if (amount + p_ptr->virtues[i] < -125)
- p_ptr->virtues[i] = -125;
- else
- p_ptr->virtues[i] = p_ptr->virtues[i] + amount;
- }
- p_ptr->update |= (PU_BONUS);
- return;
- }
- }
-
+ }
}
+/*!
+ * @brief Âбþ¤¹¤ëÆÁ¤ò¥×¥ì¥¤¥ä¡¼¤¬¥¹¥í¥Ã¥È¤ËÅÐÏ¿¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¸ÇÄêÃͤò¥»¥Ã¥È¤¹¤ë¡£
+ * @param virtue ÆÁ¤ÎID
+ * @param amount ¥»¥Ã¥È¤·¤¿¤¤ÃÍ¡£
+ * @return ¤Ê¤·
+ */
void set_virtue(int virtue, int amount)
{
- int i = 0;
-
- for (i = 0; i < 8; i++)
- {
- if (p_ptr->vir_types[i] == virtue)
- {
- p_ptr->virtues[i] = amount;
- return;
+ int i = 0;
+
+ for (i = 0; i < 8; i++)
+ {
+ if (p_ptr->vir_types[i] == virtue)
+ {
+ p_ptr->virtues[i] = amount;
+ return;
+ }
}
- }
}
-void dump_virtues(FILE * OutFile)
+/*!
+ * @brief ÆÁ¤Î¥À¥ó¥×ɽ¼¨¤ò¹Ô¤¦¡£
+ * @param OutFile ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿¡£
+ * @return ¤Ê¤·
+ */
+void dump_virtues(FILE *OutFile)
{
- int v_nr = 0;
-
- if (!OutFile) return;
+ int v_nr = 0;
- for (v_nr = 0; v_nr < 8; v_nr++)
- {
- char v_name [20];
+ if (!OutFile) return;
- int tester = p_ptr->virtues[v_nr];
+ for (v_nr = 0; v_nr < 8; v_nr++)
+ {
+ char v_name [20];
+ int tester = p_ptr->virtues[v_nr];
- strcpy(v_name, virtue[(p_ptr->vir_types[v_nr])-1]);
+ strcpy(v_name, virtue[(p_ptr->vir_types[v_nr])-1]);
- if (p_ptr->vir_types[v_nr] == 0 || p_ptr->vir_types[v_nr] >
- MAX_VIRTUE)
+ if (p_ptr->vir_types[v_nr] == 0 || p_ptr->vir_types[v_nr] > MAX_VIRTUE)
#ifdef JP
- fprintf(OutFile, "¤ª¤Ã¤È¡£%s¤Î¾ðÊó¤Ê¤·¡£", v_name);
+ fprintf(OutFile, "¤ª¤Ã¤È¡£%s¤Î¾ðÊó¤Ê¤·¡£", v_name);
#else
- fprintf(OutFile, "Oops. No info about %s.", v_name);
+ fprintf(OutFile, "Oops. No info about %s.", v_name);
#endif
- else if (tester < -100)
+ else if (tester < -100)
#ifdef JP
- fprintf(OutFile, "[%s]¤ÎÂжË",
+ fprintf(OutFile, "[%s]¤ÎÂжË",
#else
- fprintf(OutFile, "You are the polar opposite of %s.",
+ fprintf(OutFile, "You are the polar opposite of %s.",
#endif
- v_name);
- else if (tester < -80)
+ v_name);
+ else if (tester < -80)
#ifdef JP
- fprintf(OutFile, "[%s]¤ÎÂçŨ",
+ fprintf(OutFile, "[%s]¤ÎÂçŨ",
#else
- fprintf(OutFile, "You are an arch-enemy of %s.",
+ fprintf(OutFile, "You are an arch-enemy of %s.",
#endif
- v_name);
- else if (tester < -60)
+ v_name);
+ else if (tester < -60)
#ifdef JP
- fprintf(OutFile, "[%s]¤Î¶¯Å¨",
+ fprintf(OutFile, "[%s]¤Î¶¯Å¨",
#else
- fprintf(OutFile, "You are a bitter enemy of %s.",
+ fprintf(OutFile, "You are a bitter enemy of %s.",
#endif
- v_name);
- else if (tester < -40)
+ v_name);
+ else if (tester < -40)
#ifdef JP
- fprintf(OutFile, "[%s]¤ÎŨ",
+ fprintf(OutFile, "[%s]¤ÎŨ",
#else
- fprintf(OutFile, "You are an enemy of %s.",
+ fprintf(OutFile, "You are an enemy of %s.",
#endif
- v_name);
- else if (tester < -20)
+ v_name);
+ else if (tester < -20)
#ifdef JP
- fprintf(OutFile, "[%s]¤Îºá¼Ô",
+ fprintf(OutFile, "[%s]¤Îºá¼Ô",
#else
- fprintf(OutFile, "You have sinned against %s.",
+ fprintf(OutFile, "You have sinned against %s.",
#endif
- v_name);
- else if (tester < 0)
+ v_name);
+ else if (tester < 0)
#ifdef JP
- fprintf(OutFile, "[%s]¤ÎÌÂÆ»¼Ô",
+ fprintf(OutFile, "[%s]¤ÎÌÂÆ»¼Ô",
#else
- fprintf(OutFile, "You have strayed from the path of %s.",
+ fprintf(OutFile, "You have strayed from the path of %s.",
#endif
- v_name);
- else if (tester == 0)
+ v_name);
+ else if (tester == 0)
#ifdef JP
- fprintf(OutFile,"[%s]¤ÎÃæΩ¼Ô",
+ fprintf(OutFile,"[%s]¤ÎÃæΩ¼Ô",
#else
- fprintf(OutFile,"You are neutral to %s.",
+ fprintf(OutFile,"You are neutral to %s.",
#endif
- v_name);
- else if (tester < 20)
+ v_name);
+ else if (tester < 20)
#ifdef JP
- fprintf(OutFile,"[%s]¤Î¾®ÆÁ¼Ô",
+ fprintf(OutFile,"[%s]¤Î¾®ÆÁ¼Ô",
#else
- fprintf(OutFile,"You are somewhat virtuous in %s.",
+ fprintf(OutFile,"You are somewhat virtuous in %s.",
#endif
- v_name);
- else if (tester < 40)
+ v_name);
+ else if (tester < 40)
#ifdef JP
- fprintf(OutFile,"[%s]¤ÎÃæÆÁ¼Ô",
+ fprintf(OutFile,"[%s]¤ÎÃæÆÁ¼Ô",
#else
- fprintf(OutFile,"You are virtuous in %s.",
+ fprintf(OutFile,"You are virtuous in %s.",
#endif
- v_name);
- else if (tester < 60)
+ v_name);
+ else if (tester < 60)
#ifdef JP
- fprintf(OutFile,"[%s]¤Î¹âÆÁ¼Ô",
+ fprintf(OutFile,"[%s]¤Î¹âÆÁ¼Ô",
#else
- fprintf(OutFile,"You are very virtuous in %s.",
+ fprintf(OutFile,"You are very virtuous in %s.",
#endif
- v_name);
- else if (tester < 80)
+ v_name);
+ else if (tester < 80)
#ifdef JP
- fprintf(OutFile,"[%s]¤ÎÇƼÔ",
+ fprintf(OutFile,"[%s]¤ÎÇƼÔ",
#else
- fprintf(OutFile,"You are a champion of %s.",
+ fprintf(OutFile,"You are a champion of %s.",
#endif
- v_name);
- else if (tester < 100)
+ v_name);
+ else if (tester < 100)
#ifdef JP
- fprintf(OutFile,"[%s]¤Î°ÎÂç¤ÊÇƼÔ",
+ fprintf(OutFile,"[%s]¤Î°ÎÂç¤ÊÇƼÔ",
#else
- fprintf(OutFile,"You are a great champion of %s.",
+ fprintf(OutFile,"You are a great champion of %s.",
#endif
- v_name);
- else
+ v_name);
+ else
#ifdef JP
- fprintf(OutFile,"[%s]¤Î¶ñ¸½¼Ô",
+ fprintf(OutFile,"[%s]¤Î¶ñ¸½¼Ô",
#else
- fprintf(OutFile,"You are the living embodiment of %s.",
+ fprintf(OutFile,"You are the living embodiment of %s.",
#endif
- v_name);
-
- fprintf(OutFile, "\n");
- }
-
+ v_name);
+ fprintf(OutFile, "\n");
+ }
}
-