OSDN Git Service

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

lib/edit/s_info.txt
src/cmd4.c
src/defines.h
src/melee1.c
src/xtra1.c

index 3a7b039..09532fb 100644 (file)
@@ -335,6 +335,7 @@ W:4:63:1:4  #
 S:0:0:8000  # SUDE
 S:1:4000:8000  # NITOURYU
 S:2:0:5000  # RIDING
+S:3:4000:8000  # SHIELD
 
 ### MAGE ###
 N:1
@@ -667,6 +668,7 @@ W:4:63:0:1  #
 S:0:0:4000  # SUDE
 S:1:0:0  # NITOURYU
 S:2:0:0  # RIDING
+S:3:0:0  # SHIELD
 
 ### PRIEST ###
 N:2
@@ -999,6 +1001,7 @@ W:4:63:0:1  #
 S:0:0:4000  # SUDE
 S:1:0:4000  # NITOURYU
 S:2:0:500  # RIDING
+S:3:2000:6000  # SHIELD
 
 ### ROGUE ###
 N:3
@@ -1331,6 +1334,7 @@ W:4:63:0:2  #
 S:0:0:8000  # SUDE
 S:1:4000:8000  # NITOURYU
 S:2:0:2000  # RIDING
+S:3:2000:6000  # SHIELD
 
 ### RANGER ###
 N:4
@@ -1663,6 +1667,7 @@ W:4:63:0:2  #
 S:0:0:6000  # SUDE
 S:1:0:6000  # NITOURYU
 S:2:0:5000  # RIDING
+S:3:0:2000  # SHIELD
 
 ### PALADIN ###
 N:5
@@ -1995,6 +2000,7 @@ W:4:63:1:4  #
 S:0:0:4000  # SUDE
 S:1:0:7000  # NITOURYU
 S:2:0:5000  # RIDING
+S:3:2000:8000  # SHIELD
 
 ### WARRIOR_MAGE ###
 N:6
@@ -2327,6 +2333,7 @@ W:4:63:0:2  #
 S:0:0:4000  # SUDE
 S:1:0:6000  # NITOURYU
 S:2:0:2000  # RIDING
+S:3:1000:7000  # SHIELD
 
 ### CHAOS_WARRIOR ###
 N:7
@@ -2659,6 +2666,7 @@ W:4:63:0:3  #
 S:0:0:7000  # SUDE
 S:1:0:7000  # NITOURYU
 S:2:0:2000  # RIDING
+S:3:0:4000  # SHIELD
 
 ### MONK ###
 N:8
@@ -2991,6 +2999,7 @@ W:4:63:0:0  #
 S:0:4000:8000  # SUDE
 S:1:0:0  # NITOURYU
 S:2:0:0  # RIDING
+S:3:0:0  # SHIELD
 
 ### MINDCRAFTER ###
 N:9
@@ -3323,6 +3332,7 @@ W:4:63:0:2  #
 S:0:0:4000  # SUDE
 S:1:0:4000  # NITOURYU
 S:2:0:500  # RIDING
+S:3:0:4000  # SHIELD
 
 ### HIGH_MAGE ###
 N:10
@@ -3655,6 +3665,7 @@ W:4:63:0:1  #
 S:0:0:4000  # SUDE
 S:1:0:0  # NITOURYU
 S:2:0:0  # RIDING
+S:3:0:0  # SHIELD
 
 ### TOURIST ###
 N:11
@@ -3987,6 +3998,7 @@ W:4:63:0:4  #
 S:0:0:8000  # SUDE
 S:1:0:8000  # NITOURYU
 S:2:0:5000  # RIDING
+S:3:0:8000  # SHIELD
 
 ### IMITATOR ###
 N:12
@@ -4319,6 +4331,7 @@ W:4:63:0:3  #
 S:0:0:7000  # SUDE
 S:1:0:7000  # NITOURYU
 S:2:0:2000  # RIDING
+S:3:0:4000  # SHIELD
 
 ### BEASTMASTER ###
 N:13
@@ -4651,6 +4664,7 @@ W:4:63:0:4  #
 S:0:0:6000  # SUDE
 S:1:0:6000  # NITOURYU
 S:2:500:8000  # RIDING
+S:3:0:4000  # SHIELD
 
 ### SORCERER ###
 N:14
@@ -4983,6 +4997,7 @@ W:4:63:0:0  #
 S:0:0:0  # SUDE
 S:1:0:0  # NITOURYU
 S:2:0:0  # RIDING
+S:3:0:0  # SHIELD
 
 ### ARCHER ###
 N:15
@@ -5315,6 +5330,7 @@ W:4:63:0:2  #
 S:0:0:4000  # SUDE
 S:1:0:4000  # NITOURYU
 S:2:0:2000  # RIDING
+S:3:0:2000  # SHIELD
 
 ### MAGIC_EATER ###
 N:16
@@ -5647,6 +5663,7 @@ W:4:63:0:1  #
 S:0:0:4000  # SUDE
 S:1:0:4000  # NITOURYU
 S:2:0:0  # RIDING
+S:3:0:0  # SHIELD
 
 ### HARPER ###
 N:17
@@ -5979,6 +5996,7 @@ W:4:63:0:2  #
 S:0:0:4000  # SUDE
 S:1:0:4000  # NITOURYU
 S:2:0:500  # RIDING
+S:3:0:0  # SHIELD
 
 ### RED_MAGE ###
 N:18
@@ -6311,6 +6329,7 @@ W:4:63:0:2  #
 S:0:0:4000  # SUDE
 S:1:0:4000  # NITOURYU
 S:2:0:2000  # RIDING
+S:3:0:6000  # SHIELD
 
 ### SAMURAI ###
 N:19
@@ -6643,6 +6662,7 @@ W:4:63:1:4  #
 S:0:0:4000  # SUDE
 S:1:4000:8000  # NITOURYU
 S:2:0:2000  # RIDING
+S:3:0:2000  # SHIELD
 
 ### ForceTrainer ###
 N:20
@@ -6975,6 +6995,7 @@ W:4:63:0:0  #
 S:0:4000:8000  # SUDE
 S:1:0:0  # NITOURYU
 S:2:0:0  # RIDING
+S:3:0:0  # SHIELD
 
 ### BLUE MAGE ###
 N:21
@@ -7307,6 +7328,7 @@ W:4:63:0:1  #
 S:0:0:4000  # SUDE
 S:1:0:0  # NITOURYU
 S:2:0:0  # RIDING
+S:3:0:2000  # SHIELD
 
 ### KIHEI ###
 N:22
@@ -7639,6 +7661,7 @@ W:4:63:0:4  #
 S:0:0:4000  # SUDE
 S:1:0:4000  # NITOURYU
 S:2:500:8000  # RIDING
+S:3:0:8000  # SHIELD
 
 ### BERSERKER ###
 N:23
@@ -7971,6 +7994,7 @@ W:4:63:1:4  #
 S:0:4000:8000  # SUDE
 S:1:4000:8000  # NITOURYU
 S:2:0:0  # RIDING
+S:3:0:0  # SHIELD
 
 ### KAJI ###
 N:24
@@ -8303,6 +8327,7 @@ W:4:63:1:4  #
 S:0:0:4000  # SUDE
 S:1:0:4000  # NITOURYU
 S:2:0:2000  # RIDING
+S:3:0:7000  # SHIELD
 
 ### MIRROR MASTER ###
 N:25
@@ -8635,6 +8660,7 @@ W:4:63:0:1  #
 S:0:0:4000  # SUDE
 S:1:0:0  # NITOURYU
 S:2:0:0  # RIDING
+S:3:0:0  # SHIELD
 
 ### NINJA ###
 N:26
@@ -8967,8 +8993,9 @@ W:4:63:0:2  #
 S:0:0:7000  # SUDE
 S:1:4000:8000  # NITOURYU
 S:2:0:0  # RIDING
+S:3:0:0  # SHIELD
 
-### ARCHER ###
+### SNIPER ###
 N:27
 # Bow
 W:0:0:0:4  # 0
@@ -9299,3 +9326,4 @@ W:4:63:0:1  #
 S:0:0:2000  # SUDE
 S:1:0:1000  # NITOURYU
 S:2:0:0     # RIDING
+S:3:0:0     # SHIELD
index bc20c95..bd97713 100644 (file)
@@ -5653,10 +5653,14 @@ static void do_cmd_knowledge_skill_exp(void)
 
        FILE *fff;
 
-       GAME_TEXT file_name[1024];
-       GAME_TEXT skill_name[3][20]={_("マーシャルアーツ", "Martial Arts    "),
-                                                       _("二刀流          ", "Dual Wielding   "), 
-                                                       _("乗馬            ", "Riding          ")};
+       char file_name[1024];
+       char skill_name[GINOU_TEMPMAX][20] =
+       {
+               _("マーシャルアーツ", "Martial Arts    "),
+               _("二刀流          ", "Dual Wielding   "), 
+               _("乗馬            ", "Riding          "),
+               _("盾              ", "Shield          ")
+       };
 
        /* Open a new file */
        fff = my_fopen_temp(file_name, 1024);
@@ -5666,7 +5670,7 @@ static void do_cmd_knowledge_skill_exp(void)
            return;
        }
 
-       for (i = 0; i < 3; i++)
+       for (i = 0; i < GINOU_TEMPMAX; i++)
        {
                skill_exp = p_ptr->skill_exp[i];
                fprintf(fff, "%-20s ", skill_name[i]);
index c875d67..782f885 100644 (file)
@@ -4535,6 +4535,8 @@ extern int PlayerUID;
 #define GINOU_SUDE      0
 #define GINOU_NITOURYU  1
 #define GINOU_RIDING    2
+#define GINOU_SHIELD    3
+#define GINOU_TEMPMAX   4
 #define GINOU_MAX      10
 
 /* Proficiency level */
index e4cacd5..2ec4458 100644 (file)
@@ -1440,8 +1440,8 @@ bool py_attack(POSITION y, POSITION x, BIT_FLAGS mode)
 
                if (cur < max)
                {
-                       int ridinglevel = r_info[m_list[p_ptr->riding].r_idx].level;
-                       int targetlevel = r_ptr->level;
+                       DEPTH ridinglevel = r_info[m_list[p_ptr->riding].r_idx].level;
+                       DEPTH targetlevel = r_ptr->level;
                        int inc = 0;
 
                        if ((cur / 200 - 5) < targetlevel)
@@ -1457,7 +1457,6 @@ bool py_attack(POSITION y, POSITION x, BIT_FLAGS mode)
                        }
 
                        p_ptr->skill_exp[GINOU_RIDING] = MIN(max, cur + inc);
-
                        p_ptr->update |= (PU_BONUS);
                }
        }
@@ -3204,6 +3203,33 @@ bool make_attack_normal(MONSTER_IDX m_idx)
 #endif
 
                                }
+
+                               /* Gain shield experience */
+                               if (object_is_armour(&inventory[INVEN_RARM]) || object_is_armour(&inventory[INVEN_LARM]))
+                               {
+                                       int cur = p_ptr->skill_exp[GINOU_SHIELD];
+                                       int max = s_info[p_ptr->pclass].s_max[GINOU_SHIELD];
+
+                                       if (cur < max)
+                                       {
+                                               DEPTH targetlevel = r_ptr->level;
+                                               int inc = 0;
+
+
+                                               /* Extra experience */
+                                               if ((cur / 100) < targetlevel)
+                                               {
+                                                       if ((cur / 100 + 15) < targetlevel)
+                                                               inc += 1 + (targetlevel - (cur / 100 + 15));
+                                                       else
+                                                               inc += 1;
+                                               }
+
+                                               p_ptr->skill_exp[GINOU_SHIELD] = MIN(max, cur + inc);
+                                               p_ptr->update |= (PU_BONUS);
+                                       }
+                               }
+
                                damage = 0;
 
                                break;
index 730ced8..a1c0306 100644 (file)
@@ -4295,6 +4295,13 @@ void calc_bonuses(void)
                }
        }
 
+       /* Shield skill bonus */
+       if (object_is_armour(&inventory[INVEN_RARM]) || object_is_armour(&inventory[INVEN_LARM]))
+       {
+               p_ptr->ac += p_ptr->skill_exp[GINOU_SHIELD] * (1 + p_ptr->lev / 22) / 2000;
+               p_ptr->dis_ac += p_ptr->skill_exp[GINOU_SHIELD] * (1 + p_ptr->lev / 22) / 2000;
+       }
+
        if (old_mighty_throw != p_ptr->mighty_throw)
        {
                /* Redraw average damege display of Shuriken */