OSDN Git Service

[Refactor] #37353 カオスパトロンの報酬処理を acquire_chaos_weapon() に分離. / Separate chaos weapon...
authordeskull <deskull@users.sourceforge.jp>
Sat, 23 Feb 2019 10:39:24 +0000 (19:39 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Sat, 23 Feb 2019 10:39:24 +0000 (19:39 +0900)
src/patron.c
src/spells-object.c
src/spells-object.h

index 9f60246..8c5f01b 100644 (file)
@@ -229,12 +229,9 @@ const int chaos_rewards[MAX_PATRON][20] =
 
 void gain_level_reward(int chosen_reward)
 {
-       object_type *q_ptr;
-       object_type forge;
        char        wrath_reason[32] = "";
        int         nasty_chance = 6;
        OBJECT_TYPE_VALUE dummy = 0;
-       OBJECT_SUBTYPE_VALUE dummy2 = 0;
        int         type, effect;
        concptr        reward = NULL;
        GAME_TEXT o_name[MAX_NLEN];
@@ -340,104 +337,9 @@ void gain_level_reward(int chosen_reward)
                        break;
 
                case REW_CHAOS_WP:
-
                        msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
                        msg_print(_("「汝の行いは貴き剣に値せり。」", "'Thy deed hath earned thee a worthy blade.'"));
-                       q_ptr = &forge;
-                       dummy = TV_SWORD;
-                       switch (randint1(p_ptr->lev))
-                       {
-                       case 0: case 1:
-                               dummy2 = SV_DAGGER;
-                               break;
-                       case 2: case 3:
-                               dummy2 = SV_MAIN_GAUCHE;
-                               break;
-                       case 4:
-                               dummy2 = SV_TANTO;
-                               break;
-                       case 5: case 6:
-                               dummy2 = SV_RAPIER;
-                               break;
-                       case 7: case 8:
-                               dummy2 = SV_SMALL_SWORD;
-                               break;
-                       case 9: case 10:
-                               dummy2 = SV_BASILLARD;
-                               break;
-                       case 11: case 12: case 13:
-                               dummy2 = SV_SHORT_SWORD;
-                               break;
-                       case 14: case 15:
-                               dummy2 = SV_SABRE;
-                               break;
-                       case 16: case 17:
-                               dummy2 = SV_CUTLASS;
-                               break;
-                       case 18:
-                               dummy2 = SV_WAKIZASHI;
-                               break;
-                       case 19:
-                               dummy2 = SV_KHOPESH;
-                               break;
-                       case 20:
-                               dummy2 = SV_TULWAR;
-                               break;
-                       case 21:
-                               dummy2 = SV_BROAD_SWORD;
-                               break;
-                       case 22: case 23:
-                               dummy2 = SV_LONG_SWORD;
-                               break;
-                       case 24: case 25:
-                               dummy2 = SV_SCIMITAR;
-                               break;
-                       case 26:
-                               dummy2 = SV_NINJATO;
-                               break;
-                       case 27:
-                               dummy2 = SV_KATANA;
-                               break;
-                       case 28: case 29:
-                               dummy2 = SV_BASTARD_SWORD;
-                               break;
-                       case 30:
-                               dummy2 = SV_GREAT_SCIMITAR;
-                               break;
-                       case 31:
-                               dummy2 = SV_CLAYMORE;
-                               break;
-                       case 32:
-                               dummy2 = SV_ESPADON;
-                               break;
-                       case 33:
-                               dummy2 = SV_TWO_HANDED_SWORD;
-                               break;
-                       case 34:
-                               dummy2 = SV_FLAMBERGE;
-                               break;
-                       case 35:
-                               dummy2 = SV_NO_DACHI;
-                               break;
-                       case 36:
-                               dummy2 = SV_EXECUTIONERS_SWORD;
-                               break;
-                       case 37:
-                               dummy2 = SV_ZWEIHANDER;
-                               break;
-                       case 38:
-                               dummy2 = SV_HAYABUSA;
-                               break;
-                       default:
-                               dummy2 = SV_BLADE_OF_CHAOS;
-                       }
-
-                       object_prep(q_ptr, lookup_kind(dummy, dummy2));
-                       q_ptr->to_h = 3 + randint1(dun_level) % 10;
-                       q_ptr->to_d = 3 + randint1(dun_level) % 10;
-                       one_resistance(q_ptr);
-                       q_ptr->name2 = EGO_CHAOTIC;
-                       (void)drop_near(q_ptr, -1, p_ptr->y, p_ptr->x);
+                       acquire_chaos_weapon(p_ptr);
                        reward = _("(混沌)の武器を手に入れた。", "chaos weapon");
                        break;
 
index cb9f149..67463fe 100644 (file)
@@ -1,5 +1,6 @@
 
 #include "angband.h"
+#include "artifact.h"
 #include "spells-object.h"
 #include "object-hook.h"
 #include "player-status.h"
@@ -466,6 +467,108 @@ void acquirement(POSITION y1, POSITION x1, int num, bool great, bool special, bo
        }
 }
 
+void acquire_chaos_weapon(player_type *creature_ptr)
+{
+       object_type forge;
+       object_type *q_ptr = &forge;
+       OBJECT_TYPE_VALUE dummy = TV_SWORD;
+       OBJECT_SUBTYPE_VALUE dummy2;
+       switch (randint1(creature_ptr->lev))
+       {
+       case 0: case 1:
+               dummy2 = SV_DAGGER;
+               break;
+       case 2: case 3:
+               dummy2 = SV_MAIN_GAUCHE;
+               break;
+       case 4:
+               dummy2 = SV_TANTO;
+               break;
+       case 5: case 6:
+               dummy2 = SV_RAPIER;
+               break;
+       case 7: case 8:
+               dummy2 = SV_SMALL_SWORD;
+               break;
+       case 9: case 10:
+               dummy2 = SV_BASILLARD;
+               break;
+       case 11: case 12: case 13:
+               dummy2 = SV_SHORT_SWORD;
+               break;
+       case 14: case 15:
+               dummy2 = SV_SABRE;
+               break;
+       case 16: case 17:
+               dummy2 = SV_CUTLASS;
+               break;
+       case 18:
+               dummy2 = SV_WAKIZASHI;
+               break;
+       case 19:
+               dummy2 = SV_KHOPESH;
+               break;
+       case 20:
+               dummy2 = SV_TULWAR;
+               break;
+       case 21:
+               dummy2 = SV_BROAD_SWORD;
+               break;
+       case 22: case 23:
+               dummy2 = SV_LONG_SWORD;
+               break;
+       case 24: case 25:
+               dummy2 = SV_SCIMITAR;
+               break;
+       case 26:
+               dummy2 = SV_NINJATO;
+               break;
+       case 27:
+               dummy2 = SV_KATANA;
+               break;
+       case 28: case 29:
+               dummy2 = SV_BASTARD_SWORD;
+               break;
+       case 30:
+               dummy2 = SV_GREAT_SCIMITAR;
+               break;
+       case 31:
+               dummy2 = SV_CLAYMORE;
+               break;
+       case 32:
+               dummy2 = SV_ESPADON;
+               break;
+       case 33:
+               dummy2 = SV_TWO_HANDED_SWORD;
+               break;
+       case 34:
+               dummy2 = SV_FLAMBERGE;
+               break;
+       case 35:
+               dummy2 = SV_NO_DACHI;
+               break;
+       case 36:
+               dummy2 = SV_EXECUTIONERS_SWORD;
+               break;
+       case 37:
+               dummy2 = SV_ZWEIHANDER;
+               break;
+       case 38:
+               dummy2 = SV_HAYABUSA;
+               break;
+       default:
+               dummy2 = SV_BLADE_OF_CHAOS;
+       }
+
+       object_prep(q_ptr, lookup_kind(dummy, dummy2));
+       q_ptr->to_h = 3 + randint1(dun_level) % 10;
+       q_ptr->to_d = 3 + randint1(dun_level) % 10;
+       one_resistance(q_ptr);
+       q_ptr->name2 = EGO_CHAOTIC;
+       (void)drop_near(q_ptr, -1, creature_ptr->y, creature_ptr->x);
+}
+
+
 /*!
  * @brief 防具呪縛処理 /
  * Curse the players armor
index cb00257..32cd84c 100644 (file)
@@ -4,6 +4,7 @@ extern bool create_ammo(void);
 extern bool import_magic_device(void);
 extern void amusement(POSITION y1, POSITION x1, int num, bool known);
 extern void acquirement(POSITION y1, POSITION x1, int num, bool great, bool special, bool known);
+extern void acquire_chaos_weapon(player_type *creature_ptr);
 extern bool curse_armor(void);
 extern bool curse_weapon_object(bool force, object_type *o_ptr);
 extern bool curse_weapon(bool force, int slot);