included in all such copies.
*/
-#include "angband.h"
+#include "system/angband.h"
#include "avatar.h"
-#include "realm.h"
+#include "realm/realm.h"
+#include "player/player-race.h"
+#include "player/player-class.h"
/*!
* 徳の名称 / The names of the virtues
* @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;
* @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 */
* @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))
{
}
/* Chosen */
- p_ptr->vir_types[which] = (s16b)type;
+ creature_ptr->vir_types[which] = (s16b)type;
}
/*!
* @param realm 魔法領域のID
* @return 対応する徳のID
*/
-static VIRTUES_IDX get_realm_virtues(REALM_IDX 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;
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;
};
* @details 職業に応じて1~4種が固定、種族に応じて1種類が与えられ、後は重複なくランダムに選択される。
* @return なし
*/
-void get_virtues(void)
+void get_virtues(player_type *creature_ptr)
{
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;
+ 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 */
{
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);
}
}
* @param amount 加減量
* @return なし
*/
-void chg_virtue(int virtue_id, 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_id)
+ 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;
}
}
* @param amount セットしたい値。
* @return なし
*/
-void set_virtue(int virtue_id, 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_id)
+ if (creature_ptr->vir_types[i] == virtue_id)
{
- p_ptr->virtues[i] = (s16b)amount;
+ creature_ptr->virtues[i] = (s16b)amount;
return;
}
}
* @param OutFile ファイルポインタ。
* @return なし
*/
-void dump_virtues(FILE *OutFile)
+void dump_virtues(player_type *creature_ptr, FILE *OutFile)
{
int v_nr = 0;
for (v_nr = 0; v_nr < 8; v_nr++)
{
GAME_TEXT vir_name [20];
- int tester = p_ptr->virtues[v_nr];
+ int tester = creature_ptr->virtues[v_nr];
- strcpy(vir_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)
+ 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)