X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fchest.c;h=6499774e3f5f722b627790efb80b0283ce2d185b;hb=refs%2Fheads%2Fmaster;hp=36f41c9552cdbb6da7d51b43da6772e4cb7d3936;hpb=fe7ebd92248d35d52920fb7d1dc8566396fe88a8;p=hengband%2Fhengband.git diff --git a/src/chest.c b/src/chest.c deleted file mode 100644 index 36f41c955..000000000 --- a/src/chest.c +++ /dev/null @@ -1,335 +0,0 @@ - -#include "angband.h" -#include "util.h" - -#include "spells.h" -#include "spells-summon.h" -#include "floor.h" -#include "trap.h" -#include "player-status.h" -#include "player-damage.h" -#include "player-class.h" -#include "player-effects.h" -#include "grid.h" -#include "realm-song.h" - -/*! -* @brief ç®±ããã¢ã¤ãã ãå¼ãåºã / -* Allocates objects upon opening a chest -BEN- -* @param scatter TRUEãªãã°ãã©ããã«ããã¢ã¤ãã ã®æ¡æ£å¦ç -* @param y ç®±ã®åå¨ãããã¹ã®Yåº§æ¨ -* @param x ç®±ã®åå¨ãããã¹ã®Xåº§æ¨ -* @param o_idx ç®±ã®ãªãã¸ã§ã¯ãID -* @return ãªã -* @details -*
-* Disperse treasures from the given chest, centered at (x,y). -* -* Small chests often contain "gold", while Large chests always contain -* items. Wooden chests contain 2 items, Iron chests contain 4 items, -* and Steel chests contain 6 items. The "value" of the items in a -* chest is based on the "power" of the chest, which is in turn based -* on the level on which the chest is generated. -*-*/ -void chest_death(player_type *owner_ptr, bool scatter, POSITION y, POSITION x, OBJECT_IDX o_idx) -{ - int number; - - bool small; - BIT_FLAGS mode = AM_GOOD | AM_FORBID_CHEST; - - object_type forge; - object_type *q_ptr; - - floor_type *floor_ptr = owner_ptr->current_floor_ptr; - object_type *o_ptr = &floor_ptr->o_list[o_idx]; - - /* Small chests often hold "gold" */ - small = (o_ptr->sval < SV_CHEST_MIN_LARGE); - - /* Determine how much to drop (see above) */ - number = (o_ptr->sval % SV_CHEST_MIN_LARGE) * 2; - - if (o_ptr->sval == SV_CHEST_KANDUME) - { - number = 5; - small = FALSE; - mode |= AM_GREAT; - floor_ptr->object_level = o_ptr->xtra3; - } - else - { - /* Determine the "value" of the items */ - floor_ptr->object_level = ABS(o_ptr->pval) + 10; - } - - /* Zero pval means empty chest */ - if (!o_ptr->pval) number = 0; - - - /* Drop some objects (non-chests) */ - for (; number > 0; --number) - { - q_ptr = &forge; - object_wipe(q_ptr); - - /* Small chests often drop gold */ - if (small && (randint0(100) < 25)) - { - /* Make some gold */ - if (!make_gold(floor_ptr, q_ptr)) continue; - } - - /* Otherwise drop an item */ - else - { - /* Make a good object */ - if (!make_object(owner_ptr, q_ptr, mode)) continue; - } - - /* If chest scatters its contents, pick any floor square. */ - if (scatter) - { - int i; - for (i = 0; i < 200; i++) - { - /* Pick a totally random spot. */ - y = randint0(MAX_HGT); - x = randint0(MAX_WID); - - /* Must be an empty floor. */ - if (!cave_empty_bold(floor_ptr, y, x)) continue; - - /* Place the object there. */ - (void)drop_near(owner_ptr, q_ptr, -1, y, x); - - /* Done. */ - break; - } - } - /* Normally, drop object near the chest. */ - else (void)drop_near(owner_ptr, q_ptr, -1, y, x); - } - - /* Reset the object level */ - floor_ptr->object_level = floor_ptr->base_level; - - /* Empty */ - o_ptr->pval = 0; - - /* Known */ - object_known(o_ptr); -} - - -/*! -* @brief ç®±ã®ãã©ããå¦ç / -* Chests have traps too. -* @param y ç®±ã®åå¨ãããã¹ã®Yåº§æ¨ -* @param x ç®±ã®åå¨ãããã¹ã®Xåº§æ¨ -* @param o_idx ç®±ã®ãªãã¸ã§ã¯ãID -* @return ãªã -* @details -*
-* Exploding chest destroys contents (and traps). -* Note that the chest itself is never destroyed. -*-*/ -void chest_trap(player_type *target_ptr, POSITION y, POSITION x, OBJECT_IDX o_idx) -{ - int i, trap; - - object_type *o_ptr = &target_ptr->current_floor_ptr->o_list[o_idx]; - - int mon_level = o_ptr->xtra3; - - /* Ignore disarmed chests */ - if (o_ptr->pval <= 0) return; - - /* Obtain the traps */ - trap = chest_traps[o_ptr->pval]; - - /* Lose strength */ - if (trap & (CHEST_LOSE_STR)) - { - msg_print(_("ä»æãããã¦ããå°ããªéã«åºããã¦ãã¾ã£ãï¼", "A small needle has pricked you!")); - take_hit(target_ptr, DAMAGE_NOESCAPE, damroll(1, 4), _("æ¯é", "a poison needle"), -1); - (void)do_dec_stat(target_ptr, A_STR); - } - - /* Lose constitution */ - if (trap & (CHEST_LOSE_CON)) - { - msg_print(_("ä»æãããã¦ããå°ããªéã«åºããã¦ãã¾ã£ãï¼", "A small needle has pricked you!")); - take_hit(target_ptr, DAMAGE_NOESCAPE, damroll(1, 4), _("æ¯é", "a poison needle"), -1); - (void)do_dec_stat(target_ptr, A_CON); - } - - /* Poison */ - if (trap & (CHEST_POISON)) - { - msg_print(_("çªå¦å¹ãåºããç·è²ã®ã¬ã¹ã«å ã¿è¾¼ã¾ããï¼", "A puff of green gas surrounds you!")); - if (!(target_ptr->resist_pois || is_oppose_pois(target_ptr))) - { - (void)set_poisoned(target_ptr, target_ptr->poisoned + 10 + randint1(20)); - } - } - - /* Paralyze */ - if (trap & (CHEST_PARALYZE)) - { - msg_print(_("çªå¦å¹ãåºããé»è²ãã¬ã¹ã«å ã¿è¾¼ã¾ããï¼", "A puff of yellow gas surrounds you!")); - if (!target_ptr->free_act) - { - (void)set_paralyzed(target_ptr, target_ptr->paralyzed + 10 + randint1(20)); - } - } - - /* Summon monsters */ - if (trap & (CHEST_SUMMON)) - { - int num = 2 + randint1(3); - msg_print(_("çªå¦å¹ãåºããç ã«å ã¿è¾¼ã¾ããï¼", "You are enveloped in a cloud of smoke!")); - for (i = 0; i < num; i++) - { - if (randint1(100)