OSDN Git Service

[Fix] セクシースペルマスターの初期武器
[hengbandforosx/hengbandosx.git] / src / birth / inventory-initializer.c
index f93da6e..84c680f 100644 (file)
@@ -1,13 +1,33 @@
-#include "system/angband.h"
-#include "birth/inventory-initializer.h"
-#include "monster/monster-race-hook.h"
-#include "player/player-personalities-table.h"
+#include "birth/inventory-initializer.h"
+#include "autopick/autopick.h"
 #include "birth/initial-equipments-table.h"
-#include "object/item-apply-magic.h"
-#include "object/object-ego.h"
+#include "floor/floor-object.h"
+#include "inventory/inventory-object.h"
+#include "inventory/inventory-slot-types.h"
+#include "monster-race/monster-race-hook.h"
+#include "monster/monster-list.h"
+#include "monster/monster-util.h"
+#include "object-enchant/apply-magic.h"
+#include "object-enchant/item-apply-magic.h"
+#include "object-enchant/object-ego.h"
+#include "object/object-generator.h"
+#include "object/object-info.h"
+#include "object/object-kind-hook.h"
 #include "object/object-kind.h"
-#include "autopick/autopick.h"
-#include "player/player-races-table.h"
+#include "perception/object-perception.h"
+#include "player/player-personalities-types.h"
+#include "player/player-race-types.h"
+#include "realm/realm-types.h"
+#include "sv-definition/sv-bow-types.h"
+#include "sv-definition/sv-food-types.h"
+#include "sv-definition/sv-lite-types.h"
+#include "sv-definition/sv-other-types.h"
+#include "sv-definition/sv-potion-types.h"
+#include "sv-definition/sv-ring-types.h"
+#include "sv-definition/sv-scroll-types.h"
+#include "sv-definition/sv-staff-types.h"
+#include "sv-definition/sv-wand-types.h"
+#include "sv-definition/sv-weapon-types.h"
 
 /*!
  * @brief 所持状態にあるアイテムの中から一部枠の装備可能なものを装備させる。
@@ -23,7 +43,7 @@ void wield_all(player_type *creature_ptr)
             continue;
 
         int slot = wield_slot(creature_ptr, o_ptr);
-        if (slot < INVEN_RARM)
+        if (slot < INVEN_MAIN_HAND)
             continue;
         if (slot == INVEN_LITE)
             continue;
@@ -45,7 +65,6 @@ void wield_all(player_type *creature_ptr)
 
         o_ptr = &creature_ptr->inventory_list[slot];
         object_copy(o_ptr, i_ptr);
-        creature_ptr->total_weight += i_ptr->weight;
         creature_ptr->equip_cnt++;
     }
 }
@@ -60,7 +79,7 @@ void add_outfit(player_type *creature_ptr, object_type *o_ptr)
 {
     object_aware(creature_ptr, o_ptr);
     object_known(o_ptr);
-    s16b slot = inven_carry(creature_ptr, o_ptr);
+    s16b slot = store_item_to_inventory(creature_ptr, o_ptr);
     autopick_alter_item(creature_ptr, slot, FALSE);
     wield_all(creature_ptr);
 }
@@ -76,8 +95,8 @@ static void decide_initial_items(player_type *creature_ptr, object_type *q_ptr)
         /* Demon can drain vitality from humanoid corpse */
         get_mon_num_prep(creature_ptr, monster_hook_human, NULL);
         for (int i = rand_range(3, 4); i > 0; i--) {
-            object_prep(q_ptr, lookup_kind(TV_CORPSE, SV_CORPSE));
-            q_ptr->pval = get_mon_num(creature_ptr, 2, 0);
+            object_prep(creature_ptr, q_ptr, lookup_kind(TV_CORPSE, SV_CORPSE));
+            q_ptr->pval = get_mon_num(creature_ptr, 0, 2, 0);
             if (q_ptr->pval) {
                 q_ptr->number = 1;
                 add_outfit(creature_ptr, q_ptr);
@@ -90,26 +109,26 @@ static void decide_initial_items(player_type *creature_ptr, object_type *q_ptr)
     case RACE_ZOMBIE:
     case RACE_SPECTRE:
         /* Staff (of Nothing) */
-        object_prep(q_ptr, lookup_kind(TV_STAFF, SV_STAFF_NOTHING));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_STAFF, SV_STAFF_NOTHING));
         q_ptr->number = 1;
         add_outfit(creature_ptr, q_ptr);
         break;
     case RACE_ENT:
         /* Potions of Water */
-        object_prep(q_ptr, lookup_kind(TV_POTION, SV_POTION_WATER));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_POTION, SV_POTION_WATER));
         q_ptr->number = (ITEM_NUMBER)rand_range(15, 23);
         add_outfit(creature_ptr, q_ptr);
         break;
     case RACE_ANDROID:
         /* Flasks of oil */
-        object_prep(q_ptr, lookup_kind(TV_FLASK, SV_ANY));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_FLASK, SV_ANY));
         apply_magic(creature_ptr, q_ptr, 1, AM_NO_FIXED_ART);
         q_ptr->number = (ITEM_NUMBER)rand_range(7, 12);
         add_outfit(creature_ptr, q_ptr);
         break;
     default:
         /* Food rations */
-        object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
         q_ptr->number = (ITEM_NUMBER)rand_range(3, 7);
         add_outfit(creature_ptr, q_ptr);
     }
@@ -130,11 +149,11 @@ void player_outfit(player_type *creature_ptr)
     q_ptr = &forge;
 
     if ((creature_ptr->prace == RACE_VAMPIRE) && (creature_ptr->pclass != CLASS_NINJA)) {
-        object_prep(q_ptr, lookup_kind(TV_SCROLL, SV_SCROLL_DARKNESS));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_SCROLL, SV_SCROLL_DARKNESS));
         q_ptr->number = (ITEM_NUMBER)rand_range(2, 5);
         add_outfit(creature_ptr, q_ptr);
     } else if (creature_ptr->pclass != CLASS_NINJA) {
-        object_prep(q_ptr, lookup_kind(TV_LITE, SV_LITE_TORCH));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_LITE, SV_LITE_TORCH));
         q_ptr->number = (ITEM_NUMBER)rand_range(3, 7);
         q_ptr->xtra4 = rand_range(3, 7) * 500;
 
@@ -143,80 +162,82 @@ void player_outfit(player_type *creature_ptr)
 
     q_ptr = &forge;
     if (creature_ptr->prace == RACE_MERFOLK) {
-        object_prep(q_ptr, lookup_kind(TV_RING, SV_RING_LEVITATION_FALL));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_RING, SV_RING_LEVITATION_FALL));
         q_ptr->number = 1;
         add_outfit(creature_ptr, q_ptr);
     }
 
     if ((creature_ptr->pclass == CLASS_RANGER) || (creature_ptr->pclass == CLASS_CAVALRY)) {
-        object_prep(q_ptr, lookup_kind(TV_ARROW, SV_AMMO_NORMAL));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_ARROW, SV_AMMO_NORMAL));
         q_ptr->number = (byte)rand_range(15, 20);
         add_outfit(creature_ptr, q_ptr);
     }
 
     if (creature_ptr->pclass == CLASS_RANGER) {
-        object_prep(q_ptr, lookup_kind(TV_BOW, SV_SHORT_BOW));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_BOW, SV_SHORT_BOW));
         add_outfit(creature_ptr, q_ptr);
     } else if (creature_ptr->pclass == CLASS_ARCHER) {
-        object_prep(q_ptr, lookup_kind(TV_ARROW, SV_AMMO_NORMAL));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_ARROW, SV_AMMO_NORMAL));
         q_ptr->number = (ITEM_NUMBER)rand_range(15, 20);
         add_outfit(creature_ptr, q_ptr);
     } else if (creature_ptr->pclass == CLASS_HIGH_MAGE) {
-        object_prep(q_ptr, lookup_kind(TV_WAND, SV_WAND_MAGIC_MISSILE));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_WAND, SV_WAND_MAGIC_MISSILE));
         q_ptr->number = 1;
         q_ptr->pval = (PARAMETER_VALUE)rand_range(25, 30);
         add_outfit(creature_ptr, q_ptr);
     } else if (creature_ptr->pclass == CLASS_SORCERER) {
         tval_type book_tval;
         for (book_tval = TV_LIFE_BOOK; book_tval <= TV_LIFE_BOOK + MAX_MAGIC - 1; book_tval++) {
-            object_prep(q_ptr, lookup_kind(book_tval, 0));
+            object_prep(creature_ptr, q_ptr, lookup_kind(book_tval, 0));
             q_ptr->number = 1;
             add_outfit(creature_ptr, q_ptr);
         }
     } else if (creature_ptr->pclass == CLASS_TOURIST) {
         if (creature_ptr->pseikaku != PERSONALITY_SEXY) {
-            object_prep(q_ptr, lookup_kind(TV_SHOT, SV_AMMO_LIGHT));
+            object_prep(creature_ptr, q_ptr, lookup_kind(TV_SHOT, SV_AMMO_LIGHT));
             q_ptr->number = rand_range(15, 20);
             add_outfit(creature_ptr, q_ptr);
         }
 
-        object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_BISCUIT));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_FOOD, SV_FOOD_BISCUIT));
         q_ptr->number = rand_range(2, 4);
 
         add_outfit(creature_ptr, q_ptr);
 
-        object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_WAYBREAD));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_FOOD, SV_FOOD_WAYBREAD));
         q_ptr->number = rand_range(2, 4);
 
         add_outfit(creature_ptr, q_ptr);
 
-        object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_JERKY));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_FOOD, SV_FOOD_JERKY));
         q_ptr->number = rand_range(1, 3);
 
         add_outfit(creature_ptr, q_ptr);
 
-        object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_PINT_OF_ALE));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_FOOD, SV_FOOD_PINT_OF_ALE));
         q_ptr->number = rand_range(2, 4);
 
         add_outfit(creature_ptr, q_ptr);
 
-        object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_PINT_OF_WINE));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_FOOD, SV_FOOD_PINT_OF_WINE));
         q_ptr->number = rand_range(2, 4);
 
         add_outfit(creature_ptr, q_ptr);
     } else if (creature_ptr->pclass == CLASS_NINJA) {
-        object_prep(q_ptr, lookup_kind(TV_SPIKE, 0));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_SPIKE, 0));
         q_ptr->number = rand_range(15, 20);
         add_outfit(creature_ptr, q_ptr);
     } else if (creature_ptr->pclass == CLASS_SNIPER) {
-        object_prep(q_ptr, lookup_kind(TV_BOLT, SV_AMMO_NORMAL));
+        object_prep(creature_ptr, q_ptr, lookup_kind(TV_BOLT, SV_AMMO_NORMAL));
         q_ptr->number = rand_range(15, 20);
         add_outfit(creature_ptr, q_ptr);
     }
 
-    if (creature_ptr->pseikaku == PERSONALITY_SEXY) {
-        player_init[creature_ptr->pclass][2][0] = TV_HAFTED;
-        player_init[creature_ptr->pclass][2][1] = SV_WHIP;
+    if (creature_ptr->pclass != CLASS_SORCERER) {
+        if (creature_ptr->pseikaku == PERSONALITY_SEXY) {
+            player_init[creature_ptr->pclass][2][0] = TV_HAFTED;
+            player_init[creature_ptr->pclass][2][1] = SV_WHIP;
+        }
     }
 
     for (int i = 0; i < 3; i++) {
@@ -237,8 +258,9 @@ void player_outfit(player_type *creature_ptr)
         }
 
         q_ptr = &forge;
-        object_prep(q_ptr, lookup_kind(tv, sv));
-        if ((tv == TV_SWORD || tv == TV_HAFTED) && (creature_ptr->pclass == CLASS_ROGUE && creature_ptr->realm1 == REALM_DEATH)) /* Only assassins get a poisoned weapon */
+        object_prep(creature_ptr, q_ptr, lookup_kind(tv, sv));
+        if ((tv == TV_SWORD || tv == TV_HAFTED)
+            && (creature_ptr->pclass == CLASS_ROGUE && creature_ptr->realm1 == REALM_DEATH)) /* Only assassins get a poisoned weapon */
             q_ptr->name2 = EGO_BRAND_POIS;
 
         add_outfit(creature_ptr, q_ptr);