OSDN Git Service

Merge remote-tracking branch 'remotes/origin/MERFOLK'
authorDeskull <deskull@users.sourceforge.jp>
Mon, 14 Jan 2019 12:46:46 +0000 (21:46 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Mon, 14 Jan 2019 12:46:46 +0000 (21:46 +0900)
# Conflicts:
# src/cmd-pet.c
# src/cmd1.c

1  2 
src/birth.c
src/cmd-pet.c
src/cmd1.c
src/defines.h
src/dungeon.c
src/init1.c
src/spells1.c
src/tables.c
src/types.h
src/xtra1.c

diff --cc src/birth.c
Simple merge
diff --cc src/cmd-pet.c
@@@ -1145,12 -1146,11 +1145,11 @@@ bool rakuba(HIT_POINT dam, bool force
        p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
        p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
  
 -      calc_bonuses();
 +      p_ptr->update |= (PU_BONUS | PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_MONSTERS);
 +      handle_stuff();
 +
  
 -      p_ptr->update |= (PU_BONUS);
 -      p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_MONSTERS);
        p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
        p_ptr->redraw |= (PR_EXTRA);
  
        /* Update health track of mount */
diff --cc src/cmd1.c
@@@ -899,6 -908,15 +900,14 @@@ bool move_player_effect(POSITION ny, PO
                        msg_print(_("ここでは素早く動けない。", "You cannot run in here."));
                        set_action(ACTION_NONE);
                }
 -
+               if (p_ptr->prace == RACE_MERFOLK)
+               {
+                       if(have_flag(f_ptr->flags, FF_WATER) ^ have_flag(of_ptr->flags, FF_WATER))
+                       {
+                               p_ptr->update |= PU_BONUS;
 -                              update_stuff();
++                              update_creature(p_ptr);
+                       }
+               }
        }
  
        if (mpe_mode & MPE_ENERGY_USE)
diff --cc src/defines.h
Simple merge
diff --cc src/dungeon.c
@@@ -1495,162 -1502,8 +1495,162 @@@ static void process_world_aux_hp_and_sp
                }
        }
  
 +      if (have_flag(f_ptr->flags, FF_COLD_PUDDLE) && !IS_INVULN() && !p_ptr->immune_cold)
 +      {
 +              int damage = 0;
 +
 +              if (have_flag(f_ptr->flags, FF_DEEP))
 +              {
 +                      damage = 6000 + randint0(4000);
 +              }
 +              else if (!p_ptr->levitation)
 +              {
 +                      damage = 3000 + randint0(2000);
 +              }
 +
 +              if (damage)
 +              {
 +                      if (p_ptr->resist_cold) damage = damage / 3;
 +                      if (IS_OPPOSE_COLD()) damage = damage / 3;
 +                      if (p_ptr->levitation) damage = damage / 5;
 +
 +                      damage = damage / 100 + (randint0(100) < (damage % 100));
 +
 +                      if (p_ptr->levitation)
 +                      {
 +                              msg_print(_("冷気に覆われた!", "The cold engulfs you!"));
 +                              take_hit(DAMAGE_NOESCAPE, damage, format(_("%sの上に浮遊したダメージ", "flying over %s"),
 +                                      f_name + f_info[get_feat_mimic(&cave[p_ptr->y][p_ptr->x])].name), -1);
 +                      }
 +                      else
 +                      {
 +                              concptr name = f_name + f_info[get_feat_mimic(&cave[p_ptr->y][p_ptr->x])].name;
 +                              msg_format(_("%sに凍えた!", "The %s frostbites you!"), name);
 +                              take_hit(DAMAGE_NOESCAPE, damage, name, -1);
 +                      }
 +
 +                      cave_no_regen = TRUE;
 +              }
 +      }
 +
 +      if (have_flag(f_ptr->flags, FF_ELEC_PUDDLE) && !IS_INVULN() && !p_ptr->immune_elec)
 +      {
 +              int damage = 0;
 +
 +              if (have_flag(f_ptr->flags, FF_DEEP))
 +              {
 +                      damage = 6000 + randint0(4000);
 +              }
 +              else if (!p_ptr->levitation)
 +              {
 +                      damage = 3000 + randint0(2000);
 +              }
 +
 +              if (damage)
 +              {
 +                      if (p_ptr->resist_elec) damage = damage / 3;
 +                      if (IS_OPPOSE_ELEC()) damage = damage / 3;
 +                      if (p_ptr->levitation) damage = damage / 5;
 +
 +                      damage = damage / 100 + (randint0(100) < (damage % 100));
 +
 +                      if (p_ptr->levitation)
 +                      {
 +                              msg_print(_("電撃を受けた!", "The electric shocks you!"));
 +                              take_hit(DAMAGE_NOESCAPE, damage, format(_("%sの上に浮遊したダメージ", "flying over %s"),
 +                                      f_name + f_info[get_feat_mimic(&cave[p_ptr->y][p_ptr->x])].name), -1);
 +                      }
 +                      else
 +                      {
 +                              concptr name = f_name + f_info[get_feat_mimic(&cave[p_ptr->y][p_ptr->x])].name;
 +                              msg_format(_("%sに感電した!", "The %s shocks you!"), name);
 +                              take_hit(DAMAGE_NOESCAPE, damage, name, -1);
 +                      }
 +
 +                      cave_no_regen = TRUE;
 +              }
 +      }
 +
 +      if (have_flag(f_ptr->flags, FF_ACID_PUDDLE) && !IS_INVULN() && !p_ptr->immune_acid)
 +      {
 +              int damage = 0;
 +
 +              if (have_flag(f_ptr->flags, FF_DEEP))
 +              {
 +                      damage = 6000 + randint0(4000);
 +              }
 +              else if (!p_ptr->levitation)
 +              {
 +                      damage = 3000 + randint0(2000);
 +              }
 +
 +              if (damage)
 +              {
 +                      if (p_ptr->resist_acid) damage = damage / 3;
 +                      if (IS_OPPOSE_ACID()) damage = damage / 3;
 +                      if (p_ptr->levitation) damage = damage / 5;
 +
 +                      damage = damage / 100 + (randint0(100) < (damage % 100));
 +
 +                      if (p_ptr->levitation)
 +                      {
 +                              msg_print(_("酸が飛び散った!", "The acid melt you!"));
 +                              take_hit(DAMAGE_NOESCAPE, damage, format(_("%sの上に浮遊したダメージ", "flying over %s"),
 +                                      f_name + f_info[get_feat_mimic(&cave[p_ptr->y][p_ptr->x])].name), -1);
 +                      }
 +                      else
 +                      {
 +                              concptr name = f_name + f_info[get_feat_mimic(&cave[p_ptr->y][p_ptr->x])].name;
 +                              msg_format(_("%sに溶かされた!", "The %s melts you!"), name);
 +                              take_hit(DAMAGE_NOESCAPE, damage, name, -1);
 +                      }
 +
 +                      cave_no_regen = TRUE;
 +              }
 +      }
 +
 +      if (have_flag(f_ptr->flags, FF_POISON_PUDDLE) && !IS_INVULN())
 +      {
 +              int damage = 0;
 +
 +              if (have_flag(f_ptr->flags, FF_DEEP))
 +              {
 +                      damage = 6000 + randint0(4000);
 +              }
 +              else if (!p_ptr->levitation)
 +              {
 +                      damage = 3000 + randint0(2000);
 +              }
 +
 +              if (damage)
 +              {
 +                      if (p_ptr->resist_pois) damage = damage / 3;
 +                      if (IS_OPPOSE_POIS()) damage = damage / 3;
 +                      if (p_ptr->levitation) damage = damage / 5;
 +
 +                      damage = damage / 100 + (randint0(100) < (damage % 100));
 +
 +                      if (p_ptr->levitation)
 +                      {
 +                              msg_print(_("毒気を吸い込んだ!", "The gas poisons you!"));
 +                              take_hit(DAMAGE_NOESCAPE, damage, format(_("%sの上に浮遊したダメージ", "flying over %s"),
 +                                      f_name + f_info[get_feat_mimic(&cave[p_ptr->y][p_ptr->x])].name), -1);
 +                              if (p_ptr->resist_pois) (void)set_poisoned(p_ptr->poisoned + 1);
 +                      }
 +                      else
 +                      {
 +                              concptr name = f_name + f_info[get_feat_mimic(&cave[p_ptr->y][p_ptr->x])].name;
 +                              msg_format(_("%sに毒された!", "The %s poisons you!"), name);
 +                              take_hit(DAMAGE_NOESCAPE, damage, name, -1);
 +                              if (p_ptr->resist_pois) (void)set_poisoned(p_ptr->poisoned + 3);
 +                      }
 +
 +                      cave_no_regen = TRUE;
 +              }
 +      }
 +
        if (have_flag(f_ptr->flags, FF_WATER) && have_flag(f_ptr->flags, FF_DEEP) &&
-           !p_ptr->levitation && !p_ptr->can_swim)
+           !p_ptr->levitation && !p_ptr->can_swim && !p_ptr->resist_water)
        {
                if (p_ptr->total_weight > weight_limit())
                {
diff --cc src/init1.c
Simple merge
diff --cc src/spells1.c
Simple merge
diff --cc src/tables.c
Simple merge
diff --cc src/types.h
Simple merge
diff --cc src/xtra1.c
Simple merge