OSDN Git Service

[Refactor] #38862 Moved angband.h, h-*.h and system-variables.c/h
[hengband/hengband.git] / src / avatar.c
index 5bfa4a5..fa6504f 100644 (file)
@@ -1,6 +1,6 @@
-/*!
+/*!
     @file avatar.c
-    @brief ¥¦¥ë¥Æ¥£¥Þ£´¤ò»²¹Í¤Ë¤·¤¿ÆÁ¤Î¥·¥¹¥Æ¥à¤Î¼ÂÁõ / Enable an Ultima IV style "avatar" game where you try to achieve perfection in various virtues.
+    @brief ウルティマ4を参考にした徳のシステムの実装 / 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
     included in all such copies.
 */
 
-
-#include "angband.h"
+#include "system/angband.h"
+#include "avatar.h"
+#include "realm/realm.h"
+#include "player/player-race.h"
+#include "player/player-class.h"
 
 /*!
- * ÆÁ¤Î̾¾Î / The names of the virtues
+ * 徳の名称 / The names of the virtues
  */
-cptr virtue[MAX_VIRTUE] =
+concptr virtue[MAX_VIRTUE] =
 {
-#ifdef JP
-       "¾ð",
-       "ÍÀ",
-       "Àµ",
-       "µ¾",
-       "¼±",
-       "À¿",
-       "·¼",
-       "Èë",
-       "±¿",
-       "Á³",
-       "Ĵ",
-       "³è",
-       "»à",
-       "Ǧ",
-       "Àá",
-       "¶Ð",
-       "ͦ",
-       "¸Ä",
-#else
-       "Compassion",
-       "Honour",
-       "Justice",
-       "Sacrifice",
-       "Knowledge",
-       "Faith",
-       "Enlightenment",
-       "Mysticism",
-       "Chance",
-       "Nature",
-       "Harmony",
-       "Vitality",
-       "Unlife",
-       "Patience",
-       "Temperance",
-       "Diligence",
-       "Valour",
-       "Individualism",
-#endif
+       _("情", "Compassion"),
+       _("誉", "Honour"),
+       _("正", "Justice"),
+       _("犠", "Sacrifice"),
+       _("識", "Knowledge"),
+       _("誠", "Faith"),
+       _("啓", "Enlightenment"),
+       _("秘", "Mysticism"),
+       _("運", "Chance"),
+       _("然", "Nature"),
+       _("調", "Harmony"),
+       _("活", "Vitality"),
+       _("死", "Unlife"),
+       _("忍", "Patience"),
+       _("節", "Temperance"),
+       _("勤", "Diligence"),
+       _("勇", "Valour"),
+       _("個", "Individualism"),
 };
 
 /*!
- * @brief ³ºÅö¤ÎÆÁ¤¬¥×¥ì¥¤¥ä¡¼¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë¤«Èݤ«¤Ë±þ¤¸¤Ä¤Ä¡¢Âç¾®¤òÈæ³Ó¤¹¤ë¡£
- * @details ÆÁ¤¬¤Ê¤¤¾ì¹ç¤ÏÃÍ0¤È¤·¤ÆÈæ³Ó¤¹¤ë¡£
- * @param type Èæ³Ó¤·¤¿¤¤ÆÁ¤ÎID
- * @param num Èæ³Ó´ð½àÃÍ
- * @param tekitou VIRTUE_LARGE = ´ð½àÃͤè¤êÂ礭¤¤¤« / VIRTUE_SMALL = ´ð½àÃͤè¤ê¾®¤µ¤¤¤«
- * @return Èæ³Ó¤Î¿¿µ¶ÃͤòÊÖ¤¹
- * @todo °ú¿ô̾¤òľ¤·¤Æ¤ª¤¯
+ * @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)
+bool compare_virtue(player_type *creature_ptr, int type, int num, int tekitou)
 {
        int vir;
-       if (virtue_number(type))
-               vir = p_ptr->virtues[virtue_number(type) - 1];
+       if (virtue_number(creature_ptr, type))
+               vir = creature_ptr->virtues[virtue_number(creature_ptr, type) - 1];
        else
                vir = 0;
 
@@ -93,18 +75,18 @@ bool compare_virtue(int type, int num, int tekitou)
 }
 
 /*!
- * @brief ¥×¥ì¥¤¥ä¡¼¤Î»ØÄê¤ÎÆÁ¤¬²¿ÈÖÌܤΥ¹¥í¥Ã¥È¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¤«¤òÊÖ¤¹¡£ / Aux function
- * @param type ³Îǧ¤·¤¿¤¤ÆÁ¤ÎID
- * @return ¥¹¥í¥Ã¥È¤¬¤¢¤ë¤Ê¤é¤Ð¥¹¥í¥Ã¥È¤ÎID(0¡Á7)+1¡¢¤Ê¤¤¾ì¹ç¤Ï0¤òÊÖ¤¹¡£
+ * @brief プレイヤーの指定の徳が何番目のスロットに登録されているかを返す。 / Aux function
+ * @param type 確認したい徳のID
+ * @return スロットがあるならばスロットのID(0~7)+1、ない場合は0を返す。
  */
-int virtue_number(int type)
+int virtue_number(player_type *creature_ptr, int type)
 {
        int i;
 
        /* Search */
        for (i = 0; i < 8; i++)
        {
-               if (p_ptr->vir_types[i] == type) return i + 1;
+               if (creature_ptr->vir_types[i] == type) return i + 1;
        }
 
        /* No match */
@@ -112,16 +94,16 @@ int virtue_number(int type)
 }
 
 /*!
- * @brief ¥×¥ì¥¤¥ä¡¼¤Î¿¦¶È¤ä¼ï²¤Ë°Í¸¤·¤Ê¤¤¥é¥ó¥À¥à¤ÊÆÁ¤ò¼èÆÀ¤¹¤ë / Aux function
- * @param which ³Îǧ¤·¤¿¤¤ÆÁ¤ÎID
- * @return ¤Ê¤·
+ * @brief プレイヤーの職業や種族に依存しないランダムな徳を取得する / Aux function
+ * @param which 確認したい徳のID
+ * @return なし
  */
-static void get_random_virtue(int which)
+static void get_random_virtue(player_type *creature_ptr, int which)
 {
        int type = 0;
 
        /* Randomly choose a type */
-       while (!(type) || virtue_number(type))
+       while (!(type) || virtue_number(creature_ptr, type))
        {
                switch (randint1(29))
                {
@@ -156,29 +138,29 @@ static void get_random_virtue(int which)
        }
 
        /* Chosen */
-       p_ptr->vir_types[which] = type;
+       creature_ptr->vir_types[which] = (s16b)type;
 }
 
 /*!
- * @brief ¥×¥ì¥¤¥ä¡¼¤ÎÁª¤ó¤ÀËâË¡Îΰè¤Ë±þ¤¸¤ÆÂбþ¤¹¤ëÆÁ¤òÊÖ¤¹¡£
- * @param realm ËâË¡Îΰè¤ÎID
- * @return Âбþ¤¹¤ëÆÁ¤ÎID
+ * @brief プレイヤーの選んだ魔法領域に応じて対応する徳を返す。
+ * @param realm 魔法領域のID
+ * @return 対応する徳のID
  */
-static s16b get_realm_virtues(byte realm)
+static VIRTUES_IDX get_realm_virtues(player_type *creature_ptr, REALM_IDX realm)
 {
        switch (realm)
        {
        case REALM_LIFE:
-               if (virtue_number(V_VITALITY)) return V_TEMPERANCE;
+               if (virtue_number(creature_ptr, V_VITALITY)) return V_TEMPERANCE;
                else return V_VITALITY;
        case REALM_SORCERY:
-               if (virtue_number(V_KNOWLEDGE)) return V_ENCHANT;
+               if (virtue_number(creature_ptr, V_KNOWLEDGE)) return V_ENCHANT;
                else return V_KNOWLEDGE;
        case REALM_NATURE:
-               if (virtue_number(V_NATURE)) return V_HARMONY;
+               if (virtue_number(creature_ptr, V_NATURE)) return V_HARMONY;
                else return V_NATURE;
        case REALM_CHAOS:
-               if (virtue_number(V_CHANCE)) return V_INDIVIDUALISM;
+               if (virtue_number(creature_ptr, V_CHANCE)) return V_INDIVIDUALISM;
                else return V_CHANCE;
        case REALM_DEATH:
                return V_UNLIFE;
@@ -187,16 +169,16 @@ static s16b get_realm_virtues(byte realm)
        case REALM_ARCANE:
                return 0;
        case REALM_CRAFT:
-               if (virtue_number(V_ENCHANT)) return V_INDIVIDUALISM;
+               if (virtue_number(creature_ptr, V_ENCHANT)) return V_INDIVIDUALISM;
                else return V_ENCHANT;
        case REALM_DAEMON:
-               if (virtue_number(V_JUSTICE)) return V_FAITH;
+               if (virtue_number(creature_ptr, V_JUSTICE)) return V_FAITH;
                else return V_JUSTICE;
        case REALM_CRUSADE:
-               if (virtue_number(V_JUSTICE)) return V_HONOUR;
+               if (virtue_number(creature_ptr, V_JUSTICE)) return V_HONOUR;
                else return V_JUSTICE;
        case REALM_HEX:
-               if (virtue_number(V_COMPASSION)) return V_JUSTICE;
+               if (virtue_number(creature_ptr, V_COMPASSION)) return V_JUSTICE;
                else return V_COMPASSION;
        };
 
@@ -205,11 +187,11 @@ static s16b get_realm_virtues(byte realm)
 
 
 /*!
- * @brief ºîÀ®Ãæ¤Î¥×¥ì¥¤¥ä¡¼¥­¥ã¥é¥¯¥¿¡¼¤ËÆÁ8¼ïÎà¤òÍ¿¤¨¤ë¡£ / Select virtues & reset values for a new character
- * @details ¿¦¶È¤Ë±þ¤¸¤Æ1¡Á4¼ï¤¬¸ÇÄê¡¢¼ï²¤Ë±þ¤¸¤Æ1¼ïÎबͿ¤¨¤é¤ì¡¢¸å¤Ï½ÅÊ£¤Ê¤¯¥é¥ó¥À¥à¤ËÁªÂò¤µ¤ì¤ë¡£
- * @return ¤Ê¤·
+ * @brief 作成中のプレイヤーキャラクターに徳8種類を与える。 / Select virtues & reset values for a new character
+ * @details 職業に応じて1~4種が固定、種族に応じて1種類が与えられ、後は重複なくランダムに選択される。
+ * @return なし
  */
-void get_virtues(void)
+void get_virtues(player_type *creature_ptr)
 {
        int i = 0, j = 0;
        s16b tmp_vir;
@@ -217,183 +199,183 @@ void get_virtues(void)
        /* Reset */
        for (i = 0; i < 8; i++)
        {
-               p_ptr->virtues[i] = 0;
-               p_ptr->vir_types[i] = 0;
+               creature_ptr->virtues[i] = 0;
+               creature_ptr->vir_types[i] = 0;
        }
 
        i = 0;
 
        /* Get pre-defined types */
        /* 1 or more virtues based on class */
-       switch (p_ptr->pclass)
+       switch (creature_ptr->pclass)
        {
        case CLASS_WARRIOR:
        case CLASS_SAMURAI:
-               p_ptr->vir_types[i++] = V_VALOUR;
-               p_ptr->vir_types[i++] = V_HONOUR;
+               creature_ptr->vir_types[i++] = V_VALOUR;
+               creature_ptr->vir_types[i++] = V_HONOUR;
                break;
        case CLASS_MAGE:
-               p_ptr->vir_types[i++] = V_KNOWLEDGE;
-               p_ptr->vir_types[i++] = V_ENCHANT;
+               creature_ptr->vir_types[i++] = V_KNOWLEDGE;
+               creature_ptr->vir_types[i++] = V_ENCHANT;
                break;
        case CLASS_PRIEST:
-               p_ptr->vir_types[i++] = V_FAITH;
-               p_ptr->vir_types[i++] = V_TEMPERANCE;
+               creature_ptr->vir_types[i++] = V_FAITH;
+               creature_ptr->vir_types[i++] = V_TEMPERANCE;
                break;
        case CLASS_ROGUE:
        case CLASS_SNIPER:
-               p_ptr->vir_types[i++] = V_HONOUR;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_NATURE;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_JUSTICE;
+               creature_ptr->vir_types[i++] = V_VALOUR;
+               creature_ptr->vir_types[i++] = V_HONOUR;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_ENCHANT;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_CHANCE;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_FAITH;
+               creature_ptr->vir_types[i++] = V_HARMONY;
+               creature_ptr->vir_types[i++] = V_TEMPERANCE;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_HARMONY;
+               creature_ptr->vir_types[i++] = V_ENLIGHTEN;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_ENLIGHTEN;
+               creature_ptr->vir_types[i++] = V_ENCHANT;
+               creature_ptr->vir_types[i++] = V_KNOWLEDGE;
                break;
        case CLASS_TOURIST:
-               p_ptr->vir_types[i++] = V_ENLIGHTEN;
-               p_ptr->vir_types[i++] = V_CHANCE;
+               creature_ptr->vir_types[i++] = V_ENLIGHTEN;
+               creature_ptr->vir_types[i++] = V_CHANCE;
                break;
        case CLASS_IMITATOR:
-               p_ptr->vir_types[i++] = V_CHANCE;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_CHANCE;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_NATURE;
+               creature_ptr->vir_types[i++] = V_CHANCE;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_ENCHANT;
+               creature_ptr->vir_types[i++] = V_KNOWLEDGE;
                break;
        case CLASS_BARD:
-               p_ptr->vir_types[i++] = V_HARMONY;
-               p_ptr->vir_types[i++] = V_COMPASSION;
+               creature_ptr->vir_types[i++] = V_HARMONY;
+               creature_ptr->vir_types[i++] = V_COMPASSION;
                break;
        case CLASS_CAVALRY:
-               p_ptr->vir_types[i++] = V_VALOUR;
-               p_ptr->vir_types[i++] = V_HARMONY;
+               creature_ptr->vir_types[i++] = V_VALOUR;
+               creature_ptr->vir_types[i++] = V_HARMONY;
                break;
        case CLASS_BERSERKER:
-               p_ptr->vir_types[i++] = V_VALOUR;
-               p_ptr->vir_types[i++] = V_INDIVIDUALISM;
+               creature_ptr->vir_types[i++] = V_VALOUR;
+               creature_ptr->vir_types[i++] = V_INDIVIDUALISM;
                break;
        case CLASS_SMITH:
-               p_ptr->vir_types[i++] = V_HONOUR;
-               p_ptr->vir_types[i++] = V_KNOWLEDGE;
+               creature_ptr->vir_types[i++] = V_HONOUR;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_PATIENCE;
+               creature_ptr->vir_types[i++] = V_KNOWLEDGE;
+               creature_ptr->vir_types[i++] = V_FAITH;
+               creature_ptr->vir_types[i++] = V_UNLIFE;
                break;
        };
 
        /* Get one virtue based on race */
-       switch (p_ptr->prace)
+       switch (creature_ptr->prace)
        {
        case RACE_HUMAN: case RACE_HALF_ELF: case RACE_DUNADAN:
-               p_ptr->vir_types[i++] = V_INDIVIDUALISM;
+               creature_ptr->vir_types[i++] = V_INDIVIDUALISM;
                break;
        case RACE_ELF: case RACE_SPRITE: case RACE_ENT:
-               p_ptr->vir_types[i++] = V_NATURE;
+               creature_ptr->vir_types[i++] = V_NATURE;
                break;
        case RACE_HOBBIT: case RACE_HALF_OGRE:
-               p_ptr->vir_types[i++] = V_TEMPERANCE;
+               creature_ptr->vir_types[i++] = V_TEMPERANCE;
                break;
        case RACE_DWARF: case RACE_KLACKON: case RACE_ANDROID:
-               p_ptr->vir_types[i++] = V_DILIGENCE;
+               creature_ptr->vir_types[i++] = V_DILIGENCE;
                break;
        case RACE_GNOME: case RACE_CYCLOPS:
-               p_ptr->vir_types[i++] = V_KNOWLEDGE;
+               creature_ptr->vir_types[i++] = V_KNOWLEDGE;
                break;
        case RACE_HALF_ORC: case RACE_AMBERITE: case RACE_KOBOLD:
-               p_ptr->vir_types[i++] = V_HONOUR;
+               creature_ptr->vir_types[i++] = V_HONOUR;
                break;
        case RACE_HALF_TROLL: case RACE_BARBARIAN:
-               p_ptr->vir_types[i++] = V_VALOUR;
+               creature_ptr->vir_types[i++] = V_VALOUR;
                break;
        case RACE_HIGH_ELF: case RACE_KUTAR:
-               p_ptr->vir_types[i++] = V_VITALITY;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_JUSTICE;
                break;
        case RACE_HALF_TITAN:
-               p_ptr->vir_types[i++] = V_HARMONY;
+               creature_ptr->vir_types[i++] = V_HARMONY;
                break;
        case RACE_YEEK:
-               p_ptr->vir_types[i++] = V_SACRIFICE;
+               creature_ptr->vir_types[i++] = V_SACRIFICE;
                break;
        case RACE_MIND_FLAYER:
-               p_ptr->vir_types[i++] = V_ENLIGHTEN;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_ENCHANT;
                break;
        case RACE_NIBELUNG:
-               p_ptr->vir_types[i++] = V_PATIENCE;
+               creature_ptr->vir_types[i++] = V_PATIENCE;
                break;
        case RACE_IMP:
-               p_ptr->vir_types[i++] = V_FAITH;
+               creature_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;
+               creature_ptr->vir_types[i++] = V_UNLIFE;
                break;
        case RACE_BEASTMAN:
-               p_ptr->vir_types[i++] = V_CHANCE;
+               creature_ptr->vir_types[i++] = V_CHANCE;
                break;
        }
 
        /* Get a virtue for realms */
-       if (p_ptr->realm1)
+       if (creature_ptr->realm1)
        {
-               tmp_vir = get_realm_virtues(p_ptr->realm1);
-               if (tmp_vir) p_ptr->vir_types[i++] = tmp_vir;
+               tmp_vir = get_realm_virtues(creature_ptr, creature_ptr->realm1);
+               if (tmp_vir) creature_ptr->vir_types[i++] = tmp_vir;
        }
-       if (p_ptr->realm2)
+       if (creature_ptr->realm2)
        {
-               tmp_vir = get_realm_virtues(p_ptr->realm2);
-               if (tmp_vir) p_ptr->vir_types[i++] = tmp_vir;
+               tmp_vir = get_realm_virtues(creature_ptr, creature_ptr->realm2);
+               if (tmp_vir) creature_ptr->vir_types[i++] = tmp_vir;
        }
 
        /* Eliminate doubles */
@@ -401,109 +383,109 @@ void get_virtues(void)
        {
                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;
+                       if ((creature_ptr->vir_types[j] != 0) && (creature_ptr->vir_types[j] == creature_ptr->vir_types[i]))
+                               creature_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);
+               if (creature_ptr->vir_types[i] == 0) get_random_virtue(creature_ptr, i);
        }
 }
 
 /*!
- * @brief Âбþ¤¹¤ëÆÁ¤ò¥×¥ì¥¤¥ä¡¼¤¬¥¹¥í¥Ã¥È¤ËÅÐÏ¿¤·¤Æ¤¤¤ë¾ì¹ç¤Ë²Ã¸º¤ò¹Ô¤¦¡£
- * @details ÈϰϤÏ-125¡Á125¡¢´ðËÜŪ¤ËÀäÂÐÃͤ¬Â礭¤¤¤Û¤ÉÀäÂÐÃͤ¬¾å¤¬¤ê¿É¤¯¤Ê¤ë¡£
- * @param virtue ÆÁ¤ÎID
- * @param amount ²Ã¸ºÎÌ
- * @return ¤Ê¤·
+ * @brief 対応する徳をプレイヤーがスロットに登録している場合に加減を行う。
+ * @details 範囲は-125~125、基本的に絶対値が大きいほど絶対値が上がり辛くなる。
+ * @param virtue 徳のID
+ * @param amount 加減量
+ * @return なし
  */
-void chg_virtue(int virtue, int amount)
+void chg_virtue(player_type *creature_ptr, int virtue_id, int amount)
 {
        int i = 0;
 
        for (i = 0; i < 8; i++)
        {
-               if (p_ptr->vir_types[i] == virtue)
+               if (creature_ptr->vir_types[i] == virtue_id)
                {
                        if (amount > 0)
                        {
-                               if ((amount + p_ptr->virtues[i] > 50) && one_in_(2))
+                               if ((amount + creature_ptr->virtues[i] > 50) && one_in_(2))
                                {
-                                       p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 50);
+                                       creature_ptr->virtues[i] = MAX(creature_ptr->virtues[i], 50);
                                        return;
                                }
-                               if ((amount + p_ptr->virtues[i] > 80) && one_in_(2))
+                               if ((amount + creature_ptr->virtues[i] > 80) && one_in_(2))
                                {
-                                       p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 80);
+                                       creature_ptr->virtues[i] = MAX(creature_ptr->virtues[i], 80);
                                        return;
                                }
-                               if ((amount + p_ptr->virtues[i] > 100) && one_in_(2))
+                               if ((amount + creature_ptr->virtues[i] > 100) && one_in_(2))
                                {
-                                       p_ptr->virtues[i] = MAX(p_ptr->virtues[i], 100);
+                                       creature_ptr->virtues[i] = MAX(creature_ptr->virtues[i], 100);
                                        return;
                                }
-                               if (amount + p_ptr->virtues[i] > 125)
-                                       p_ptr->virtues[i] = 125;
+                               if (amount + creature_ptr->virtues[i] > 125)
+                                       creature_ptr->virtues[i] = 125;
                                else
-                                       p_ptr->virtues[i] = p_ptr->virtues[i] + amount;
+                                       creature_ptr->virtues[i] = creature_ptr->virtues[i] + amount;
                        }
                        else
                        {
-                               if ((amount + p_ptr->virtues[i] < -50) && one_in_(2))
+                               if ((amount + creature_ptr->virtues[i] < -50) && one_in_(2))
                                {
-                                       p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -50);
+                                       creature_ptr->virtues[i] = MIN(creature_ptr->virtues[i], -50);
                                        return;
                                }
-                               if ((amount + p_ptr->virtues[i] < -80) && one_in_(2))
+                               if ((amount + creature_ptr->virtues[i] < -80) && one_in_(2))
                                {
-                                       p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -80);
+                                       creature_ptr->virtues[i] = MIN(creature_ptr->virtues[i], -80);
                                        return;
                                }
-                               if ((amount + p_ptr->virtues[i] < -100) && one_in_(2))
+                               if ((amount + creature_ptr->virtues[i] < -100) && one_in_(2))
                                {
-                                       p_ptr->virtues[i] = MIN(p_ptr->virtues[i], -100);
+                                       creature_ptr->virtues[i] = MIN(creature_ptr->virtues[i], -100);
                                        return;
                                }
-                               if (amount + p_ptr->virtues[i] < -125)
-                                       p_ptr->virtues[i] = -125;
+                               if (amount + creature_ptr->virtues[i] < -125)
+                                       creature_ptr->virtues[i] = -125;
                                else
-                                       p_ptr->virtues[i] = p_ptr->virtues[i] + amount;
+                                       creature_ptr->virtues[i] = creature_ptr->virtues[i] + amount;
                        }
-                       p_ptr->update |= (PU_BONUS);
+                       creature_ptr->update |= (PU_BONUS);
                        return;
                }
        }
 }
 
 /*!
- * @brief Âбþ¤¹¤ëÆÁ¤ò¥×¥ì¥¤¥ä¡¼¤¬¥¹¥í¥Ã¥È¤ËÅÐÏ¿¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¸ÇÄêÃͤò¥»¥Ã¥È¤¹¤ë¡£
- * @param virtue ÆÁ¤ÎID
- * @param amount ¥»¥Ã¥È¤·¤¿¤¤ÃÍ¡£
- * @return ¤Ê¤·
+ * @brief 対応する徳をプレイヤーがスロットに登録している場合に固定値をセットする。
+ * @param virtue 徳のID
+ * @param amount セットしたい値。
+ * @return なし
  */
-void set_virtue(int virtue, int amount)
+void set_virtue(player_type *creature_ptr, int virtue_id, int amount)
 {
        int i = 0;
 
        for (i = 0; i < 8; i++)
        {
-               if (p_ptr->vir_types[i] == virtue)
+               if (creature_ptr->vir_types[i] == virtue_id)
                {
-                       p_ptr->virtues[i] = amount;
+                       creature_ptr->virtues[i] = (s16b)amount;
                        return;
                }
        }
 }
 
 /*!
- * @brief ÆÁ¤Î¥À¥ó¥×ɽ¼¨¤ò¹Ô¤¦¡£
- * @param OutFile ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿¡£
- * @return ¤Ê¤·
+ * @brief 徳のダンプ表示を行う。
+ * @param OutFile ファイルポインタ。
+ * @return なし
  */
-void dump_virtues(FILE *OutFile)
+void dump_virtues(player_type *creature_ptr, FILE *OutFile)
 {
        int v_nr = 0;
 
@@ -511,122 +493,40 @@ void dump_virtues(FILE *OutFile)
 
        for (v_nr = 0; v_nr < 8; v_nr++)
        {
-               char v_name [20];
-               int tester = p_ptr->virtues[v_nr];
+               GAME_TEXT vir_name [20];
+               int tester = creature_ptr->virtues[v_nr];
 
-               strcpy(v_name, virtue[(p_ptr->vir_types[v_nr])-1]);
+               strcpy(vir_name, virtue[(creature_ptr->vir_types[v_nr])-1]);
 
-               if (p_ptr->vir_types[v_nr] == 0 || p_ptr->vir_types[v_nr] > MAX_VIRTUE)
-#ifdef JP
-                       fprintf(OutFile, "¤ª¤Ã¤È¡£%s¤Î¾ðÊó¤Ê¤·¡£", v_name);
-#else
-                       fprintf(OutFile, "Oops. No info about %s.", v_name);
-#endif
+               if (creature_ptr->vir_types[v_nr] == 0 || creature_ptr->vir_types[v_nr] > MAX_VIRTUE)
+                       fprintf(OutFile, _("おっと。%sの情報なし。", "Oops. No info about %s."), vir_name);
 
                else if (tester < -100)
-#ifdef JP
-                       fprintf(OutFile, "[%s]¤ÎÂжË",
-#else
-                       fprintf(OutFile, "You are the polar opposite of %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile, _("[%s]の対極", "You are the polar opposite of %s."), vir_name);
                else if (tester < -80)
-#ifdef JP
-                       fprintf(OutFile, "[%s]¤ÎÂçŨ",
-#else
-                       fprintf(OutFile, "You are an arch-enemy of %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile, _("[%s]の大敵", "You are an arch-enemy of %s."), vir_name);
                else if (tester < -60)
-#ifdef JP
-                       fprintf(OutFile, "[%s]¤Î¶¯Å¨",
-#else
-                       fprintf(OutFile, "You are a bitter enemy of %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile, _("[%s]の強敵", "You are a bitter enemy of %s."), vir_name);
                else if (tester < -40)
-#ifdef JP
-                       fprintf(OutFile, "[%s]¤ÎŨ",
-#else
-                       fprintf(OutFile, "You are an enemy of %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile, _("[%s]の敵", "You are an enemy of %s."), vir_name);
                else if (tester < -20)
-#ifdef JP
-                       fprintf(OutFile, "[%s]¤Îºá¼Ô",
-#else
-                       fprintf(OutFile, "You have sinned against %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile, _("[%s]の罪者", "You have sinned against %s."), vir_name);
                else if (tester < 0)
-#ifdef JP
-                       fprintf(OutFile, "[%s]¤ÎÌÂÆ»¼Ô",
-#else
-                       fprintf(OutFile, "You have strayed from the path of %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile, _("[%s]の迷道者", "You have strayed from the path of %s."), vir_name);
                else if (tester == 0)
-#ifdef JP
-                       fprintf(OutFile,"[%s]¤ÎÃæΩ¼Ô",
-#else
-                       fprintf(OutFile,"You are neutral to %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile,_("[%s]の中立者", "You are neutral to %s."), vir_name);
                else if (tester < 20)
-#ifdef JP
-                       fprintf(OutFile,"[%s]¤Î¾®ÆÁ¼Ô",
-#else
-                       fprintf(OutFile,"You are somewhat virtuous in %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile,_("[%s]の小徳者", "You are somewhat virtuous in %s."), vir_name);
                else if (tester < 40)
-#ifdef JP
-                       fprintf(OutFile,"[%s]¤ÎÃæÆÁ¼Ô",
-#else
-                       fprintf(OutFile,"You are virtuous in %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile,_("[%s]の中徳者", "You are virtuous in %s."), vir_name);
                else if (tester < 60)
-#ifdef JP
-                       fprintf(OutFile,"[%s]¤Î¹âÆÁ¼Ô",
-#else
-                       fprintf(OutFile,"You are very virtuous in %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile,_("[%s]の高徳者", "You are very virtuous in %s."), vir_name);
                else if (tester < 80)
-#ifdef JP
-                       fprintf(OutFile,"[%s]¤ÎÇƼÔ",
-#else
-                       fprintf(OutFile,"You are a champion of %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile,_("[%s]の覇者", "You are a champion of %s."), vir_name);
                else if (tester < 100)
-#ifdef JP
-                       fprintf(OutFile,"[%s]¤Î°ÎÂç¤ÊÇƼÔ",
-#else
-                       fprintf(OutFile,"You are a great champion of %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile,_("[%s]の偉大な覇者", "You are a great champion of %s."), vir_name);
                else
-#ifdef JP
-                       fprintf(OutFile,"[%s]¤Î¶ñ¸½¼Ô",
-#else
-                       fprintf(OutFile,"You are the living embodiment of %s.",
-#endif
-
-                               v_name);
+                       fprintf(OutFile,_("[%s]の具現者", "You are the living embodiment of %s."), vir_name);
 
            fprintf(OutFile, "\n");
        }