<ClCompile Include="..\..\src\mind\stances-table.c" />\r
<ClCompile Include="..\..\src\mspell\mspell-dispel.c" />\r
<ClCompile Include="..\..\src\mutation\mutation-techniques.c" />\r
+ <ClCompile Include="..\..\src\artifact\random-art-pval-investor.c" />\r
<ClCompile Include="..\..\src\object-hook\hook-bow.c" />\r
<ClCompile Include="..\..\src\object-hook\hook-checker.c" />\r
<ClCompile Include="..\..\src\object-hook\hook-enchant.c" />\r
<ClInclude Include="..\..\src\mspell\mspells3.h" />\r
<ClInclude Include="..\..\src\mutation\mutation-flag-types.h" />\r
<ClInclude Include="..\..\src\mutation\mutation-techniques.h" />\r
+ <ClInclude Include="..\..\src\artifact\random-art-pval-investor.h" />\r
<ClInclude Include="..\..\src\object-hook\hook-armor.h" />\r
<ClInclude Include="..\..\src\object-hook\hook-bow.h" />\r
<ClInclude Include="..\..\src\object-hook\hook-checker.h" />\r
<ClCompile Include="..\..\src\cmd-action\cmd-travel.c">
<Filter>cmd-action</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\artifact\random-art-pval-investor.c">
+ <Filter>artifact</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\combat\shoot.h">
<ClInclude Include="..\..\src\cmd-action\cmd-travel.h">
<Filter>cmd-action</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\artifact\random-art-pval-investor.h">
+ <Filter>artifact</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\src\wall.bmp" />
<Filter Include="window">
<UniqueIdentifier>{9e0105e8-8250-4ac4-8a1c-cefd30485ecc}</UniqueIdentifier>
</Filter>
+ <Filter Include="artifact">
+ <UniqueIdentifier>{7554e8b1-1c3c-447b-8f1e-c18c09039419}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\angband.rc" />
action/tunnel-execution.c action/tunnel-execution.h \
action/weapon-shield.c action/weapon-shield.h \
\
+ artifact/random-art-pval-investor.c artifact/random-art-pval-investor.h \
+ \
art-definition/art-accessory-types.h \
art-definition/art-armor-types.h \
art-definition/art-bow-types.h \
LIBS += $(XFT_LIBS)
COMPILE = $(srcdir)/gcc-wrap $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) \
- -Iart-definition -Iautopick -Ibirth -Icmd-io -Icmd-item -Icmd-visual \
- -Icombat -Icore -Idungeon -Ieffect -Iflavor -Ifloor -Igame-option -Igrid \
- -Iinfo-reader -Iinventory -Iio -Iio-dump -Iknowledge -Imarket -Imelee \
- -Imind -Imonster -Imonster-attack -Imonster-floor -Imonster-race -Ilore \
- -Imspell -Imutation -Iobject -Iobject-enchant -Iobject-hook -Iobject-use \
- -Ipet -Iplayer -Iplayer-attack -Irealm -Iroom -Isavedata -Ispecific-object \
- -Ispell -Ispell-kind -Ispell-realm -Istatus -Isv-definition -Isystem -Iterm \
- -Iutil -Iview -Iwindow -Iwizard -Iworld
+ -Iartifact -Iart-definition -Iautopick -Ibirth -Icmd-io -Icmd-item \
+ -Icmd-visual -Icombat -Icore -Idungeon -Ieffect -Iflavor -Ifloor \
+ -Igame-option -Igrid -Iinfo-reader -Iinventory -Iio -Iio-dump -Iknowledge \
+ -Imarket -Imelee -Imind -Imonster -Imonster-attack -Imonster-floor \
+ -Imonster-race -Ilore -Imspell -Imutation -Iobject -Iobject-enchant \
+ -Iobject-hook -Iobject-use -Ipet -Iplayer -Iplayer-attack -Irealm -Iroom \
+ -Isavedata -Ispecific-object -Ispell -Ispell-kind -Ispell-realm -Istatus \
+ -Isv-definition -Isystem -Iterm -Iutil -Iview -Iwindow -Iwizard -Iworld
install-exec-hook:
if SET_GID
--- /dev/null
+/*!
+ * @brief ランダムアーティファクトにpvalを追加する処理
+ * @date 2020/07/14
+ * @author Hourier
+ */
+
+#include "artifact/random-art-pval-investor.h"
+#include "object-hook/hook-weapon.h"
+#include "object-enchant/random-art-bias-types.h"
+#include "object-enchant/tr-types.h"
+#include "sv-definition/sv-armor-types.h"
+#include "system/object-type-definition.h"
+#include "util/bit-flags-calculator.h"
+
+/*!
+ * @brief ランダムアーティファクト生成中、対象のオブジェクトにpval能力を付加する。/ Add one pval on generation of randam artifact.
+ * @details 優先的に付加されるpvalがランダムアーティファクトバイアスに依存して存在する。
+ * 原則的候補は腕力、知力、賢さ、器用さ、耐久、魅力、探索、隠密、赤外線視力、加速。武器のみ採掘、追加攻撃も候補に入る。
+ * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return なし
+ */
+void random_plus(object_type *o_ptr)
+{
+ int this_type = object_is_weapon_ammo(o_ptr) ? 23 : 19;
+ switch (o_ptr->artifact_bias) {
+ case BIAS_WARRIOR:
+ if (!(have_flag(o_ptr->art_flags, TR_STR))) {
+ add_flag(o_ptr->art_flags, TR_STR);
+ if (one_in_(2))
+ return;
+ }
+
+ if (!(have_flag(o_ptr->art_flags, TR_CON))) {
+ add_flag(o_ptr->art_flags, TR_CON);
+ if (one_in_(2))
+ return;
+ }
+
+ if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
+ add_flag(o_ptr->art_flags, TR_DEX);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+
+ case BIAS_MAGE:
+ if (!(have_flag(o_ptr->art_flags, TR_INT))) {
+ add_flag(o_ptr->art_flags, TR_INT);
+ if (one_in_(2))
+ return;
+ }
+ if ((o_ptr->tval == TV_GLOVES) && !(have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY))) {
+ add_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+
+ case BIAS_PRIESTLY:
+ if (!(have_flag(o_ptr->art_flags, TR_WIS))) {
+ add_flag(o_ptr->art_flags, TR_WIS);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+
+ case BIAS_RANGER:
+ if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
+ add_flag(o_ptr->art_flags, TR_DEX);
+ if (one_in_(2))
+ return;
+ }
+
+ if (!(have_flag(o_ptr->art_flags, TR_CON))) {
+ add_flag(o_ptr->art_flags, TR_CON);
+ if (one_in_(2))
+ return;
+ }
+
+ if (!(have_flag(o_ptr->art_flags, TR_STR))) {
+ add_flag(o_ptr->art_flags, TR_STR);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+
+ case BIAS_ROGUE:
+ if (!(have_flag(o_ptr->art_flags, TR_STEALTH))) {
+ add_flag(o_ptr->art_flags, TR_STEALTH);
+ if (one_in_(2))
+ return;
+ }
+ if (!(have_flag(o_ptr->art_flags, TR_SEARCH))) {
+ add_flag(o_ptr->art_flags, TR_SEARCH);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+
+ case BIAS_STR:
+ if (!(have_flag(o_ptr->art_flags, TR_STR))) {
+ add_flag(o_ptr->art_flags, TR_STR);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+
+ case BIAS_WIS:
+ if (!(have_flag(o_ptr->art_flags, TR_WIS))) {
+ add_flag(o_ptr->art_flags, TR_WIS);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+
+ case BIAS_INT:
+ if (!(have_flag(o_ptr->art_flags, TR_INT))) {
+ add_flag(o_ptr->art_flags, TR_INT);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+
+ case BIAS_DEX:
+ if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
+ add_flag(o_ptr->art_flags, TR_DEX);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+
+ case BIAS_CON:
+ if (!(have_flag(o_ptr->art_flags, TR_CON))) {
+ add_flag(o_ptr->art_flags, TR_CON);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+
+ case BIAS_CHR:
+ if (!(have_flag(o_ptr->art_flags, TR_CHR))) {
+ add_flag(o_ptr->art_flags, TR_CHR);
+ if (one_in_(2))
+ return;
+ }
+
+ break;
+ }
+
+ if ((o_ptr->artifact_bias == BIAS_MAGE || o_ptr->artifact_bias == BIAS_PRIESTLY) && (o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE)) {
+ if (!(have_flag(o_ptr->art_flags, TR_DEC_MANA)) && one_in_(3)) {
+ add_flag(o_ptr->art_flags, TR_DEC_MANA);
+ if (one_in_(2))
+ return;
+ }
+ }
+
+ switch (randint1(this_type)) {
+ case 1:
+ case 2:
+ add_flag(o_ptr->art_flags, TR_STR);
+ if (!o_ptr->artifact_bias && !one_in_(13))
+ o_ptr->artifact_bias = BIAS_STR;
+ else if (!o_ptr->artifact_bias && one_in_(7))
+ o_ptr->artifact_bias = BIAS_WARRIOR;
+ break;
+ case 3:
+ case 4:
+ add_flag(o_ptr->art_flags, TR_INT);
+ if (!o_ptr->artifact_bias && !one_in_(13))
+ o_ptr->artifact_bias = BIAS_INT;
+ else if (!o_ptr->artifact_bias && one_in_(7))
+ o_ptr->artifact_bias = BIAS_MAGE;
+ break;
+ case 5:
+ case 6:
+ add_flag(o_ptr->art_flags, TR_WIS);
+ if (!o_ptr->artifact_bias && !one_in_(13))
+ o_ptr->artifact_bias = BIAS_WIS;
+ else if (!o_ptr->artifact_bias && one_in_(7))
+ o_ptr->artifact_bias = BIAS_PRIESTLY;
+ break;
+ case 7:
+ case 8:
+ add_flag(o_ptr->art_flags, TR_DEX);
+ if (!o_ptr->artifact_bias && !one_in_(13))
+ o_ptr->artifact_bias = BIAS_DEX;
+ else if (!o_ptr->artifact_bias && one_in_(7))
+ o_ptr->artifact_bias = BIAS_ROGUE;
+ break;
+ case 9:
+ case 10:
+ add_flag(o_ptr->art_flags, TR_CON);
+ if (!o_ptr->artifact_bias && !one_in_(13))
+ o_ptr->artifact_bias = BIAS_CON;
+ else if (!o_ptr->artifact_bias && one_in_(9))
+ o_ptr->artifact_bias = BIAS_RANGER;
+ break;
+ case 11:
+ case 12:
+ add_flag(o_ptr->art_flags, TR_CHR);
+ if (!o_ptr->artifact_bias && !one_in_(13))
+ o_ptr->artifact_bias = BIAS_CHR;
+ break;
+ case 13:
+ case 14:
+ add_flag(o_ptr->art_flags, TR_STEALTH);
+ if (!o_ptr->artifact_bias && one_in_(3))
+ o_ptr->artifact_bias = BIAS_ROGUE;
+ break;
+ case 15:
+ case 16:
+ add_flag(o_ptr->art_flags, TR_SEARCH);
+ if (!o_ptr->artifact_bias && one_in_(9))
+ o_ptr->artifact_bias = BIAS_RANGER;
+ break;
+ case 17:
+ case 18:
+ add_flag(o_ptr->art_flags, TR_INFRA);
+ break;
+ case 19:
+ add_flag(o_ptr->art_flags, TR_SPEED);
+ if (!o_ptr->artifact_bias && one_in_(11))
+ o_ptr->artifact_bias = BIAS_ROGUE;
+ break;
+ case 20:
+ case 21:
+ add_flag(o_ptr->art_flags, TR_TUNNEL);
+ break;
+ case 22:
+ case 23:
+ if (o_ptr->tval == TV_BOW)
+ random_plus(o_ptr);
+ else {
+ add_flag(o_ptr->art_flags, TR_BLOWS);
+ if (!o_ptr->artifact_bias && one_in_(11))
+ o_ptr->artifact_bias = BIAS_WARRIOR;
+ }
+
+ break;
+ }
+}
--- /dev/null
+#pragma once
+
+#include "system/angband.h"
+
+typedef struct object_type object_type;
+void random_plus(object_type *o_ptr);
*/
#include "object-enchant/artifact.h"
+#include "artifact/random-art-pval-investor.h"
#include "art-definition/art-armor-types.h"
#include "art-definition/art-protector-types.h"
#include "art-definition/art-sword-types.h"
}
/*!
- * @brief ランダムアーティファクト生成中、対象のオブジェクトにpval能力を付加する。/ Add one pval on generation of randam artifact.
- * @details 優先的に付加されるpvalがランダムアーティファクトバイアスに依存して存在する。
- * 原則的候補は腕力、知力、賢さ、器用さ、耐久、魅力、探索、隠密、赤外線視力、加速。武器のみ採掘、追加攻撃も候補に入る。
- * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return なし
- */
-static void random_plus(object_type *o_ptr)
-{
- int this_type = (object_is_weapon_ammo(o_ptr) ? 23 : 19);
-
- switch (o_ptr->artifact_bias) {
- case BIAS_WARRIOR:
- if (!(have_flag(o_ptr->art_flags, TR_STR))) {
- add_flag(o_ptr->art_flags, TR_STR);
- if (one_in_(2))
- return;
- }
-
- if (!(have_flag(o_ptr->art_flags, TR_CON))) {
- add_flag(o_ptr->art_flags, TR_CON);
- if (one_in_(2))
- return;
- }
-
- if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
- add_flag(o_ptr->art_flags, TR_DEX);
- if (one_in_(2))
- return;
- }
-
- break;
-
- case BIAS_MAGE:
- if (!(have_flag(o_ptr->art_flags, TR_INT))) {
- add_flag(o_ptr->art_flags, TR_INT);
- if (one_in_(2))
- return;
- }
- if ((o_ptr->tval == TV_GLOVES) && !(have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY))) {
- add_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
- if (one_in_(2))
- return;
- }
-
- break;
-
- case BIAS_PRIESTLY:
- if (!(have_flag(o_ptr->art_flags, TR_WIS))) {
- add_flag(o_ptr->art_flags, TR_WIS);
- if (one_in_(2))
- return;
- }
-
- break;
-
- case BIAS_RANGER:
- if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
- add_flag(o_ptr->art_flags, TR_DEX);
- if (one_in_(2))
- return;
- }
-
- if (!(have_flag(o_ptr->art_flags, TR_CON))) {
- add_flag(o_ptr->art_flags, TR_CON);
- if (one_in_(2))
- return;
- }
-
- if (!(have_flag(o_ptr->art_flags, TR_STR))) {
- add_flag(o_ptr->art_flags, TR_STR);
- if (one_in_(2))
- return;
- }
-
- break;
-
- case BIAS_ROGUE:
- if (!(have_flag(o_ptr->art_flags, TR_STEALTH))) {
- add_flag(o_ptr->art_flags, TR_STEALTH);
- if (one_in_(2))
- return;
- }
- if (!(have_flag(o_ptr->art_flags, TR_SEARCH))) {
- add_flag(o_ptr->art_flags, TR_SEARCH);
- if (one_in_(2))
- return;
- }
-
- break;
-
- case BIAS_STR:
- if (!(have_flag(o_ptr->art_flags, TR_STR))) {
- add_flag(o_ptr->art_flags, TR_STR);
- if (one_in_(2))
- return;
- }
-
- break;
-
- case BIAS_WIS:
- if (!(have_flag(o_ptr->art_flags, TR_WIS))) {
- add_flag(o_ptr->art_flags, TR_WIS);
- if (one_in_(2))
- return;
- }
-
- break;
-
- case BIAS_INT:
- if (!(have_flag(o_ptr->art_flags, TR_INT))) {
- add_flag(o_ptr->art_flags, TR_INT);
- if (one_in_(2))
- return;
- }
-
- break;
-
- case BIAS_DEX:
- if (!(have_flag(o_ptr->art_flags, TR_DEX))) {
- add_flag(o_ptr->art_flags, TR_DEX);
- if (one_in_(2))
- return;
- }
-
- break;
-
- case BIAS_CON:
- if (!(have_flag(o_ptr->art_flags, TR_CON))) {
- add_flag(o_ptr->art_flags, TR_CON);
- if (one_in_(2))
- return;
- }
-
- break;
-
- case BIAS_CHR:
- if (!(have_flag(o_ptr->art_flags, TR_CHR))) {
- add_flag(o_ptr->art_flags, TR_CHR);
- if (one_in_(2))
- return;
- }
-
- break;
- }
-
- if ((o_ptr->artifact_bias == BIAS_MAGE || o_ptr->artifact_bias == BIAS_PRIESTLY) && (o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE)) {
- if (!(have_flag(o_ptr->art_flags, TR_DEC_MANA)) && one_in_(3)) {
- add_flag(o_ptr->art_flags, TR_DEC_MANA);
- if (one_in_(2))
- return;
- }
- }
-
- switch (randint1(this_type)) {
- case 1:
- case 2:
- add_flag(o_ptr->art_flags, TR_STR);
- if (!o_ptr->artifact_bias && !one_in_(13))
- o_ptr->artifact_bias = BIAS_STR;
- else if (!o_ptr->artifact_bias && one_in_(7))
- o_ptr->artifact_bias = BIAS_WARRIOR;
- break;
- case 3:
- case 4:
- add_flag(o_ptr->art_flags, TR_INT);
- if (!o_ptr->artifact_bias && !one_in_(13))
- o_ptr->artifact_bias = BIAS_INT;
- else if (!o_ptr->artifact_bias && one_in_(7))
- o_ptr->artifact_bias = BIAS_MAGE;
- break;
- case 5:
- case 6:
- add_flag(o_ptr->art_flags, TR_WIS);
- if (!o_ptr->artifact_bias && !one_in_(13))
- o_ptr->artifact_bias = BIAS_WIS;
- else if (!o_ptr->artifact_bias && one_in_(7))
- o_ptr->artifact_bias = BIAS_PRIESTLY;
- break;
- case 7:
- case 8:
- add_flag(o_ptr->art_flags, TR_DEX);
- if (!o_ptr->artifact_bias && !one_in_(13))
- o_ptr->artifact_bias = BIAS_DEX;
- else if (!o_ptr->artifact_bias && one_in_(7))
- o_ptr->artifact_bias = BIAS_ROGUE;
- break;
- case 9:
- case 10:
- add_flag(o_ptr->art_flags, TR_CON);
- if (!o_ptr->artifact_bias && !one_in_(13))
- o_ptr->artifact_bias = BIAS_CON;
- else if (!o_ptr->artifact_bias && one_in_(9))
- o_ptr->artifact_bias = BIAS_RANGER;
- break;
- case 11:
- case 12:
- add_flag(o_ptr->art_flags, TR_CHR);
- if (!o_ptr->artifact_bias && !one_in_(13))
- o_ptr->artifact_bias = BIAS_CHR;
- break;
- case 13:
- case 14:
- add_flag(o_ptr->art_flags, TR_STEALTH);
- if (!o_ptr->artifact_bias && one_in_(3))
- o_ptr->artifact_bias = BIAS_ROGUE;
- break;
- case 15:
- case 16:
- add_flag(o_ptr->art_flags, TR_SEARCH);
- if (!o_ptr->artifact_bias && one_in_(9))
- o_ptr->artifact_bias = BIAS_RANGER;
- break;
- case 17:
- case 18:
- add_flag(o_ptr->art_flags, TR_INFRA);
- break;
- case 19:
- add_flag(o_ptr->art_flags, TR_SPEED);
- if (!o_ptr->artifact_bias && one_in_(11))
- o_ptr->artifact_bias = BIAS_ROGUE;
- break;
- case 20:
- case 21:
- add_flag(o_ptr->art_flags, TR_TUNNEL);
- break;
- case 22:
- case 23:
- if (o_ptr->tval == TV_BOW)
- random_plus(o_ptr);
- else {
- add_flag(o_ptr->art_flags, TR_BLOWS);
- if (!o_ptr->artifact_bias && one_in_(11))
- o_ptr->artifact_bias = BIAS_WARRIOR;
- }
-
- break;
- }
-}
-
-/*!
* @brief ランダムアーティファクト生成中、対象のオブジェクトに耐性を付加する。/ Add one resistance on generation of randam artifact.
* @details 優先的に付加される耐性がランダムアーティファクトバイアスに依存して存在する。
* 原則的候補は火炎、冷気、電撃、酸(以上免疫の可能性もあり)、