OSDN Git Service

[Refactor] #1752 PlayerClassTypeをenumからenum classへ変更した
authorHourier <66951241+Hourier@users.noreply.github.com>
Wed, 6 Oct 2021 10:56:55 +0000 (19:56 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Tue, 12 Oct 2021 13:22:51 +0000 (22:22 +0900)
138 files changed:
src/action/action-limited.cpp
src/action/activation-execution.cpp
src/action/movement-execution.cpp
src/action/open-close-execution.cpp
src/action/racial-execution.cpp
src/artifact/fixed-art-generator.cpp
src/artifact/random-art-characteristics.cpp
src/artifact/random-art-generator.cpp
src/autopick/autopick-destroyer.cpp
src/autopick/autopick-entry.cpp
src/autopick/autopick-matcher.cpp
src/avatar/avatar.cpp
src/birth/auto-roller.cpp
src/birth/birth-body-spec.cpp
src/birth/birth-select-class.cpp
src/birth/birth-select-realm.cpp
src/birth/birth-stat.cpp
src/birth/birth-wizard.cpp
src/birth/character-builder.cpp
src/birth/game-play-initializer.cpp
src/birth/inventory-initializer.cpp
src/birth/quick-start.cpp
src/cmd-action/cmd-attack.cpp
src/cmd-action/cmd-mind.cpp
src/cmd-action/cmd-move.cpp
src/cmd-action/cmd-pet.cpp
src/cmd-action/cmd-shoot.cpp
src/cmd-action/cmd-spell.cpp
src/cmd-io/cmd-diary.cpp
src/cmd-io/cmd-menu-content-table.cpp
src/cmd-io/cmd-menu-content-table.h
src/cmd-item/cmd-destroy.cpp
src/cmd-item/cmd-equipment.cpp
src/cmd-item/cmd-throw.cpp
src/combat/attack-accuracy.cpp
src/combat/attack-criticality.cpp
src/combat/shoot.cpp
src/combat/slaying.cpp
src/core/game-play.cpp
src/core/player-processor.cpp
src/core/scores.cpp
src/core/window-redrawer.cpp
src/dungeon/dungeon-processor.cpp
src/effect/effect-monster-charm.cpp
src/effect/effect-monster-psi.cpp
src/flavor/flavor-describer.cpp
src/floor/floor-changer.cpp
src/hpmp/hp-mp-processor.cpp
src/info-reader/general-parser.cpp
src/io-dump/special-class-dump.cpp
src/io/input-key-processor.cpp
src/io/input-key-requester.cpp
src/io/report.cpp
src/knowledge/knowledge-experiences.cpp
src/knowledge/knowledge-self.cpp
src/load/load-zangband.cpp
src/load/load.cpp
src/load/player-info-loader.cpp
src/lore/magic-types-setter.cpp
src/main/info-initializer.cpp
src/market/arena.cpp
src/market/building-craft-weapon.cpp
src/market/building-initializer.cpp
src/market/building-service.cpp
src/melee/melee-spell-flags-checker.cpp
src/melee/melee-spell.cpp
src/mind/mind-elementalist.cpp
src/mind/mind-power-getter.cpp
src/mind/monk-attack.cpp
src/monster-attack/monster-attack-player.cpp
src/mspell/mspell-attack.cpp
src/mspell/mspell-floor.cpp
src/mspell/mspell-judgement.cpp
src/mspell/mspell-lite.cpp
src/mutation/gain-mutation-switcher.cpp
src/object-hook/hook-magic.cpp
src/object-hook/hook-weapon.cpp
src/object-use/quaff-execution.cpp
src/object-use/read-execution.cpp
src/object-use/throw-execution.cpp
src/object-use/use-execution.cpp
src/object-use/zaprod-execution.cpp
src/object-use/zapwand-execution.cpp
src/object/object-info.cpp
src/perception/simple-perception.cpp
src/pet/pet-fall-off.cpp
src/pet/pet-util.cpp
src/player-attack/player-attack.cpp
src/player-base/player-class.cpp
src/player-info/class-ability-info.cpp
src/player-info/class-types.h
src/player-info/equipment-info.cpp
src/player-info/mimic-info-table.cpp
src/player-status/player-basic-statistics.cpp
src/player-status/player-speed.cpp
src/player-status/player-stealth.cpp
src/player/patron.cpp
src/player/permanent-resistances.cpp
src/player/player-move.cpp
src/player/player-realm.cpp
src/player/player-realm.h
src/player/player-status-flags.cpp
src/player/player-status.cpp
src/player/process-death.cpp
src/player/race-info-table.cpp
src/racial/class-racial-switcher.cpp
src/racial/racial-draconian.cpp
src/racial/racial-switcher.cpp
src/racial/racial-util.cpp
src/realm/realm-crusade.cpp
src/realm/realm-trump.cpp
src/save/player-writer.cpp
src/specific-object/death-crimson.cpp
src/specific-object/death-scythe.cpp
src/spell-kind/spells-random.cpp
src/spell-kind/spells-teleport.cpp
src/spell-realm/spells-song.cpp
src/spell-realm/spells-trump.cpp
src/spell/spell-info.cpp
src/spell/spells-diceroll.cpp
src/spell/spells-staff-only.cpp
src/spell/spells-status.cpp
src/status/buff-setter.cpp
src/status/element-resistance.cpp
src/status/shape-changer.cpp
src/store/store-key-processor.cpp
src/view/display-player-middle.cpp
src/view/display-player.cpp
src/view/object-describer.cpp
src/view/status-first-page.cpp
src/window/display-sub-window-spells.cpp
src/window/main-window-left-frame.cpp
src/window/main-window-stat-poster.cpp
src/wizard/cmd-wizard.cpp
src/wizard/wizard-special-process.cpp
src/wizard/wizard-spoiler.cpp
src/world/world.cpp
src/world/world.h

index 5edb2ae..c555720 100644 (file)
@@ -35,7 +35,7 @@ bool cmd_limit_cast(player_type *player_ptr)
         return true;
     }
 
-    if (is_shero(player_ptr) && (player_ptr->pclass != CLASS_BERSERKER)) {
+    if (is_shero(player_ptr) && (player_ptr->pclass != PlayerClassType::BERSERKER)) {
         msg_format(_("狂戦士化していて頭が回らない!", "You cannot think directly!"));
         return true;
     }
index e7bf027..27d3e69 100644 (file)
@@ -88,7 +88,7 @@ static void decide_chance_fail(player_type *player_ptr, ae_type *ae_ptr)
 
 static void decide_activation_success(player_type *player_ptr, ae_type *ae_ptr)
 {
-    if (player_ptr->pclass == CLASS_BERSERKER) {
+    if (player_ptr->pclass == PlayerClassType::BERSERKER) {
         ae_ptr->success = false;
         return;
     }
index 9767e8a..b57c3ad 100644 (file)
@@ -177,7 +177,7 @@ void exe_movement(player_type *player_ptr, DIRECTION dir, bool do_pickup, bool b
                 health_track(player_ptr, g_ptr->m_idx);
             }
 
-            if ((stormbringer && (randint1(1000) > 666)) || (player_ptr->pclass == CLASS_BERSERKER)) {
+            if ((stormbringer && (randint1(1000) > 666)) || (player_ptr->pclass == PlayerClassType::BERSERKER)) {
                 do_cmd_attack(player_ptr, y, x, HISSATSU_NONE);
                 can_move = false;
             } else if (monster_can_cross_terrain(player_ptr, floor_ptr->grid_array[player_ptr->y][player_ptr->x].feat, r_ptr, 0)) {
@@ -249,7 +249,7 @@ void exe_movement(player_type *player_ptr, DIRECTION dir, bool do_pickup, bool b
         player_ptr->running = 0;
         can_move = false;
     } else if (f_ptr->flags.has(FF::TREE) && !p_can_kill_walls) {
-        if ((player_ptr->pclass != CLASS_RANGER) && !player_ptr->levitation && (!player_ptr->riding || !(riding_r_ptr->flags8 & RF8_WILD_WOOD))) {
+        if ((player_ptr->pclass != PlayerClassType::RANGER) && !player_ptr->levitation && (!player_ptr->riding || !(riding_r_ptr->flags8 & RF8_WILD_WOOD))) {
             energy.mul_player_turn_energy(2);
         }
     } else if ((do_pickup != easy_disarm) && f_ptr->flags.has(FF::DISARM) && !g_ptr->mimic) {
index 0e20b7f..70ebfce 100644 (file)
@@ -305,7 +305,7 @@ bool exe_bash(player_type *player_ptr, POSITION y, POSITION x, DIRECTION dir)
     PlayerEnergy(player_ptr).set_player_turn_energy(100);
     msg_format(_("%sに体当たりをした!", "You smash into the %s!"), name);
     temp = (bash - (temp * 10));
-    if (player_ptr->pclass == CLASS_BERSERKER)
+    if (player_ptr->pclass == PlayerClassType::BERSERKER)
         temp *= 2;
 
     if (temp < 1)
index 90c1a1d..ea44551 100644 (file)
@@ -61,7 +61,7 @@ PERCENTAGE racial_chance(player_type *player_ptr, rpi_type *rpi_ptr)
         difficulty -= lev_adj;
     }
 
-    auto special_easy = player_ptr->pclass == CLASS_IMITATOR;
+    auto special_easy = player_ptr->pclass == PlayerClassType::IMITATOR;
     special_easy &= player_ptr->inventory_list[INVEN_NECK].name1 == ART_GOGO_PENDANT;
     special_easy &= rpi_ptr->racial_name.compare("倍返し") == 0;
     if (special_easy) {
index e3cd591..a470184 100644 (file)
@@ -45,10 +45,10 @@ static bool invest_terror_mask(player_type *player_ptr, object_type *o_ptr)
         return false;
 
     switch (player_ptr->pclass) {
-    case CLASS_WARRIOR:
-    case CLASS_ARCHER:
-    case CLASS_CAVALRY:
-    case CLASS_BERSERKER:
+    case PlayerClassType::WARRIOR:
+    case PlayerClassType::ARCHER:
+    case PlayerClassType::CAVALRY:
+    case PlayerClassType::BERSERKER:
         return true;
     default:
         o_ptr->art_flags.set(TR_AGGRAVATE);
@@ -92,17 +92,17 @@ static void invest_special_artifact_abilities(player_type *player_ptr, object_ty
 {
     switch (o_ptr->name1) {
     case ART_MURAMASA:
-        if (player_ptr->pclass != CLASS_SAMURAI) {
+        if (player_ptr->pclass != PlayerClassType::SAMURAI) {
             o_ptr->art_flags.set(TR_NO_MAGIC);
             o_ptr->curse_flags.set(TRC::HEAVY_CURSE);
         }
         return;
     case ART_ROBINTON:
-        if (player_ptr->pclass == CLASS_BARD)
+        if (player_ptr->pclass == PlayerClassType::BARD)
             o_ptr->art_flags.set(TR_DEC_MANA);
         return;
     case ART_XIAOLONG:
-        if (player_ptr->pclass == CLASS_MONK)
+        if (player_ptr->pclass == PlayerClassType::MONK)
             o_ptr->art_flags.set(TR_BLOWS);
         return;
     case ART_BLOOD:
index 9a8fa4d..7050d1d 100644 (file)
@@ -79,8 +79,8 @@ void curse_artifact(player_type *player_ptr, object_type *o_ptr)
     o_ptr->curse_flags.set({ TRC::HEAVY_CURSE, TRC::CURSED });
     o_ptr->art_flags.reset(TR_BLESSED);
     add_negative_flags(o_ptr);
-    if ((player_ptr->pclass != CLASS_WARRIOR) && (player_ptr->pclass != CLASS_ARCHER) && (player_ptr->pclass != CLASS_CAVALRY)
-        && (player_ptr->pclass != CLASS_BERSERKER) && (player_ptr->pclass != CLASS_SMITH) && one_in_(3))
+    if ((player_ptr->pclass != PlayerClassType::WARRIOR) && (player_ptr->pclass != PlayerClassType::ARCHER) && (player_ptr->pclass != PlayerClassType::CAVALRY)
+        && (player_ptr->pclass != PlayerClassType::BERSERKER) && (player_ptr->pclass != PlayerClassType::SMITH) && one_in_(3))
         o_ptr->art_flags.set(TR_NO_MAGIC);
 }
 
index ee287b7..6067cf0 100644 (file)
@@ -76,79 +76,79 @@ static bool weakening_artifact(object_type *o_ptr)
 static void set_artifact_bias(player_type *player_ptr, object_type *o_ptr, int *warrior_artifact_bias)
 {
     switch (player_ptr->pclass) {
-    case CLASS_WARRIOR:
-    case CLASS_BERSERKER:
-    case CLASS_ARCHER:
-    case CLASS_SAMURAI:
-    case CLASS_CAVALRY:
-    case CLASS_SMITH:
+    case PlayerClassType::WARRIOR:
+    case PlayerClassType::BERSERKER:
+    case PlayerClassType::ARCHER:
+    case PlayerClassType::SAMURAI:
+    case PlayerClassType::CAVALRY:
+    case PlayerClassType::SMITH:
         o_ptr->artifact_bias = BIAS_WARRIOR;
         break;
-    case CLASS_MAGE:
-    case CLASS_HIGH_MAGE:
-    case CLASS_SORCERER:
-    case CLASS_MAGIC_EATER:
-    case CLASS_BLUE_MAGE:
+    case PlayerClassType::MAGE:
+    case PlayerClassType::HIGH_MAGE:
+    case PlayerClassType::SORCERER:
+    case PlayerClassType::MAGIC_EATER:
+    case PlayerClassType::BLUE_MAGE:
         o_ptr->artifact_bias = BIAS_MAGE;
         break;
-    case CLASS_PRIEST:
+    case PlayerClassType::PRIEST:
         o_ptr->artifact_bias = BIAS_PRIESTLY;
         break;
-    case CLASS_ROGUE:
-    case CLASS_NINJA:
+    case PlayerClassType::ROGUE:
+    case PlayerClassType::NINJA:
         o_ptr->artifact_bias = BIAS_ROGUE;
         *warrior_artifact_bias = 25;
         break;
-    case CLASS_RANGER:
-    case CLASS_SNIPER:
+    case PlayerClassType::RANGER:
+    case PlayerClassType::SNIPER:
         o_ptr->artifact_bias = BIAS_RANGER;
         *warrior_artifact_bias = 30;
         break;
-    case CLASS_PALADIN:
+    case PlayerClassType::PALADIN:
         o_ptr->artifact_bias = BIAS_PRIESTLY;
         *warrior_artifact_bias = 40;
         break;
-    case CLASS_WARRIOR_MAGE:
-    case CLASS_RED_MAGE:
+    case PlayerClassType::WARRIOR_MAGE:
+    case PlayerClassType::RED_MAGE:
         o_ptr->artifact_bias = BIAS_MAGE;
         *warrior_artifact_bias = 40;
         break;
-    case CLASS_CHAOS_WARRIOR:
+    case PlayerClassType::CHAOS_WARRIOR:
         o_ptr->artifact_bias = BIAS_CHAOS;
         *warrior_artifact_bias = 40;
         break;
-    case CLASS_MONK:
-    case CLASS_FORCETRAINER:
+    case PlayerClassType::MONK:
+    case PlayerClassType::FORCETRAINER:
         o_ptr->artifact_bias = BIAS_PRIESTLY;
         break;
-    case CLASS_MINDCRAFTER:
-    case CLASS_BARD:
+    case PlayerClassType::MINDCRAFTER:
+    case PlayerClassType::BARD:
         if (randint1(5) > 2)
             o_ptr->artifact_bias = BIAS_PRIESTLY;
         break;
-    case CLASS_TOURIST:
+    case PlayerClassType::TOURIST:
         if (randint1(5) > 2)
             o_ptr->artifact_bias = BIAS_WARRIOR;
         break;
-    case CLASS_IMITATOR:
+    case PlayerClassType::IMITATOR:
         if (randint1(2) > 1)
             o_ptr->artifact_bias = BIAS_RANGER;
         break;
-    case CLASS_BEASTMASTER:
+    case PlayerClassType::BEASTMASTER:
         o_ptr->artifact_bias = BIAS_CHR;
         *warrior_artifact_bias = 50;
         break;
-    case CLASS_MIRROR_MASTER:
+    case PlayerClassType::MIRROR_MASTER:
         if (randint1(4) > 1)
             o_ptr->artifact_bias = BIAS_MAGE;
         else
             o_ptr->artifact_bias = BIAS_ROGUE;
         break;
-    case CLASS_ELEMENTALIST:
+    case PlayerClassType::ELEMENTALIST:
         o_ptr->artifact_bias = one_in_(2) ? BIAS_MAGE : BIAS_INT;
         break;
 
-    case MAX_CLASS:
+    case PlayerClassType::MAX:
         break;
     }
 }
index 6600e41..3bebed2 100644 (file)
@@ -44,15 +44,15 @@ static bool is_leave_special_item(player_type *player_ptr, object_type *o_ptr)
     if (player_ptr->prace == PlayerRaceType::BALROG) {
         if (o_ptr->tval == ItemKindType::CORPSE && o_ptr->sval == SV_CORPSE && angband_strchr("pht", r_info[o_ptr->pval].d_char))
             return false;
-    } else if (player_ptr->pclass == CLASS_ARCHER) {
+    } else if (player_ptr->pclass == PlayerClassType::ARCHER) {
         if (o_ptr->tval == ItemKindType::SKELETON || (o_ptr->tval == ItemKindType::CORPSE && o_ptr->sval == SV_SKELETON))
             return false;
-    } else if (player_ptr->pclass == CLASS_NINJA) {
+    } else if (player_ptr->pclass == PlayerClassType::NINJA) {
         if (o_ptr->tval == ItemKindType::LITE && o_ptr->name2 == EGO_LITE_DARKNESS && o_ptr->is_known())
             return false;
-    } else if (player_ptr->pclass == CLASS_BEASTMASTER || player_ptr->pclass == CLASS_CAVALRY) {
+    } else if (player_ptr->pclass == PlayerClassType::BEASTMASTER || player_ptr->pclass == PlayerClassType::CAVALRY) {
         if (o_ptr->tval == ItemKindType::WAND && o_ptr->sval == SV_WAND_HEAL_MONSTER && o_ptr->is_aware())
-            return false;
+             return false;
     }
 
     return true;
index 463cbed..c3d57e8 100644 (file)
@@ -396,7 +396,7 @@ void autopick_entry_from_object(player_type *player_ptr, autopick_type *entry, o
             name = false;
     }
 
-    bool realm_except_class = player_ptr->pclass == CLASS_SORCERER || player_ptr->pclass == CLASS_RED_MAGE;
+    bool realm_except_class = player_ptr->pclass == PlayerClassType::SORCERER || player_ptr->pclass == PlayerClassType::RED_MAGE;
 
     if ((get_realm1_book(player_ptr) == o_ptr->tval) && !realm_except_class) {
         ADD_FLG(FLG_REALM1);
index 633f199..5f2f20f 100644 (file)
@@ -180,7 +180,7 @@ bool is_autopick_match(player_type *player_ptr, object_type *o_ptr, autopick_typ
     if (IS_FLG(FLG_UNREADABLE) && (o_ptr->tval < ItemKindType::LIFE_BOOK || check_book_realm(player_ptr, o_ptr->tval, o_ptr->sval)))
         return false;
 
-    bool realm_except_class = player_ptr->pclass == CLASS_SORCERER || player_ptr->pclass == CLASS_RED_MAGE;
+    bool realm_except_class = player_ptr->pclass == PlayerClassType::SORCERER || player_ptr->pclass == PlayerClassType::RED_MAGE;
 
     if (IS_FLG(FLG_REALM1) && ((get_realm1_book(player_ptr) != o_ptr->tval) || realm_except_class))
         return false;
index 37d7a8f..7b25bd6 100644 (file)
@@ -227,108 +227,108 @@ void initialize_virtues(player_type *player_ptr)
     /* Get pre-defined types */
     /* 1 or more virtues based on class */
     switch (player_ptr->pclass) {
-    case CLASS_WARRIOR:
-    case CLASS_SAMURAI:
+    case PlayerClassType::WARRIOR:
+    case PlayerClassType::SAMURAI:
         player_ptr->vir_types[i++] = V_VALOUR;
         player_ptr->vir_types[i++] = V_HONOUR;
         break;
-    case CLASS_MAGE:
+    case PlayerClassType::MAGE:
         player_ptr->vir_types[i++] = V_KNOWLEDGE;
         player_ptr->vir_types[i++] = V_ENCHANT;
         break;
-    case CLASS_PRIEST:
+    case PlayerClassType::PRIEST:
         player_ptr->vir_types[i++] = V_FAITH;
         player_ptr->vir_types[i++] = V_TEMPERANCE;
         break;
-    case CLASS_ROGUE:
-    case CLASS_SNIPER:
+    case PlayerClassType::ROGUE:
+    case PlayerClassType::SNIPER:
         player_ptr->vir_types[i++] = V_HONOUR;
         break;
-    case CLASS_RANGER:
-    case CLASS_ARCHER:
+    case PlayerClassType::RANGER:
+    case PlayerClassType::ARCHER:
         player_ptr->vir_types[i++] = V_NATURE;
         player_ptr->vir_types[i++] = V_TEMPERANCE;
         break;
-    case CLASS_PALADIN:
+    case PlayerClassType::PALADIN:
         player_ptr->vir_types[i++] = V_JUSTICE;
         player_ptr->vir_types[i++] = V_VALOUR;
         player_ptr->vir_types[i++] = V_HONOUR;
         player_ptr->vir_types[i++] = V_FAITH;
         break;
-    case CLASS_WARRIOR_MAGE:
-    case CLASS_RED_MAGE:
+    case PlayerClassType::WARRIOR_MAGE:
+    case PlayerClassType::RED_MAGE:
         player_ptr->vir_types[i++] = V_ENCHANT;
         player_ptr->vir_types[i++] = V_VALOUR;
         break;
-    case CLASS_CHAOS_WARRIOR:
+    case PlayerClassType::CHAOS_WARRIOR:
         player_ptr->vir_types[i++] = V_CHANCE;
         player_ptr->vir_types[i++] = V_INDIVIDUALISM;
         break;
-    case CLASS_MONK:
-    case CLASS_FORCETRAINER:
+    case PlayerClassType::MONK:
+    case PlayerClassType::FORCETRAINER:
         player_ptr->vir_types[i++] = V_FAITH;
         player_ptr->vir_types[i++] = V_HARMONY;
         player_ptr->vir_types[i++] = V_TEMPERANCE;
         player_ptr->vir_types[i++] = V_PATIENCE;
         break;
-    case CLASS_MINDCRAFTER:
-    case CLASS_MIRROR_MASTER:
+    case PlayerClassType::MINDCRAFTER:
+    case PlayerClassType::MIRROR_MASTER:
         player_ptr->vir_types[i++] = V_HARMONY;
         player_ptr->vir_types[i++] = V_ENLIGHTEN;
         player_ptr->vir_types[i++] = V_PATIENCE;
         break;
-    case CLASS_HIGH_MAGE:
-    case CLASS_SORCERER:
+    case PlayerClassType::HIGH_MAGE:
+    case PlayerClassType::SORCERER:
         player_ptr->vir_types[i++] = V_ENLIGHTEN;
         player_ptr->vir_types[i++] = V_ENCHANT;
         player_ptr->vir_types[i++] = V_KNOWLEDGE;
         break;
-    case CLASS_TOURIST:
+    case PlayerClassType::TOURIST:
         player_ptr->vir_types[i++] = V_ENLIGHTEN;
         player_ptr->vir_types[i++] = V_CHANCE;
         break;
-    case CLASS_IMITATOR:
+    case PlayerClassType::IMITATOR:
         player_ptr->vir_types[i++] = V_CHANCE;
         break;
-    case CLASS_BLUE_MAGE:
+    case PlayerClassType::BLUE_MAGE:
         player_ptr->vir_types[i++] = V_CHANCE;
         player_ptr->vir_types[i++] = V_KNOWLEDGE;
         break;
-    case CLASS_BEASTMASTER:
+    case PlayerClassType::BEASTMASTER:
         player_ptr->vir_types[i++] = V_NATURE;
         player_ptr->vir_types[i++] = V_CHANCE;
         player_ptr->vir_types[i++] = V_VITALITY;
         break;
-    case CLASS_MAGIC_EATER:
+    case PlayerClassType::MAGIC_EATER:
         player_ptr->vir_types[i++] = V_ENCHANT;
         player_ptr->vir_types[i++] = V_KNOWLEDGE;
         break;
-    case CLASS_BARD:
+    case PlayerClassType::BARD:
         player_ptr->vir_types[i++] = V_HARMONY;
         player_ptr->vir_types[i++] = V_COMPASSION;
         break;
-    case CLASS_CAVALRY:
+    case PlayerClassType::CAVALRY:
         player_ptr->vir_types[i++] = V_VALOUR;
         player_ptr->vir_types[i++] = V_HARMONY;
         break;
-    case CLASS_BERSERKER:
+    case PlayerClassType::BERSERKER:
         player_ptr->vir_types[i++] = V_VALOUR;
         player_ptr->vir_types[i++] = V_INDIVIDUALISM;
         break;
-    case CLASS_SMITH:
+    case PlayerClassType::SMITH:
         player_ptr->vir_types[i++] = V_HONOUR;
         player_ptr->vir_types[i++] = V_KNOWLEDGE;
         break;
-    case CLASS_NINJA:
+    case PlayerClassType::NINJA:
         player_ptr->vir_types[i++] = V_PATIENCE;
         player_ptr->vir_types[i++] = V_KNOWLEDGE;
         player_ptr->vir_types[i++] = V_FAITH;
         player_ptr->vir_types[i++] = V_UNLIFE;
         break;
-    case CLASS_ELEMENTALIST:
+    case PlayerClassType::ELEMENTALIST:
         player_ptr->vir_types[i++] = V_NATURE;
         break;
-    case MAX_CLASS:
+    case PlayerClassType::MAX:
         break;
     };
 
index 2f9c38d..74c079c 100644 (file)
@@ -111,8 +111,9 @@ static int32_t get_autoroller_prob(int *minval)
  */
 static void decide_initial_stat(player_type *player_ptr, int *cval)
 {
-    auto &class_ptr = class_info[player_ptr->pclass];
-    auto &magic_ptr = m_info[player_ptr->pclass];
+    auto pclass = enum2i(player_ptr->pclass);
+    auto &class_ptr = class_info[pclass];
+    auto &magic_ptr = m_info[pclass];
     auto is_magic_user = magic_ptr.spell_stat == A_INT || magic_ptr.spell_stat == A_WIS || magic_ptr.spell_stat == A_CHR;
     auto is_attacker = class_ptr.num > 3;
 
index f12ec3e..11fedde 100644 (file)
@@ -43,7 +43,7 @@ void get_ahw(player_type *player_ptr)
 void get_money(player_type *player_ptr)
 {
     int gold = (player_ptr->sc * 6) + randint1(100) + 300;
-    if (player_ptr->pclass == CLASS_TOURIST)
+    if (player_ptr->pclass == PlayerClassType::TOURIST)
         gold += 2000;
 
     for (int i = 0; i < A_MAX; i++) {
index 38bfacf..a2f89ef 100644 (file)
@@ -13,7 +13,7 @@ static const char p2 = ')';
 
 static TERM_COLOR birth_class_color(int cs)
 {
-    if (cs < MAX_CLASS) {
+    if (i2enum<PlayerClassType>(cs) < PlayerClassType::MAX) {
         if (is_retired_class(i2enum<PlayerClassType>(cs)))
             return TERM_L_DARK;
         if (is_winner_class(i2enum<PlayerClassType>(cs)))
@@ -24,7 +24,7 @@ static TERM_COLOR birth_class_color(int cs)
 
 static void enumerate_class_list(char *sym)
 {
-    for (int n = 0; n < MAX_CLASS; n++) {
+    for (auto n = 0; i2enum<PlayerClassType>(n) < PlayerClassType::MAX; n++) {
         cp_ptr = &class_info[n];
         mp_ptr = &m_info[n];
         concptr str = cp_ptr->title;
@@ -50,7 +50,7 @@ static void display_class_stat(int cs, int *os, char *cur, char *sym)
 
     c_put_str(birth_class_color(*os), cur, 13 + (*os / 4), 2 + 19 * (*os % 4));
     put_str("                                   ", 3, 40);
-    if (cs == MAX_CLASS) {
+    if (i2enum<PlayerClassType>(cs) == PlayerClassType::MAX) {
         sprintf(cur, "%c%c%s", '*', p2, _("ランダム", "Random"));
         put_str("                                   ", 4, 40);
         put_str("                                   ", 5, 40);
@@ -77,7 +77,7 @@ static void display_class_stat(int cs, int *os, char *cur, char *sym)
         c_put_str(TERM_L_BLUE, buf, 6, 42);
 
         put_str(_("隠密", "Stealth"), 6, 47);
-        if (cs == CLASS_BERSERKER)
+        if (i2enum<PlayerClassType>(cs) == PlayerClassType::BERSERKER)
             strcpy(buf, " xx");
         else
             sprintf(buf, " %+2d", cp_ptr->c_stl);
@@ -101,28 +101,29 @@ static void interpret_class_select_key_move(char c, int *cs)
     }
 
     if (c == '6') {
-        if (*cs < MAX_CLASS)
+        if (i2enum<PlayerClassType>(*cs) < PlayerClassType::MAX)
             (*cs)++;
     }
 
     if (c == '2') {
-        if ((*cs + 4) <= MAX_CLASS)
+        if (i2enum<PlayerClassType>(*cs + 4) <= PlayerClassType::MAX)
             *cs += 4;
     }
 }
 
 static bool select_class(player_type *player_ptr, char *cur, char *sym, int *k)
 {
-    int cs = player_ptr->pclass;
-    int os = MAX_CLASS;
+    auto cs = player_ptr->pclass;
+    auto os = PlayerClassType::MAX;
     while (true) {
-        display_class_stat(cs, &os, cur, sym);
+        int int_os = enum2i(os);
+        display_class_stat(enum2i(cs), &int_os, cur, sym);
         if (*k >= 0)
             break;
 
         char buf[80];
         sprintf(buf, _("職業を選んで下さい (%c-%c) ('='初期オプション設定, 灰色:勝利済): ", "Choose a class (%c-%c) ('=' for options, Gray is winner): "),
-            sym[0], sym[MAX_CLASS - 1]);
+            sym[0], sym[enum2i(PlayerClassType::MAX) - 1]);
 
         put_str(buf, 10, 6);
         char c = inkey();
@@ -133,32 +134,33 @@ static bool select_class(player_type *player_ptr, char *cur, char *sym, int *k)
             return false;
 
         if (c == ' ' || c == '\r' || c == '\n') {
-            if (cs == MAX_CLASS) {
-                *k = randint0(MAX_CLASS);
-                cs = *k;
+            if (cs == PlayerClassType::MAX) {
+                *k = randint0(enum2i(PlayerClassType::MAX));
+                cs = i2enum<PlayerClassType>(*k);
                 continue;
             } else {
-                *k = cs;
+                *k = enum2i(cs);
                 break;
             }
         }
 
-        interpret_class_select_key_move(c, &cs);
+        int int_cs = enum2i(cs);
+        interpret_class_select_key_move(c, &int_cs);
         if (c == '*') {
-            *k = randint0(MAX_CLASS);
-            cs = *k;
+            *k = randint0(enum2i(PlayerClassType::MAX));
+            cs = i2enum<PlayerClassType>(*k);
             continue;
         }
 
         *k = (islower(c) ? A2I(c) : -1);
-        if ((*k >= 0) && (*k < MAX_CLASS)) {
-            cs = *k;
+        if ((*k >= 0) && (i2enum<PlayerClassType>(*k) < PlayerClassType::MAX)) {
+            cs = i2enum<PlayerClassType>(*k);
             continue;
         }
 
         *k = (isupper(c) ? (26 + c - 'A') : -1);
-        if ((*k >= 26) && (*k < MAX_CLASS)) {
-            cs = *k;
+        if ((*k >= 26) && (i2enum<PlayerClassType>(*k) < PlayerClassType::MAX)) {
+            cs = i2enum<PlayerClassType>(*k);
             continue;
         } else
             *k = -1;
@@ -181,7 +183,7 @@ bool get_player_class(player_type *player_ptr)
     put_str(_("()で囲まれた選択肢はこの種族には似合わない職業です。", "Any entries in parentheses should only be used by advanced players."), 11, 5);
     put_str("                                   ", 6, 40);
 
-    char sym[MAX_CLASS];
+    char sym[enum2i(PlayerClassType::MAX)];
     enumerate_class_list(sym);
 
     char cur[80];
@@ -191,8 +193,8 @@ bool get_player_class(player_type *player_ptr)
         return false;
 
     player_ptr->pclass = i2enum<PlayerClassType>(k);
-    cp_ptr = &class_info[player_ptr->pclass];
-    mp_ptr = &m_info[player_ptr->pclass];
+    cp_ptr = &class_info[enum2i(player_ptr->pclass)];
+    mp_ptr = &m_info[enum2i(player_ptr->pclass)];
     c_put_str(TERM_L_BLUE, cp_ptr->title, 5, 15);
     return true;
 }
index 92c62a1..dd604c6 100644 (file)
@@ -114,7 +114,7 @@ static void impose_first_realm(const player_type *player_ptr, uint32_t *choices)
     if (player_ptr->realm2 == REALM_SELECT_CANCEL)
         return;
 
-    if (player_ptr->pclass != CLASS_PRIEST)
+    if (player_ptr->pclass != PlayerClassType::PRIEST)
         return;
 
     if (is_good_realm(player_ptr->realm1)) {
@@ -318,7 +318,7 @@ bool get_player_realms(player_type *player_ptr)
     player_ptr->realm1 = REALM_NONE;
     player_ptr->realm2 = REALM_SELECT_CANCEL;
 
-    if (player_ptr->pclass == CLASS_ELEMENTALIST) {
+    if (player_ptr->pclass == PlayerClassType::ELEMENTALIST) {
         player_ptr->element = select_element_realm(player_ptr);
         if (player_ptr->element == REALM_SELECT_CANCEL)
             return false;
@@ -332,7 +332,7 @@ bool get_player_realms(player_type *player_ptr)
     while (true) {
         char temp[80 * 10];
         int count = 0;
-        player_ptr->realm1 = select_realm(player_ptr, realm_choices1[player_ptr->pclass], &count);
+        player_ptr->realm1 = select_realm(player_ptr, realm_choices1[enum2i(player_ptr->pclass)], &count);
         if (player_ptr->realm1 == REALM_SELECT_CANCEL)
             return false;
         if (!player_ptr->realm1)
@@ -367,7 +367,7 @@ bool get_player_realms(player_type *player_ptr)
     while (true) {
         char temp[80 * 8];
         int count = 0;
-        player_ptr->realm2 = select_realm(player_ptr, realm_choices2[player_ptr->pclass], &count);
+        player_ptr->realm2 = select_realm(player_ptr, realm_choices2[enum2i(player_ptr->pclass)], &count);
 
         if (player_ptr->realm2 == REALM_SELECT_CANCEL)
             return false;
index e365dfa..4da36ea 100644 (file)
@@ -94,7 +94,7 @@ uint16_t get_expfact(player_type *player_ptr)
 
     if (player_ptr->prace != PlayerRaceType::ANDROID)
         expfact += cp_ptr->c_exp;
-    if (((player_ptr->pclass == CLASS_MONK) || (player_ptr->pclass == CLASS_FORCETRAINER) || (player_ptr->pclass == CLASS_NINJA))
+    if (((player_ptr->pclass == PlayerClassType::MONK) || (player_ptr->pclass == PlayerClassType::FORCETRAINER) || (player_ptr->pclass == PlayerClassType::NINJA))
         && ((player_ptr->prace == PlayerRaceType::KLACKON) || (player_ptr->prace == PlayerRaceType::SPRITE)))
         expfact -= 15;
 
@@ -115,17 +115,18 @@ void get_extra(player_type *player_ptr, bool roll_hitdie)
     player_ptr->old_realm = 0;
 
     for (int i = 0; i < 64; i++) {
-        if (player_ptr->pclass == CLASS_SORCERER)
+        if (player_ptr->pclass == PlayerClassType::SORCERER)
             player_ptr->spell_exp[i] = SPELL_EXP_MASTER;
-        else if (player_ptr->pclass == CLASS_RED_MAGE)
+        else if (player_ptr->pclass == PlayerClassType::RED_MAGE)
             player_ptr->spell_exp[i] = SPELL_EXP_SKILLED;
         else
             player_ptr->spell_exp[i] = SPELL_EXP_UNSKILLED;
     }
 
+    auto pclass = enum2i(player_ptr->pclass);
     for (int i = 0; i < 5; i++)
         for (int j = 0; j < 64; j++)
-            player_ptr->weapon_exp[i][j] = s_info[player_ptr->pclass].w_start[i][j];
+            player_ptr->weapon_exp[i][j] = s_info[pclass].w_start[i][j];
 
     auto sexy_tval = ItemKindType::HAFTED - TV_WEAPON_BEGIN;
     if ((player_ptr->ppersonality == PERSONALITY_SEXY) && (player_ptr->weapon_exp[sexy_tval][SV_WHIP] < WEAPON_EXP_BEGINNER)) {
@@ -133,9 +134,9 @@ void get_extra(player_type *player_ptr, bool roll_hitdie)
     }
 
     for (int i = 0; i < MAX_SKILLS; i++)
-        player_ptr->skill_exp[i] = s_info[player_ptr->pclass].s_start[i];
+        player_ptr->skill_exp[i] = s_info[pclass].s_start[i];
 
-    if (player_ptr->pclass == CLASS_SORCERER)
+    if (player_ptr->pclass == PlayerClassType::SORCERER)
         player_ptr->hitdie = rp_ptr->r_mhp / 2 + cp_ptr->c_mhp + ap_ptr->a_mhp;
     else
         player_ptr->hitdie = rp_ptr->r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
index 19670b5..5b60929 100644 (file)
@@ -191,14 +191,14 @@ static bool let_player_select_race(player_type *player_ptr)
 static bool let_player_select_class(player_type *player_ptr)
 {
     clear_from(10);
-    player_ptr->pclass = CLASS_WARRIOR;
+    player_ptr->pclass = PlayerClassType::WARRIOR;
     while (true) {
         char temp[80 * 9];
         if (!get_player_class(player_ptr))
             return false;
 
         clear_from(10);
-        shape_buffer(class_explanations[player_ptr->pclass].data(), 74, temp, sizeof(temp));
+        shape_buffer(class_explanations[enum2i(player_ptr->pclass)].data(), 74, temp, sizeof(temp));
         concptr t = temp;
         for (int i = 0; i < 9; i++) {
             if (t[0] == 0)
@@ -291,7 +291,7 @@ static void display_initial_options(player_type *player_ptr)
     c_put_str(TERM_L_BLUE, buf, 6, 43);
 
     put_str(_("隠密", "Stealth"), 6, 47);
-    if (player_ptr->pclass == CLASS_BERSERKER)
+    if (player_ptr->pclass == PlayerClassType::BERSERKER)
         strcpy(buf, "xx");
     else
         sprintf(buf, "%+2d", rp_ptr->r_stl + cp_ptr->c_stl + ap_ptr->a_stl);
index cf72dba..31275b2 100644 (file)
@@ -60,7 +60,7 @@ static void write_birth_diary(player_type *player_ptr)
     exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
     sprintf(buf, _("%s種族に%sを選択した。", "%schose %s race."), indent, race_info[enum2i(player_ptr->prace)].title);
     exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
-    sprintf(buf, _("%s職業に%sを選択した。", "%schose %s class."), indent, class_info[player_ptr->pclass].title);
+    sprintf(buf, _("%s職業に%sを選択した。", "%schose %s class."), indent, class_info[enum2i(player_ptr->pclass)].title);
     exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
     if (player_ptr->realm1) {
         sprintf(buf, _("%s魔法の領域に%s%sを選択した。", "%schose %s%s."), indent, realm_names[player_ptr->realm1],
@@ -73,7 +73,7 @@ static void write_birth_diary(player_type *player_ptr)
     }
     sprintf(buf, _("%s性格に%sを選択した。", "%schose %s personality."), indent, personality_info[player_ptr->ppersonality].title);
     exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
-    if (player_ptr->pclass == CLASS_CHAOS_WARRIOR) {
+    if (player_ptr->pclass == PlayerClassType::CHAOS_WARRIOR) {
         sprintf(buf, _("%s守護神%sと契約を交わした。", "%smade a contract with patron %s."), indent, patron_list[player_ptr->chaos_patron].name.c_str());
         exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
     }
index 8c47ba7..a8639f6 100644 (file)
@@ -96,7 +96,7 @@ void player_wipe_without_name(player_type *player_ptr)
     }
 
     player_ptr->food = PY_FOOD_FULL - 1;
-    if (player_ptr->pclass == CLASS_SORCERER) {
+    if (player_ptr->pclass == PlayerClassType::SORCERER) {
         player_ptr->spell_learned1 = player_ptr->spell_learned2 = 0xffffffffL;
         player_ptr->spell_worked1 = player_ptr->spell_worked2 = 0xffffffffL;
     } else {
index e02e40a..fb9b14a 100644 (file)
@@ -148,11 +148,11 @@ void player_outfit(player_type *player_ptr)
     decide_initial_items(player_ptr, q_ptr);
     q_ptr = &forge;
 
-    if ((player_ptr->prace == PlayerRaceType::VAMPIRE) && (player_ptr->pclass != CLASS_NINJA)) {
+    if ((player_ptr->prace == PlayerRaceType::VAMPIRE) && (player_ptr->pclass != PlayerClassType::NINJA)) {
         q_ptr->prep(lookup_kind(ItemKindType::SCROLL, SV_SCROLL_DARKNESS));
         q_ptr->number = (ITEM_NUMBER)rand_range(2, 5);
         add_outfit(player_ptr, q_ptr);
-    } else if (player_ptr->pclass != CLASS_NINJA) {
+    } else if (player_ptr->pclass != PlayerClassType::NINJA) {
         q_ptr->prep(lookup_kind(ItemKindType::LITE, SV_LITE_TORCH));
         q_ptr->number = (ITEM_NUMBER)rand_range(3, 7);
         q_ptr->xtra4 = rand_range(3, 7) * 500;
@@ -167,31 +167,31 @@ void player_outfit(player_type *player_ptr)
         add_outfit(player_ptr, q_ptr);
     }
 
-    if ((player_ptr->pclass == CLASS_RANGER) || (player_ptr->pclass == CLASS_CAVALRY)) {
+    if ((player_ptr->pclass == PlayerClassType::RANGER) || (player_ptr->pclass == PlayerClassType::CAVALRY)) {
         q_ptr->prep(lookup_kind(ItemKindType::ARROW, SV_AMMO_NORMAL));
         q_ptr->number = (byte)rand_range(15, 20);
         add_outfit(player_ptr, q_ptr);
     }
 
-    if (player_ptr->pclass == CLASS_RANGER) {
+    if (player_ptr->pclass == PlayerClassType::RANGER) {
         q_ptr->prep(lookup_kind(ItemKindType::BOW, SV_SHORT_BOW));
         add_outfit(player_ptr, q_ptr);
-    } else if (player_ptr->pclass == CLASS_ARCHER) {
+    } else if (player_ptr->pclass == PlayerClassType::ARCHER) {
         q_ptr->prep(lookup_kind(ItemKindType::ARROW, SV_AMMO_NORMAL));
         q_ptr->number = (ITEM_NUMBER)rand_range(15, 20);
         add_outfit(player_ptr, q_ptr);
-    } else if (player_ptr->pclass == CLASS_HIGH_MAGE || player_ptr->pclass == CLASS_ELEMENTALIST) {
+    } else if (player_ptr->pclass == PlayerClassType::HIGH_MAGE || player_ptr->pclass == PlayerClassType::ELEMENTALIST) {
         q_ptr->prep(lookup_kind(ItemKindType::WAND, SV_WAND_MAGIC_MISSILE));
         q_ptr->number = 1;
         q_ptr->pval = (PARAMETER_VALUE)rand_range(25, 30);
         add_outfit(player_ptr, q_ptr);
-    } else if (player_ptr->pclass == CLASS_SORCERER) {
+    } else if (player_ptr->pclass == PlayerClassType::SORCERER) {
         for (auto book_tval = enum2i(ItemKindType::LIFE_BOOK); book_tval <= enum2i(ItemKindType::LIFE_BOOK) + MAX_MAGIC - 1; book_tval++) {
             q_ptr->prep(lookup_kind(i2enum<ItemKindType>(book_tval), 0));
             q_ptr->number = 1;
             add_outfit(player_ptr, q_ptr);
         }
-    } else if (player_ptr->pclass == CLASS_TOURIST) {
+    } else if (player_ptr->pclass == PlayerClassType::TOURIST) {
         if (player_ptr->ppersonality != PERSONALITY_SEXY) {
             q_ptr->prep(lookup_kind(ItemKindType::SHOT, SV_AMMO_LIGHT));
             q_ptr->number = rand_range(15, 20);
@@ -222,11 +222,11 @@ void player_outfit(player_type *player_ptr)
         q_ptr->number = rand_range(2, 4);
 
         add_outfit(player_ptr, q_ptr);
-    } else if (player_ptr->pclass == CLASS_NINJA) {
+    } else if (player_ptr->pclass == PlayerClassType::NINJA) {
         q_ptr->prep(lookup_kind(ItemKindType::SPIKE, 0));
         q_ptr->number = rand_range(15, 20);
         add_outfit(player_ptr, q_ptr);
-    } else if (player_ptr->pclass == CLASS_SNIPER) {
+    } else if (player_ptr->pclass == PlayerClassType::SNIPER) {
         q_ptr->prep(lookup_kind(ItemKindType::BOLT, SV_AMMO_NORMAL));
         q_ptr->number = rand_range(15, 20);
         add_outfit(player_ptr, q_ptr);
@@ -234,16 +234,17 @@ void player_outfit(player_type *player_ptr)
 
     // @todo 本来read-onlyであるべきプリセットテーブルを書き換えている. 良くないパターン.
     // 「状況によって特別に持たせたいアイテム」は別途定義すべき.
-    if (player_ptr->pclass != CLASS_SORCERER) {
+    if (player_ptr->pclass != PlayerClassType::SORCERER) {
+        auto short_pclass = enum2i(player_ptr->pclass);
         if (player_ptr->ppersonality == PERSONALITY_SEXY) {
-            player_init[player_ptr->pclass][2] = std::make_tuple(ItemKindType::HAFTED, SV_WHIP);            
+            player_init[short_pclass][2] = std::make_tuple(ItemKindType::HAFTED, SV_WHIP);            
         } else if (player_ptr->prace == PlayerRaceType::MERFOLK) {
-            player_init[player_ptr->pclass][2] = std::make_tuple(ItemKindType::POLEARM, SV_TRIDENT);
+            player_init[short_pclass][2] = std::make_tuple(ItemKindType::POLEARM, SV_TRIDENT);
         }
     }
 
     for (auto i = 0; i < 3; i++) {
-        auto &[tv, sv] = player_init[player_ptr->pclass][i];
+        auto &[tv, sv] = player_init[enum2i(player_ptr->pclass)][i];
         if ((player_ptr->prace == PlayerRaceType::ANDROID) && ((tv == ItemKindType::SOFT_ARMOR) || (tv == ItemKindType::HARD_ARMOR)))
             continue;
 
@@ -260,10 +261,12 @@ void player_outfit(player_type *player_ptr)
 
         q_ptr = &forge;
         q_ptr->prep(lookup_kind(tv, sv));
-        if ((tv == ItemKindType::SWORD || tv == ItemKindType::HAFTED)
-            && (player_ptr->pclass == CLASS_ROGUE && player_ptr->realm1 == REALM_DEATH)) /* Only assassins get a poisoned weapon */
-            q_ptr->name2 = EGO_BRAND_POIS;
 
+        /* Only assassins get a poisoned weapon */
+        if (((tv == ItemKindType::SWORD) || (tv == ItemKindType::HAFTED)) && ((player_ptr->pclass == PlayerClassType::ROGUE) && (player_ptr->realm1 == REALM_DEATH))) {
+            q_ptr->name2 = EGO_BRAND_POIS;
+        }
+        
         add_outfit(player_ptr, q_ptr);
     }
 
index 3bb5c23..6013d7a 100644 (file)
@@ -56,8 +56,9 @@ bool ask_quick_start(player_type *player_ptr)
 
     sp_ptr = &sex_info[player_ptr->psex];
     rp_ptr = &race_info[enum2i(player_ptr->prace)];
-    cp_ptr = &class_info[player_ptr->pclass];
-    mp_ptr = &m_info[player_ptr->pclass];
+    auto short_pclass = enum2i(player_ptr->pclass);
+    cp_ptr = &class_info[short_pclass];
+    mp_ptr = &m_info[short_pclass];
     ap_ptr = &personality_info[player_ptr->ppersonality];
 
     get_extra(player_ptr, false);
@@ -80,7 +81,7 @@ void save_prev_data(player_type *player_ptr, birther *birther_ptr)
     birther_ptr->pclass = player_ptr->pclass;
     birther_ptr->ppersonality = player_ptr->ppersonality;
 
-    if (player_ptr->pclass == CLASS_ELEMENTALIST)
+    if (player_ptr->pclass == PlayerClassType::ELEMENTALIST)
         birther_ptr->realm1 = player_ptr->element;
     else
         birther_ptr->realm1 = player_ptr->realm1;
@@ -127,7 +128,7 @@ void load_prev_data(player_type *player_ptr, bool swap)
     player_ptr->pclass = previous_char.pclass;
     player_ptr->ppersonality = previous_char.ppersonality;
 
-    if (player_ptr->pclass == CLASS_ELEMENTALIST)
+    if (player_ptr->pclass == PlayerClassType::ELEMENTALIST)
         player_ptr->element = previous_char.realm1;
     else
         player_ptr->realm1 = previous_char.realm1;
index 9fc7f32..3dbd373 100644 (file)
@@ -220,7 +220,7 @@ bool do_cmd_attack(player_type *player_ptr, POSITION y, POSITION x, combat_optio
             chg_virtue(player_ptr, V_HONOUR, -1);
             chg_virtue(player_ptr, V_JUSTICE, -1);
             chg_virtue(player_ptr, V_COMPASSION, -1);
-        } else if (player_ptr->pclass != CLASS_BERSERKER) {
+        } else if (player_ptr->pclass != PlayerClassType::BERSERKER) {
             if (get_check(_("本当に攻撃しますか?", "Really hit it? "))) {
                 chg_virtue(player_ptr, V_INDIVIDUALISM, 1);
                 chg_virtue(player_ptr, V_HONOUR, -1);
@@ -251,7 +251,7 @@ bool do_cmd_attack(player_type *player_ptr, POSITION y, POSITION x, combat_optio
     }
 
     if (can_attack_with_main_hand(player_ptr) && can_attack_with_sub_hand(player_ptr)) {
-        if ((player_ptr->skill_exp[SKILL_TWO_WEAPON] < s_info[player_ptr->pclass].s_max[SKILL_TWO_WEAPON])
+        if ((player_ptr->skill_exp[SKILL_TWO_WEAPON] < s_info[enum2i(player_ptr->pclass)].s_max[SKILL_TWO_WEAPON])
             && ((player_ptr->skill_exp[SKILL_TWO_WEAPON] - 1000) / 200 < r_ptr->level)) {
             if (player_ptr->skill_exp[SKILL_TWO_WEAPON] < WEAPON_EXP_BEGINNER)
                 player_ptr->skill_exp[SKILL_TWO_WEAPON] += 80;
@@ -268,7 +268,7 @@ bool do_cmd_attack(player_type *player_ptr, POSITION y, POSITION x, combat_optio
 
     if (player_ptr->riding) {
         int cur = player_ptr->skill_exp[SKILL_RIDING];
-        int max = s_info[player_ptr->pclass].s_max[SKILL_RIDING];
+        int max = s_info[enum2i(player_ptr->pclass)].s_max[SKILL_RIDING];
 
         if (cur < max) {
             DEPTH ridinglevel = r_info[player_ptr->current_floor_ptr->m_list[player_ptr->riding].r_idx].level;
index c66cb94..7b9c7c3 100644 (file)
@@ -91,23 +91,23 @@ static cm_type *initialize_cm_type(player_type *player_ptr, cm_type *cm_ptr)
 static void switch_mind_kind(player_type *player_ptr, cm_type *cm_ptr)
 {
     switch (player_ptr->pclass) {
-    case CLASS_MINDCRAFTER:
+    case PlayerClassType::MINDCRAFTER:
         cm_ptr->use_mind = mind_kind_type::MINDCRAFTER;
         cm_ptr->mind_explanation = _("精神", "skill");
         break;
-    case CLASS_FORCETRAINER:
+    case PlayerClassType::FORCETRAINER:
         cm_ptr->use_mind = mind_kind_type::KI;
         cm_ptr->mind_explanation = _("気", "skill");
         break;
-    case CLASS_BERSERKER:
+    case PlayerClassType::BERSERKER:
         cm_ptr->use_mind = mind_kind_type::BERSERKER;
         cm_ptr->mind_explanation = _("怒り", "skill");
         break;
-    case CLASS_MIRROR_MASTER:
+    case PlayerClassType::MIRROR_MASTER:
         cm_ptr->use_mind = mind_kind_type::MIRROR_MASTER;
         cm_ptr->mind_explanation = _("鏡魔法", "skill");
         break;
-    case CLASS_NINJA:
+    case PlayerClassType::NINJA:
         cm_ptr->use_mind = mind_kind_type::NINJUTSU;
         cm_ptr->mind_explanation = _("精神", "skill");
         break;
@@ -302,7 +302,7 @@ static bool switch_mind_class(player_type *player_ptr, cm_type *cm_ptr)
 static void mind_turn_passing(player_type *player_ptr, cm_type *cm_ptr)
 {
     PlayerEnergy energy(player_ptr);
-    if (cm_ptr->on_mirror && (player_ptr->pclass == CLASS_MIRROR_MASTER)) {
+    if (cm_ptr->on_mirror && (player_ptr->pclass == PlayerClassType::MIRROR_MASTER)) {
         if (cm_ptr->n == 3 || cm_ptr->n == 5 || cm_ptr->n == 7 || cm_ptr->n == 16) {
             energy.set_player_turn_energy(50);
             return;
@@ -403,18 +403,18 @@ void do_cmd_mind(player_type *player_ptr)
 static mind_kind_type decide_use_mind_browse(player_type *player_ptr)
 {
     switch (player_ptr->pclass) {
-    case CLASS_MINDCRAFTER:
+    case PlayerClassType::MINDCRAFTER:
         return mind_kind_type::MINDCRAFTER;
-    case CLASS_FORCETRAINER:
+    case PlayerClassType::FORCETRAINER:
         return mind_kind_type::KI;
-    case CLASS_BERSERKER:
+    case PlayerClassType::BERSERKER:
         return mind_kind_type::BERSERKER;
-    case CLASS_NINJA:
+    case PlayerClassType::NINJA:
         return mind_kind_type::NINJUTSU;
-    case CLASS_MIRROR_MASTER:
+    case PlayerClassType::MIRROR_MASTER:
         return mind_kind_type::MIRROR_MASTER;
     default:
-        return (mind_kind_type)0; // 実質CLASS_MINDCRAFTERと同じ.
+        return (mind_kind_type)0; // 実質PlayerClassType::MINDCRAFTERと同じ.
     }
 }
 
index 395300d..00b2668 100644 (file)
@@ -406,7 +406,7 @@ void do_cmd_stay(player_type *player_ptr, bool pickup)
 void do_cmd_rest(player_type *player_ptr)
 {
     set_action(player_ptr, ACTION_NONE);
-    if ((player_ptr->pclass == CLASS_BARD) && ((get_singing_song_effect(player_ptr) != 0) || (get_interrupting_song_effect(player_ptr) != 0)))
+    if ((player_ptr->pclass == PlayerClassType::BARD) && ((get_singing_song_effect(player_ptr) != 0) || (get_interrupting_song_effect(player_ptr) != 0)))
         stop_singing(player_ptr);
 
     SpellHex spell_hex(player_ptr);
index fa470c0..879036e 100644 (file)
@@ -500,9 +500,9 @@ void do_cmd_pet(player_type *player_ptr)
             powers[num++] = PET_TWO_HANDS;
         } else {
             switch (player_ptr->pclass) {
-            case CLASS_MONK:
-            case CLASS_FORCETRAINER:
-            case CLASS_BERSERKER:
+            case PlayerClassType::MONK:
+            case PlayerClassType::FORCETRAINER:
+            case PlayerClassType::BERSERKER:
                 if (empty_hands(player_ptr, false) == (EMPTY_HAND_MAIN | EMPTY_HAND_SUB)) {
                     if (player_ptr->pet_extra_flags & PF_TWO_HANDS) {
                         power_desc[num] = _("片手で格闘する", "use one hand to control the pet you are riding");
index affb037..d1d10d6 100644 (file)
@@ -62,7 +62,7 @@ void do_cmd_fire(player_type *player_ptr, SPELL_IDX snipe_type)
     }
 
     exe_fire(player_ptr, item, j_ptr, snipe_type);
-    if (!player_ptr->is_fired || player_ptr->pclass != CLASS_SNIPER)
+    if (!player_ptr->is_fired || player_ptr->pclass != PlayerClassType::SNIPER)
         return;
 
     if (snipe_type == SP_AWAY) {
index 032e0d2..c3ae70e 100644 (file)
@@ -269,9 +269,9 @@ static bool spell_okay(player_type *player_ptr, int spell, bool learned, bool st
         return false;
     }
 
-    if (player_ptr->pclass == CLASS_SORCERER)
+    if (player_ptr->pclass == PlayerClassType::SORCERER)
         return true;
-    if (player_ptr->pclass == CLASS_RED_MAGE)
+    if (player_ptr->pclass == PlayerClassType::RED_MAGE)
         return true;
 
     /* Spell is learned */
@@ -357,12 +357,12 @@ static int get_spell(player_type *player_ptr, SPELL_IDX *sn, concptr prompt, OBJ
     /* No "okay" spells */
     if (!okay)
         return false;
-    if (((use_realm) != player_ptr->realm1) && ((use_realm) != player_ptr->realm2) && (player_ptr->pclass != CLASS_SORCERER)
-        && (player_ptr->pclass != CLASS_RED_MAGE))
+    if (((use_realm) != player_ptr->realm1) && ((use_realm) != player_ptr->realm2) && (player_ptr->pclass != PlayerClassType::SORCERER)
+        && (player_ptr->pclass != PlayerClassType::RED_MAGE))
         return false;
-    if (((player_ptr->pclass == CLASS_SORCERER) || (player_ptr->pclass == CLASS_RED_MAGE)) && !is_magic(use_realm))
+    if (((player_ptr->pclass == PlayerClassType::SORCERER) || (player_ptr->pclass == PlayerClassType::RED_MAGE)) && !is_magic(use_realm))
         return false;
-    if ((player_ptr->pclass == CLASS_RED_MAGE) && ((use_realm) != REALM_ARCANE) && (sval > 1))
+    if ((player_ptr->pclass == PlayerClassType::RED_MAGE) && ((use_realm) != REALM_ARCANE) && (sval > 1))
         return false;
 
     /* Assume cancelled */
@@ -621,14 +621,14 @@ void do_cmd_browse(player_type *player_ptr)
     concptr q, s;
 
     /* Warriors are illiterate */
-    if (!(player_ptr->realm1 || player_ptr->realm2) && (player_ptr->pclass != CLASS_SORCERER) && (player_ptr->pclass != CLASS_RED_MAGE)) {
+    if (!(player_ptr->realm1 || player_ptr->realm2) && (player_ptr->pclass != PlayerClassType::SORCERER) && (player_ptr->pclass != PlayerClassType::RED_MAGE)) {
         msg_print(_("本を読むことができない!", "You cannot read books!"));
         return;
     }
 
     PlayerClass(player_ptr).break_samurai_stance({ SamuraiStance::MUSOU });
 
-    if (player_ptr->pclass == CLASS_FORCETRAINER) {
+    if (player_ptr->pclass == PlayerClassType::FORCETRAINER) {
         if (player_has_no_spellbooks(player_ptr)) {
             confirm_use_force(player_ptr, true);
             return;
@@ -641,7 +641,7 @@ void do_cmd_browse(player_type *player_ptr)
     q = _("どの本を読みますか? ", "Browse which book? ");
     s = _("読める本がない。", "You have no books that you can read.");
 
-    o_ptr = choose_object(player_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | (player_ptr->pclass == CLASS_FORCETRAINER ? USE_FORCE : 0)), item_tester);
+    o_ptr = choose_object(player_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | (player_ptr->pclass == PlayerClassType::FORCETRAINER ? USE_FORCE : 0)), item_tester);
 
     if (!o_ptr) {
         if (item == INVEN_FORCE) /* the_force */
@@ -994,13 +994,13 @@ bool do_cmd_cast(player_type *player_ptr)
     bool over_exerted = false;
 
     /* Require spell ability */
-    if (!player_ptr->realm1 && (player_ptr->pclass != CLASS_SORCERER) && (player_ptr->pclass != CLASS_RED_MAGE)) {
+    if (!player_ptr->realm1 && (player_ptr->pclass != PlayerClassType::SORCERER) && (player_ptr->pclass != PlayerClassType::RED_MAGE)) {
         msg_print(_("呪文を唱えられない!", "You cannot cast spells!"));
         return false;
     }
 
     if (player_ptr->blind || no_lite(player_ptr)) {
-        if (player_ptr->pclass == CLASS_FORCETRAINER)
+        if (player_ptr->pclass == PlayerClassType::FORCETRAINER)
             confirm_use_force(player_ptr, false);
         else {
             msg_print(_("目が見えない!", "You cannot see!"));
@@ -1027,7 +1027,7 @@ bool do_cmd_cast(player_type *player_ptr)
         }
     }
 
-    if (player_ptr->pclass == CLASS_FORCETRAINER) {
+    if (player_ptr->pclass == PlayerClassType::FORCETRAINER) {
         if (player_has_no_spellbooks(player_ptr)) {
             confirm_use_force(player_ptr, false);
             return true; //!< 錬気キャンセル時の処理がない
@@ -1041,7 +1041,7 @@ bool do_cmd_cast(player_type *player_ptr)
 
     auto item_tester = get_castable_spellbook_tester(player_ptr);
 
-    o_ptr = choose_object(player_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | (player_ptr->pclass == CLASS_FORCETRAINER ? USE_FORCE : 0)), item_tester);
+    o_ptr = choose_object(player_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | (player_ptr->pclass == PlayerClassType::FORCETRAINER ? USE_FORCE : 0)), item_tester);
     if (!o_ptr) {
         if (item == INVEN_FORCE) /* the_force */
         {
@@ -1054,14 +1054,14 @@ bool do_cmd_cast(player_type *player_ptr)
     /* Access the item's sval */
     sval = o_ptr->sval;
 
-    if ((player_ptr->pclass != CLASS_SORCERER) && (player_ptr->pclass != CLASS_RED_MAGE) && (o_ptr->tval == get_realm2_book(player_ptr)))
+    if ((player_ptr->pclass != PlayerClassType::SORCERER) && (player_ptr->pclass != PlayerClassType::RED_MAGE) && (o_ptr->tval == get_realm2_book(player_ptr)))
         increment = 32;
 
     /* Track the object kind */
     object_kind_track(player_ptr, o_ptr->k_idx);
     handle_stuff(player_ptr);
 
-    if ((player_ptr->pclass == CLASS_SORCERER) || (player_ptr->pclass == CLASS_RED_MAGE))
+    if ((player_ptr->pclass == PlayerClassType::SORCERER) || (player_ptr->pclass == PlayerClassType::RED_MAGE))
         realm = tval2realm(o_ptr->tval);
     else if (increment)
         realm = player_ptr->realm2;
@@ -1203,8 +1203,8 @@ bool do_cmd_cast(player_type *player_ptr)
             chg_virtue(player_ptr, V_CHANCE, 1);
 
         /* A spell was cast */
-        if (!(increment ? (player_ptr->spell_worked2 & (1UL << spell)) : (player_ptr->spell_worked1 & (1UL << spell))) && (player_ptr->pclass != CLASS_SORCERER)
-            && (player_ptr->pclass != CLASS_RED_MAGE)) {
+        if (!(increment ? (player_ptr->spell_worked2 & (1UL << spell)) : (player_ptr->spell_worked1 & (1UL << spell))) && (player_ptr->pclass != PlayerClassType::SORCERER)
+            && (player_ptr->pclass != PlayerClassType::RED_MAGE)) {
             int e = s_ptr->sexp;
 
             /* The spell worked */
index 2454fd9..0ca2345 100644 (file)
@@ -30,8 +30,8 @@ static void display_diary(player_type *player_ptr)
     sprintf(file_name, _("playrecord-%s.txt", "playrec-%s.txt"), savefile_base);
     path_build(buf, sizeof(buf), ANGBAND_DIR_USER, file_name);
 
-    if (player_ptr->pclass == CLASS_WARRIOR || player_ptr->pclass == CLASS_MONK || player_ptr->pclass == CLASS_SAMURAI
-        || player_ptr->pclass == CLASS_BERSERKER)
+    if (player_ptr->pclass == PlayerClassType::WARRIOR || player_ptr->pclass == PlayerClassType::MONK || player_ptr->pclass == PlayerClassType::SAMURAI
+        || player_ptr->pclass == PlayerClassType::BERSERKER)
         strcpy(tmp, subtitle[randint0(MAX_SUBTITLE - 1)]);
     else if (PlayerClass(player_ptr).is_wizard())
         strcpy(tmp, subtitle[randint0(MAX_SUBTITLE - 1) + 1]);
index 5f1d151..cfc3da8 100644 (file)
@@ -1,20 +1,26 @@
 #include "cmd-io/cmd-menu-content-table.h"
 #include "player-info/class-types.h"
+#include "util/enum-converter.h"
 #include "util/int-char-converter.h"
 
+/*
+ * @todo 遅くともv2.2.1の頃には職業enumとboolとintが混じっているゴミ配列であった
+ * jouken_naiyou (フィールド名もゴミ)が複数目的に利用されているようである
+ * 後で何とかする
+ */
 special_menu_content special_menu_info[MAX_SPECIAL_MENU_NUM] = {
-    { _("超能力/特殊能力", "MindCraft/Special"), 0, 0, MENU_CLASS, CLASS_MINDCRAFTER },
-    { _("ものまね/特殊能力", "Imitation/Special"), 0, 0, MENU_CLASS, CLASS_IMITATOR },
-    { _("歌/特殊能力", "Song/Special"), 0, 0, MENU_CLASS, CLASS_BARD },
-    { _("必殺技/特殊能力", "Technique/Special"), 0, 0, MENU_CLASS, CLASS_SAMURAI },
-    { _("練気術/魔法/特殊能力", "Mind/Magic/Special"), 0, 0, MENU_CLASS, CLASS_FORCETRAINER },
-    { _("技/特殊能力", "BrutalPower/Special"), 0, 0, MENU_CLASS, CLASS_BERSERKER },
-    { _("技術/特殊能力", "Technique/Special"), 0, 0, MENU_CLASS, CLASS_SMITH },
-    { _("鏡魔法/特殊能力", "MirrorMagic/Special"), 0, 0, MENU_CLASS, CLASS_MIRROR_MASTER },
-    { _("忍術/特殊能力", "Ninjutsu/Special"), 0, 0, MENU_CLASS, CLASS_NINJA },
-    { _("広域マップ(<)", "Enter global map(<)"), 2, 6, MENU_WILD, false },
-    { _("通常マップ(>)", "Enter local map(>)"), 2, 7, MENU_WILD, true },
-    { "", 0, 0, 0, 0 },
+    { _("超能力/特殊能力", "MindCraft/Special"), 0, 0, MENU_CLASS, PlayerClassType::MINDCRAFTER },
+    { _("ものまね/特殊能力", "Imitation/Special"), 0, 0, MENU_CLASS, PlayerClassType::IMITATOR },
+    { _("歌/特殊能力", "Song/Special"), 0, 0, MENU_CLASS, PlayerClassType::BARD },
+    { _("必殺技/特殊能力", "Technique/Special"), 0, 0, MENU_CLASS, PlayerClassType::SAMURAI },
+    { _("練気術/魔法/特殊能力", "Mind/Magic/Special"), 0, 0, MENU_CLASS, PlayerClassType::FORCETRAINER },
+    { _("技/特殊能力", "BrutalPower/Special"), 0, 0, MENU_CLASS, PlayerClassType::BERSERKER },
+    { _("技術/特殊能力", "Technique/Special"), 0, 0, MENU_CLASS, PlayerClassType::SMITH },
+    { _("鏡魔法/特殊能力", "MirrorMagic/Special"), 0, 0, MENU_CLASS, PlayerClassType::MIRROR_MASTER },
+    { _("忍術/特殊能力", "Ninjutsu/Special"), 0, 0, MENU_CLASS, PlayerClassType::NINJA },
+    { _("広域マップ(<)", "Enter global map(<)"), 2, 6, MENU_WILD, i2enum<PlayerClassType>(0) },
+    { _("通常マップ(>)", "Enter local map(>)"), 2, 7, MENU_WILD, i2enum<PlayerClassType>(1) },
+    { "", 0, 0, 0, i2enum<PlayerClassType>(0) },
 };
 
 menu_content menu_info[MAX_COMMAND_MENU_NUM][MAX_COMMAND_PER_SCREEN] = {
index e0811ae..a1f0075 100644 (file)
@@ -2,19 +2,20 @@
 
 #include "system/angband.h"
 
-typedef struct menu_content {
+struct menu_content {
     concptr name;
     byte cmd;
     bool fin;
-} menu_content;
+};
 
-typedef struct special_menu_content {
+enum class PlayerClassType : short;
+struct special_menu_content {
     concptr name;
     byte window;
     byte number;
     byte jouken;
-    byte jouken_naiyou;
-} special_menu_content;
+    PlayerClassType jouken_naiyou;
+};
 
 #define MAX_COMMAND_PER_SCREEN 10
 #define MAX_COMMAND_MENU_NUM 10
index 8acef33..ac6b223 100644 (file)
@@ -114,10 +114,10 @@ static bool decide_magic_book_exp(player_type *player_ptr, destroy_type *destroy
     if (player_ptr->prace == PlayerRaceType::ANDROID)
         return false;
 
-    if ((player_ptr->pclass == CLASS_WARRIOR) || (player_ptr->pclass == CLASS_BERSERKER))
+    if ((player_ptr->pclass == PlayerClassType::WARRIOR) || (player_ptr->pclass == PlayerClassType::BERSERKER))
         return true;
 
-    if (player_ptr->pclass != CLASS_PALADIN)
+    if (player_ptr->pclass != PlayerClassType::PALADIN)
         return false;
 
     bool gain_expr = false;
index adb1207..bd9f9ff 100644 (file)
@@ -314,7 +314,7 @@ void do_cmd_takeoff(player_type *player_ptr)
 
     PlayerEnergy energy(player_ptr);
     if (o_ptr->is_cursed()) {
-        if (o_ptr->curse_flags.has(TRC::PERMA_CURSE) || (player_ptr->pclass != CLASS_BERSERKER)) {
+        if (o_ptr->curse_flags.has(TRC::PERMA_CURSE) || (player_ptr->pclass != PlayerClassType::BERSERKER)) {
             msg_print(_("ふーむ、どうやら呪われているようだ。", "Hmmm, it seems to be cursed."));
             return;
         }
index 13a1b01..90707d5 100644 (file)
@@ -74,7 +74,7 @@ bool ThrowCommand::do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken)
         torch_lost_fuel(ote.q_ptr);
     }
 
-    ote.corruption_possibility = ote.hit_body ? breakage_chance(this->player_ptr, ote.q_ptr, this->player_ptr->pclass == CLASS_ARCHER, 0) : 0;
+    ote.corruption_possibility = ote.hit_body ? breakage_chance(this->player_ptr, ote.q_ptr, this->player_ptr->pclass == PlayerClassType::ARCHER, 0) : 0;
     ote.display_figurine_throw();
     ote.display_potion_throw();
     ote.check_boomerang_throw();
index 96ccf19..a3da1a5 100644 (file)
@@ -124,7 +124,7 @@ static bool decide_attack_hit(player_type *player_ptr, player_attack_type *pa_pt
             n *= 2;
 
         success_hit = one_in_(n);
-    } else if ((player_ptr->pclass == CLASS_NINJA) && ((pa_ptr->backstab || pa_ptr->surprise_attack) && !(r_ptr->flagsr & RFR_RES_ALL)))
+    } else if ((player_ptr->pclass == PlayerClassType::NINJA) && ((pa_ptr->backstab || pa_ptr->surprise_attack) && !(r_ptr->flagsr & RFR_RES_ALL)))
         success_hit = true;
     else
         success_hit = test_hit_norm(player_ptr, chance, r_ptr->ac, pa_ptr->m_ptr->ml);
index 9c8d313..80b46dd 100644 (file)
@@ -54,7 +54,7 @@ HIT_POINT critical_norm(player_type *player_ptr, WEIGHT weight, int plus, HIT_PO
     int i = (weight + (meichuu * 3 + plus * 5) + player_ptr->skill_thn);
 
     /* Chance */
-    auto pow = (player_ptr->pclass == CLASS_NINJA) ? 4444 : 5000;
+    auto pow = (player_ptr->pclass == PlayerClassType::NINJA) ? 4444 : 5000;
     if (impact)
         pow /= 2;
 
@@ -129,7 +129,7 @@ void critical_attack(player_type *player_ptr, player_attack_type *pa_ptr)
         return;
     }
 
-    bool is_ninja_hit = (player_ptr->pclass == CLASS_NINJA) && has_melee_weapon(player_ptr, INVEN_MAIN_HAND + pa_ptr->hand)
+    bool is_ninja_hit = (player_ptr->pclass == PlayerClassType::NINJA) && has_melee_weapon(player_ptr, INVEN_MAIN_HAND + pa_ptr->hand)
         && !player_ptr->is_icky_wield[pa_ptr->hand] && ((player_ptr->cur_lite <= 0) || one_in_(7));
     if (is_ninja_hit)
         ninja_critical(player_ptr, pa_ptr);
index d093c4a..79a2322 100644 (file)
@@ -638,7 +638,7 @@ void exe_fire(player_type *player_ptr, INVENTORY_IDX item, object_type *j_ptr, S
 
                 if ((r_ptr->level + 10) > player_ptr->lev) {
                     int now_exp = player_ptr->weapon_exp[0][j_ptr->sval];
-                    if (now_exp < s_info[player_ptr->pclass].w_max[0][j_ptr->sval]) {
+                    if (now_exp < s_info[enum2i(player_ptr->pclass)].w_max[0][j_ptr->sval]) {
                         SUB_EXP amount = 0;
                         if (now_exp < WEAPON_EXP_BEGINNER)
                             amount = 80;
@@ -654,7 +654,7 @@ void exe_fire(player_type *player_ptr, INVENTORY_IDX item, object_type *j_ptr, S
                 }
 
                 if (player_ptr->riding) {
-                    if ((player_ptr->skill_exp[SKILL_RIDING] < s_info[player_ptr->pclass].s_max[SKILL_RIDING])
+                    if ((player_ptr->skill_exp[SKILL_RIDING] < s_info[enum2i(player_ptr->pclass)].s_max[SKILL_RIDING])
                         && ((player_ptr->skill_exp[SKILL_RIDING] - (RIDING_EXP_BEGINNER * 2)) / 200
                             < r_info[player_ptr->current_floor_ptr->m_list[player_ptr->riding].r_idx].level)
                         && one_in_(2)) {
@@ -838,7 +838,7 @@ void exe_fire(player_type *player_ptr, INVENTORY_IDX item, object_type *j_ptr, S
         }
 
         /* Chance of breakage (during attacks) */
-        j = (hit_body ? breakage_chance(player_ptr, q_ptr, player_ptr->pclass == CLASS_ARCHER, snipe_type) : 0);
+        j = (hit_body ? breakage_chance(player_ptr, q_ptr, player_ptr->pclass == PlayerClassType::ARCHER, snipe_type) : 0);
 
         if (stick_to) {
             MONSTER_IDX m_idx = player_ptr->current_floor_ptr->grid_array[y][x].m_idx;
@@ -972,7 +972,7 @@ HIT_POINT critical_shot(player_type *player_ptr, WEIGHT weight, int plus_ammo, i
 
     /* Snipers can shot more critically with crossbows */
     i += ((i * sniper_concent) / 5);
-    if ((player_ptr->pclass == CLASS_SNIPER) && (player_ptr->tval_ammo == ItemKindType::BOLT))
+    if ((player_ptr->pclass == PlayerClassType::SNIPER) && (player_ptr->tval_ammo == ItemKindType::BOLT))
         i *= 2;
 
     /* Good bow makes more critical */
@@ -1123,7 +1123,7 @@ HIT_POINT calc_crit_ratio_shot(player_type *player_ptr, HIT_POINT plus_ammo, HIT
 
     /* Snipers can shot more critically with crossbows */
     i += ((i * sniper_concent) / 5);
-    if ((player_ptr->pclass == CLASS_SNIPER) && (player_ptr->tval_ammo == ItemKindType::BOLT))
+    if ((player_ptr->pclass == PlayerClassType::SNIPER) && (player_ptr->tval_ammo == ItemKindType::BOLT))
         i *= 2;
 
     /* Good bow makes more critical */
@@ -1216,7 +1216,7 @@ HIT_POINT calc_expect_crit(player_type *player_ptr, WEIGHT weight, int plus, HIT
         num += calc_weight_expect_dam(dam, weight);
     }
 
-    int pow = (player_ptr->pclass == CLASS_NINJA) ? 4444 : 5000;
+    int pow = (player_ptr->pclass == PlayerClassType::NINJA) ? 4444 : 5000;
     if (impact)
         pow /= 2;
 
index 7b26d04..a713da2 100644 (file)
@@ -183,11 +183,11 @@ HIT_POINT calc_attack_damage_with_slay(player_type *player_ptr, object_type *o_p
 
         mult = mult_brand(player_ptr, mult, flgs, m_ptr);
 
-        if (player_ptr->pclass == CLASS_SAMURAI) {
+        if (player_ptr->pclass == PlayerClassType::SAMURAI) {
             mult = mult_hissatsu(player_ptr, mult, flgs, m_ptr, mode);
         }
 
-        if ((player_ptr->pclass != CLASS_SAMURAI) && (flgs.has(TR_FORCE_WEAPON)) && (player_ptr->csp > (o_ptr->dd * o_ptr->ds / 5))) {
+        if ((player_ptr->pclass != PlayerClassType::SAMURAI) && (flgs.has(TR_FORCE_WEAPON)) && (player_ptr->csp > (o_ptr->dd * o_ptr->ds / 5))) {
             player_ptr->csp -= (1 + (o_ptr->dd * o_ptr->ds / 5));
             player_ptr->redraw |= (PR_MANA);
             mult = mult * 3 / 2 + 20;
index 97d0e46..0e910da 100644 (file)
@@ -257,13 +257,13 @@ static void generate_world(player_type *player_ptr, bool new_game)
     panel_row_min = floor_ptr->height;
     panel_col_min = floor_ptr->width;
 
-    if (player_ptr->pclass != CLASS_SORCERER) {
+    if (player_ptr->pclass != PlayerClassType::SORCERER) {
         auto begin = enum2i(TV_WEAPON_BEGIN);
         if (player_ptr->ppersonality == PERSONALITY_SEXY)
-            s_info[player_ptr->pclass].w_max[enum2i(ItemKindType::HAFTED) - begin][SV_WHIP] = WEAPON_EXP_MASTER;
+            s_info[enum2i(player_ptr->pclass)].w_max[enum2i(ItemKindType::HAFTED) - begin][SV_WHIP] = WEAPON_EXP_MASTER;
         if (player_ptr->prace == PlayerRaceType::MERFOLK) {
-            s_info[player_ptr->pclass].w_max[enum2i(ItemKindType::POLEARM) - begin][SV_TRIDENT] = WEAPON_EXP_MASTER;
-            s_info[player_ptr->pclass].w_max[enum2i(ItemKindType::POLEARM) - begin][SV_TRIFURCATE_SPEAR] = WEAPON_EXP_MASTER;
+            s_info[enum2i(player_ptr->pclass)].w_max[enum2i(ItemKindType::POLEARM) - begin][SV_TRIDENT] = WEAPON_EXP_MASTER;
+            s_info[enum2i(player_ptr->pclass)].w_max[enum2i(ItemKindType::POLEARM) - begin][SV_TRIFURCATE_SPEAR] = WEAPON_EXP_MASTER;
         }
     }
 
@@ -297,10 +297,10 @@ static void init_io(player_type *player_ptr)
 
 static void init_riding_pet(player_type *player_ptr, bool new_game)
 {
-    if (!new_game || ((player_ptr->pclass != CLASS_CAVALRY) && (player_ptr->pclass != CLASS_BEASTMASTER)))
+    if (!new_game || ((player_ptr->pclass != PlayerClassType::CAVALRY) && (player_ptr->pclass != PlayerClassType::BEASTMASTER)))
         return;
 
-    MONRACE_IDX pet_r_idx = ((player_ptr->pclass == CLASS_CAVALRY) ? MON_HORSE : MON_YASE_HORSE);
+    MONRACE_IDX pet_r_idx = ((player_ptr->pclass == PlayerClassType::CAVALRY) ? MON_HORSE : MON_YASE_HORSE);
     monster_race *r_ptr = &r_info[pet_r_idx];
     place_monster_aux(player_ptr, 0, player_ptr->y, player_ptr->x - 1, pet_r_idx, (PM_FORCE_PET | PM_NO_KAGE));
     monster_type *m_ptr = &player_ptr->current_floor_ptr->m_list[hack_m_idx_ii];
index c6a1d3a..d89e73b 100644 (file)
@@ -225,7 +225,7 @@ void process_player(player_type *player_ptr)
     if (player_ptr->lightspeed)
         set_lightspeed(player_ptr, player_ptr->lightspeed - 1, true);
 
-    if ((player_ptr->pclass == CLASS_FORCETRAINER) && get_current_ki(player_ptr)) {
+    if ((player_ptr->pclass == PlayerClassType::FORCETRAINER) && get_current_ki(player_ptr)) {
         if (get_current_ki(player_ptr) < 40)
             set_current_ki(player_ptr, true, 0);
         else
@@ -372,7 +372,7 @@ void process_player(player_type *player_ptr)
                 }
             }
 
-            if (player_ptr->pclass == CLASS_IMITATOR) {
+            if (player_ptr->pclass == PlayerClassType::IMITATOR) {
                 auto mane_data = PlayerClass(player_ptr).get_specific_data<mane_data_type>();
                 if (static_cast<int>(mane_data->mane_list.size()) > (player_ptr->lev > 44 ? 3 : player_ptr->lev > 29 ? 2 : 1)) {
                     mane_data->mane_list.pop_front();
index e72213c..5db22ae 100644 (file)
@@ -211,7 +211,7 @@ errr top_twenty(player_type *current_player_ptr)
     sprintf(the_score.sex, "%c", (current_player_ptr->psex ? 'm' : 'f'));
     snprintf(buf, sizeof(buf), "%2d", MIN(enum2i(current_player_ptr->prace), MAX_RACES));
     memcpy(the_score.p_r, buf, 3);
-    snprintf(buf, sizeof(buf), "%2d", MIN(current_player_ptr->pclass, MAX_CLASS));
+    snprintf(buf, sizeof(buf), "%2d", MIN(current_player_ptr->pclass, PlayerClassType::MAX));
     memcpy(the_score.p_c, buf, 3);
     snprintf(buf, sizeof(buf), "%2d", MIN(current_player_ptr->ppersonality, MAX_PERSONALITIES));
     memcpy(the_score.p_a, buf, 3);
@@ -314,7 +314,7 @@ errr predict_score(player_type *current_player_ptr)
     sprintf(the_score.sex, "%c", (current_player_ptr->psex ? 'm' : 'f'));
     snprintf(buf, sizeof(buf), "%2d", MIN(enum2i(current_player_ptr->prace), MAX_RACES));
     memcpy(the_score.p_r, buf, 3);
-    snprintf(buf, sizeof(buf), "%2d", MIN(current_player_ptr->pclass, MAX_CLASS));
+    snprintf(buf, sizeof(buf), "%2d", MIN(current_player_ptr->pclass, PlayerClassType::MAX));
     memcpy(the_score.p_c, buf, 3);
     snprintf(buf, sizeof(buf), "%2d", MIN(current_player_ptr->ppersonality, MAX_PERSONALITIES));
     memcpy(the_score.p_a, buf, 3);
index f1a2efc..a2f4b22 100644 (file)
@@ -202,7 +202,7 @@ void redraw_stuff(player_type *player_ptr)
         print_speed(player_ptr);
     }
 
-    if (player_ptr->pclass == CLASS_IMITATOR) {
+    if (player_ptr->pclass == PlayerClassType::IMITATOR) {
         if (player_ptr->redraw & (PR_IMITATION)) {
             player_ptr->redraw &= ~(PR_IMITATION);
             print_imitation(player_ptr);
index 4f3549b..f645ecb 100644 (file)
@@ -121,7 +121,7 @@ void process_dungeon(player_type *player_ptr, bool load_game)
         }
     }
 
-    if ((player_ptr->pclass == CLASS_BARD) && (get_singing_song_effect(player_ptr) > MUSIC_DETECT))
+    if ((player_ptr->pclass == PlayerClassType::BARD) && (get_singing_song_effect(player_ptr) > MUSIC_DETECT))
         set_singing_song_effect(player_ptr, MUSIC_DETECT);
 
     if (!player_ptr->playing || player_ptr->is_dead)
index af78747..d83aa73 100644 (file)
@@ -362,7 +362,7 @@ static HIT_POINT calcutate_capturable_hp(player_type *player_ptr, monster_type *
     if (is_pet(m_ptr))
         return hp * 4L;
 
-    if ((player_ptr->pclass == CLASS_BEASTMASTER) && monster_living(m_ptr->r_idx))
+    if ((player_ptr->pclass == PlayerClassType::BEASTMASTER) && monster_living(m_ptr->r_idx))
         return hp * 3 / 10;
 
     return hp * 3 / 20;
index 5a0ad9b..91e3367 100644 (file)
@@ -260,7 +260,7 @@ static void effect_monster_psi_drain_resist(player_type *player_ptr, effect_mons
 static void effect_monster_psi_drain_change_power(player_type *player_ptr, effect_monster_type *em_ptr)
 {
     int b = damroll(5, em_ptr->dam) / 4;
-    concptr str = (player_ptr->pclass == CLASS_MINDCRAFTER) ? _("超能力パワー", "psychic energy") : _("魔力", "mana");
+    concptr str = (player_ptr->pclass == PlayerClassType::MINDCRAFTER) ? _("超能力パワー", "psychic energy") : _("魔力", "mana");
     concptr msg = _("あなたは%sの苦痛を%sに変換した!", (em_ptr->seen ? "You convert %s's pain into %s!" : "You convert %ss pain into %s!"));
     msg_format(msg, em_ptr->m_name, str);
 
index 24d40f5..ebe4fdf 100644 (file)
@@ -517,7 +517,7 @@ void describe_flavor(player_type *player_ptr, char *buf, object_type *o_ptr, BIT
         flavor_ptr->bow_ptr = &player_ptr->inventory_list[INVEN_BOW];
         if ((flavor_ptr->bow_ptr->k_idx != 0) && (flavor_ptr->o_ptr->tval == bow_tval_ammo(flavor_ptr->bow_ptr)))
             describe_bow_power(player_ptr, flavor_ptr);
-        else if ((player_ptr->pclass == CLASS_NINJA) && (flavor_ptr->o_ptr->tval == ItemKindType::SPIKE))
+        else if ((player_ptr->pclass == PlayerClassType::NINJA) && (flavor_ptr->o_ptr->tval == ItemKindType::SPIKE))
             describe_spike_power(player_ptr, flavor_ptr);
     }
 
index dd7ee68..86707d4 100644 (file)
@@ -384,7 +384,7 @@ void change_floor(player_type *player_ptr)
     player_ptr->floor_id = new_floor_id;
     w_ptr->character_dungeon = true;
     if (player_ptr->ppersonality == PERSONALITY_MUNCHKIN)
-        wiz_lite(player_ptr, (bool)(player_ptr->pclass == CLASS_NINJA));
+        wiz_lite(player_ptr, (bool)(player_ptr->pclass == PlayerClassType::NINJA));
 
     player_ptr->current_floor_ptr->generated_turn = w_ptr->game_turn;
     player_ptr->feeling_turn = player_ptr->current_floor_ptr->generated_turn;
index 58b18d6..af4e785 100644 (file)
@@ -304,7 +304,7 @@ void process_player_hp_mp(player_type *player_ptr)
     }
 
     regenmana(player_ptr, upkeep_factor, regen_amount);
-    if (player_ptr->pclass == CLASS_MAGIC_EATER) {
+    if (player_ptr->pclass == PlayerClassType::MAGIC_EATER) {
         regenmagic(player_ptr, regen_amount);
     }
 
index a771b45..ee5a1cb 100644 (file)
@@ -230,17 +230,16 @@ parse_error_type parse_line_building(char *buf)
         return (PARSE_ERROR_TOO_FEW_ARGUMENTS);
     }
     case 'C': {
-        int n;
-        n = tokenize(s + 2, MAX_CLASS, zz, 0);
-        for (int i = 0; i < MAX_CLASS; i++) {
-            building[index].member_class.push_back(i2enum<PlayerClassType>((i < n) ? atoi(zz[i]) : 1));
+        auto pct_max = enum2i(PlayerClassType::MAX);
+        auto n = tokenize(s + 2, pct_max, zz, 0);
+        for (int i = 0; i < pct_max; i++) {
+            building[index].member_class.push_back((i < n) ? atoi(zz[i]) : 1);
         }
 
         break;
     }
     case 'R': {
-        int n;
-        n = tokenize(s + 2, MAX_RACES, zz, 0);
+        auto n = tokenize(s + 2, MAX_RACES, zz, 0);
         for (int i = 0; i < MAX_RACES; i++) {
             building[index].member_race[i] = (i < n) ? atoi(zz[i]) : 1;
         }
index 5dea21c..d915778 100644 (file)
@@ -231,15 +231,15 @@ static void dump_blue_mage(player_type *player_ptr, FILE *fff)
 void dump_aux_class_special(player_type *player_ptr, FILE *fff)
 {
     switch (player_ptr->pclass) {
-    case CLASS_MAGIC_EATER: {
+    case PlayerClassType::MAGIC_EATER: {
         dump_magic_eater(player_ptr, fff);
         return;
     }
-    case CLASS_SMITH: {
+    case PlayerClassType::SMITH: {
         dump_smith(player_ptr, fff);
         return;
     }
-    case CLASS_BLUE_MAGE: {
+    case PlayerClassType::BLUE_MAGE: {
         dump_blue_mage(player_ptr, fff);
         return;
     }
index 2fd207d..bfb39dd 100644 (file)
@@ -307,11 +307,11 @@ void process_command(player_type *player_ptr)
         break;
     }
     case 'G': {
-        if (player_ptr->pclass == CLASS_SORCERER || player_ptr->pclass == CLASS_RED_MAGE || player_ptr->pclass == CLASS_ELEMENTALIST)
+        if (player_ptr->pclass == PlayerClassType::SORCERER || player_ptr->pclass == PlayerClassType::RED_MAGE || player_ptr->pclass == PlayerClassType::ELEMENTALIST)
             msg_print(_("呪文を学習する必要はない!", "You don't have to learn spells!"));
-        else if (player_ptr->pclass == CLASS_SAMURAI)
+        else if (player_ptr->pclass == PlayerClassType::SAMURAI)
             do_cmd_gain_hissatsu(player_ptr);
-        else if (player_ptr->pclass == CLASS_MAGIC_EATER)
+        else if (player_ptr->pclass == PlayerClassType::MAGIC_EATER)
             import_magic_device(player_ptr);
         else
             do_cmd_study(player_ptr);
@@ -319,16 +319,16 @@ void process_command(player_type *player_ptr)
         break;
     }
     case 'b': {
-        if ((player_ptr->pclass == CLASS_MINDCRAFTER) || (player_ptr->pclass == CLASS_BERSERKER) || (player_ptr->pclass == CLASS_NINJA)
-            || (player_ptr->pclass == CLASS_MIRROR_MASTER))
+        if ((player_ptr->pclass == PlayerClassType::MINDCRAFTER) || (player_ptr->pclass == PlayerClassType::BERSERKER) || (player_ptr->pclass == PlayerClassType::NINJA)
+            || (player_ptr->pclass == PlayerClassType::MIRROR_MASTER))
             do_cmd_mind_browse(player_ptr);
-        else if (player_ptr->pclass == CLASS_ELEMENTALIST)
+        else if (player_ptr->pclass == PlayerClassType::ELEMENTALIST)
             do_cmd_element_browse(player_ptr);
-        else if (player_ptr->pclass == CLASS_SMITH)
+        else if (player_ptr->pclass == PlayerClassType::SMITH)
             do_cmd_kaji(player_ptr, true);
-        else if (player_ptr->pclass == CLASS_MAGIC_EATER)
+        else if (player_ptr->pclass == PlayerClassType::MAGIC_EATER)
             do_cmd_magic_eater(player_ptr, true, false);
-        else if (player_ptr->pclass == CLASS_SNIPER)
+        else if (player_ptr->pclass == PlayerClassType::SNIPER)
             do_cmd_snipe_browse(player_ptr);
         else
             do_cmd_browse(player_ptr);
@@ -340,37 +340,37 @@ void process_command(player_type *player_ptr)
             break;
         }
 
-        if ((player_ptr->pclass == CLASS_WARRIOR) || (player_ptr->pclass == CLASS_ARCHER) || (player_ptr->pclass == CLASS_CAVALRY)) {
+        if ((player_ptr->pclass == PlayerClassType::WARRIOR) || (player_ptr->pclass == PlayerClassType::ARCHER) || (player_ptr->pclass == PlayerClassType::CAVALRY)) {
             msg_print(_("呪文を唱えられない!", "You cannot cast spells!"));
             break;
         }
 
-        if (floor_ptr->dun_level && d_info[player_ptr->dungeon_idx].flags.has(DF::NO_MAGIC) && (player_ptr->pclass != CLASS_BERSERKER)
-            && (player_ptr->pclass != CLASS_SMITH)) {
+        if (floor_ptr->dun_level && d_info[player_ptr->dungeon_idx].flags.has(DF::NO_MAGIC) && (player_ptr->pclass != PlayerClassType::BERSERKER)
+            && (player_ptr->pclass != PlayerClassType::SMITH)) {
             msg_print(_("ダンジョンが魔法を吸収した!", "The dungeon absorbs all attempted magic!"));
             msg_print(nullptr);
             break;
         }
 
-        if (player_ptr->anti_magic && (player_ptr->pclass != CLASS_BERSERKER) && (player_ptr->pclass != CLASS_SMITH)) {
+        if (player_ptr->anti_magic && (player_ptr->pclass != PlayerClassType::BERSERKER) && (player_ptr->pclass != PlayerClassType::SMITH)) {
             concptr which_power = _("魔法", "magic");
             switch (player_ptr->pclass) {
-            case CLASS_MINDCRAFTER:
+            case PlayerClassType::MINDCRAFTER:
                 which_power = _("超能力", "psionic powers");
                 break;
-            case CLASS_IMITATOR:
+            case PlayerClassType::IMITATOR:
                 which_power = _("ものまね", "imitation");
                 break;
-            case CLASS_SAMURAI:
+            case PlayerClassType::SAMURAI:
                 which_power = _("必殺剣", "hissatsu");
                 break;
-            case CLASS_MIRROR_MASTER:
+            case PlayerClassType::MIRROR_MASTER:
                 which_power = _("鏡魔法", "mirror magic");
                 break;
-            case CLASS_NINJA:
+            case PlayerClassType::NINJA:
                 which_power = _("忍術", "ninjutsu");
                 break;
-            case CLASS_ELEMENTALIST:
+            case PlayerClassType::ELEMENTALIST:
                 which_power = _("元素魔法", "magic");
                 break;
             default:
@@ -384,28 +384,28 @@ void process_command(player_type *player_ptr)
             break;
         }
 
-        if (is_shero(player_ptr) && (player_ptr->pclass != CLASS_BERSERKER)) {
+        if (is_shero(player_ptr) && (player_ptr->pclass != PlayerClassType::BERSERKER)) {
             msg_format(_("狂戦士化していて頭が回らない!", "You cannot think directly!"));
             PlayerEnergy(player_ptr).reset_player_turn();
             break;
         }
 
-        if ((player_ptr->pclass == CLASS_MINDCRAFTER) || (player_ptr->pclass == CLASS_BERSERKER) || (player_ptr->pclass == CLASS_NINJA)
-            || (player_ptr->pclass == CLASS_MIRROR_MASTER))
+        if ((player_ptr->pclass == PlayerClassType::MINDCRAFTER) || (player_ptr->pclass == PlayerClassType::BERSERKER) || (player_ptr->pclass == PlayerClassType::NINJA)
+            || (player_ptr->pclass == PlayerClassType::MIRROR_MASTER))
             do_cmd_mind(player_ptr);
-        else if (player_ptr->pclass == CLASS_ELEMENTALIST)
+        else if (player_ptr->pclass == PlayerClassType::ELEMENTALIST)
             do_cmd_element(player_ptr);
-        else if (player_ptr->pclass == CLASS_IMITATOR)
+        else if (player_ptr->pclass == PlayerClassType::IMITATOR)
             do_cmd_mane(player_ptr, false);
-        else if (player_ptr->pclass == CLASS_MAGIC_EATER)
+        else if (player_ptr->pclass == PlayerClassType::MAGIC_EATER)
             do_cmd_magic_eater(player_ptr, false, false);
-        else if (player_ptr->pclass == CLASS_SAMURAI)
+        else if (player_ptr->pclass == PlayerClassType::SAMURAI)
             do_cmd_hissatsu(player_ptr);
-        else if (player_ptr->pclass == CLASS_BLUE_MAGE)
+        else if (player_ptr->pclass == PlayerClassType::BLUE_MAGE)
             do_cmd_cast_learned(player_ptr);
-        else if (player_ptr->pclass == CLASS_SMITH)
+        else if (player_ptr->pclass == PlayerClassType::SMITH)
             do_cmd_kaji(player_ptr, false);
-        else if (player_ptr->pclass == CLASS_SNIPER)
+        else if (player_ptr->pclass == PlayerClassType::SNIPER)
             do_cmd_snipe(player_ptr);
         else
             (void)do_cmd_cast(player_ptr);
index de2a2e9..0aa3b26 100644 (file)
@@ -95,8 +95,10 @@ static char inkey_from_menu(player_type *player_ptr)
                     break;
                 case MENU_WILD:
                     if (!floor_ptr->dun_level && !floor_ptr->inside_arena && !floor_ptr->inside_quest) {
-                        if ((byte)player_ptr->wild_mode == special_menu_info[hoge].jouken_naiyou)
+                        auto can_do_in_wilderness = enum2i(special_menu_info[hoge].jouken_naiyou) > 0;
+                        if (player_ptr->wild_mode == can_do_in_wilderness) {
                             menu_name = special_menu_info[hoge].name;
+                        }
                     }
                     break;
                 default:
index de2aa7f..b875a71 100644 (file)
@@ -415,7 +415,7 @@ bool report_score(player_type *player_ptr, display_player_pf display_player)
     sprintf(personality_desc, "%s ", ap_ptr->title);
 #endif
 
-    auto realm1_name = player_ptr->pclass == CLASS_ELEMENTALIST ? get_element_title(player_ptr->element) : realm_names[player_ptr->realm1];
+    auto realm1_name = player_ptr->pclass == PlayerClassType::ELEMENTALIST ? get_element_title(player_ptr->element) : realm_names[player_ptr->realm1];
     buf_sprintf(score, "name: %s\n", player_ptr->name);
     buf_sprintf(score, "version: %s\n", title);
     buf_sprintf(score, "score: %d\n", calc_score(player_ptr));
index 8384eee..d7501fb 100644 (file)
@@ -41,7 +41,7 @@ void do_cmd_knowledge_weapon_exp(player_type *player_ptr)
                     continue;
 
                 SUB_EXP weapon_exp = player_ptr->weapon_exp[4 - i][num];
-                SUB_EXP weapon_max = s_info[player_ptr->pclass].w_max[4 - i][num];
+                SUB_EXP weapon_max = s_info[enum2i(player_ptr->pclass)].w_max[4 - i][num];
                 strip_name(tmp, k_ref.idx);
                 fprintf(fff, "%-25s ", tmp);
                 if (show_actual_value)
@@ -160,7 +160,7 @@ void do_cmd_knowledge_skill_exp(player_type *player_ptr)
 
     for (int i = 0; i < SKILL_MAX; i++) {
         SUB_EXP skill_exp = player_ptr->skill_exp[i];
-        SUB_EXP skill_max = s_info[player_ptr->pclass].s_max[i];
+        SUB_EXP skill_max = s_info[enum2i(player_ptr->pclass)].s_max[i];
         fprintf(fff, "%-20s ", skill_name[i]);
         if (show_actual_value)
             fprintf(fff, "%4d/%4d ", MIN(skill_exp, skill_max), skill_max);
index 1a817ad..5229fb5 100644 (file)
@@ -70,9 +70,10 @@ static void dump_yourself(player_type *player_ptr, FILE *fff)
         t += strlen(t) + 1;
     }
 
-    shape_buffer(class_explanations[player_ptr->pclass].data(), 78, temp, sizeof(temp));
+    auto short_pclass = enum2i(player_ptr->pclass);
+    shape_buffer(class_explanations[short_pclass].data(), 78, temp, sizeof(temp));
     fprintf(fff, "\n");
-    fprintf(fff, _("職業: %s\n", "Class: %s\n"), class_info[player_ptr->pclass].title);
+    fprintf(fff, _("職業: %s\n", "Class: %s\n"), class_info[short_pclass].title);
 
     t = temp;
     for (int i = 0; i < 10; i++) {
@@ -140,7 +141,7 @@ static void dump_winner_classes(FILE *fff)
     size_t max_len = 75;
     std::string s = "";
     std::string l = "";
-    for (int c = 0; c < MAX_CLASS; c++) {
+    for (int c = 0; c < enum2i(PlayerClassType::MAX); c++) {
         if (w_ptr->sf_winner.has_not(i2enum<PlayerClassType>(c)))
             continue;
 
index b73eb00..ba53f06 100644 (file)
@@ -89,10 +89,10 @@ void set_zangband_realm(player_type *player_ptr)
 
 void set_zangband_skill(player_type *player_ptr)
 {
-    if (player_ptr->pclass != CLASS_BEASTMASTER)
+    if (player_ptr->pclass != PlayerClassType::BEASTMASTER)
         player_ptr->skill_exp[SKILL_RIDING] /= 2;
 
-    player_ptr->skill_exp[SKILL_RIDING] = MIN(player_ptr->skill_exp[SKILL_RIDING], s_info[player_ptr->pclass].s_max[SKILL_RIDING]);
+    player_ptr->skill_exp[SKILL_RIDING] = MIN(player_ptr->skill_exp[SKILL_RIDING], s_info[enum2i(player_ptr->pclass)].s_max[SKILL_RIDING]);
 }
 
 void set_zangband_race(player_type *player_ptr)
@@ -202,22 +202,22 @@ void set_zangband_quest(player_type *player_ptr, quest_type *const q_ptr, int lo
 
 void set_zangband_class(player_type *player_ptr)
 {
-    if (h_older_than(0, 2, 2) && (player_ptr->pclass == CLASS_BEASTMASTER) && !player_ptr->is_dead) {
+    if (h_older_than(0, 2, 2) && (player_ptr->pclass == PlayerClassType::BEASTMASTER) && !player_ptr->is_dead) {
         player_ptr->hitdie = rp_ptr->r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
         roll_hitdice(player_ptr, SPOP_NONE);
     }
 
-    if (h_older_than(0, 3, 2) && (player_ptr->pclass == CLASS_ARCHER) && !player_ptr->is_dead) {
+    if (h_older_than(0, 3, 2) && (player_ptr->pclass == PlayerClassType::ARCHER) && !player_ptr->is_dead) {
         player_ptr->hitdie = rp_ptr->r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
         roll_hitdice(player_ptr, SPOP_NONE);
     }
 
-    if (h_older_than(0, 2, 6) && (player_ptr->pclass == CLASS_SORCERER) && !player_ptr->is_dead) {
+    if (h_older_than(0, 2, 6) && (player_ptr->pclass == PlayerClassType::SORCERER) && !player_ptr->is_dead) {
         player_ptr->hitdie = rp_ptr->r_mhp / 2 + cp_ptr->c_mhp + ap_ptr->a_mhp;
         roll_hitdice(player_ptr, SPOP_NONE);
     }
 
-    if (h_older_than(0, 4, 7) && (player_ptr->pclass == CLASS_BLUE_MAGE) && !player_ptr->is_dead) {
+    if (h_older_than(0, 4, 7) && (player_ptr->pclass == PlayerClassType::BLUE_MAGE) && !player_ptr->is_dead) {
         player_ptr->hitdie = rp_ptr->r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
         roll_hitdice(player_ptr, SPOP_NONE);
     }
index 3fee59b..90da3e6 100644 (file)
@@ -212,16 +212,17 @@ static errr exe_reading_savefile(player_type *player_ptr)
     if (load_hp_result != 0)
         return load_hp_result;
 
+    auto short_pclass = enum2i(player_ptr->pclass);
     sp_ptr = &sex_info[player_ptr->psex];
     rp_ptr = &race_info[enum2i(player_ptr->prace)];
-    cp_ptr = &class_info[player_ptr->pclass];
+    cp_ptr = &class_info[short_pclass];
     ap_ptr = &personality_info[player_ptr->ppersonality];
 
     set_zangband_class(player_ptr);
-    mp_ptr = &m_info[player_ptr->pclass];
+    mp_ptr = &m_info[short_pclass];
 
     load_spells(player_ptr);
-    if (player_ptr->pclass == CLASS_MINDCRAFTER)
+    if (player_ptr->pclass == PlayerClassType::MINDCRAFTER)
         player_ptr->add_spells = 0;
 
     errr load_inventory_result = load_inventory(player_ptr);
@@ -288,7 +289,7 @@ static errr rd_savefile(player_type *player_ptr)
  */
 static bool can_takeover_savefile(const player_type *player_ptr)
 {
-    if (loading_savefile_version_is_older_than(8) && player_ptr->pclass == CLASS_SMITH) {
+    if (loading_savefile_version_is_older_than(8) && player_ptr->pclass == PlayerClassType::SMITH) {
         return false;
     }
 
index 8da867b..eaa8872 100644 (file)
@@ -35,7 +35,7 @@ static void rd_realms(player_type *player_ptr)
     byte tmp8u;
 
     rd_byte(&tmp8u);
-    if (player_ptr->pclass == CLASS_ELEMENTALIST)
+    if (player_ptr->pclass == PlayerClassType::ELEMENTALIST)
         player_ptr->element = (int16_t)tmp8u;
     else
         player_ptr->realm1 = (int16_t)tmp8u;
@@ -112,7 +112,7 @@ void rd_experience(player_type *player_ptr)
     for (int i = 0; i < 64; i++)
         rd_s16b(&player_ptr->spell_exp[i]);
 
-    if ((player_ptr->pclass == CLASS_SORCERER) && h_older_than(0, 4, 2))
+    if ((player_ptr->pclass == PlayerClassType::SORCERER) && h_older_than(0, 4, 2))
         for (int i = 0; i < 64; i++)
             player_ptr->spell_exp[i] = SPELL_EXP_MASTER;
 
index 7b40b81..dd6f4cb 100644 (file)
@@ -424,7 +424,7 @@ void set_teleport_types(lore_type *lore_ptr)
 void set_floor_types(player_type *player_ptr, lore_type *lore_ptr)
 {
     if (lore_ptr->ability_flags.has(RF_ABILITY::DARKNESS)) {
-        if ((player_ptr->pclass != CLASS_NINJA) || (lore_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) || (lore_ptr->r_ptr->flags7 & RF7_DARK_MASK)) {
+        if ((player_ptr->pclass != PlayerClassType::NINJA) || (lore_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) || (lore_ptr->r_ptr->flags7 & RF7_DARK_MASK)) {
             lore_ptr->vp[lore_ptr->vn] = _("暗闇", "create darkness");
             lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
         } else {
index b15c76f..fdc2504 100644 (file)
@@ -203,7 +203,7 @@ errr init_v_info()
  */
 errr init_s_info()
 {
-    init_header(&s_head, MAX_CLASS);
+    init_header(&s_head, enum2i(PlayerClassType::MAX));
     return init_info("s_info", s_head, s_info, parse_s_info, nullptr);
 }
 
@@ -214,6 +214,6 @@ errr init_s_info()
  */
 errr init_m_info()
 {
-    init_header(&m_head, MAX_CLASS);
+    init_header(&m_head, enum2i(PlayerClassType::MAX));
     return init_info("m_info", m_head, m_info, parse_m_info, nullptr);
 }
index 6cafea3..c082aaa 100644 (file)
@@ -98,7 +98,7 @@ static void go_to_arena(player_type *player_ptr)
     if (battle_metal_babble(player_ptr))
         return;
 
-    if (player_ptr->riding && (player_ptr->pclass != CLASS_BEASTMASTER) && (player_ptr->pclass != CLASS_CAVALRY)) {
+    if (player_ptr->riding && (player_ptr->pclass != PlayerClassType::BEASTMASTER) && (player_ptr->pclass != PlayerClassType::CAVALRY)) {
         msg_print(_("ペットに乗ったままではアリーナへ入れさせてもらえなかった。", "You don't have permission to enter with pet."));
         msg_print(nullptr);
         return;
index 1e3822d..28b70b8 100644 (file)
@@ -155,7 +155,7 @@ static void compare_weapon_aux(player_type *player_ptr, object_type *o_ptr, int
         show_weapon_dmg(r++, col, mindam, maxdam, blow, dmg_bonus, _("切れ味:", "Vorpal:"), TERM_L_RED);
     }
 
-    if ((player_ptr->pclass != CLASS_SAMURAI) && flgs.has(TR_FORCE_WEAPON) && (player_ptr->csp > (o_ptr->dd * o_ptr->ds / 5))) {
+    if ((player_ptr->pclass != PlayerClassType::SAMURAI) && flgs.has(TR_FORCE_WEAPON) && (player_ptr->csp > (o_ptr->dd * o_ptr->ds / 5))) {
         force = true;
 
         mindam = calc_expect_dice(player_ptr, mindice, 1, 1, force, o_ptr->weight, o_ptr->to_h, player_ptr->to_h[0], dokubari, impact, vorpal_mult, vorpal_div);
index 1dbd912..ba6bf11 100644 (file)
@@ -88,8 +88,8 @@ errr init_buildings(void)
             building[i].action_restr[j] = 0;
         }
 
-        for (int j = 0; j < MAX_CLASS; j++)
-            building[i].member_class[j] = CLASS_WARRIOR;
+        for (int j = 0; j < enum2i(PlayerClassType::MAX); j++)
+            building[i].member_class[j] = static_cast<short>(PlayerClassType::WARRIOR);
 
         for (int j = 0; j < MAX_RACES; j++)
             building[i].member_race[j] = static_cast<short>(PlayerRaceType::HUMAN);
index f9d7d3c..02afa96 100644 (file)
@@ -17,7 +17,7 @@
  */
 bool is_owner(player_type *player_ptr, building_type *bldg)
 {
-    if (bldg->member_class[player_ptr->pclass] == BUILDING_OWNER) {
+    if (bldg->member_class[enum2i(player_ptr->pclass)] == BUILDING_OWNER) {
         return true;
     }
 
@@ -46,7 +46,7 @@ bool is_owner(player_type *player_ptr, building_type *bldg)
  */
 bool is_member(player_type *player_ptr, building_type *bldg)
 {
-    if (bldg->member_class[player_ptr->pclass]) {
+    if (static_cast<bool>(bldg->member_class[enum2i(player_ptr->pclass)])) {
         return true;
     }
 
@@ -60,7 +60,7 @@ bool is_member(player_type *player_ptr, building_type *bldg)
         return true;
     }
 
-    if (player_ptr->pclass != CLASS_SORCERER)
+    if (player_ptr->pclass != PlayerClassType::SORCERER)
         return false;
 
     for (int i = 0; i < MAX_MAGIC; i++) {
index 4b90a13..9dda097 100644 (file)
@@ -99,7 +99,7 @@ static void check_darkness(player_type *player_ptr, melee_spell_type *ms_ptr)
     if (ms_ptr->ability_flags.has_not(RF_ABILITY::DARKNESS))
         return;
 
-    bool vs_ninja = (player_ptr->pclass == CLASS_NINJA) && !is_hostile(ms_ptr->t_ptr);
+    bool vs_ninja = (player_ptr->pclass == PlayerClassType::NINJA) && !is_hostile(ms_ptr->t_ptr);
     bool can_use_lite_area = vs_ninja && !(ms_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) && !(ms_ptr->r_ptr->flags7 & RF7_DARK_MASK);
     if ((ms_ptr->r_ptr->flags2 & RF2_STUPID) != 0)
         return;
index 29d360c..4c292e8 100644 (file)
@@ -58,7 +58,7 @@ static void process_special_melee_spell(player_type *player_ptr, melee_spell_typ
     is_special_magic &= ms_ptr->maneable;
     is_special_magic &= w_ptr->timewalk_m_idx == 0;
     is_special_magic &= !player_ptr->blind;
-    is_special_magic &= player_ptr->pclass == CLASS_IMITATOR;
+    is_special_magic &= player_ptr->pclass == PlayerClassType::IMITATOR;
     is_special_magic &= ms_ptr->thrown_spell != RF_ABILITY::SPECIAL;
     if (!is_special_magic)
         return;
index 5be1f2a..466e56f 100644 (file)
@@ -1061,7 +1061,7 @@ process_result effect_monster_elemental_genocide(player_type *player_ptr, effect
  */
 bool has_element_resist(player_type *player_ptr, ElementRealm realm, PLAYER_LEVEL lev)
 {
-    if (player_ptr->pclass != CLASS_ELEMENTALIST)
+    if (player_ptr->pclass != PlayerClassType::ELEMENTALIST)
         return false;
 
     auto prealm = i2enum<ElementRealm>(player_ptr->element);
index e874570..716facd 100644 (file)
@@ -94,23 +94,23 @@ bool MindPowerGetter::get_mind_power(SPELL_IDX *sn, bool only_browse)
 void MindPowerGetter::select_mind_description()
 {
     switch (this->player_ptr->pclass)
-    case CLASS_MINDCRAFTER: {
+    case PlayerClassType::MINDCRAFTER: {
         this->use_mind = mind_kind_type::MINDCRAFTER;
         this->mind_description = _("超能力", "mindcraft");
         break;
-    case CLASS_FORCETRAINER:
+    case PlayerClassType::FORCETRAINER:
         this->use_mind = mind_kind_type::KI;
         this->mind_description = _("練気術", "Force");
         break;
-    case CLASS_BERSERKER:
+    case PlayerClassType::BERSERKER:
         this->use_mind = mind_kind_type::BERSERKER;
         this->mind_description = _("技", "brutal power");
         break;
-    case CLASS_MIRROR_MASTER:
+    case PlayerClassType::MIRROR_MASTER:
         this->use_mind = mind_kind_type::MIRROR_MASTER;
         this->mind_description = _("鏡魔法", "magic");
         break;
-    case CLASS_NINJA:
+    case PlayerClassType::NINJA:
         this->use_mind = mind_kind_type::NINJUTSU;
         this->mind_description = _("忍術", "ninjutsu");
         break;
index 1ce895d..7f44018 100644 (file)
@@ -98,7 +98,7 @@ static int select_blow(player_type *player_ptr, player_attack_type *pa_ptr, int
     for (int times = 0; times < max_blow_selection_times; times++) {
         do {
             pa_ptr->ma_ptr = &ma_blows[randint0(MAX_MA)];
-            if ((player_ptr->pclass == CLASS_FORCETRAINER) && (pa_ptr->ma_ptr->min_level > 1))
+            if ((player_ptr->pclass == PlayerClassType::FORCETRAINER) && (pa_ptr->ma_ptr->min_level > 1))
                 min_level = pa_ptr->ma_ptr->min_level + 3;
             else
                 min_level = pa_ptr->ma_ptr->min_level;
@@ -116,7 +116,7 @@ static int select_blow(player_type *player_ptr, player_attack_type *pa_ptr, int
             msg_print(_("攻撃を再選択しました。", "Attack re-selected."));
     }
 
-    if (player_ptr->pclass == CLASS_FORCETRAINER)
+    if (player_ptr->pclass == PlayerClassType::FORCETRAINER)
         min_level = MAX(1, pa_ptr->ma_ptr->min_level - 3);
     else
         min_level = pa_ptr->ma_ptr->min_level;
@@ -165,7 +165,7 @@ static WEIGHT calc_monk_attack_weight(player_type *player_ptr)
     if (PlayerClass(player_ptr).monk_stance_is(MonkStance::SUZAKU))
         weight = 4;
 
-    if ((player_ptr->pclass == CLASS_FORCETRAINER) && (get_current_ki(player_ptr) != 0)) {
+    if ((player_ptr->pclass == PlayerClassType::FORCETRAINER) && (get_current_ki(player_ptr) != 0)) {
         weight += (get_current_ki(player_ptr) / 30);
         if (weight > 20)
             weight = 20;
index 1eda8c6..8072109 100644 (file)
@@ -280,7 +280,7 @@ static void gain_armor_exp(player_type *player_ptr, monap_type *monap_ptr)
     }
 
     auto cur = player_ptr->skill_exp[SKILL_SHIELD];
-    auto max = s_info[player_ptr->pclass].s_max[SKILL_SHIELD];
+    auto max = s_info[enum2i(player_ptr->pclass)].s_max[SKILL_SHIELD];
     if (cur >= max) {
         return;
     }
index 7d55621..3ab5f34 100644 (file)
@@ -260,7 +260,7 @@ static void check_mspell_imitation(player_type *player_ptr, msa_type *msa_ptr)
 {
     bool seen = (!player_ptr->blind && msa_ptr->m_ptr->ml);
     bool can_imitate = player_has_los_bold(player_ptr, msa_ptr->m_ptr->fy, msa_ptr->m_ptr->fx);
-    if (!seen || !can_imitate || (w_ptr->timewalk_m_idx != 0) || (player_ptr->pclass != CLASS_IMITATOR))
+    if (!seen || !can_imitate || (w_ptr->timewalk_m_idx != 0) || (player_ptr->pclass != PlayerClassType::IMITATOR))
         return;
 
     /* Not RF_ABILITY::SPECIAL */
index 5c6a1e1..652b41c 100644 (file)
@@ -382,7 +382,7 @@ MonsterSpellResult spell_RF6_DARKNESS(player_type *player_ptr, POSITION y, POSIT
     GAME_TEXT t_name[MAX_NLEN];
     monster_name(player_ptr, t_idx, t_name);
 
-    if ((player_ptr->pclass == CLASS_NINJA) && !(r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) && !(r_ptr->flags7 & RF7_DARK_MASK))
+    if ((player_ptr->pclass == PlayerClassType::NINJA) && !(r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) && !(r_ptr->flags7 & RF7_DARK_MASK))
         can_use_lite_area = true;
 
     if (monster_to_monster && !is_hostile(t_ptr))
index 5ba511f..1d87985 100644 (file)
@@ -251,7 +251,7 @@ bool dispel_check(player_type *player_ptr, MONSTER_IDX m_idx)
     if (player_ptr->dustrobe)
         return true;
 
-    if (player_ptr->shero && (player_ptr->pclass != CLASS_BERSERKER))
+    if (player_ptr->shero && (player_ptr->pclass != PlayerClassType::BERSERKER))
         return true;
 
     if (player_ptr->mimic_form == MIMIC_DEMON_LORD)
@@ -293,7 +293,7 @@ bool dispel_check(player_type *player_ptr, MONSTER_IDX m_idx)
             return true;
     }
 
-    if (r_ptr->ability_flags.has_any_of({ RF_ABILITY::BR_POIS, RF_ABILITY::BR_NUKE }) && !((player_ptr->pclass == CLASS_NINJA) && (player_ptr->lev > 44))) {
+    if (r_ptr->ability_flags.has_any_of({ RF_ABILITY::BR_POIS, RF_ABILITY::BR_NUKE }) && !((player_ptr->pclass == PlayerClassType::NINJA) && (player_ptr->lev > 44))) {
         if (player_ptr->oppose_pois || music_singing(player_ptr, MUSIC_RESIST))
             return true;
 
index 35921cb..f1821a1 100644 (file)
@@ -181,7 +181,7 @@ void decide_lite_area(player_type *player_ptr, msa_type *msa_ptr)
     if (msa_ptr->ability_flags.has_not(RF_ABILITY::DARKNESS))
         return;
 
-    bool can_use_lite_area = (player_ptr->pclass == CLASS_NINJA) && ((msa_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) == 0)
+    bool can_use_lite_area = (player_ptr->pclass == PlayerClassType::NINJA) && ((msa_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) == 0)
         && ((msa_ptr->r_ptr->flags7 & RF7_DARK_MASK) == 0);
 
     if ((msa_ptr->r_ptr->flags2 & RF2_STUPID) != 0)
@@ -192,6 +192,6 @@ void decide_lite_area(player_type *player_ptr, msa_type *msa_ptr)
         return;
     }
 
-    if ((player_ptr->pclass == CLASS_NINJA) && !can_use_lite_area)
+    if ((player_ptr->pclass == PlayerClassType::NINJA) && !can_use_lite_area)
         msa_ptr->ability_flags.reset(RF_ABILITY::DARKNESS);
 }
index 00477e0..b3182b6 100644 (file)
@@ -5,7 +5,7 @@
 
 void switch_gain_mutation(player_type *player_ptr, glm_type *glm_ptr)
 {
-    switch (glm_ptr->choose_mut ? glm_ptr->choose_mut : (player_ptr->pclass == CLASS_BERSERKER ? 74 + randint1(119) : randint1(193))) {
+    switch (glm_ptr->choose_mut ? glm_ptr->choose_mut : (player_ptr->pclass == PlayerClassType::BERSERKER ? 74 + randint1(119) : randint1(193))) {
     case 1:
     case 2:
     case 3:
@@ -288,7 +288,7 @@ void switch_gain_mutation(player_type *player_ptr, glm_type *glm_ptr)
         break;
     case 110:
     case 111:
-        if (player_ptr->pclass == CLASS_CHAOS_WARRIOR)
+        if (player_ptr->pclass == PlayerClassType::CHAOS_WARRIOR)
             break;
 
         glm_ptr->muta_which = MUTA::CHAOS_GIFT;
index d0b83ab..7bf68e5 100644 (file)
@@ -55,8 +55,8 @@ bool item_tester_hook_use(player_type *player_ptr, const object_type *o_ptr)
  */
 bool item_tester_learn_spell(player_type *player_ptr, const object_type *o_ptr)
 {
-    int32_t choices = realm_choices2[player_ptr->pclass];
-    if (player_ptr->pclass == CLASS_PRIEST) {
+    int32_t choices = realm_choices2[enum2i(player_ptr->pclass)];
+    if (player_ptr->pclass == PlayerClassType::PRIEST) {
         if (is_good_realm(player_ptr->realm1)) {
             choices &= ~(CH_DEATH | CH_DAEMON);
         } else {
@@ -67,7 +67,7 @@ bool item_tester_learn_spell(player_type *player_ptr, const object_type *o_ptr)
     if ((o_ptr->tval < ItemKindType::LIFE_BOOK) || (o_ptr->tval > ItemKindType::HEX_BOOK))
         return false;
 
-    if ((o_ptr->tval == ItemKindType::MUSIC_BOOK) && (player_ptr->pclass == CLASS_BARD))
+    if ((o_ptr->tval == ItemKindType::MUSIC_BOOK) && (player_ptr->pclass == PlayerClassType::BARD))
         return true;
     else if (!is_magic(tval2realm(o_ptr->tval)))
         return false;
index d9e2d23..7e37616 100644 (file)
@@ -21,8 +21,9 @@ bool object_is_favorite(player_type *player_ptr, const object_type *o_ptr)
     }
 
     /* Favorite weapons are varied depend on the class */
+    auto short_pclass = enum2i(player_ptr->pclass);
     switch (player_ptr->pclass) {
-    case CLASS_PRIEST: {
+    case PlayerClassType::PRIEST: {
         auto flgs = object_flags_known(o_ptr);
 
         if (flgs.has_not(TR_BLESSED) && !(o_ptr->tval == ItemKindType::HAFTED))
@@ -30,15 +31,15 @@ bool object_is_favorite(player_type *player_ptr, const object_type *o_ptr)
         break;
     }
 
-    case CLASS_MONK:
-    case CLASS_FORCETRAINER:
+    case PlayerClassType::MONK:
+    case PlayerClassType::FORCETRAINER:
         /* Icky to wield? */
-        if (!(s_info[player_ptr->pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval]))
+        if (!(s_info[short_pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval]))
             return false;
         break;
 
-    case CLASS_BEASTMASTER:
-    case CLASS_CAVALRY: {
+    case PlayerClassType::BEASTMASTER:
+    case PlayerClassType::CAVALRY: {
         auto flgs = object_flags_known(o_ptr);
 
         /* Is it known to be suitable to using while riding? */
@@ -48,14 +49,14 @@ bool object_is_favorite(player_type *player_ptr, const object_type *o_ptr)
         break;
     }
 
-    case CLASS_SORCERER:
-        if (s_info[player_ptr->pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval] < WEAPON_EXP_MASTER)
+    case PlayerClassType::SORCERER:
+        if (s_info[short_pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval] < WEAPON_EXP_MASTER)
             return false;
         break;
 
-    case CLASS_NINJA:
+    case PlayerClassType::NINJA:
         /* Icky to wield? */
-        if (s_info[player_ptr->pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval] <= WEAPON_EXP_BEGINNER)
+        if (s_info[short_pclass].w_max[o_ptr->tval - TV_WEAPON_BEGIN][o_ptr->sval] <= WEAPON_EXP_BEGINNER)
             return false;
         break;
 
index de1226b..28b1c41 100644 (file)
@@ -586,7 +586,7 @@ bool ObjectQuaffEntity::check_can_quaff()
 bool ObjectQuaffEntity::booze()
 {
     bool ident = false;
-    if (this->player_ptr->pclass != CLASS_MONK)
+    if (this->player_ptr->pclass != PlayerClassType::MONK)
         chg_virtue(this->player_ptr, V_HARMONY, -1);
     else if (!has_resist_conf(this->player_ptr))
         this->player_ptr->special_attack |= ATTACK_SUIKEN;
@@ -604,7 +604,7 @@ bool ObjectQuaffEntity::booze()
         ident = true;
     }
 
-    if (one_in_(13) && (this->player_ptr->pclass != CLASS_MONK)) {
+    if (one_in_(13) && (this->player_ptr->pclass != PlayerClassType::MONK)) {
         ident = true;
         if (one_in_(3))
             lose_all_info(this->player_ptr);
index e6fbe8f..d4db1e8 100644 (file)
@@ -382,11 +382,11 @@ void ObjectReadEntity::execute(bool known)
             break;
         }
         case SV_SCROLL_SPELL: {
-            if ((this->player_ptr->pclass == CLASS_WARRIOR) || (this->player_ptr->pclass == CLASS_IMITATOR) || (this->player_ptr->pclass == CLASS_MINDCRAFTER)
-                || (this->player_ptr->pclass == CLASS_SORCERER) || (this->player_ptr->pclass == CLASS_ARCHER) || (this->player_ptr->pclass == CLASS_MAGIC_EATER)
-                || (this->player_ptr->pclass == CLASS_RED_MAGE) || (this->player_ptr->pclass == CLASS_SAMURAI) || (this->player_ptr->pclass == CLASS_BLUE_MAGE)
-                || (this->player_ptr->pclass == CLASS_CAVALRY) || (this->player_ptr->pclass == CLASS_BERSERKER) || (this->player_ptr->pclass == CLASS_SMITH)
-                || (this->player_ptr->pclass == CLASS_MIRROR_MASTER) || (this->player_ptr->pclass == CLASS_NINJA) || (this->player_ptr->pclass == CLASS_SNIPER))
+            if ((this->player_ptr->pclass == PlayerClassType::WARRIOR) || (this->player_ptr->pclass == PlayerClassType::IMITATOR) || (this->player_ptr->pclass == PlayerClassType::MINDCRAFTER)
+                || (this->player_ptr->pclass == PlayerClassType::SORCERER) || (this->player_ptr->pclass == PlayerClassType::ARCHER) || (this->player_ptr->pclass == PlayerClassType::MAGIC_EATER)
+                || (this->player_ptr->pclass == PlayerClassType::RED_MAGE) || (this->player_ptr->pclass == PlayerClassType::SAMURAI) || (this->player_ptr->pclass == PlayerClassType::BLUE_MAGE)
+                || (this->player_ptr->pclass == PlayerClassType::CAVALRY) || (this->player_ptr->pclass == PlayerClassType::BERSERKER) || (this->player_ptr->pclass == PlayerClassType::SMITH)
+                || (this->player_ptr->pclass == PlayerClassType::MIRROR_MASTER) || (this->player_ptr->pclass == PlayerClassType::NINJA) || (this->player_ptr->pclass == PlayerClassType::SNIPER))
                 break;
 
             this->player_ptr->add_spells++;
@@ -527,7 +527,7 @@ bool ObjectReadEntity::check_can_read()
         return false;
     }
 
-    if (this->player_ptr->pclass == CLASS_BERSERKER) {
+    if (this->player_ptr->pclass == PlayerClassType::BERSERKER) {
         msg_print(_("巻物なんて読めない。", "You cannot read."));
         return false;
     }
index 1869f4d..0d96282 100644 (file)
@@ -168,14 +168,14 @@ void ObjectThrowEntity::set_class_specific_throw_params()
 {
     PlayerEnergy energy(this->player_ptr);
     energy.set_player_turn_energy(100);
-    if ((this->player_ptr->pclass == CLASS_ROGUE) || (this->player_ptr->pclass == CLASS_NINJA)) {
+    if ((this->player_ptr->pclass == PlayerClassType::ROGUE) || (this->player_ptr->pclass == PlayerClassType::NINJA)) {
         energy.sub_player_turn_energy(this->player_ptr->lev);
     }
 
     this->y = this->player_ptr->y;
     this->x = this->player_ptr->x;
     handle_stuff(this->player_ptr);
-    this->shuriken = (this->player_ptr->pclass == CLASS_NINJA)
+    this->shuriken = (this->player_ptr->pclass == PlayerClassType::NINJA)
         && ((this->q_ptr->tval == ItemKindType::SPIKE) || ((this->obj_flags.has(TR_THROW)) && (this->q_ptr->tval == ItemKindType::SWORD)));
 }
 
index dca09ce..3219de1 100644 (file)
@@ -71,7 +71,7 @@ void ObjectUseEntity::execute()
         chance = USE_DEVICE;
     }
 
-    if ((chance < USE_DEVICE) || (randint1(chance) < USE_DEVICE) || (this->player_ptr->pclass == CLASS_BERSERKER)) {
+    if ((chance < USE_DEVICE) || (randint1(chance) < USE_DEVICE) || (this->player_ptr->pclass == PlayerClassType::BERSERKER)) {
         if (flush_failure) {
             flush();
         }
index 8a72ad1..1baf726 100644 (file)
@@ -84,7 +84,7 @@ void ObjectZapRodEntity::execute(INVENTORY_IDX item)
     }
 
     bool success;
-    if (this->player_ptr->pclass == CLASS_BERSERKER) {
+    if (this->player_ptr->pclass == PlayerClassType::BERSERKER) {
         success = false;
     } else if (chance > fail) {
         success = randint0(chance * 2) >= fail;
index 2ab01dc..16157a8 100644 (file)
@@ -74,7 +74,7 @@ void ObjectZapWandEntity::execute(INVENTORY_IDX item)
         chance = USE_DEVICE;
     }
 
-    if ((chance < USE_DEVICE) || (randint1(chance) < USE_DEVICE) || (this->player_ptr->pclass == CLASS_BERSERKER)) {
+    if ((chance < USE_DEVICE) || (randint1(chance) < USE_DEVICE) || (this->player_ptr->pclass == PlayerClassType::BERSERKER)) {
         if (flush_failure) {
             flush();
         }
index 0dd5966..57e08ef 100644 (file)
@@ -282,9 +282,9 @@ bool check_book_realm(player_type *player_ptr, const ItemKindType book_tval, con
 {
     if (book_tval < ItemKindType::LIFE_BOOK)
         return false;
-    if (player_ptr->pclass == CLASS_SORCERER) {
+    if (player_ptr->pclass == PlayerClassType::SORCERER) {
         return is_magic(tval2realm(book_tval));
-    } else if (player_ptr->pclass == CLASS_RED_MAGE) {
+    } else if (player_ptr->pclass == PlayerClassType::RED_MAGE) {
         if (is_magic(tval2realm(book_tval)))
             return ((book_tval == ItemKindType::ARCANE_BOOK) || (book_sval < 2));
     }
index 8883797..47e2e61 100644 (file)
@@ -136,112 +136,112 @@ void sense_inventory1(player_type *player_ptr)
         return;
 
     switch (player_ptr->pclass) {
-    case CLASS_WARRIOR:
-    case CLASS_ARCHER:
-    case CLASS_SAMURAI:
-    case CLASS_CAVALRY: {
+    case PlayerClassType::WARRIOR:
+    case PlayerClassType::ARCHER:
+    case PlayerClassType::SAMURAI:
+    case PlayerClassType::CAVALRY: {
         if (0 != randint0(9000L / (plev * plev + 40)))
             return;
 
         heavy = true;
         break;
     }
-    case CLASS_SMITH: {
+    case PlayerClassType::SMITH: {
         if (0 != randint0(6000L / (plev * plev + 50)))
             return;
 
         heavy = true;
         break;
     }
-    case CLASS_MAGE:
-    case CLASS_HIGH_MAGE:
-    case CLASS_SORCERER:
-    case CLASS_MAGIC_EATER:
-    case CLASS_ELEMENTALIST: {
+    case PlayerClassType::MAGE:
+    case PlayerClassType::HIGH_MAGE:
+    case PlayerClassType::SORCERER:
+    case PlayerClassType::MAGIC_EATER:
+    case PlayerClassType::ELEMENTALIST: {
         if (0 != randint0(240000L / (plev + 5)))
             return;
 
         break;
     }
-    case CLASS_PRIEST:
-    case CLASS_BARD: {
+    case PlayerClassType::PRIEST:
+    case PlayerClassType::BARD: {
         if (0 != randint0(10000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_ROGUE:
-    case CLASS_NINJA: {
+    case PlayerClassType::ROGUE:
+    case PlayerClassType::NINJA: {
         if (0 != randint0(20000L / (plev * plev + 40)))
             return;
 
         heavy = true;
         break;
     }
-    case CLASS_RANGER: {
+    case PlayerClassType::RANGER: {
         if (0 != randint0(95000L / (plev * plev + 40)))
             return;
 
         heavy = true;
         break;
     }
-    case CLASS_PALADIN:
-    case CLASS_SNIPER: {
+    case PlayerClassType::PALADIN:
+    case PlayerClassType::SNIPER: {
         if (0 != randint0(77777L / (plev * plev + 40)))
             return;
 
         heavy = true;
         break;
     }
-    case CLASS_WARRIOR_MAGE:
-    case CLASS_RED_MAGE: {
+    case PlayerClassType::WARRIOR_MAGE:
+    case PlayerClassType::RED_MAGE: {
         if (0 != randint0(75000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_MINDCRAFTER:
-    case CLASS_IMITATOR:
-    case CLASS_BLUE_MAGE:
-    case CLASS_MIRROR_MASTER: {
+    case PlayerClassType::MINDCRAFTER:
+    case PlayerClassType::IMITATOR:
+    case PlayerClassType::BLUE_MAGE:
+    case PlayerClassType::MIRROR_MASTER: {
         if (0 != randint0(55000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_CHAOS_WARRIOR: {
+    case PlayerClassType::CHAOS_WARRIOR: {
         if (0 != randint0(80000L / (plev * plev + 40)))
             return;
 
         heavy = true;
         break;
     }
-    case CLASS_MONK:
-    case CLASS_FORCETRAINER: {
+    case PlayerClassType::MONK:
+    case PlayerClassType::FORCETRAINER: {
         if (0 != randint0(20000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_TOURIST: {
+    case PlayerClassType::TOURIST: {
         if (0 != randint0(20000L / ((plev + 50) * (plev + 50))))
             return;
 
         heavy = true;
         break;
     }
-    case CLASS_BEASTMASTER: {
+    case PlayerClassType::BEASTMASTER: {
         if (0 != randint0(65000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_BERSERKER: {
+    case PlayerClassType::BERSERKER: {
         heavy = true;
         break;
     }
 
-    case MAX_CLASS:
+    case PlayerClassType::MAX:
         break;
     }
 
@@ -308,64 +308,64 @@ void sense_inventory2(player_type *player_ptr)
         return;
 
     switch (player_ptr->pclass) {
-    case CLASS_WARRIOR:
-    case CLASS_ARCHER:
-    case CLASS_SAMURAI:
-    case CLASS_CAVALRY:
-    case CLASS_BERSERKER:
-    case CLASS_SNIPER: {
+    case PlayerClassType::WARRIOR:
+    case PlayerClassType::ARCHER:
+    case PlayerClassType::SAMURAI:
+    case PlayerClassType::CAVALRY:
+    case PlayerClassType::BERSERKER:
+    case PlayerClassType::SNIPER: {
         return;
     }
-    case CLASS_SMITH:
-    case CLASS_PALADIN:
-    case CLASS_CHAOS_WARRIOR:
-    case CLASS_IMITATOR:
-    case CLASS_BEASTMASTER:
-    case CLASS_NINJA: {
+    case PlayerClassType::SMITH:
+    case PlayerClassType::PALADIN:
+    case PlayerClassType::CHAOS_WARRIOR:
+    case PlayerClassType::IMITATOR:
+    case PlayerClassType::BEASTMASTER:
+    case PlayerClassType::NINJA: {
         if (0 != randint0(240000L / (plev + 5)))
             return;
 
         break;
     }
-    case CLASS_RANGER:
-    case CLASS_WARRIOR_MAGE:
-    case CLASS_RED_MAGE:
-    case CLASS_MONK: {
+    case PlayerClassType::RANGER:
+    case PlayerClassType::WARRIOR_MAGE:
+    case PlayerClassType::RED_MAGE:
+    case PlayerClassType::MONK: {
         if (0 != randint0(95000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_PRIEST:
-    case CLASS_BARD:
-    case CLASS_ROGUE:
-    case CLASS_FORCETRAINER:
-    case CLASS_MINDCRAFTER: {
+    case PlayerClassType::PRIEST:
+    case PlayerClassType::BARD:
+    case PlayerClassType::ROGUE:
+    case PlayerClassType::FORCETRAINER:
+    case PlayerClassType::MINDCRAFTER: {
         if (0 != randint0(20000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_MAGE:
-    case CLASS_HIGH_MAGE:
-    case CLASS_SORCERER:
-    case CLASS_MAGIC_EATER:
-    case CLASS_MIRROR_MASTER:
-    case CLASS_BLUE_MAGE:
-    case CLASS_ELEMENTALIST: {
+    case PlayerClassType::MAGE:
+    case PlayerClassType::HIGH_MAGE:
+    case PlayerClassType::SORCERER:
+    case PlayerClassType::MAGIC_EATER:
+    case PlayerClassType::MIRROR_MASTER:
+    case PlayerClassType::BLUE_MAGE:
+    case PlayerClassType::ELEMENTALIST: {
         if (0 != randint0(9000L / (plev * plev + 40)))
             return;
 
         break;
     }
-    case CLASS_TOURIST: {
+    case PlayerClassType::TOURIST: {
         if (0 != randint0(20000L / ((plev + 50) * (plev + 50))))
             return;
 
         break;
     }
 
-    case MAX_CLASS:
+    case PlayerClassType::MAX:
         break;
     }
 
index fbd1a4c..c35222c 100644 (file)
@@ -59,7 +59,7 @@ static bool calc_fall_off_possibility(player_type *player_ptr, const HIT_POINT d
         return true;
 
     int cur = player_ptr->skill_exp[SKILL_RIDING];
-    int max = s_info[player_ptr->pclass].s_max[SKILL_RIDING];
+    int max = s_info[enum2i(player_ptr->pclass)].s_max[SKILL_RIDING];
     int ridinglevel = r_ptr->level;
 
     int fall_off_level = r_ptr->level;
@@ -79,7 +79,7 @@ static bool calc_fall_off_possibility(player_type *player_ptr, const HIT_POINT d
     if (randint0(dam / 2 + fall_off_level * 2) >= cur / 30 + 10)
         return true;
 
-    if ((((player_ptr->pclass == CLASS_BEASTMASTER) || (player_ptr->pclass == CLASS_CAVALRY)) && !player_ptr->riding_ryoute)
+    if ((((player_ptr->pclass == PlayerClassType::BEASTMASTER) || (player_ptr->pclass == PlayerClassType::CAVALRY)) && !player_ptr->riding_ryoute)
         || !one_in_(player_ptr->lev * (player_ptr->riding_ryoute ? 2 : 3) + 30)) {
         return false;
     }
index a4a2895..95f3302 100644 (file)
@@ -85,7 +85,7 @@ PERCENTAGE calculate_upkeep(player_type *player_ptr)
             continue;
         }
 
-        if (player_ptr->pclass != CLASS_CAVALRY) {
+        if (player_ptr->pclass != PlayerClassType::CAVALRY) {
             total_friend_levels += (r_ptr->level + 5) * 10;
             continue;
         }
index e7af692..7a5fa84 100644 (file)
@@ -93,13 +93,13 @@ static player_attack_type *initialize_player_attack_type(
 static void attack_classify(player_type *player_ptr, player_attack_type *pa_ptr)
 {
     switch (player_ptr->pclass) {
-    case CLASS_ROGUE:
-    case CLASS_NINJA:
+    case PlayerClassType::ROGUE:
+    case PlayerClassType::NINJA:
         process_surprise_attack(player_ptr, pa_ptr);
         return;
-    case CLASS_MONK:
-    case CLASS_FORCETRAINER:
-    case CLASS_BERSERKER:
+    case PlayerClassType::MONK:
+    case PlayerClassType::FORCETRAINER:
+    case PlayerClassType::BERSERKER:
         if ((empty_hands(player_ptr, true) & EMPTY_HAND_MAIN) && !player_ptr->riding)
             pa_ptr->monk_attack = true;
         return;
@@ -116,7 +116,7 @@ static void attack_classify(player_type *player_ptr, player_attack_type *pa_ptr)
 static void get_bare_knuckle_exp(player_type *player_ptr, player_attack_type *pa_ptr)
 {
     monster_race *r_ptr = &r_info[pa_ptr->m_ptr->r_idx];
-    if ((r_ptr->level + 10) <= player_ptr->lev || (player_ptr->skill_exp[SKILL_MARTIAL_ARTS] >= s_info[player_ptr->pclass].s_max[SKILL_MARTIAL_ARTS]))
+    if ((r_ptr->level + 10) <= player_ptr->lev || (player_ptr->skill_exp[SKILL_MARTIAL_ARTS] >= s_info[enum2i(player_ptr->pclass)].s_max[SKILL_MARTIAL_ARTS]))
         return;
 
     if (player_ptr->skill_exp[SKILL_MARTIAL_ARTS] < WEAPON_EXP_BEGINNER)
@@ -142,7 +142,7 @@ static void get_weapon_exp(player_type *player_ptr, player_attack_type *pa_ptr)
     int tval = player_ptr->inventory_list[INVEN_MAIN_HAND + pa_ptr->hand].tval - TV_WEAPON_BEGIN;
     OBJECT_SUBTYPE_VALUE sval = player_ptr->inventory_list[INVEN_MAIN_HAND + pa_ptr->hand].sval;
     int now_exp = player_ptr->weapon_exp[tval][sval];
-    if (now_exp >= s_info[player_ptr->pclass].w_max[tval][sval])
+    if (now_exp >= s_info[enum2i(player_ptr->pclass)].w_max[tval][sval])
         return;
 
     SUB_EXP amount = 0;
@@ -444,7 +444,7 @@ static bool check_fear_death(player_type *player_ptr, player_attack_type *pa_ptr
         return false;
 
     *(pa_ptr->mdeath) = true;
-    if ((player_ptr->pclass == CLASS_BERSERKER) && player_ptr->energy_use) {
+    if ((player_ptr->pclass == PlayerClassType::BERSERKER) && player_ptr->energy_use) {
         PlayerEnergy energy(player_ptr);
         if (can_attack_with_main_hand(player_ptr) && can_attack_with_sub_hand(player_ptr)) {
             ENERGY energy_use;
@@ -498,7 +498,7 @@ static void apply_actual_attack(
     mineuchi(player_ptr, pa_ptr);
 
     pa_ptr->attack_damage = mon_damage_mod(player_ptr, pa_ptr->m_ptr, pa_ptr->attack_damage,
-        (bool)(((o_ptr->tval == ItemKindType::POLEARM) && (o_ptr->sval == SV_DEATH_SCYTHE)) || ((player_ptr->pclass == CLASS_BERSERKER) && one_in_(2))));
+        ((o_ptr->tval == ItemKindType::POLEARM) && (o_ptr->sval == SV_DEATH_SCYTHE)) || ((player_ptr->pclass == PlayerClassType::BERSERKER) && one_in_(2)));
     critical_attack(player_ptr, pa_ptr);
     msg_format_wizard(player_ptr, CHEAT_MONSTER, _("%dのダメージを与えた。(残りHP %d/%d(%d))", "You do %d damage. (left HP %d/%d(%d))"),
         pa_ptr->attack_damage, pa_ptr->m_ptr->hp - pa_ptr->attack_damage, pa_ptr->m_ptr->maxhp, pa_ptr->m_ptr->max_maxhp);
index 0fcb14c..bc9a2d4 100644 (file)
@@ -43,7 +43,7 @@ TrFlags PlayerClass::tr_flags() const
     const auto plev = this->player_ptr->lev;
 
     switch (this->player_ptr->pclass) {
-    case CLASS_WARRIOR: {
+    case PlayerClassType::WARRIOR: {
         if (plev > 29)
             flags.set(TR_RES_FEAR);
         if (plev > 44)
@@ -51,19 +51,19 @@ TrFlags PlayerClass::tr_flags() const
 
         break;
     }
-    case CLASS_SAMURAI: {
+    case PlayerClassType::SAMURAI: {
         if (plev > 29)
             flags.set(TR_RES_FEAR);
 
         break;
     }
-    case CLASS_PALADIN: {
+    case PlayerClassType::PALADIN: {
         if (plev > 39)
             flags.set(TR_RES_FEAR);
 
         break;
     }
-    case CLASS_CHAOS_WARRIOR: {
+    case PlayerClassType::CHAOS_WARRIOR: {
         if (plev > 29)
             flags.set(TR_RES_CHAOS);
         if (plev > 39)
@@ -71,8 +71,8 @@ TrFlags PlayerClass::tr_flags() const
 
         break;
     }
-    case CLASS_MONK:
-    case CLASS_FORCETRAINER: {
+    case PlayerClassType::MONK:
+    case PlayerClassType::FORCETRAINER: {
         if ((plev > 9) && !heavy_armor(this->player_ptr))
             flags.set(TR_SPEED);
         if ((plev > 24) && !heavy_armor(this->player_ptr))
@@ -80,7 +80,7 @@ TrFlags PlayerClass::tr_flags() const
 
         break;
     }
-    case CLASS_NINJA: {
+    case PlayerClassType::NINJA: {
         if (heavy_armor(this->player_ptr)) {
             flags.set(TR_SPEED);
         } else {
@@ -101,7 +101,7 @@ TrFlags PlayerClass::tr_flags() const
 
         break;
     }
-    case CLASS_MINDCRAFTER: {
+    case PlayerClassType::MINDCRAFTER: {
         if (plev > 9)
             flags.set(TR_RES_FEAR);
         if (plev > 19)
@@ -113,11 +113,11 @@ TrFlags PlayerClass::tr_flags() const
 
         break;
     }
-    case CLASS_BARD: {
+    case PlayerClassType::BARD: {
         flags.set(TR_RES_SOUND);
         break;
     }
-    case CLASS_BERSERKER: {
+    case PlayerClassType::BERSERKER: {
         flags.set(TR_SUST_STR);
         flags.set(TR_SUST_DEX);
         flags.set(TR_SUST_CON);
@@ -129,13 +129,13 @@ TrFlags PlayerClass::tr_flags() const
 
         break;
     }
-    case CLASS_MIRROR_MASTER: {
+    case PlayerClassType::MIRROR_MASTER: {
         if (plev > 39)
             flags.set(TR_REFLECT);
 
         break;
     }
-    case CLASS_ELEMENTALIST:
+    case PlayerClassType::ELEMENTALIST:
         if (has_element_resist(this->player_ptr, ElementRealm::FIRE, 1))
             flags.set(TR_RES_FIRE);
         if (has_element_resist(this->player_ptr, ElementRealm::FIRE, 30))
@@ -223,23 +223,23 @@ TrFlags PlayerClass::form_tr_flags() const
 
 bool PlayerClass::can_resist_stun() const
 {
-    return (this->player_ptr->pclass == CLASS_BERSERKER) && (this->player_ptr->lev > 34);
+    return (this->player_ptr->pclass == PlayerClassType::BERSERKER) && (this->player_ptr->lev > 34);
 }
 
 bool PlayerClass::is_wizard() const
 {
-    auto is_wizard = this->player_ptr->pclass == CLASS_MAGE;
-    is_wizard |= this->player_ptr->pclass == CLASS_HIGH_MAGE;
-    is_wizard |= this->player_ptr->pclass == CLASS_SORCERER;
-    is_wizard |= this->player_ptr->pclass == CLASS_MAGIC_EATER;
-    is_wizard |= this->player_ptr->pclass == CLASS_BLUE_MAGE;
-    is_wizard |= this->player_ptr->pclass == CLASS_ELEMENTALIST;
+    auto is_wizard = this->player_ptr->pclass == PlayerClassType::MAGE;
+    is_wizard |= this->player_ptr->pclass == PlayerClassType::HIGH_MAGE;
+    is_wizard |= this->player_ptr->pclass == PlayerClassType::SORCERER;
+    is_wizard |= this->player_ptr->pclass == PlayerClassType::MAGIC_EATER;
+    is_wizard |= this->player_ptr->pclass == PlayerClassType::BLUE_MAGE;
+    is_wizard |= this->player_ptr->pclass == PlayerClassType::ELEMENTALIST;
     return is_wizard;
 }
 
 bool PlayerClass::lose_balance()
 {
-    if (this->player_ptr->pclass != CLASS_SAMURAI) {
+    if (this->player_ptr->pclass != PlayerClassType::SAMURAI) {
         return false;
     }
 
@@ -334,37 +334,37 @@ void PlayerClass::set_monk_stance(MonkStance stance) const
 void PlayerClass::init_specific_data()
 {
     switch (this->player_ptr->pclass) {
-    case CLASS_SMITH:
+    case PlayerClassType::SMITH:
         this->player_ptr->class_specific_data = std::make_shared<smith_data_type>();
         break;
-    case CLASS_FORCETRAINER:
+    case PlayerClassType::FORCETRAINER:
         this->player_ptr->class_specific_data = std::make_shared<force_trainer_data_type>();
         break;
-    case CLASS_BLUE_MAGE:
+    case PlayerClassType::BLUE_MAGE:
         this->player_ptr->class_specific_data = std::make_shared<bluemage_data_type>();
         break;
-    case CLASS_MAGIC_EATER:
+    case PlayerClassType::MAGIC_EATER:
         this->player_ptr->class_specific_data = std::make_shared<magic_eater_data_type>();
         break;
-    case CLASS_BARD:
+    case PlayerClassType::BARD:
         this->player_ptr->class_specific_data = std::make_shared<bard_data_type>();
         break;
-    case CLASS_IMITATOR:
+    case PlayerClassType::IMITATOR:
         this->player_ptr->class_specific_data = std::make_shared<mane_data_type>();
         break;
-    case CLASS_SNIPER:
+    case PlayerClassType::SNIPER:
         this->player_ptr->class_specific_data = std::make_shared<sniper_data_type>();
         break;
-    case CLASS_SAMURAI:
+    case PlayerClassType::SAMURAI:
         this->player_ptr->class_specific_data = std::make_shared<samurai_data_type>();
         break;
-    case CLASS_MONK:
+    case PlayerClassType::MONK:
         this->player_ptr->class_specific_data = std::make_shared<monk_data_type>();
         break;
-    case CLASS_NINJA:
+    case PlayerClassType::NINJA:
         this->player_ptr->class_specific_data = std::make_shared<ninja_data_type>();
         break;
-    case CLASS_HIGH_MAGE:
+    case PlayerClassType::HIGH_MAGE:
         if (this->player_ptr->realm1 == REALM_HEX) {
             this->player_ptr->class_specific_data = std::make_shared<spell_hex_data_type>();
         } else {
index 518843c..39ad26e 100644 (file)
@@ -7,23 +7,23 @@
 void set_class_ability_info(player_type *player_ptr, self_info_type *self_ptr)
 {
     switch (player_ptr->pclass) {
-    case CLASS_WARRIOR:
+    case PlayerClassType::WARRIOR:
         if (player_ptr->lev > 39)
             self_ptr->info[self_ptr->line++]
                 = _("あなたはランダムな方向に対して数回攻撃することができる。(75 HP)", "You can attack some random directions simultaneously (cost 75).");
 
         break;
-    case CLASS_HIGH_MAGE:
+    case PlayerClassType::HIGH_MAGE:
         if (player_ptr->realm1 == REALM_HEX)
             break;
         /* Fall through */
-    case CLASS_MAGE:
-    case CLASS_SORCERER:
+    case PlayerClassType::MAGE:
+    case PlayerClassType::SORCERER:
         if (player_ptr->lev > 24)
             self_ptr->info[self_ptr->line++] = _("あなたはアイテムの魔力を吸収することができる。(1 MP)", "You can absorb charges from an item (cost 1).");
 
         break;
-    case CLASS_PRIEST:
+    case PlayerClassType::PRIEST:
         if (is_good_realm(player_ptr->realm1)) {
             if (player_ptr->lev > 34)
                 self_ptr->info[self_ptr->line++] = _("あなたは武器を祝福することができる。(70 MP)", "You can bless a weapon (cost 70).");
@@ -36,18 +36,18 @@ void set_class_ability_info(player_type *player_ptr, self_info_type *self_ptr)
                 = _("あなたは周りのすべてのモンスターを攻撃することができる。(40 MP)", "You can damage all monsters in sight (cost 40).");
 
         break;
-    case CLASS_ROGUE:
+    case PlayerClassType::ROGUE:
         if (player_ptr->lev > 7)
             self_ptr->info[self_ptr->line++]
                 = _("あなたは攻撃して即座に逃げることができる。(12 MP)", "You can hit a monster and teleport away simultaneously (cost 12).");
 
         break;
-    case CLASS_RANGER:
+    case PlayerClassType::RANGER:
         if (player_ptr->lev > 14)
             self_ptr->info[self_ptr->line++] = _("あなたは怪物を調査することができる。(20 MP)", "You can probe monsters (cost 20).");
 
         break;
-    case CLASS_PALADIN:
+    case PlayerClassType::PALADIN:
         if (is_good_realm(player_ptr->realm1)) {
             if (player_ptr->lev > 29) {
                 self_ptr->info[self_ptr->line++] = _("あなたは聖なる槍を放つことができる。(30 MP)", "You can fire a holy spear (cost 30).");
@@ -61,21 +61,21 @@ void set_class_ability_info(player_type *player_ptr, self_info_type *self_ptr)
                 = _("あなたは生命力を減少させる槍を放つことができる。(30 MP)", "You can fire a spear which drains vitality (cost 30).");
 
         break;
-    case CLASS_WARRIOR_MAGE:
+    case PlayerClassType::WARRIOR_MAGE:
         if (player_ptr->lev > 24) {
             self_ptr->info[self_ptr->line++] = _("あなたはHPをMPに変換することができる。(消費なし)", "You can convert HP to SP (cost 0).");
             self_ptr->info[self_ptr->line++] = _("あなたはMPをHPに変換することができる。(消費なし)", "You can convert SP to HP (cost 0).");
         }
 
         break;
-    case CLASS_CHAOS_WARRIOR:
+    case PlayerClassType::CHAOS_WARRIOR:
         if (player_ptr->lev > 39) {
             self_ptr->info[self_ptr->line++]
                 = _("あなたは周囲に怪物を惑わす光を発生させることができる。(50 MP)", "You can radiate light which confuses nearby monsters (cost 50).");
         }
 
         break;
-    case CLASS_MONK:
+    case PlayerClassType::MONK:
         if (player_ptr->lev > 24)
             self_ptr->info[self_ptr->line++] = _("あなたは構えることができる。(消費なし)", "You can assume a special stance (cost 0).");
 
@@ -84,28 +84,28 @@ void set_class_ability_info(player_type *player_ptr, self_info_type *self_ptr)
                 = _("あなたは通常の2倍の攻撃を行うことができる。(30 MP)", "You can perform two attacks at the same time (cost 30).");
 
         break;
-    case CLASS_MINDCRAFTER:
-    case CLASS_FORCETRAINER:
-    case CLASS_ELEMENTALIST:
+    case PlayerClassType::MINDCRAFTER:
+    case PlayerClassType::FORCETRAINER:
+    case PlayerClassType::ELEMENTALIST:
         if (player_ptr->lev > 14)
             self_ptr->info[self_ptr->line++]
                 = _("あなたは精神を集中してMPを回復させることができる。(消費なし)", "You can concentrate to regenerate your mana (cost 0).");
 
         break;
-    case CLASS_TOURIST:
+    case PlayerClassType::TOURIST:
         self_ptr->info[self_ptr->line++] = _("あなたは写真を撮影することができる。(消費なし)", "You can take a photograph (cost 0).");
 
         if (player_ptr->lev > 24)
             self_ptr->info[self_ptr->line++] = _("あなたはアイテムを完全に鑑定することができる。(20 MP)", "You can *identify* items (cost 20).");
 
         break;
-    case CLASS_IMITATOR:
+    case PlayerClassType::IMITATOR:
         if (player_ptr->lev > 29)
             self_ptr->info[self_ptr->line++] = _("あなたは怪物の特殊攻撃をダメージ2倍でまねることができる。(100 MP)",
                 "You can imitate monster's special attacks with double damage (cost 100).");
 
         break;
-    case CLASS_BEASTMASTER:
+    case PlayerClassType::BEASTMASTER:
         self_ptr->info[self_ptr->line++]
             = _("あなたは1体の生命のあるモンスターを支配することができる。((レベル+3)/4 MP)", "You can dominate a monster (cost (level+3)/4).");
 
@@ -114,7 +114,7 @@ void set_class_ability_info(player_type *player_ptr, self_info_type *self_ptr)
                 "You can dominate living monsters in sight (cost (level+20)/2).");
 
         break;
-    case CLASS_MAGIC_EATER:
+    case PlayerClassType::MAGIC_EATER:
         self_ptr->info[self_ptr->line++]
             = _("あなたは杖/魔法棒/ロッドの魔力を自分のものにすることができる。(消費なし)", "You can absorb a staff, wand or rod itself (cost 0).");
 
@@ -123,12 +123,12 @@ void set_class_ability_info(player_type *player_ptr, self_info_type *self_ptr)
                 "You can powerfully activate a staff, wand or rod (cost 10+(level-10)/2).");
 
         break;
-    case CLASS_RED_MAGE:
+    case PlayerClassType::RED_MAGE:
         if (player_ptr->lev > 47)
             self_ptr->info[self_ptr->line++] = _("あなたは1ターンに2回魔法を唱えることができる。(20 MP)", "You can cast two spells simultaneously (cost 20).");
 
         break;
-    case CLASS_SAMURAI:
+    case PlayerClassType::SAMURAI:
         self_ptr->info[self_ptr->line++]
             = _("あなたは精神を集中して気合いを溜めることができる。(消費なし)", "You can concentrate to regenerate your mana (cost 0).");
 
@@ -136,41 +136,41 @@ void set_class_ability_info(player_type *player_ptr, self_info_type *self_ptr)
             self_ptr->info[self_ptr->line++] = _("あなたは特殊な型で構えることができる。(消費なし)", "You can assume a special stance (cost 0).");
 
         break;
-    case CLASS_BLUE_MAGE:
+    case PlayerClassType::BLUE_MAGE:
         self_ptr->info[self_ptr->line++]
             = _("あなたは相手に使われた魔法を学ぶことができる。(消費なし)", "You can study spells which your enemy casts on you (cost 0).");
         break;
-    case CLASS_CAVALRY:
+    case PlayerClassType::CAVALRY:
         if (player_ptr->lev > 9)
             self_ptr->info[self_ptr->line++] = _("あなたはモンスターに乗って無理矢理ペットにすることができる。(消費なし)",
                 "You can ride on a hostile monster to forcibly turn it into a pet  (cost 0).");
 
         break;
-    case CLASS_BERSERKER:
+    case PlayerClassType::BERSERKER:
         if (player_ptr->lev > 9)
             self_ptr->info[self_ptr->line++]
                 = _("あなたは街とダンジョンの間を行き来することができる。(10 HP)", "You can travel between town and the depths (cost 10).");
 
         break;
-    case CLASS_SMITH:
+    case PlayerClassType::SMITH:
         if (player_ptr->lev > 4)
             self_ptr->info[self_ptr->line++] = _("あなたは武器や防具を鑑定することができる。(15 HP)", "You can identify weapons or armours (cost 15).");
 
         break;
-    case CLASS_MIRROR_MASTER:
+    case PlayerClassType::MIRROR_MASTER:
         self_ptr->info[self_ptr->line++] = _("あなたは鏡を作り出すことができる。(2 MP)", "You can create a Mirror (cost 2).");
         self_ptr->info[self_ptr->line++] = _("あなたは鏡を割ることができる。(消費なし)", "You can break distant Mirrors (cost 0).");
         break;
-    case CLASS_NINJA:
+    case PlayerClassType::NINJA:
         if (player_ptr->lev > 19)
             self_ptr->info[self_ptr->line++] = _("あなたは素早く移動することができる。(消費なし)", "You can walk extremely fast (cost 0).");
 
         break;
 
-    case CLASS_ARCHER:
-    case CLASS_BARD:
-    case CLASS_SNIPER:
-    case MAX_CLASS:
+    case PlayerClassType::ARCHER:
+    case PlayerClassType::BARD:
+    case PlayerClassType::SNIPER:
+    case PlayerClassType::MAX:
         break;
     }
 }
index acbbe58..98c4c69 100644 (file)
@@ -1,34 +1,34 @@
 #pragma once
 
-enum PlayerClassType {
-       CLASS_WARRIOR = 0,
-    CLASS_MAGE = 1,
-    CLASS_PRIEST = 2,
-    CLASS_ROGUE = 3,
-    CLASS_RANGER = 4,
-    CLASS_PALADIN = 5,
-    CLASS_WARRIOR_MAGE = 6,
-    CLASS_CHAOS_WARRIOR = 7,
-    CLASS_MONK = 8,
-    CLASS_MINDCRAFTER = 9,
-    CLASS_HIGH_MAGE = 10,
-    CLASS_TOURIST = 11,
-    CLASS_IMITATOR = 12,
-    CLASS_BEASTMASTER = 13,
-    CLASS_SORCERER = 14,
-    CLASS_ARCHER = 15,
-    CLASS_MAGIC_EATER = 16,
-    CLASS_BARD = 17,
-    CLASS_RED_MAGE = 18,
-    CLASS_SAMURAI = 19,
-    CLASS_FORCETRAINER = 20,
-    CLASS_BLUE_MAGE = 21,
-    CLASS_CAVALRY = 22,
-    CLASS_BERSERKER = 23,
-    CLASS_SMITH = 24,
-    CLASS_MIRROR_MASTER = 25,
-    CLASS_NINJA = 26,
-    CLASS_SNIPER = 27,
-    CLASS_ELEMENTALIST = 28,
-    MAX_CLASS = 29, /*!< 職業の最大定義数 Maximum number of player "class" types (see "table.c", etc) */
+enum class PlayerClassType : short {
+       WARRIOR = 0,
+    MAGE = 1,
+    PRIEST = 2,
+    ROGUE = 3,
+    RANGER = 4,
+    PALADIN = 5,
+    WARRIOR_MAGE = 6,
+    CHAOS_WARRIOR = 7,
+    MONK = 8,
+    MINDCRAFTER = 9,
+    HIGH_MAGE = 10,
+    TOURIST = 11,
+    IMITATOR = 12,
+    BEASTMASTER = 13,
+    SORCERER = 14,
+    ARCHER = 15,
+    MAGIC_EATER = 16,
+    BARD = 17,
+    RED_MAGE = 18,
+    SAMURAI = 19,
+    FORCETRAINER = 20,
+    BLUE_MAGE = 21,
+    CAVALRY = 22,
+    BERSERKER = 23,
+    SMITH = 24,
+    MIRROR_MASTER = 25,
+    NINJA = 26,
+    SNIPER = 27,
+    ELEMENTALIST = 28,
+    MAX,
 };
index e59485a..595ee99 100644 (file)
@@ -52,7 +52,7 @@ bool can_two_hands_wielding(player_type *player_ptr)
  */
 bool heavy_armor(player_type *player_ptr)
 {
-    if ((player_ptr->pclass != CLASS_MONK) && (player_ptr->pclass != CLASS_FORCETRAINER) && (player_ptr->pclass != CLASS_NINJA))
+    if ((player_ptr->pclass != PlayerClassType::MONK) && (player_ptr->pclass != PlayerClassType::FORCETRAINER) && (player_ptr->pclass != PlayerClassType::NINJA))
         return false;
 
     WEIGHT monk_arm_wgt = 0;
index 895a987..cfac0ad 100644 (file)
@@ -99,7 +99,7 @@ const player_race_info mimic_info[MAX_MIMIC_FORMS] =
                        { TR_RES_NETHER },
                        { TR_SEE_INVIS },
                        { TR_HOLD_EXP },
-                       { TR_LITE_1, 1, CLASS_NINJA, true },
+                       { TR_LITE_1, 1, PlayerClassType::NINJA, true },
                        { TR_SPEED },
                },
        },
index 2e9e77a..a918c9f 100644 (file)
@@ -64,7 +64,7 @@ int16_t PlayerBasicStatistics::race_value()
  */
 int16_t PlayerBasicStatistics::class_value()
 {
-    const player_class_info *c_ptr = &class_info[this->player_ptr->pclass];
+    const player_class_info *c_ptr = &class_info[enum2i(this->player_ptr->pclass)];
     return c_ptr->c_adj[this->ability_type];
 }
 
index e79fbfd..0d61ff9 100644 (file)
@@ -102,7 +102,7 @@ int16_t PlayerSpeed::class_value()
 {
     SPEED result = 0;
 
-    if (this->player_ptr->pclass == CLASS_NINJA) {
+    if (this->player_ptr->pclass == PlayerClassType::NINJA) {
         if (heavy_armor(this->player_ptr)) {
             result -= (this->player_ptr->lev) / 10;
         } else if ((!this->player_ptr->inventory_list[INVEN_MAIN_HAND].k_idx || can_attack_with_main_hand(this->player_ptr))
@@ -114,13 +114,13 @@ int16_t PlayerSpeed::class_value()
         }
     }
 
-    if ((this->player_ptr->pclass == CLASS_MONK || this->player_ptr->pclass == CLASS_FORCETRAINER) && !(heavy_armor(this->player_ptr))) {
+    if ((this->player_ptr->pclass == PlayerClassType::MONK || this->player_ptr->pclass == PlayerClassType::FORCETRAINER) && !(heavy_armor(this->player_ptr))) {
         if (!(PlayerRace(this->player_ptr).equals(PlayerRaceType::KLACKON) || PlayerRace(this->player_ptr).equals(PlayerRaceType::SPRITE)
                 || (this->player_ptr->ppersonality == PERSONALITY_MUNCHKIN)))
             result += (this->player_ptr->lev) / 10;
     }
 
-    if (this->player_ptr->pclass == CLASS_BERSERKER) {
+    if (this->player_ptr->pclass == PlayerClassType::BERSERKER) {
         result += 2;
         if (this->player_ptr->lev > 29)
             result++;
index d5c8414..14ae3d4 100644 (file)
@@ -54,7 +54,7 @@ int16_t PlayerStealth::personality_value()
  */
 int16_t PlayerStealth::class_base_value()
 {
-    const player_class_info *c_ptr = &class_info[this->player_ptr->pclass];
+    const player_class_info *c_ptr = &class_info[enum2i(this->player_ptr->pclass)];
     return c_ptr->c_stl + (c_ptr->x_stl * this->player_ptr->lev / 10);
 }
 
@@ -69,7 +69,7 @@ int16_t PlayerStealth::class_value()
 {
     ACTION_SKILL_POWER result = 0;
 
-    if (this->player_ptr->pclass == CLASS_NINJA) {
+    if (this->player_ptr->pclass == PlayerClassType::NINJA) {
         if (heavy_armor(this->player_ptr)) {
             result -= (this->player_ptr->lev) / 10;
         } else if ((!this->player_ptr->inventory_list[INVEN_MAIN_HAND].k_idx || can_attack_with_main_hand(this->player_ptr))
index e7006fc..cadbd18 100644 (file)
@@ -564,7 +564,7 @@ void Patron::gain_level_reward(player_type *player_ptr_, int chosen_reward)
 void Patron::admire(player_type *player_ptr_)
 {
     this->player_ptr = player_ptr_;
-    if ((this->player_ptr->pclass == CLASS_CHAOS_WARRIOR) || this->player_ptr->muta.has(MUTA::CHAOS_GIFT)) {
+    if ((this->player_ptr->pclass == PlayerClassType::CHAOS_WARRIOR) || this->player_ptr->muta.has(MUTA::CHAOS_GIFT)) {
         msg_format(_("%sからの声が響いた。", "The voice of %s booms out:"), this->name.c_str());
         msg_print(_("『よくやった、定命の者よ!』", "'Thou art donst well, mortal!'"));
     }
index 3c847a0..231151a 100644 (file)
@@ -67,7 +67,7 @@ static void add_personality_flags(player_type *player_ptr, TrFlags &flags)
     flags.set(TR_RES_BLIND);
     flags.set(TR_RES_CONF);
     flags.set(TR_HOLD_EXP);
-    if (player_ptr->pclass != CLASS_NINJA)
+    if (player_ptr->pclass != PlayerClassType::NINJA)
         flags.set(TR_LITE_1);
     if (player_ptr->lev > 9)
         flags.set(TR_SPEED);
index f99298b..9638e4c 100644 (file)
@@ -170,7 +170,7 @@ bool move_player_effect(player_type *player_ptr, POSITION ny, POSITION nx, BIT_F
         if (mpe_mode & MPE_HANDLE_STUFF)
             handle_stuff(player_ptr);
 
-        if (player_ptr->pclass == CLASS_NINJA) {
+        if (player_ptr->pclass == PlayerClassType::NINJA) {
             if (g_ptr->info & (CAVE_GLOW))
                 set_superstealth(player_ptr, false);
             else if (player_ptr->cur_lite <= 0)
index e9c1935..7bb3a20 100644 (file)
@@ -5,7 +5,7 @@
 /*!
  * 職業毎に選択可能な第一領域魔法テーブル
  */
-const uint32_t realm_choices1[MAX_CLASS] = {
+const std::vector<BIT_FLAGS> realm_choices1 = {
     (CH_NONE), /* Warrior */
     (CH_LIFE | CH_SORCERY | CH_NATURE | CH_CHAOS | CH_DEATH | CH_TRUMP | CH_ARCANE | CH_ENCHANT | CH_DAEMON | CH_CRUSADE), /* Mage */
     (CH_LIFE | CH_DEATH | CH_DAEMON | CH_CRUSADE), /* Priest */
@@ -40,7 +40,7 @@ const uint32_t realm_choices1[MAX_CLASS] = {
 /*!
  * 職業毎に選択可能な第二領域魔法テーブル
  */
-const uint32_t realm_choices2[MAX_CLASS] = {
+const std::vector<BIT_FLAGS> realm_choices2 = {
     (CH_NONE), /* Warrior */
     (CH_LIFE | CH_SORCERY | CH_NATURE | CH_CHAOS | CH_DEATH | CH_TRUMP | CH_ARCANE | CH_ENCHANT | CH_DAEMON | CH_CRUSADE), /* Mage */
     (CH_LIFE | CH_SORCERY | CH_NATURE | CH_CHAOS | CH_DEATH | CH_TRUMP | CH_ARCANE | CH_ENCHANT | CH_DAEMON | CH_CRUSADE), /* Priest */
index 0e80047..73a262b 100644 (file)
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "system/angband.h"
+#include <vector>
 
 /* 職業ごとの選択可能な魔法領域 / Possible realms that can be chosen. */
 enum choosable_realm {
@@ -21,8 +22,8 @@ enum choosable_realm {
     CH_HEX = 0x20000,
 };
 
-extern const uint32_t realm_choices1[];
-extern const uint32_t realm_choices2[];
+extern const std::vector<BIT_FLAGS> realm_choices1;
+extern const std::vector<BIT_FLAGS> realm_choices2;
 
 struct player_type;
 enum class ItemKindType : short;
index 5d543e9..44ec8b5 100644 (file)
@@ -718,13 +718,13 @@ void check_no_flowed(player_type *player_ptr)
             has_kabe = true;
     }
 
-    if (has_sw && ((player_ptr->realm1 == REALM_NATURE) || (player_ptr->realm2 == REALM_NATURE) || (player_ptr->pclass == CLASS_SORCERER))) {
+    if (has_sw && ((player_ptr->realm1 == REALM_NATURE) || (player_ptr->realm2 == REALM_NATURE) || (player_ptr->pclass == PlayerClassType::SORCERER))) {
         const magic_type *s_ptr = &mp_ptr->info[REALM_NATURE - 1][SPELL_SW];
         if (player_ptr->lev >= s_ptr->slevel)
             player_ptr->no_flowed = true;
     }
 
-    if (has_kabe && ((player_ptr->realm1 == REALM_CRAFT) || (player_ptr->realm2 == REALM_CRAFT) || (player_ptr->pclass == CLASS_SORCERER))) {
+    if (has_kabe && ((player_ptr->realm1 == REALM_CRAFT) || (player_ptr->realm2 == REALM_CRAFT) || (player_ptr->pclass == PlayerClassType::SORCERER))) {
         const magic_type *s_ptr = &mp_ptr->info[REALM_CRAFT - 1][SPELL_WALL];
         if (player_ptr->lev >= s_ptr->slevel)
             player_ptr->no_flowed = true;
@@ -754,7 +754,7 @@ BIT_FLAGS has_reflect(player_type *player_ptr)
 
 BIT_FLAGS has_see_nocto(player_type *player_ptr)
 {
-    return (player_ptr->pclass == CLASS_NINJA) ? FLAG_CAUSE_CLASS : FLAG_CAUSE_NONE;
+    return (player_ptr->pclass == PlayerClassType::NINJA) ? FLAG_CAUSE_CLASS : FLAG_CAUSE_NONE;
 }
 
 BIT_FLAGS has_warning(player_type *player_ptr)
@@ -1550,7 +1550,7 @@ bool has_two_handed_weapons(player_type *player_ptr)
 BIT_FLAGS has_lite(player_type *player_ptr)
 {
     BIT_FLAGS result = 0L;
-    if (player_ptr->pclass == CLASS_NINJA)
+    if (player_ptr->pclass == PlayerClassType::NINJA)
         return 0L;
 
     if (player_ptr->ppersonality == PERSONALITY_MUNCHKIN) {
@@ -1600,13 +1600,13 @@ bool is_wielding_icky_weapon(player_type *player_ptr, int i)
     auto flgs = object_flags(o_ptr);
 
     auto has_no_weapon = (o_ptr->tval == ItemKindType::NONE) || (o_ptr->tval == ItemKindType::SHIELD);
-    if (player_ptr->pclass == CLASS_PRIEST) {
+    if (player_ptr->pclass == PlayerClassType::PRIEST) {
         auto is_suitable_weapon = flgs.has(TR_BLESSED);
         is_suitable_weapon |= (o_ptr->tval != ItemKindType::SWORD) && (o_ptr->tval != ItemKindType::POLEARM);
         return !has_no_weapon && !is_suitable_weapon;
     }
 
-    if (player_ptr->pclass == CLASS_SORCERER) {
+    if (player_ptr->pclass == PlayerClassType::SORCERER) {
         auto is_suitable_weapon = o_ptr->tval == ItemKindType::HAFTED;
         is_suitable_weapon &= (o_ptr->sval == SV_WIZSTAFF) || (o_ptr->sval == SV_NAMAKE_HAMMER);
         return !has_no_weapon && !is_suitable_weapon;
@@ -1637,8 +1637,8 @@ bool has_not_ninja_weapon(player_type *player_ptr, int i)
 
     auto tval = player_ptr->inventory_list[INVEN_MAIN_HAND + i].tval - TV_WEAPON_BEGIN;
     OBJECT_SUBTYPE_VALUE sval = player_ptr->inventory_list[INVEN_MAIN_HAND + i].sval;
-    return player_ptr->pclass == CLASS_NINJA
-        && !((s_info[CLASS_NINJA].w_max[tval][sval] > WEAPON_EXP_BEGINNER) && (player_ptr->inventory_list[INVEN_SUB_HAND - i].tval != ItemKindType::SHIELD));
+    return player_ptr->pclass == PlayerClassType::NINJA
+        && !((s_info[enum2i(PlayerClassType::NINJA)].w_max[tval][sval] > WEAPON_EXP_BEGINNER) && (player_ptr->inventory_list[INVEN_SUB_HAND - i].tval != ItemKindType::SHIELD));
 }
 
 bool has_not_monk_weapon(player_type *player_ptr, int i)
@@ -1649,7 +1649,7 @@ bool has_not_monk_weapon(player_type *player_ptr, int i)
     
     auto tval = player_ptr->inventory_list[INVEN_MAIN_HAND + i].tval - TV_WEAPON_BEGIN;
     OBJECT_SUBTYPE_VALUE sval = player_ptr->inventory_list[INVEN_MAIN_HAND + i].sval;
-    return ((player_ptr->pclass == CLASS_MONK) || (player_ptr->pclass == CLASS_FORCETRAINER)) && !(s_info[player_ptr->pclass].w_max[tval][sval]);
+    return ((player_ptr->pclass == PlayerClassType::MONK) || (player_ptr->pclass == PlayerClassType::FORCETRAINER)) && !(s_info[enum2i(player_ptr->pclass)].w_max[tval][sval]);
 }
 
 bool has_good_luck(player_type *player_ptr)
index d7c11b7..791ec85 100644 (file)
@@ -468,14 +468,14 @@ static void update_max_hitpoints(player_type *player_ptr)
 
     byte tmp_hitdie;
     if (player_ptr->mimic_form) {
-        if (player_ptr->pclass == CLASS_SORCERER)
+        if (player_ptr->pclass == PlayerClassType::SORCERER)
             tmp_hitdie = mimic_info[player_ptr->mimic_form].r_mhp / 2 + cp_ptr->c_mhp + ap_ptr->a_mhp;
         else
             tmp_hitdie = mimic_info[player_ptr->mimic_form].r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
         mhp = mhp * tmp_hitdie / player_ptr->hitdie;
     }
 
-    if (player_ptr->pclass == CLASS_SORCERER) {
+    if (player_ptr->pclass == PlayerClassType::SORCERER) {
         if (player_ptr->lev < 30)
             mhp = (mhp * (45 + player_ptr->lev) / 100);
         else
@@ -485,7 +485,7 @@ static void update_max_hitpoints(player_type *player_ptr)
 
     mhp += bonus;
 
-    if (player_ptr->pclass == CLASS_BERSERKER) {
+    if (player_ptr->pclass == PlayerClassType::BERSERKER) {
         mhp = mhp * (110 + (((player_ptr->lev + 40) * (player_ptr->lev + 40) - 1550) / 110)) / 100;
     }
 
@@ -536,7 +536,7 @@ static void update_num_of_spells(player_type *player_ptr)
         return;
     if (w_ptr->character_xtra)
         return;
-    if ((player_ptr->pclass == CLASS_SORCERER) || (player_ptr->pclass == CLASS_RED_MAGE)) {
+    if ((player_ptr->pclass == PlayerClassType::SORCERER) || (player_ptr->pclass == PlayerClassType::RED_MAGE)) {
         player_ptr->new_spells = 0;
         return;
     }
@@ -548,17 +548,17 @@ static void update_num_of_spells(player_type *player_ptr)
 
     int num_allowed = (adj_mag_study[player_ptr->stat_index[mp_ptr->spell_stat]] * levels / 2);
     int bonus = 0;
-    if ((player_ptr->pclass != CLASS_SAMURAI) && (mp_ptr->spell_book != ItemKindType::LIFE_BOOK)) {
+    if ((player_ptr->pclass != PlayerClassType::SAMURAI) && (mp_ptr->spell_book != ItemKindType::LIFE_BOOK)) {
         bonus = 4;
     }
 
-    if (player_ptr->pclass == CLASS_SAMURAI) {
+    if (player_ptr->pclass == PlayerClassType::SAMURAI) {
         num_allowed = 32;
     } else if (player_ptr->realm2 == REALM_NONE) {
         num_allowed = (num_allowed + 1) / 2;
         if (num_allowed > (32 + bonus))
             num_allowed = 32 + bonus;
-    } else if ((player_ptr->pclass == CLASS_MAGE) || (player_ptr->pclass == CLASS_PRIEST)) {
+    } else if ((player_ptr->pclass == PlayerClassType::MAGE) || (player_ptr->pclass == PlayerClassType::PRIEST)) {
         if (num_allowed > (96 + bonus))
             num_allowed = 96 + bonus;
     } else {
@@ -780,8 +780,8 @@ static void update_max_mana(player_type *player_ptr)
         return;
 
     int levels;
-    if ((player_ptr->pclass == CLASS_MINDCRAFTER) || (player_ptr->pclass == CLASS_MIRROR_MASTER) || (player_ptr->pclass == CLASS_BLUE_MAGE)
-        || player_ptr->pclass == CLASS_ELEMENTALIST) {
+    if ((player_ptr->pclass == PlayerClassType::MINDCRAFTER) || (player_ptr->pclass == PlayerClassType::MIRROR_MASTER) || (player_ptr->pclass == PlayerClassType::BLUE_MAGE)
+        || player_ptr->pclass == PlayerClassType::ELEMENTALIST) {
         levels = player_ptr->lev;
     } else {
         if (mp_ptr->spell_first > player_ptr->lev) {
@@ -794,7 +794,7 @@ static void update_max_mana(player_type *player_ptr)
     }
 
     int msp;
-    if (player_ptr->pclass == CLASS_SAMURAI) {
+    if (player_ptr->pclass == PlayerClassType::SAMURAI) {
         msp = (adj_mag_mana[player_ptr->stat_index[mp_ptr->spell_stat]] + 10) * 2;
         if (msp)
             msp += (msp * rp_ptr->r_adj[mp_ptr->spell_stat] / 20);
@@ -806,9 +806,9 @@ static void update_max_mana(player_type *player_ptr)
             msp += (msp * rp_ptr->r_adj[mp_ptr->spell_stat] / 20);
         if (msp && (player_ptr->ppersonality == PERSONALITY_MUNCHKIN))
             msp += msp / 2;
-        if (msp && (player_ptr->pclass == CLASS_HIGH_MAGE))
+        if (msp && (player_ptr->pclass == PlayerClassType::HIGH_MAGE))
             msp += msp / 4;
-        if (msp && (player_ptr->pclass == CLASS_SORCERER))
+        if (msp && (player_ptr->pclass == PlayerClassType::SORCERER))
             msp += msp * (25 + player_ptr->lev) / 100;
     }
 
@@ -838,49 +838,49 @@ static void update_max_mana(player_type *player_ptr)
     cur_wgt += player_ptr->inventory_list[INVEN_FEET].weight;
 
     switch (player_ptr->pclass) {
-    case CLASS_MAGE:
-    case CLASS_HIGH_MAGE:
-    case CLASS_BLUE_MAGE:
-    case CLASS_MONK:
-    case CLASS_FORCETRAINER:
-    case CLASS_SORCERER:
-    case CLASS_ELEMENTALIST: {
+    case PlayerClassType::MAGE:
+    case PlayerClassType::HIGH_MAGE:
+    case PlayerClassType::BLUE_MAGE:
+    case PlayerClassType::MONK:
+    case PlayerClassType::FORCETRAINER:
+    case PlayerClassType::SORCERER:
+    case PlayerClassType::ELEMENTALIST: {
         if (player_ptr->inventory_list[INVEN_MAIN_HAND].tval <= ItemKindType::SWORD)
             cur_wgt += player_ptr->inventory_list[INVEN_MAIN_HAND].weight;
         if (player_ptr->inventory_list[INVEN_SUB_HAND].tval <= ItemKindType::SWORD)
             cur_wgt += player_ptr->inventory_list[INVEN_SUB_HAND].weight;
         break;
     }
-    case CLASS_PRIEST:
-    case CLASS_BARD:
-    case CLASS_TOURIST: {
+    case PlayerClassType::PRIEST:
+    case PlayerClassType::BARD:
+    case PlayerClassType::TOURIST: {
         if (player_ptr->inventory_list[INVEN_MAIN_HAND].tval <= ItemKindType::SWORD)
             cur_wgt += player_ptr->inventory_list[INVEN_MAIN_HAND].weight * 2 / 3;
         if (player_ptr->inventory_list[INVEN_SUB_HAND].tval <= ItemKindType::SWORD)
             cur_wgt += player_ptr->inventory_list[INVEN_SUB_HAND].weight * 2 / 3;
         break;
     }
-    case CLASS_MINDCRAFTER:
-    case CLASS_BEASTMASTER:
-    case CLASS_MIRROR_MASTER: {
+    case PlayerClassType::MINDCRAFTER:
+    case PlayerClassType::BEASTMASTER:
+    case PlayerClassType::MIRROR_MASTER: {
         if (player_ptr->inventory_list[INVEN_MAIN_HAND].tval <= ItemKindType::SWORD)
             cur_wgt += player_ptr->inventory_list[INVEN_MAIN_HAND].weight / 2;
         if (player_ptr->inventory_list[INVEN_SUB_HAND].tval <= ItemKindType::SWORD)
             cur_wgt += player_ptr->inventory_list[INVEN_SUB_HAND].weight / 2;
         break;
     }
-    case CLASS_ROGUE:
-    case CLASS_RANGER:
-    case CLASS_RED_MAGE:
-    case CLASS_WARRIOR_MAGE: {
+    case PlayerClassType::ROGUE:
+    case PlayerClassType::RANGER:
+    case PlayerClassType::RED_MAGE:
+    case PlayerClassType::WARRIOR_MAGE: {
         if (player_ptr->inventory_list[INVEN_MAIN_HAND].tval <= ItemKindType::SWORD)
             cur_wgt += player_ptr->inventory_list[INVEN_MAIN_HAND].weight / 3;
         if (player_ptr->inventory_list[INVEN_SUB_HAND].tval <= ItemKindType::SWORD)
             cur_wgt += player_ptr->inventory_list[INVEN_SUB_HAND].weight / 3;
         break;
     }
-    case CLASS_PALADIN:
-    case CLASS_CHAOS_WARRIOR: {
+    case PlayerClassType::PALADIN:
+    case PlayerClassType::CHAOS_WARRIOR: {
         if (player_ptr->inventory_list[INVEN_MAIN_HAND].tval <= ItemKindType::SWORD)
             cur_wgt += player_ptr->inventory_list[INVEN_MAIN_HAND].weight / 5;
         if (player_ptr->inventory_list[INVEN_SUB_HAND].tval <= ItemKindType::SWORD)
@@ -896,41 +896,41 @@ static void update_max_mana(player_type *player_ptr)
     if ((cur_wgt - max_wgt) > 0) {
         player_ptr->cumber_armor = true;
         switch (player_ptr->pclass) {
-        case CLASS_MAGE:
-        case CLASS_HIGH_MAGE:
-        case CLASS_BLUE_MAGE:
-        case CLASS_ELEMENTALIST: {
+        case PlayerClassType::MAGE:
+        case PlayerClassType::HIGH_MAGE:
+        case PlayerClassType::BLUE_MAGE:
+        case PlayerClassType::ELEMENTALIST: {
             msp -= msp * (cur_wgt - max_wgt) / 600;
             break;
         }
-        case CLASS_PRIEST:
-        case CLASS_MINDCRAFTER:
-        case CLASS_BEASTMASTER:
-        case CLASS_BARD:
-        case CLASS_FORCETRAINER:
-        case CLASS_TOURIST:
-        case CLASS_MIRROR_MASTER: {
+        case PlayerClassType::PRIEST:
+        case PlayerClassType::MINDCRAFTER:
+        case PlayerClassType::BEASTMASTER:
+        case PlayerClassType::BARD:
+        case PlayerClassType::FORCETRAINER:
+        case PlayerClassType::TOURIST:
+        case PlayerClassType::MIRROR_MASTER: {
             msp -= msp * (cur_wgt - max_wgt) / 800;
             break;
         }
-        case CLASS_SORCERER: {
+        case PlayerClassType::SORCERER: {
             msp -= msp * (cur_wgt - max_wgt) / 900;
             break;
         }
-        case CLASS_ROGUE:
-        case CLASS_RANGER:
-        case CLASS_MONK:
-        case CLASS_RED_MAGE: {
+        case PlayerClassType::ROGUE:
+        case PlayerClassType::RANGER:
+        case PlayerClassType::MONK:
+        case PlayerClassType::RED_MAGE: {
             msp -= msp * (cur_wgt - max_wgt) / 1000;
             break;
         }
-        case CLASS_PALADIN:
-        case CLASS_CHAOS_WARRIOR:
-        case CLASS_WARRIOR_MAGE: {
+        case PlayerClassType::PALADIN:
+        case PlayerClassType::CHAOS_WARRIOR:
+        case PlayerClassType::WARRIOR_MAGE: {
             msp -= msp * (cur_wgt - max_wgt) / 1200;
             break;
         }
-        case CLASS_SAMURAI: {
+        case PlayerClassType::SAMURAI: {
             player_ptr->cumber_armor = false;
             break;
         }
@@ -945,7 +945,7 @@ static void update_max_mana(player_type *player_ptr)
         msp = 0;
 
     if (player_ptr->msp != msp) {
-        if ((player_ptr->csp >= msp) && (player_ptr->pclass != CLASS_SAMURAI)) {
+        if ((player_ptr->csp >= msp) && (player_ptr->pclass != PlayerClassType::SAMURAI)) {
             player_ptr->csp = msp;
             player_ptr->csp_frac = 0;
         }
@@ -1022,26 +1022,26 @@ int16_t calc_num_fire(player_type *player_ptr, object_type *o_ptr)
         return (int16_t)num;
 
     ItemKindType tval_ammo = bow_tval_ammo(o_ptr);
-    if ((player_ptr->pclass == CLASS_RANGER) && (tval_ammo == ItemKindType::ARROW)) {
+    if ((player_ptr->pclass == PlayerClassType::RANGER) && (tval_ammo == ItemKindType::ARROW)) {
         num += (player_ptr->lev * 4);
     }
 
-    if ((player_ptr->pclass == CLASS_CAVALRY) && (tval_ammo == ItemKindType::ARROW)) {
+    if ((player_ptr->pclass == PlayerClassType::CAVALRY) && (tval_ammo == ItemKindType::ARROW)) {
         num += (player_ptr->lev * 3);
     }
 
-    if (player_ptr->pclass == CLASS_ARCHER) {
+    if (player_ptr->pclass == PlayerClassType::ARCHER) {
         if (tval_ammo == ItemKindType::ARROW)
             num += ((player_ptr->lev * 5) + 50);
         else if ((tval_ammo == ItemKindType::BOLT) || (tval_ammo == ItemKindType::SHOT))
             num += (player_ptr->lev * 4);
     }
 
-    if (player_ptr->pclass == CLASS_WARRIOR && (tval_ammo <= ItemKindType::BOLT) && (tval_ammo >= ItemKindType::SHOT)) {
+    if (player_ptr->pclass == PlayerClassType::WARRIOR && (tval_ammo <= ItemKindType::BOLT) && (tval_ammo >= ItemKindType::SHOT)) {
         num += (player_ptr->lev * 2);
     }
 
-    if ((player_ptr->pclass == CLASS_ROGUE) && (tval_ammo == ItemKindType::SHOT)) {
+    if ((player_ptr->pclass == PlayerClassType::ROGUE) && (tval_ammo == ItemKindType::SHOT)) {
         num += (player_ptr->lev * 4);
     }
 
@@ -1067,7 +1067,7 @@ static ACTION_SKILL_POWER calc_disarming(player_type *player_ptr)
         tmp_rp_ptr = &mimic_info[player_ptr->mimic_form];
     else
         tmp_rp_ptr = &race_info[enum2i(player_ptr->prace)];
-    const player_class_info *c_ptr = &class_info[player_ptr->pclass];
+    const player_class_info *c_ptr = &class_info[enum2i(player_ptr->pclass)];
     const player_personality *a_ptr = &personality_info[player_ptr->ppersonality];
 
     pow = tmp_rp_ptr->r_dis + c_ptr->c_dis + a_ptr->a_dis;
@@ -1097,7 +1097,7 @@ static ACTION_SKILL_POWER calc_device_ability(player_type *player_ptr)
         tmp_rp_ptr = &mimic_info[player_ptr->mimic_form];
     else
         tmp_rp_ptr = &race_info[enum2i(player_ptr->prace)];
-    const player_class_info *c_ptr = &class_info[player_ptr->pclass];
+    const player_class_info *c_ptr = &class_info[enum2i(player_ptr->pclass)];
     const player_personality *a_ptr = &personality_info[player_ptr->ppersonality];
 
     pow = tmp_rp_ptr->r_dev + c_ptr->c_dev + a_ptr->a_dev;
@@ -1147,7 +1147,7 @@ static ACTION_SKILL_POWER calc_saving_throw(player_type *player_ptr)
         tmp_rp_ptr = &mimic_info[player_ptr->mimic_form];
     else
         tmp_rp_ptr = &race_info[enum2i(player_ptr->prace)];
-    const player_class_info *c_ptr = &class_info[player_ptr->pclass];
+    const player_class_info *c_ptr = &class_info[enum2i(player_ptr->pclass)];
     const player_personality *a_ptr = &personality_info[player_ptr->ppersonality];
 
     pow = tmp_rp_ptr->r_sav + c_ptr->c_sav + a_ptr->a_sav;
@@ -1202,7 +1202,7 @@ static ACTION_SKILL_POWER calc_search(player_type *player_ptr)
         tmp_rp_ptr = &mimic_info[player_ptr->mimic_form];
     else
         tmp_rp_ptr = &race_info[enum2i(player_ptr->prace)];
-    const player_class_info *c_ptr = &class_info[player_ptr->pclass];
+    const player_class_info *c_ptr = &class_info[enum2i(player_ptr->pclass)];
     const player_personality *a_ptr = &personality_info[player_ptr->ppersonality];
 
     pow = tmp_rp_ptr->r_srh + c_ptr->c_srh + a_ptr->a_srh;
@@ -1249,7 +1249,7 @@ static ACTION_SKILL_POWER calc_search_freq(player_type *player_ptr)
         tmp_rp_ptr = &mimic_info[player_ptr->mimic_form];
     else
         tmp_rp_ptr = &race_info[enum2i(player_ptr->prace)];
-    const player_class_info *c_ptr = &class_info[player_ptr->pclass];
+    const player_class_info *c_ptr = &class_info[enum2i(player_ptr->pclass)];
     const player_personality *a_ptr = &personality_info[player_ptr->ppersonality];
 
     pow = tmp_rp_ptr->r_fos + c_ptr->c_fos + a_ptr->a_fos;
@@ -1287,7 +1287,7 @@ static ACTION_SKILL_POWER calc_to_hit_melee(player_type *player_ptr)
 {
     ACTION_SKILL_POWER pow;
     const player_race_info *tmp_rp_ptr;
-    const player_class_info *c_ptr = &class_info[player_ptr->pclass];
+    const player_class_info *c_ptr = &class_info[enum2i(player_ptr->pclass)];
     const player_personality *a_ptr = &personality_info[player_ptr->ppersonality];
 
     if (player_ptr->mimic_form)
@@ -1311,7 +1311,7 @@ static ACTION_SKILL_POWER calc_to_hit_shoot(player_type *player_ptr)
 {
     ACTION_SKILL_POWER pow;
     const player_race_info *tmp_rp_ptr;
-    const player_class_info *c_ptr = &class_info[player_ptr->pclass];
+    const player_class_info *c_ptr = &class_info[enum2i(player_ptr->pclass)];
     const player_personality *a_ptr = &personality_info[player_ptr->ppersonality];
 
     if (player_ptr->mimic_form)
@@ -1336,7 +1336,7 @@ static ACTION_SKILL_POWER calc_to_hit_throw(player_type *player_ptr)
 {
     ACTION_SKILL_POWER pow;
     const player_race_info *tmp_rp_ptr;
-    const player_class_info *c_ptr = &class_info[player_ptr->pclass];
+    const player_class_info *c_ptr = &class_info[enum2i(player_ptr->pclass)];
     const player_personality *a_ptr = &personality_info[player_ptr->ppersonality];
 
     if (player_ptr->mimic_form)
@@ -1384,7 +1384,7 @@ static ACTION_SKILL_POWER calc_skill_dig(player_type *player_ptr)
 
     pow += adj_str_dig[player_ptr->stat_index[A_STR]];
 
-    if (player_ptr->pclass == CLASS_BERSERKER)
+    if (player_ptr->pclass == PlayerClassType::BERSERKER)
         pow += (100 + player_ptr->lev * 8);
 
     for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
@@ -1415,7 +1415,7 @@ static ACTION_SKILL_POWER calc_skill_dig(player_type *player_ptr)
 
 static bool is_martial_arts_mode(player_type *player_ptr)
 {
-    return ((player_ptr->pclass == CLASS_MONK) || (player_ptr->pclass == CLASS_FORCETRAINER) || (player_ptr->pclass == CLASS_BERSERKER))
+    return ((player_ptr->pclass == PlayerClassType::MONK) || (player_ptr->pclass == PlayerClassType::FORCETRAINER) || (player_ptr->pclass == PlayerClassType::BERSERKER))
         && (any_bits(empty_hands(player_ptr, true), EMPTY_HAND_MAIN)) && !can_attack_with_sub_hand(player_ptr);
 }
 
@@ -1438,11 +1438,12 @@ static int16_t calc_num_blow(player_type *player_ptr, int i)
             int str_index, dex_index;
             int num = 0, wgt = 0, mul = 0, div = 0;
 
-            num = class_info[player_ptr->pclass].num;
-            wgt = class_info[player_ptr->pclass].wgt;
-            mul = class_info[player_ptr->pclass].mul;
+            auto info = class_info[enum2i(player_ptr->pclass)];
+            num = info.num;
+            wgt = info.wgt;
+            mul = info.mul;
 
-            if (player_ptr->pclass == CLASS_CAVALRY && (player_ptr->riding) && (flgs.has(TR_RIDING))) {
+            if (player_ptr->pclass == PlayerClassType::CAVALRY && (player_ptr->riding) && (flgs.has(TR_RIDING))) {
                 num = 5;
                 wgt = 70;
                 mul = 4;
@@ -1458,8 +1459,8 @@ static int16_t calc_num_blow(player_type *player_ptr, int i)
             str_index = (adj_str_blow[player_ptr->stat_index[A_STR]] * mul / div);
 
             if (has_two_handed_weapons(player_ptr) && !has_disable_two_handed_bonus(player_ptr, 0))
-                str_index += (player_ptr->pclass == CLASS_WARRIOR || player_ptr->pclass == CLASS_BERSERKER) ? (player_ptr->lev / 23 + 1) : 1;
-            if (player_ptr->pclass == CLASS_NINJA)
+                str_index += (player_ptr->pclass == PlayerClassType::WARRIOR || player_ptr->pclass == PlayerClassType::BERSERKER) ? (player_ptr->lev / 23 + 1) : 1;
+            if (player_ptr->pclass == PlayerClassType::NINJA)
                 str_index = MAX(0, str_index - 1);
             if (str_index > 11)
                 str_index = 11;
@@ -1473,11 +1474,11 @@ static int16_t calc_num_blow(player_type *player_ptr, int i)
                 num_blow = (int16_t)num;
 
             num_blow += (int16_t)player_ptr->extra_blows[i];
-            if (player_ptr->pclass == CLASS_WARRIOR)
+            if (player_ptr->pclass == PlayerClassType::WARRIOR)
                 num_blow += (player_ptr->lev / 40);
-            else if (player_ptr->pclass == CLASS_BERSERKER)
+            else if (player_ptr->pclass == PlayerClassType::BERSERKER)
                 num_blow += (player_ptr->lev / 23);
-            else if ((player_ptr->pclass == CLASS_ROGUE) && (o_ptr->weight < 50) && (player_ptr->stat_index[A_DEX] >= 30))
+            else if ((player_ptr->pclass == PlayerClassType::ROGUE) && (o_ptr->weight < 50) && (player_ptr->stat_index[A_DEX] >= 30))
                 num_blow++;
 
             if (PlayerClass(player_ptr).samurai_stance_is(SamuraiStance::FUUJIN))
@@ -1498,7 +1499,7 @@ static int16_t calc_num_blow(player_type *player_ptr, int i)
         int blow_base = player_ptr->lev + adj_dex_blow[player_ptr->stat_index[A_DEX]];
         num_blow = 0;
 
-        if (player_ptr->pclass == CLASS_FORCETRAINER) {
+        if (player_ptr->pclass == PlayerClassType::FORCETRAINER) {
             if (blow_base > 18)
                 num_blow++;
             if (blow_base > 31)
@@ -1524,13 +1525,13 @@ static int16_t calc_num_blow(player_type *player_ptr, int i)
                 num_blow++;
         }
 
-        if (heavy_armor(player_ptr) && (player_ptr->pclass != CLASS_BERSERKER))
+        if (heavy_armor(player_ptr) && (player_ptr->pclass != PlayerClassType::BERSERKER))
             num_blow /= 2;
 
         PlayerClass pc(player_ptr);
         if (pc.monk_stance_is(MonkStance::GENBU)) {
             num_blow -= 2;
-            if ((player_ptr->pclass == CLASS_MONK) && (player_ptr->lev > 42))
+            if ((player_ptr->pclass == PlayerClassType::MONK) && (player_ptr->lev > 42))
                 num_blow--;
             if (num_blow < 0)
                 num_blow = 0;
@@ -1635,10 +1636,10 @@ static ARMOUR_CLASS calc_to_ac(player_type *player_ptr, bool is_real_value)
         }
     }
 
-    if (player_ptr->pclass == CLASS_BERSERKER) {
+    if (player_ptr->pclass == PlayerClassType::BERSERKER) {
         ac += 10 + player_ptr->lev / 2;
     }
-    if (player_ptr->pclass == CLASS_SORCERER) {
+    if (player_ptr->pclass == PlayerClassType::SORCERER) {
         ac -= 50;
     }
 
@@ -1695,7 +1696,7 @@ static ARMOUR_CLASS calc_to_ac(player_type *player_ptr, bool is_real_value)
         ac += 25;
     }
 
-    if (((player_ptr->pclass == CLASS_MONK) || (player_ptr->pclass == CLASS_FORCETRAINER)) && !heavy_armor(player_ptr)) {
+    if (((player_ptr->pclass == PlayerClassType::MONK) || (player_ptr->pclass == PlayerClassType::FORCETRAINER)) && !heavy_armor(player_ptr)) {
         if (!(player_ptr->inventory_list[INVEN_BODY].k_idx)) {
             ac += (player_ptr->lev * 3) / 2;
         }
@@ -1763,7 +1764,7 @@ static ARMOUR_CLASS calc_to_ac(player_type *player_ptr, bool is_real_value)
         ac -= 10;
     }
 
-    if (player_ptr->pclass == CLASS_NINJA) {
+    if (player_ptr->pclass == PlayerClassType::NINJA) {
         if ((!player_ptr->inventory_list[INVEN_MAIN_HAND].k_idx || can_attack_with_main_hand(player_ptr))
             && (!player_ptr->inventory_list[INVEN_SUB_HAND].k_idx || can_attack_with_sub_hand(player_ptr))) {
             ac += player_ptr->lev / 2 + 5;
@@ -1828,9 +1829,9 @@ static bool is_riding_two_hands(player_type *player_ptr)
         return true;
     else if (any_bits(player_ptr->pet_extra_flags, PF_TWO_HANDS)) {
         switch (player_ptr->pclass) {
-        case CLASS_MONK:
-        case CLASS_FORCETRAINER:
-        case CLASS_BERSERKER:
+        case PlayerClassType::MONK:
+        case PlayerClassType::FORCETRAINER:
+        case PlayerClassType::BERSERKER:
             if ((empty_hands(player_ptr, false) != EMPTY_HAND_NONE) && !has_melee_weapon(player_ptr, INVEN_MAIN_HAND)
                 && !has_melee_weapon(player_ptr, INVEN_SUB_HAND))
                 return true;
@@ -1851,7 +1852,7 @@ static int16_t calc_riding_bow_penalty(player_type *player_ptr)
 
     int16_t penalty = 0;
 
-    if ((player_ptr->pclass == CLASS_BEASTMASTER) || (player_ptr->pclass == CLASS_CAVALRY)) {
+    if ((player_ptr->pclass == PlayerClassType::BEASTMASTER) || (player_ptr->pclass == PlayerClassType::CAVALRY)) {
         if (player_ptr->tval_ammo != ItemKindType::ARROW)
             penalty = 5;
     } else {
@@ -1943,7 +1944,7 @@ void put_equipment_warning(player_type *player_ptr)
         player_ptr->old_riding_ryoute = player_ptr->riding_ryoute;
     }
 
-    if (((player_ptr->pclass == CLASS_MONK) || (player_ptr->pclass == CLASS_FORCETRAINER) || (player_ptr->pclass == CLASS_NINJA))
+    if (((player_ptr->pclass == PlayerClassType::MONK) || (player_ptr->pclass == PlayerClassType::FORCETRAINER) || (player_ptr->pclass == PlayerClassType::NINJA))
         && (heavy_armor(player_ptr) != player_ptr->monk_notify_aux)) {
         if (heavy_armor(player_ptr)) {
             msg_print(_("装備が重くてバランスを取れない。", "The weight of your armor disrupts your balance."));
@@ -1978,20 +1979,20 @@ static int16_t calc_to_damage(player_type *player_ptr, INVENTORY_IDX slot, bool
 
     auto player_stun = player_ptr->effects()->stun();
     damage -= player_stun->get_damage_penalty();
-    if ((player_ptr->pclass == CLASS_PRIEST) && (flgs.has_not(TR_BLESSED)) && ((o_ptr->tval == ItemKindType::SWORD) || (o_ptr->tval == ItemKindType::POLEARM))) {
+    if ((player_ptr->pclass == PlayerClassType::PRIEST) && (flgs.has_not(TR_BLESSED)) && ((o_ptr->tval == ItemKindType::SWORD) || (o_ptr->tval == ItemKindType::POLEARM))) {
         damage -= 2;
-    } else if (player_ptr->pclass == CLASS_BERSERKER) {
+    } else if (player_ptr->pclass == PlayerClassType::BERSERKER) {
         damage += player_ptr->lev / 6;
         if (((calc_hand == PLAYER_HAND_MAIN) && !can_attack_with_sub_hand(player_ptr)) || has_two_handed_weapons(player_ptr)) {
             damage += player_ptr->lev / 6;
         }
-    } else if (player_ptr->pclass == CLASS_SORCERER) {
+    } else if (player_ptr->pclass == PlayerClassType::SORCERER) {
         if (!((o_ptr->tval == ItemKindType::HAFTED) && ((o_ptr->sval == SV_WIZSTAFF) || (o_ptr->sval == SV_NAMAKE_HAMMER)))) {
             damage -= 200;
         } else {
             damage -= 10;
         }
-    } else if (player_ptr->pclass == CLASS_FORCETRAINER) {
+    } else if (player_ptr->pclass == PlayerClassType::FORCETRAINER) {
         // 練気術師は格闘ダメージに (気)/5 の修正を得る。
         if (is_martial_arts_mode(player_ptr) && calc_hand == PLAYER_HAND_MAIN) {
             damage += get_current_ki(player_ptr) / 5;
@@ -2023,7 +2024,7 @@ static int16_t calc_to_damage(player_type *player_ptr, INVENTORY_IDX slot, bool
             continue;
         bonus_to_d = o_ptr->to_d;
 
-        if (player_ptr->pclass == CLASS_NINJA) {
+        if (player_ptr->pclass == PlayerClassType::NINJA) {
             if (o_ptr->to_d > 0)
                 bonus_to_d = (o_ptr->to_d + 1) / 2;
         }
@@ -2081,7 +2082,7 @@ static int16_t calc_to_damage(player_type *player_ptr, INVENTORY_IDX slot, bool
         }
     }
 
-    if (is_martial_arts_mode(player_ptr) && (!heavy_armor(player_ptr) || player_ptr->pclass != CLASS_BERSERKER)) {
+    if (is_martial_arts_mode(player_ptr) && (!heavy_armor(player_ptr) || player_ptr->pclass != PlayerClassType::BERSERKER)) {
         damage += (player_ptr->lev / 6);
     }
 
@@ -2187,7 +2188,7 @@ static int16_t calc_to_hit(player_type *player_ptr, INVENTORY_IDX slot, bool is_
                 hit += 15;
             } else if (flgs.has_not(TR_RIDING)) {
                 short penalty;
-                if ((player_ptr->pclass == CLASS_BEASTMASTER) || (player_ptr->pclass == CLASS_CAVALRY)) {
+                if ((player_ptr->pclass == PlayerClassType::BEASTMASTER) || (player_ptr->pclass == PlayerClassType::CAVALRY)) {
                     penalty = 5;
                 } else {
                     penalty = r_info[player_ptr->current_floor_ptr->m_list[player_ptr->riding].r_idx].level - player_ptr->skill_exp[SKILL_RIDING] / 80;
@@ -2202,14 +2203,14 @@ static int16_t calc_to_hit(player_type *player_ptr, INVENTORY_IDX slot, bool is_
         }
 
         /* Class penalties */
-        if ((player_ptr->pclass == CLASS_PRIEST) && (flgs.has_not(TR_BLESSED)) && ((o_ptr->tval == ItemKindType::SWORD) || (o_ptr->tval == ItemKindType::POLEARM))) {
+        if ((player_ptr->pclass == PlayerClassType::PRIEST) && (flgs.has_not(TR_BLESSED)) && ((o_ptr->tval == ItemKindType::SWORD) || (o_ptr->tval == ItemKindType::POLEARM))) {
             hit -= 2;
-        } else if (player_ptr->pclass == CLASS_BERSERKER) {
+        } else if (player_ptr->pclass == PlayerClassType::BERSERKER) {
             hit += player_ptr->lev / 5;
             if (((calc_hand == PLAYER_HAND_MAIN) && !can_attack_with_sub_hand(player_ptr)) || has_two_handed_weapons(player_ptr)) {
                 hit += player_ptr->lev / 5;
             }
-        } else if (player_ptr->pclass == CLASS_SORCERER) {
+        } else if (player_ptr->pclass == PlayerClassType::SORCERER) {
             if (!((o_ptr->tval == ItemKindType::HAFTED) && ((o_ptr->sval == SV_WIZSTAFF) || (o_ptr->sval == SV_NAMAKE_HAMMER)))) {
                 hit -= 200;
             } else {
@@ -2254,7 +2255,7 @@ static int16_t calc_to_hit(player_type *player_ptr, INVENTORY_IDX slot, bool is_
         int bonus_to_h = o_ptr->to_h;
 
         /* When wields only a weapon */
-        if (player_ptr->pclass == CLASS_NINJA) {
+        if (player_ptr->pclass == PlayerClassType::NINJA) {
             if (o_ptr->to_h > 0)
                 bonus_to_h = (o_ptr->to_h + 1) / 2;
         }
@@ -2304,7 +2305,7 @@ static int16_t calc_to_hit(player_type *player_ptr, INVENTORY_IDX slot, bool is_
     }
 
     /* Martial arts bonus */
-    if (is_martial_arts_mode(player_ptr) && (!heavy_armor(player_ptr) || player_ptr->pclass != CLASS_BERSERKER)) {
+    if (is_martial_arts_mode(player_ptr) && (!heavy_armor(player_ptr) || player_ptr->pclass != PlayerClassType::BERSERKER)) {
         hit += (player_ptr->lev / 3);
     }
 
@@ -2364,7 +2365,7 @@ static int16_t calc_to_hit_bow(player_type *player_ptr, bool is_real_value)
 
     if (o_ptr->k_idx) {
         if (o_ptr->k_idx && !is_heavy_shoot(player_ptr, &player_ptr->inventory_list[INVEN_BOW])) {
-            if ((player_ptr->pclass == CLASS_SNIPER) && (player_ptr->tval_ammo == ItemKindType::BOLT)) {
+            if ((player_ptr->pclass == PlayerClassType::SNIPER) && (player_ptr->tval_ammo == ItemKindType::BOLT)) {
                 pow += (10 + (player_ptr->lev / 5));
             }
         }
@@ -2380,7 +2381,7 @@ static int16_t calc_to_hit_bow(player_type *player_ptr, bool is_real_value)
 
         bonus_to_h = o_ptr->to_h;
 
-        if (player_ptr->pclass == CLASS_NINJA) {
+        if (player_ptr->pclass == PlayerClassType::NINJA) {
             if (o_ptr->to_h > 0)
                 bonus_to_h = (o_ptr->to_h + 1) / 2;
         }
@@ -2406,7 +2407,7 @@ static int16_t calc_to_damage_misc(player_type *player_ptr)
             continue;
 
         int bonus_to_d = o_ptr->to_d;
-        if (player_ptr->pclass == CLASS_NINJA) {
+        if (player_ptr->pclass == PlayerClassType::NINJA) {
             if (o_ptr->to_d > 0)
                 bonus_to_d = (o_ptr->to_d + 1) / 2;
         }
@@ -2435,7 +2436,7 @@ static int16_t calc_to_hit_misc(player_type *player_ptr)
             continue;
 
         int bonus_to_h = o_ptr->to_h;
-        if (player_ptr->pclass == CLASS_NINJA) {
+        if (player_ptr->pclass == PlayerClassType::NINJA) {
             if (o_ptr->to_h > 0)
                 bonus_to_h = (o_ptr->to_h + 1) / 2;
         }
@@ -2476,7 +2477,7 @@ static DICE_NUMBER calc_to_weapon_dice_num(player_type *player_ptr, INVENTORY_ID
 WEIGHT calc_weight_limit(player_type *player_ptr)
 {
     WEIGHT i = (WEIGHT)adj_str_wgt[player_ptr->stat_index[A_STR]] * 50;
-    if (player_ptr->pclass == CLASS_BERSERKER)
+    if (player_ptr->pclass == PlayerClassType::BERSERKER)
         i = i * 3 / 2;
     return i;
 }
@@ -2699,7 +2700,7 @@ void check_experience(player_type *player_ptr)
         if (player_ptr->lev > player_ptr->max_plv) {
             player_ptr->max_plv = player_ptr->lev;
 
-            if ((player_ptr->pclass == CLASS_CHAOS_WARRIOR) || player_ptr->muta.has(MUTA::CHAOS_GIFT)) {
+            if ((player_ptr->pclass == PlayerClassType::CHAOS_WARRIOR) || player_ptr->muta.has(MUTA::CHAOS_GIFT)) {
                 level_reward = true;
             }
             if (player_ptr->prace == PlayerRaceType::BEASTMAN) {
@@ -2902,7 +2903,7 @@ long calc_score(player_type *player_ptr)
 
     if (ironman_downward)
         point *= 2;
-    if (player_ptr->pclass == CLASS_BERSERKER) {
+    if (player_ptr->pclass == PlayerClassType::BERSERKER) {
         if (player_ptr->prace == PlayerRaceType::SPECTRE)
             point = point / 5;
     }
@@ -2980,7 +2981,7 @@ bool is_hero(player_type *player_ptr)
 
 bool is_shero(player_type *player_ptr)
 {
-    return player_ptr->shero || player_ptr->pclass == CLASS_BERSERKER;
+    return player_ptr->shero || player_ptr->pclass == PlayerClassType::BERSERKER;
 }
 
 bool is_echizen(player_type *player_ptr)
index 8e82122..3d079bf 100644 (file)
@@ -216,7 +216,7 @@ void print_tomb(player_type *player_ptr)
     char buf[1024];
     read_dead_file(buf, sizeof(buf));
     concptr p = (w_ptr->total_winner || (player_ptr->lev > PY_MAX_LEVEL)) ? _("偉大なる者", "Magnificent")
-                                                                                    : player_titles[player_ptr->pclass][(player_ptr->lev - 1) / 5].data();
+                                                                          : player_titles[enum2i(player_ptr->pclass)][(player_ptr->lev - 1) / 5].data();
 
     center_string(buf, player_ptr->name);
     put_str(buf, 6, 11);
index 2e79b5d..709eb6b 100644 (file)
@@ -147,8 +147,8 @@ const player_race_info race_info[MAX_RACES] =
         {
                        { TR_SUST_STR },
                        { TR_REGEN, 15 },
-                       { TR_SLOW_DIGEST, 15, CLASS_WARRIOR },
-                       { TR_SLOW_DIGEST, 15, CLASS_BERSERKER },
+                       { TR_SLOW_DIGEST, 15, PlayerClassType::WARRIOR },
+                       { TR_SLOW_DIGEST, 15, PlayerClassType::BERSERKER },
                },
     },
        {
@@ -490,7 +490,7 @@ const player_race_info race_info[MAX_RACES] =
                        { TR_IM_DARK },
                        { TR_RES_NETHER },
                        { TR_HOLD_EXP },
-                       { TR_LITE_1, 1, CLASS_NINJA, true },
+                       { TR_LITE_1, 1, PlayerClassType::NINJA, true },
                },
     },
        {
index fef3d99..8262886 100644 (file)
@@ -10,7 +10,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
 {
     rpi_type rpi;
     switch (player_ptr->pclass) {
-    case CLASS_WARRIOR:
+    case PlayerClassType::WARRIOR:
         rpi = rpi_type(_("剣の舞い", "Sword Dancing"));
         rpi.text = _("ランダムな方向に数回攻撃する。", "Attacks some times to random directions.");
         rpi.min_level = 40;
@@ -19,7 +19,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 35;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_HIGH_MAGE:
+    case PlayerClassType::HIGH_MAGE:
         if (player_ptr->realm1 == REALM_HEX) {
             rpi = rpi_type(_("詠唱をやめる", "Stop spell casting"));
             rpi.text = _("呪術の詠唱を全てやめる。", "Stops all casting hex spells.");
@@ -31,8 +31,8 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
             break;
         }
         /* Fall through */
-    case CLASS_MAGE:
-    case CLASS_SORCERER:
+    case PlayerClassType::MAGE:
+    case PlayerClassType::SORCERER:
         rpi = rpi_type(_("魔力食い", "Eat Magic"));
         rpi.info = format("%s%d", KWD_POWER, rc_ptr->lvl * 2);
         rpi.text = _("魔法道具から魔力を吸収してMPを回復する。", "Absorbs mana from a magic device to heal your SP.");
@@ -42,7 +42,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 25;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_PRIEST:
+    case PlayerClassType::PRIEST:
         if (is_good_realm(player_ptr->realm1)) {
             rpi = rpi_type(_("武器祝福", "Bless Weapon"));
             rpi.text = _("武器を祝福する。抵抗されることがある。", "Blesses a weapon. Some weapons can resist it.");
@@ -63,7 +63,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         }
 
         break;
-    case CLASS_ROGUE:
+    case PlayerClassType::ROGUE:
         rpi = rpi_type(_("ヒット&アウェイ", "Hit and Away"));
         rpi.info = format("%s%d", KWD_SPHERE, 30);
         rpi.text = _("対象のモンスターを攻撃したあと短距離テレポートする。", "Attacks a monster then tereports you a short range.");
@@ -73,8 +73,8 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 14;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_RANGER:
-    case CLASS_SNIPER:
+    case PlayerClassType::RANGER:
+    case PlayerClassType::SNIPER:
         rpi = rpi_type(_("モンスター調査", "Probe Monster"));
         rpi.text = _("モンスターの属性、残り体力、最大体力、スピード、正体を知る。", "Probes all monsters' alignment, HP, speed and their true character.");
         rpi.min_level = 15;
@@ -83,7 +83,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 12;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_PALADIN:
+    case PlayerClassType::PALADIN:
         if (is_good_realm(player_ptr->realm1)) {
             rpi = rpi_type(_("ホーリー・ランス", "Holy Lance"));
             rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 3);
@@ -105,7 +105,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         }
 
         break;
-    case CLASS_WARRIOR_MAGE:
+    case PlayerClassType::WARRIOR_MAGE:
         rpi = rpi_type(_("変換: HP→MP", "Convert HP to SP"));
         rpi.text = _("HPを少しMPに変換する。", "Transfers a few HP to SP.");
         rpi.min_level = 25;
@@ -122,7 +122,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 10;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
         break;
-    case CLASS_CHAOS_WARRIOR:
+    case PlayerClassType::CHAOS_WARRIOR:
         rpi = rpi_type(_("幻惑の光", "Confusing Light"));
         rpi.info = format("%s%d", KWD_POWER, rc_ptr->lvl * 4);
         rpi.text = _("周辺のモンスターを減速・朦朧・混乱・朦朧・恐怖・睡眠させようとする。抵抗されると無効。",
@@ -133,7 +133,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 25;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_MONK:
+    case PlayerClassType::MONK:
         rpi = rpi_type(_("構える", "Assume a Stance"));
         rpi.text = _("型に構えて特殊な能力を得る。", "Gains extra abilities with posing a 'kata'.");
         rpi.min_level = 25;
@@ -150,8 +150,8 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 20;
         rc_ptr->add_power(rpi, -4);
         break;
-    case CLASS_MINDCRAFTER:
-    case CLASS_FORCETRAINER:
+    case PlayerClassType::MINDCRAFTER:
+    case PlayerClassType::FORCETRAINER:
         rpi = rpi_type(_("明鏡止水", "Clear Mind"));
         rpi.info = format("%s%d", KWD_MANA, 3 + rc_ptr->lvl / 20);
         rpi.text = _("精神を集中してMPを少し回復する。", "Concentrates deeply to heal your SP a little.");
@@ -161,7 +161,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 10;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_TOURIST:
+    case PlayerClassType::TOURIST:
         rpi = rpi_type(_("写真撮影", "Take a Photograph"));
         rpi.text = _("対象のモンスター1体の写真を撮影する。", "Takes a picture of a monster.");
         rpi.min_level = 1;
@@ -178,7 +178,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 20;
         rc_ptr->add_power(rpi, -4);
         break;
-    case CLASS_IMITATOR:
+    case PlayerClassType::IMITATOR:
         rpi = rpi_type(_("倍返し", "Double Revenge"));
         rpi.text = _("威力を倍にしてものまねを行う。", "Fires an imitation a damage of which you makes doubled.");
         rpi.min_level = 30;
@@ -187,7 +187,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 30;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_BEASTMASTER:
+    case PlayerClassType::BEASTMASTER:
         rpi = rpi_type(_("生物支配", "Dominate a Living Thing"));
         rpi.info = format("%s%d", KWD_POWER, rc_ptr->lvl);
         rpi.text = _("1体のモンスターをペットにする。抵抗されると無効。", "Attempts to charm a monster.");
@@ -206,7 +206,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 10;
         rc_ptr->add_power(rpi, -4);
         break;
-    case CLASS_ARCHER:
+    case PlayerClassType::ARCHER:
         rpi = rpi_type(_("弾/矢の製造", "Create Ammo"));
         rpi.text = _("弾または矢を製造する。原料となるアイテムが必要。", "Creates ammos from materials.");
         rpi.min_level = 1;
@@ -215,7 +215,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 0;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_MAGIC_EATER:
+    case PlayerClassType::MAGIC_EATER:
         rpi = rpi_type(_("魔力の取り込み", "Absorb Magic"));
         rpi.text = _("魔法道具を取りこんで魔力とする。取りこんだ魔法道具は取り出せない。",
             "Absorbs a magic device as your mana. Cannot take out it from your mana later.");
@@ -233,7 +233,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 0;
         rc_ptr->add_power(rpi, -4);
         break;
-    case CLASS_BARD:
+    case PlayerClassType::BARD:
         rpi = rpi_type(_("歌を止める", "Stop Singing"));
         rpi.text = _("現在詠唱中の歌をやめる。", "Stops singing a song.");
         rpi.min_level = 1;
@@ -242,7 +242,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 0;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_RED_MAGE:
+    case PlayerClassType::RED_MAGE:
         rpi = rpi_type(_("連続魔", "Double Magic"));
         rpi.text = _("1回の行動で2つの呪文を詠唱する。", "Casts two spells in an action.");
         rpi.min_level = 48;
@@ -251,7 +251,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 0;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_SAMURAI:
+    case PlayerClassType::SAMURAI:
         rpi = rpi_type(_("気合いため", "Concentration"));
         rpi.text = _("気合を溜めてMPを増やす。上限値をある程度超えられる。", "Increases SP for Kendo over SP limit.");
         rpi.min_level = 1;
@@ -268,7 +268,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 0;
         rc_ptr->add_power(rpi, -4);
         break;
-    case CLASS_BLUE_MAGE:
+    case PlayerClassType::BLUE_MAGE:
         rpi = rpi_type(_("ラーニング", "Learning"));
         rpi.text = _("青魔法の学習を開始または終了する。学習中はMPを消費する。", "Starts or ends to learn blue magics. Pays SP for upkeep costs during it.");
         rpi.min_level = 1;
@@ -277,7 +277,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 0;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_CAVALRY:
+    case PlayerClassType::CAVALRY:
         rpi = rpi_type(_("荒馬ならし", "Rodeo"));
         rpi.text = _("対象のモンスターの無理やり乗馬しペットにする。", "Rides to target monster and tame it focibly.");
         rpi.min_level = 10;
@@ -286,7 +286,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 10;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_BERSERKER:
+    case PlayerClassType::BERSERKER:
         rpi = rpi_type(_("帰還", "Recall"));
         rpi.text = _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
             "Recalls player from dungeon to town or from town to the deepest level of dungeon.");
@@ -296,7 +296,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 20;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_MIRROR_MASTER:
+    case PlayerClassType::MIRROR_MASTER:
         rpi = rpi_type(_("鏡割り", "Break Mirrors"));
         rpi.text = _("現在の階に設置した鏡を全て割る。割られた鏡はなくなり、破片属性のボールが発生する。", "Destroys all mirrors located in current level. They are deleted from the level.");
         rpi.min_level = 1;
@@ -314,7 +314,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 20;
         rc_ptr->add_power(rpi, -4);
         break;
-    case CLASS_SMITH:
+    case PlayerClassType::SMITH:
         rpi = rpi_type(_("目利き", "Judgment"));
         rpi.text = _("武器・矢弾・防具を鑑定する。", "Identifies an equipment or an ammo object.");
         rpi.min_level = 5;
@@ -323,7 +323,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 20;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_NINJA:
+    case PlayerClassType::NINJA:
         rpi = rpi_type(_("速駆け", "Quick Walk"));
         rpi.text = _("身体を酷使して素早く移動する。", "Moves quickly but cannot regenerate HP naturally.");
         rpi.min_level = 20;
@@ -332,7 +332,7 @@ void switch_class_racial(player_type *player_ptr, rc_type *rc_ptr)
         rpi.fail = 0;
         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
         break;
-    case CLASS_ELEMENTALIST:
+    case PlayerClassType::ELEMENTALIST:
         rpi = rpi_type(_("明鏡止水", "Clear Mind"));
         rpi.info = format("%s%d", KWD_MANA, 3 + rc_ptr->lvl / 20);
         rpi.text = _("精神を集中してMPを少し回復する。", "Concentrates deeply to heal your SP a little.");
index 15d82a0..c5b9da5 100644 (file)
@@ -13,13 +13,13 @@ static void decide_breath_kind(player_type *player_ptr, int *breath_type, concpt
         return;
 
     switch (player_ptr->pclass) {
-    case CLASS_WARRIOR:
-    case CLASS_BERSERKER:
-    case CLASS_RANGER:
-    case CLASS_TOURIST:
-    case CLASS_IMITATOR:
-    case CLASS_ARCHER:
-    case CLASS_SMITH:
+    case PlayerClassType::WARRIOR:
+    case PlayerClassType::BERSERKER:
+    case PlayerClassType::RANGER:
+    case PlayerClassType::TOURIST:
+    case PlayerClassType::IMITATOR:
+    case PlayerClassType::ARCHER:
+    case PlayerClassType::SMITH:
         if (one_in_(3)) {
             *breath_type = GF_MISSILE;
             *breath_type_description = _("エレメント", "the elements");
@@ -29,14 +29,14 @@ static void decide_breath_kind(player_type *player_ptr, int *breath_type, concpt
         }
 
         break;
-    case CLASS_MAGE:
-    case CLASS_WARRIOR_MAGE:
-    case CLASS_HIGH_MAGE:
-    case CLASS_SORCERER:
-    case CLASS_MAGIC_EATER:
-    case CLASS_RED_MAGE:
-    case CLASS_BLUE_MAGE:
-    case CLASS_MIRROR_MASTER:
+    case PlayerClassType::MAGE:
+    case PlayerClassType::WARRIOR_MAGE:
+    case PlayerClassType::HIGH_MAGE:
+    case PlayerClassType::SORCERER:
+    case PlayerClassType::MAGIC_EATER:
+    case PlayerClassType::RED_MAGE:
+    case PlayerClassType::BLUE_MAGE:
+    case PlayerClassType::MIRROR_MASTER:
         if (one_in_(3)) {
             *breath_type = GF_MANA;
             *breath_type_description = _("魔力", "mana");
@@ -46,7 +46,7 @@ static void decide_breath_kind(player_type *player_ptr, int *breath_type, concpt
         }
 
         break;
-    case CLASS_CHAOS_WARRIOR:
+    case PlayerClassType::CHAOS_WARRIOR:
         if (!one_in_(3)) {
             *breath_type = GF_CONFUSION;
             *breath_type_description = _("混乱", "confusion");
@@ -56,9 +56,9 @@ static void decide_breath_kind(player_type *player_ptr, int *breath_type, concpt
         }
 
         break;
-    case CLASS_MONK:
-    case CLASS_SAMURAI:
-    case CLASS_FORCETRAINER:
+    case PlayerClassType::MONK:
+    case PlayerClassType::SAMURAI:
+    case PlayerClassType::FORCETRAINER:
         if (!one_in_(3)) {
             *breath_type = GF_CONFUSION;
             *breath_type_description = _("混乱", "confusion");
@@ -68,7 +68,7 @@ static void decide_breath_kind(player_type *player_ptr, int *breath_type, concpt
         }
 
         break;
-    case CLASS_MINDCRAFTER:
+    case PlayerClassType::MINDCRAFTER:
         if (!one_in_(3)) {
             *breath_type = GF_CONFUSION;
             *breath_type_description = _("混乱", "confusion");
@@ -78,8 +78,8 @@ static void decide_breath_kind(player_type *player_ptr, int *breath_type, concpt
         }
 
         break;
-    case CLASS_PRIEST:
-    case CLASS_PALADIN:
+    case PlayerClassType::PRIEST:
+    case PlayerClassType::PALADIN:
         if (one_in_(3)) {
             *breath_type = GF_HELL_FIRE;
             *breath_type_description = _("地獄の劫火", "hellfire");
@@ -89,8 +89,8 @@ static void decide_breath_kind(player_type *player_ptr, int *breath_type, concpt
         }
 
         break;
-    case CLASS_ROGUE:
-    case CLASS_NINJA:
+    case PlayerClassType::ROGUE:
+    case PlayerClassType::NINJA:
         if (one_in_(3)) {
             *breath_type = GF_DARK;
             *breath_type_description = _("暗黒", "darkness");
@@ -100,7 +100,7 @@ static void decide_breath_kind(player_type *player_ptr, int *breath_type, concpt
         }
 
         break;
-    case CLASS_BARD:
+    case PlayerClassType::BARD:
         if (!one_in_(3)) {
             *breath_type = GF_SOUND;
             *breath_type_description = _("轟音", "sound");
@@ -110,7 +110,7 @@ static void decide_breath_kind(player_type *player_ptr, int *breath_type, concpt
         }
 
         break;
-    case CLASS_ELEMENTALIST:
+    case PlayerClassType::ELEMENTALIST:
         *breath_type = get_element_type(player_ptr->element, 0);
         *breath_type_description = get_element_name(player_ptr->element, 0);
         break;
index d3928f4..71f437f 100644 (file)
@@ -88,9 +88,9 @@ bool switch_class_racial_execution(player_type *player_ptr, const int32_t comman
 {
     DIRECTION dir = 0;
     switch (player_ptr->pclass) {
-    case CLASS_WARRIOR:
+    case PlayerClassType::WARRIOR:
         return sword_dancing(player_ptr);
-    case CLASS_HIGH_MAGE:
+    case PlayerClassType::HIGH_MAGE:
         if (player_ptr->realm1 == REALM_HEX) {
             auto retval = SpellHex(player_ptr).stop_spells_with_selection();
             if (retval) {
@@ -101,10 +101,10 @@ bool switch_class_racial_execution(player_type *player_ptr, const int32_t comman
         }
 
         /* Fall through */
-    case CLASS_MAGE:
-    case CLASS_SORCERER:
+    case PlayerClassType::MAGE:
+    case PlayerClassType::SORCERER:
         return eat_magic(player_ptr, player_ptr->lev * 2);
-    case CLASS_PRIEST:
+    case PlayerClassType::PRIEST:
         if (!is_good_realm(player_ptr->realm1)) {
             (void)dispel_monsters(player_ptr, player_ptr->lev * 4);
             turn_monsters(player_ptr, player_ptr->lev * 4);
@@ -113,29 +113,29 @@ bool switch_class_racial_execution(player_type *player_ptr, const int32_t comman
         }
 
         return bless_weapon(player_ptr);
-    case CLASS_ROGUE:
+    case PlayerClassType::ROGUE:
         return hit_and_away(player_ptr);
-    case CLASS_RANGER:
-    case CLASS_SNIPER:
+    case PlayerClassType::RANGER:
+    case PlayerClassType::SNIPER:
         msg_print(_("敵を調査した...", "You examine your foes..."));
         probing(player_ptr);
         return true;
-    case CLASS_PALADIN:
+    case PlayerClassType::PALADIN:
         if (!get_aim_dir(player_ptr, &dir))
             return false;
 
         fire_beam(player_ptr, is_good_realm(player_ptr->realm1) ? GF_HOLY_FIRE : GF_HELL_FIRE, dir, player_ptr->lev * 3);
         return true;
-    case CLASS_WARRIOR_MAGE:
+    case PlayerClassType::WARRIOR_MAGE:
         if (command == -3)
             return comvert_hp_to_mp(player_ptr);
         else if (command == -4)
             return comvert_mp_to_hp(player_ptr);
 
         return true;
-    case CLASS_CHAOS_WARRIOR:
+    case PlayerClassType::CHAOS_WARRIOR:
         return confusing_light(player_ptr);
-    case CLASS_MONK:
+    case PlayerClassType::MONK:
         if (none_bits(empty_hands(player_ptr, true), EMPTY_HAND_MAIN)) {
             msg_print(_("素手じゃないとできません。", "You need to be barehanded."));
             return false;
@@ -158,10 +158,10 @@ bool switch_class_racial_execution(player_type *player_ptr, const int32_t comman
             return double_attack(player_ptr);
 
         return true;
-    case CLASS_MINDCRAFTER:
-    case CLASS_FORCETRAINER:
+    case PlayerClassType::MINDCRAFTER:
+    case PlayerClassType::FORCETRAINER:
         return clear_mind(player_ptr);
-    case CLASS_TOURIST:
+    case PlayerClassType::TOURIST:
         if (command == -3) {
             if (!get_aim_dir(player_ptr, &dir))
                 return false;
@@ -172,10 +172,10 @@ bool switch_class_racial_execution(player_type *player_ptr, const int32_t comman
         }
 
         return (command != -4) || identify_fully(player_ptr, false);
-    case CLASS_IMITATOR:
+    case PlayerClassType::IMITATOR:
         handle_stuff(player_ptr);
         return do_cmd_mane(player_ptr, true);
-    case CLASS_BEASTMASTER:
+    case PlayerClassType::BEASTMASTER:
         if (command == -3) {
             if (!get_aim_dir(player_ptr, &dir))
                 return false;
@@ -188,21 +188,21 @@ bool switch_class_racial_execution(player_type *player_ptr, const int32_t comman
             project_all_los(player_ptr, GF_CHARM_LIVING, player_ptr->lev);
 
         return true;
-    case CLASS_ARCHER:
+    case PlayerClassType::ARCHER:
         return create_ammo(player_ptr);
-    case CLASS_MAGIC_EATER:
+    case PlayerClassType::MAGIC_EATER:
         if (command == -3)
             return import_magic_device(player_ptr);
 
         return (command != -4) || (!cmd_limit_cast(player_ptr) && do_cmd_magic_eater(player_ptr, false, true));
-    case CLASS_BARD:
+    case PlayerClassType::BARD:
         if ((get_singing_song_effect(player_ptr) == 0) && (get_interrupting_song_effect(player_ptr) == 0))
             return false;
 
         stop_singing(player_ptr);
         PlayerEnergy(player_ptr).set_player_turn_energy(10);
         return true;
-    case CLASS_RED_MAGE:
+    case PlayerClassType::RED_MAGE:
         if (cmd_limit_cast(player_ptr))
             return false;
 
@@ -216,7 +216,7 @@ bool switch_class_racial_execution(player_type *player_ptr, const int32_t comman
             (void)do_cmd_cast(player_ptr);
         }
         return true;
-    case CLASS_SAMURAI:
+    case PlayerClassType::SAMURAI:
         if (command == -3) {
             concentration(player_ptr);
             return true;
@@ -235,20 +235,20 @@ bool switch_class_racial_execution(player_type *player_ptr, const int32_t comman
 
         set_bits(player_ptr->update, PU_BONUS);
         return true;
-    case CLASS_BLUE_MAGE:
+    case PlayerClassType::BLUE_MAGE:
         set_action(player_ptr, player_ptr->action == ACTION_LEARN ? ACTION_NONE : ACTION_LEARN);
         PlayerEnergy(player_ptr).reset_player_turn();
         return true;
-    case CLASS_CAVALRY:
+    case PlayerClassType::CAVALRY:
         return rodeo(player_ptr);
-    case CLASS_BERSERKER:
+    case PlayerClassType::BERSERKER:
         return recall_player(player_ptr, randint0(21) + 15);
-    case CLASS_SMITH:
+    case PlayerClassType::SMITH:
         if (player_ptr->lev <= 29)
             return ident_spell(player_ptr, true);
 
         return identify_fully(player_ptr, true);
-    case CLASS_MIRROR_MASTER:
+    case PlayerClassType::MIRROR_MASTER:
         if (command == -3) {
             remove_all_mirrors(player_ptr, true);
             return true;
@@ -258,9 +258,9 @@ bool switch_class_racial_execution(player_type *player_ptr, const int32_t comman
             return mirror_concentration(player_ptr);
 
         return true;
-    case CLASS_NINJA:
+    case PlayerClassType::NINJA:
         return hayagake(player_ptr);
-    case CLASS_ELEMENTALIST:
+    case PlayerClassType::ELEMENTALIST:
         if (command == -3)
             return clear_mind(player_ptr);
         if (command == -4)
index ed408a3..9ca660d 100644 (file)
@@ -7,7 +7,7 @@ rc_type::rc_type(player_type *player_ptr)
 {
     this->ask = true;
     this->lvl = player_ptr->lev;
-    this->is_warrior = (player_ptr->pclass == CLASS_WARRIOR || player_ptr->pclass == CLASS_BERSERKER);
+    this->is_warrior = (player_ptr->pclass == PlayerClassType::WARRIOR || player_ptr->pclass == PlayerClassType::BERSERKER);
 }
 
 void rc_type::add_power(rpi_type& rpi, int number)
index c3f5f2f..d80980c 100644 (file)
@@ -210,7 +210,7 @@ concptr do_crusade_spell(player_type *player_ptr, SPELL_IDX spell, spell_type mo
             DICE_SID sides = 6;
             POSITION rad = (plev < 30) ? 2 : 3;
             int base;
-            if (player_ptr->pclass == CLASS_PRIEST || player_ptr->pclass == CLASS_HIGH_MAGE || player_ptr->pclass == CLASS_SORCERER)
+            if (player_ptr->pclass == PlayerClassType::PRIEST || player_ptr->pclass == PlayerClassType::HIGH_MAGE || player_ptr->pclass == PlayerClassType::SORCERER)
                 base = plev + plev / 2;
             else
                 base = plev + plev / 4;
index edd6297..e7e19b8 100644 (file)
@@ -233,7 +233,7 @@ concptr do_trump_spell(player_type *player_ptr, SPELL_IDX spell, spell_type mode
                     y = player_ptr->y;
                 }
 
-                if (player_ptr->pclass == CLASS_BEASTMASTER)
+                if (player_ptr->pclass == PlayerClassType::BEASTMASTER)
                     type = SUMMON_KAMIKAZE_LIVING;
                 else
                     type = SUMMON_KAMIKAZE;
@@ -439,7 +439,7 @@ concptr do_trump_spell(player_type *player_ptr, SPELL_IDX spell, spell_type mode
             if (cast || fail) {
                 summon_type type;
                 msg_print(_("あなたはモンスターのカードに集中する...", "You concentrate on several trumps at once..."));
-                if (player_ptr->pclass == CLASS_BEASTMASTER)
+                if (player_ptr->pclass == PlayerClassType::BEASTMASTER)
                     type = SUMMON_LIVING;
                 else
                     type = SUMMON_NONE;
@@ -661,7 +661,7 @@ concptr do_trump_spell(player_type *player_ptr, SPELL_IDX spell, spell_type mode
             if (cast) {
                 summon_type type;
 
-                if (player_ptr->pclass == CLASS_BEASTMASTER)
+                if (player_ptr->pclass == PlayerClassType::BEASTMASTER)
                     type = SUMMON_HI_DRAGON_LIVING;
                 else
                     type = SUMMON_HI_DRAGON;
index f05d16c..e24566e 100644 (file)
@@ -21,7 +21,7 @@
  */
 static void wr_relams(player_type *player_ptr)
 {
-    if (player_ptr->pclass == CLASS_ELEMENTALIST)
+    if (player_ptr->pclass == PlayerClassType::ELEMENTALIST)
         wr_byte((byte)player_ptr->element);
     else
         wr_byte((byte)player_ptr->realm1);
index 80b1ca0..acadf35 100644 (file)
@@ -32,7 +32,7 @@ static bool fire_crimson(player_type *player_ptr)
     }
 
     int num = 1;
-    if (player_ptr->pclass == CLASS_ARCHER) {
+    if (player_ptr->pclass == PlayerClassType::ARCHER) {
         if (player_ptr->lev >= 10)
             num++;
 
index edbf324..d9b7284 100644 (file)
@@ -104,7 +104,7 @@ static void compensate_death_scythe_reflection_magnification(player_type *player
     if (!(has_resist_pois(player_ptr) || is_oppose_pois(player_ptr)) && (*magnification < 25))
         *magnification = 25;
 
-    if ((player_ptr->pclass != CLASS_SAMURAI) && (death_scythe_flags.has(TR_FORCE_WEAPON)) && (player_ptr->csp > (player_ptr->msp / 30))) {
+    if ((player_ptr->pclass != PlayerClassType::SAMURAI) && (death_scythe_flags.has(TR_FORCE_WEAPON)) && (player_ptr->csp > (player_ptr->msp / 30))) {
         player_ptr->csp -= (1 + (player_ptr->msp / 30));
         player_ptr->redraw |= (PR_MANA);
         *magnification = *magnification * 3 / 2 + 20;
index ba3901a..917f4a0 100644 (file)
@@ -180,7 +180,7 @@ bool activate_ty_curse(player_type *player_ptr, bool stop_ty, int *count)
         case 20: {
             auto is_statue = stop_ty;
             is_statue |= player_ptr->free_act && (randint1(125) < player_ptr->skill_sav);
-            is_statue |= player_ptr->pclass == CLASS_BERSERKER;
+            is_statue |= player_ptr->pclass == PlayerClassType::BERSERKER;
             if (!is_statue) {
                 msg_print(_("彫像になった気分だ!", "You feel like a statue!"));
                 TIME_EFFECT turns = player_ptr->free_act ? randint1(3) : randint1(13);
index d5ab36c..f0cec3d 100644 (file)
@@ -512,7 +512,7 @@ void teleport_away_followable(player_type *player_ptr, MONSTER_IDX m_idx)
         return;
 
     bool follow = false;
-    if (player_ptr->muta.has(MUTA::VTELEPORT) || (player_ptr->pclass == CLASS_IMITATOR))
+    if (player_ptr->muta.has(MUTA::VTELEPORT) || (player_ptr->pclass == PlayerClassType::IMITATOR))
         follow = true;
     else {
         object_type *o_ptr;
index a3f258c..64340c4 100644 (file)
@@ -25,7 +25,7 @@
  */
 void check_music(player_type *player_ptr)
 {
-    if (player_ptr->pclass != CLASS_BARD)
+    if (player_ptr->pclass != PlayerClassType::BARD)
         return;
 
     auto interupting_song_effect = get_interrupting_song_effect(player_ptr);
@@ -127,7 +127,7 @@ bool set_tim_stealth(player_type *player_ptr, TIME_EFFECT v, bool do_dec)
  */
 void stop_singing(player_type *player_ptr)
 {
-    if (player_ptr->pclass != CLASS_BARD)
+    if (player_ptr->pclass != PlayerClassType::BARD)
         return;
 
     if (get_interrupting_song_effect(player_ptr) != 0) {
index a9157db..d2cd94a 100644 (file)
@@ -34,7 +34,7 @@ void cast_shuffle(player_type *player_ptr)
     int vir = virtue_number(player_ptr, V_CHANCE);
     int i;
 
-    if ((player_ptr->pclass == CLASS_ROGUE) || (player_ptr->pclass == CLASS_HIGH_MAGE) || (player_ptr->pclass == CLASS_SORCERER))
+    if ((player_ptr->pclass == PlayerClassType::ROGUE) || (player_ptr->pclass == PlayerClassType::HIGH_MAGE) || (player_ptr->pclass == PlayerClassType::SORCERER))
         die = (randint1(110)) + plev / 5;
     else
         die = randint1(120);
index 5c226cc..d2aecef 100644 (file)
@@ -34,9 +34,9 @@ static const int extra_min_magic_fail_rate = 2;
  */
 EXP experience_of_spell(player_type *player_ptr, SPELL_IDX spell, int16_t use_realm)
 {
-    if (player_ptr->pclass == CLASS_SORCERER)
+    if (player_ptr->pclass == PlayerClassType::SORCERER)
         return SPELL_EXP_MASTER;
-    else if (player_ptr->pclass == CLASS_RED_MAGE)
+    else if (player_ptr->pclass == PlayerClassType::RED_MAGE)
         return SPELL_EXP_SKILLED;
     else if (use_realm == player_ptr->realm1)
         return player_ptr->spell_exp[spell];
@@ -158,7 +158,7 @@ PERCENTAGE spell_chance(player_type *player_ptr, SPELL_IDX spell, int16_t use_re
         chance += 5 * (need_mana - player_ptr->csp);
     }
 
-    if ((use_realm != player_ptr->realm1) && ((player_ptr->pclass == CLASS_MAGE) || (player_ptr->pclass == CLASS_PRIEST)))
+    if ((use_realm != player_ptr->realm1) && ((player_ptr->pclass == PlayerClassType::MAGE) || (player_ptr->pclass == PlayerClassType::PRIEST)))
         chance += 5;
 
     PERCENTAGE minfail = adj_mag_fail[player_ptr->stat_index[mp_ptr->spell_stat]];
@@ -167,9 +167,9 @@ PERCENTAGE spell_chance(player_type *player_ptr, SPELL_IDX spell, int16_t use_re
             minfail = 5;
     }
 
-    if (((player_ptr->pclass == CLASS_PRIEST) || (player_ptr->pclass == CLASS_SORCERER)) && player_ptr->is_icky_wield[0])
+    if (((player_ptr->pclass == PlayerClassType::PRIEST) || (player_ptr->pclass == PlayerClassType::SORCERER)) && player_ptr->is_icky_wield[0])
         chance += 25;
-    if (((player_ptr->pclass == CLASS_PRIEST) || (player_ptr->pclass == CLASS_SORCERER)) && player_ptr->is_icky_wield[1])
+    if (((player_ptr->pclass == PlayerClassType::PRIEST) || (player_ptr->pclass == PlayerClassType::SORCERER)) && player_ptr->is_icky_wield[1])
         chance += 25;
 
     chance = mod_spell_chance_1(player_ptr, chance);
@@ -201,8 +201,8 @@ PERCENTAGE spell_chance(player_type *player_ptr, SPELL_IDX spell, int16_t use_re
         chance = 95;
     }
 
-    if ((use_realm == player_ptr->realm1) || (use_realm == player_ptr->realm2) || (player_ptr->pclass == CLASS_SORCERER)
-        || (player_ptr->pclass == CLASS_RED_MAGE)) {
+    if ((use_realm == player_ptr->realm1) || (use_realm == player_ptr->realm2) || (player_ptr->pclass == PlayerClassType::SORCERER)
+        || (player_ptr->pclass == PlayerClassType::RED_MAGE)) {
         EXP exp = experience_of_spell(player_ptr, spell, use_realm);
         if (exp >= SPELL_EXP_EXPERT)
             chance--;
@@ -240,7 +240,7 @@ void print_spells(player_type *player_ptr, SPELL_IDX target_spell, SPELL_IDX *sp
     put_str(buf, y, x + 29);
 
     int increment = 64;
-    if ((player_ptr->pclass == CLASS_SORCERER) || (player_ptr->pclass == CLASS_RED_MAGE))
+    if ((player_ptr->pclass == PlayerClassType::SORCERER) || (player_ptr->pclass == PlayerClassType::RED_MAGE))
         increment = 0;
     else if (use_realm == player_ptr->realm1)
         increment = 0;
@@ -281,7 +281,7 @@ void print_spells(player_type *player_ptr, SPELL_IDX target_spell, SPELL_IDX *sp
                 max = true;
             else if (s_ptr->slevel >= 99)
                 max = true;
-            else if ((player_ptr->pclass == CLASS_RED_MAGE) && (exp_level >= EXP_LEVEL_SKILLED))
+            else if ((player_ptr->pclass == PlayerClassType::RED_MAGE) && (exp_level >= EXP_LEVEL_SKILLED))
                 max = true;
 
             strncpy(ryakuji, exp_level_str[exp_level], 4);
@@ -306,7 +306,7 @@ void print_spells(player_type *player_ptr, SPELL_IDX target_spell, SPELL_IDX *sp
         strcpy(info, exe_spell(player_ptr, use_realm, spell, SPELL_INFO));
         concptr comment = info;
         byte line_attr = TERM_WHITE;
-        if ((player_ptr->pclass == CLASS_SORCERER) || (player_ptr->pclass == CLASS_RED_MAGE)) {
+        if ((player_ptr->pclass == PlayerClassType::SORCERER) || (player_ptr->pclass == PlayerClassType::RED_MAGE)) {
             if (s_ptr->slevel > player_ptr->max_plv) {
                 comment = _("未知", "unknown");
                 line_attr = TERM_L_BLUE;
index 1ed9c7c..ab490f1 100644 (file)
@@ -88,9 +88,9 @@ bool common_saving_throw_control(player_type *player_ptr, HIT_POINT pow, monster
  */
 PERCENTAGE beam_chance(player_type *player_ptr)
 {
-    if (player_ptr->pclass == CLASS_MAGE)
+    if (player_ptr->pclass == PlayerClassType::MAGE)
         return (PERCENTAGE)(player_ptr->lev);
-    if (player_ptr->pclass == CLASS_HIGH_MAGE || player_ptr->pclass == CLASS_SORCERER)
+    if (player_ptr->pclass == PlayerClassType::HIGH_MAGE || player_ptr->pclass == PlayerClassType::SORCERER)
         return (PERCENTAGE)(player_ptr->lev + 10);
 
     return (PERCENTAGE)(player_ptr->lev / 2);
index 58bca87..81e0ea8 100644 (file)
@@ -63,12 +63,12 @@ bool unleash_mana_storm(player_type *player_ptr, bool powerful)
     project(player_ptr, 0, (powerful ? 7 : 5), player_ptr->y, player_ptr->x, (randint1(200) + (powerful ? 500 : 300)) * 2, GF_MANA,
         PROJECT_KILL | PROJECT_ITEM | PROJECT_GRID);
 
-    bool is_special_class = player_ptr->pclass != CLASS_MAGE;
-    is_special_class &= player_ptr->pclass != CLASS_HIGH_MAGE;
-    is_special_class &= player_ptr->pclass != CLASS_SORCERER;
-    is_special_class &= player_ptr->pclass != CLASS_MAGIC_EATER;
-    is_special_class &= player_ptr->pclass != CLASS_BLUE_MAGE;
-    is_special_class &= player_ptr->pclass != CLASS_ELEMENTALIST;
+    bool is_special_class = player_ptr->pclass != PlayerClassType::MAGE;
+    is_special_class &= player_ptr->pclass != PlayerClassType::HIGH_MAGE;
+    is_special_class &= player_ptr->pclass != PlayerClassType::SORCERER;
+    is_special_class &= player_ptr->pclass != PlayerClassType::MAGIC_EATER;
+    is_special_class &= player_ptr->pclass != PlayerClassType::BLUE_MAGE;
+    is_special_class &= player_ptr->pclass != PlayerClassType::ELEMENTALIST;
     if (is_special_class)
         (void)take_hit(player_ptr, DAMAGE_NOESCAPE, 50, _("コントロールし難い強力な魔力の解放", "unleashing magics too mighty to control"));
 
index 78009bf..f63503e 100644 (file)
@@ -459,7 +459,7 @@ bool true_healing(player_type *player_ptr, HIT_POINT pow)
 
 bool restore_mana(player_type *player_ptr, bool magic_eater)
 {
-    if (player_ptr->pclass == CLASS_MAGIC_EATER && magic_eater) {
+    if (player_ptr->pclass == PlayerClassType::MAGIC_EATER && magic_eater) {
         // 魔力復活による、魔道具術師の取り込んだ魔法の回復量
         // 取り込み数が10回未満: 3 回分回復
         // 取り込み数が10回以上: 取り込み回数/3 回分回復
@@ -587,7 +587,7 @@ bool cosmic_cast_off(player_type *player_ptr, object_type **o_ptr_ptr)
     (void)set_blessed(player_ptr, player_ptr->blessed + t, false);
     (void)set_fast(player_ptr, player_ptr->fast + t, false);
     (void)set_shero(player_ptr, player_ptr->shero + t, false);
-    if (player_ptr->pclass == CLASS_FORCETRAINER) {
+    if (player_ptr->pclass == PlayerClassType::FORCETRAINER) {
         set_current_ki(player_ptr, true, player_ptr->lev * 5 + 190);
         msg_print(_("気が爆発寸前になった。", "Your force absorbs the explosion."));
     }
index 67a7640..e6b569a 100644 (file)
@@ -98,7 +98,7 @@ void reset_tim_flags(player_type *player_ptr)
         (void)set_monster_invulner(player_ptr, player_ptr->riding, 0, false);
     }
 
-    if (player_ptr->pclass == CLASS_BARD) {
+    if (player_ptr->pclass == PlayerClassType::BARD) {
         set_singing_song_effect(player_ptr, MUSIC_NONE);
         set_singing_song_id(player_ptr, 0);
     }
@@ -380,7 +380,7 @@ bool set_shero(player_type *player_ptr, TIME_EFFECT v, bool do_dec)
     if (player_ptr->is_dead)
         return false;
 
-    if (player_ptr->pclass == CLASS_BERSERKER) {
+    if (player_ptr->pclass == PlayerClassType::BERSERKER) {
         v = 1;
         return false;
     }
index 6d7d8a2..053a4d4 100644 (file)
@@ -190,7 +190,7 @@ bool set_oppose_pois(player_type *player_ptr, TIME_EFFECT v, bool do_dec)
 {
     bool notice = false;
     v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
-    if ((player_ptr->pclass == CLASS_NINJA) && (player_ptr->lev > 44))
+    if ((player_ptr->pclass == PlayerClassType::NINJA) && (player_ptr->lev > 44))
         v = 1;
     if (player_ptr->is_dead)
         return false;
@@ -247,5 +247,5 @@ bool is_oppose_cold(player_type *player_ptr)
 bool is_oppose_pois(player_type *player_ptr)
 {
     return player_ptr->oppose_pois || music_singing(player_ptr, MUSIC_RESIST)
-        || (PlayerClass(player_ptr).samurai_stance_is(SamuraiStance::MUSOU) || (player_ptr->pclass == CLASS_NINJA && player_ptr->lev > 44));
+        || (PlayerClass(player_ptr).samurai_stance_is(SamuraiStance::MUSOU) || (player_ptr->pclass == PlayerClassType::NINJA && player_ptr->lev > 44));
 }
index 9839c62..2e37fe4 100644 (file)
@@ -76,9 +76,9 @@ void change_race(player_type *player_ptr, PlayerRaceType new_race, concptr effec
     rp_ptr = &race_info[enum2i(player_ptr->prace)];
     player_ptr->expfact = rp_ptr->r_exp + cp_ptr->c_exp;
 
-    bool is_special_class = player_ptr->pclass == CLASS_MONK;
-    is_special_class |= player_ptr->pclass == CLASS_FORCETRAINER;
-    is_special_class |= player_ptr->pclass == CLASS_NINJA;
+    bool is_special_class = player_ptr->pclass == PlayerClassType::MONK;
+    is_special_class |= player_ptr->pclass == PlayerClassType::FORCETRAINER;
+    is_special_class |= player_ptr->pclass == PlayerClassType::NINJA;
     bool is_special_race = player_ptr->prace == PlayerRaceType::KLACKON;
     is_special_race |= player_ptr->prace == PlayerRaceType::SPRITE;
     if (is_special_class && is_special_race)
@@ -86,7 +86,7 @@ void change_race(player_type *player_ptr, PlayerRaceType new_race, concptr effec
 
     get_height_weight(player_ptr);
 
-    if (player_ptr->pclass == CLASS_SORCERER)
+    if (player_ptr->pclass == PlayerClassType::SORCERER)
         player_ptr->hitdie = rp_ptr->r_mhp / 2 + cp_ptr->c_mhp + ap_ptr->a_mhp;
     else
         player_ptr->hitdie = rp_ptr->r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
index fd08a16..007ad7b 100644 (file)
@@ -148,16 +148,16 @@ void store_process_command(player_type *player_ptr)
         break;
     }
     case 'b': {
-        if ((player_ptr->pclass == CLASS_MINDCRAFTER) || (player_ptr->pclass == CLASS_BERSERKER) || (player_ptr->pclass == CLASS_NINJA)
-            || (player_ptr->pclass == CLASS_MIRROR_MASTER))
+        if ((player_ptr->pclass == PlayerClassType::MINDCRAFTER) || (player_ptr->pclass == PlayerClassType::BERSERKER) || (player_ptr->pclass == PlayerClassType::NINJA)
+            || (player_ptr->pclass == PlayerClassType::MIRROR_MASTER))
             do_cmd_mind_browse(player_ptr);
-        else if (player_ptr->pclass == CLASS_ELEMENTALIST)
+        else if (player_ptr->pclass == PlayerClassType::ELEMENTALIST)
             do_cmd_element_browse(player_ptr);
-        else if (player_ptr->pclass == CLASS_SMITH)
+        else if (player_ptr->pclass == PlayerClassType::SMITH)
             do_cmd_kaji(player_ptr, true);
-        else if (player_ptr->pclass == CLASS_MAGIC_EATER)
+        else if (player_ptr->pclass == PlayerClassType::MAGIC_EATER)
             do_cmd_magic_eater(player_ptr, true, false);
-        else if (player_ptr->pclass == CLASS_SNIPER)
+        else if (player_ptr->pclass == PlayerClassType::SNIPER)
             do_cmd_snipe_browse(player_ptr);
         else
             do_cmd_browse(player_ptr);
index 42e67ff..eeabbcc 100644 (file)
@@ -68,7 +68,7 @@ static void display_sub_hand(player_type *player_ptr)
         return;
     }
 
-    if ((player_ptr->pclass != CLASS_MONK) || ((empty_hands(player_ptr, true) & EMPTY_HAND_MAIN) == 0))
+    if ((player_ptr->pclass != PlayerClassType::MONK) || ((empty_hands(player_ptr, true) & EMPTY_HAND_MAIN) == 0))
         return;
 
     PlayerClass pc(player_ptr);
index 68ba7b2..0ea6dbd 100644 (file)
@@ -104,7 +104,7 @@ static void display_magic_realms(player_type *player_ptr)
         return;
 
     char tmp[64];
-    if (player_ptr->pclass == CLASS_ELEMENTALIST)
+    if (player_ptr->pclass == PlayerClassType::ELEMENTALIST)
         sprintf(tmp, "%s", get_element_title(player_ptr->element));
     else if (player_ptr->realm2)
         sprintf(tmp, "%s, %s", realm_names[player_ptr->realm1], realm_names[player_ptr->realm2]);
@@ -312,7 +312,7 @@ void display_player(player_type *player_ptr, int mode)
     display_player_basic_info(player_ptr);
     display_magic_realms(player_ptr);
 
-    if ((player_ptr->pclass == CLASS_CHAOS_WARRIOR) || (player_ptr->muta.has(MUTA::CHAOS_GIFT)))
+    if ((player_ptr->pclass == PlayerClassType::CHAOS_WARRIOR) || (player_ptr->muta.has(MUTA::CHAOS_GIFT)))
         display_player_one_line(ENTRY_PATRON, patron_list[player_ptr->chaos_patron].name.c_str(), TERM_L_BLUE);
 
     display_phisique(player_ptr);
index 63966d4..a548deb 100644 (file)
@@ -98,11 +98,11 @@ void display_koff(player_type *player_ptr, KIND_OBJECT_IDX k_idx)
         if ((use_realm != player_ptr->realm1) && (use_realm != player_ptr->realm2))
             return;
     } else {
-        if ((player_ptr->pclass != CLASS_SORCERER) && (player_ptr->pclass != CLASS_RED_MAGE))
+        if ((player_ptr->pclass != PlayerClassType::SORCERER) && (player_ptr->pclass != PlayerClassType::RED_MAGE))
             return;
         if (!is_magic(use_realm))
             return;
-        if ((player_ptr->pclass == CLASS_RED_MAGE) && (use_realm != REALM_ARCANE) && (sval > 1))
+        if ((player_ptr->pclass == PlayerClassType::RED_MAGE) && (use_realm != REALM_ARCANE) && (sval > 1))
             return;
     }
 
index 22eb87c..1778636 100644 (file)
@@ -52,7 +52,7 @@ static void calc_shot_params(player_type *player_ptr, object_type *o_ptr, int *s
 
     *shots = 1;
     *shot_frac = 0;
-    if (player_ptr->pclass != CLASS_ARCHER)
+    if (player_ptr->pclass != PlayerClassType::ARCHER)
         return;
 
     if (player_ptr->lev >= 10)
@@ -80,7 +80,7 @@ static bool calc_weapon_damage_limit(player_type *player_ptr, int hand, int *dam
         return false;
     }
 
-    if (player_ptr->pclass == CLASS_FORCETRAINER)
+    if (player_ptr->pclass == PlayerClassType::FORCETRAINER)
         level = MAX(1, level - 3);
     PlayerClass pc(player_ptr);
     if (pc.monk_stance_is(MonkStance::BYAKKO))
@@ -144,7 +144,7 @@ static int strengthen_basedam(player_type *player_ptr, object_type *o_ptr, int b
     }
 
     // 理力
-    bool is_force = player_ptr->pclass != CLASS_SAMURAI;
+    bool is_force = player_ptr->pclass != PlayerClassType::SAMURAI;
     is_force &= flgs.has(TR_FORCE_WEAPON);
     is_force &= player_ptr->csp > (o_ptr->dd * o_ptr->ds / 5);
     if (is_force)
@@ -252,7 +252,7 @@ static void calc_two_hands(player_type *player_ptr, int *damage, int *to_h)
     for (int i = 0; i < 2; i++) {
         int basedam;
         damage[i] = player_ptr->dis_to_d[i] * 100;
-        if (((player_ptr->pclass == CLASS_MONK) || (player_ptr->pclass == CLASS_FORCETRAINER)) && (empty_hands(player_ptr, true) & EMPTY_HAND_MAIN)) {
+        if (((player_ptr->pclass == PlayerClassType::MONK) || (player_ptr->pclass == PlayerClassType::FORCETRAINER)) && (empty_hands(player_ptr, true) & EMPTY_HAND_MAIN)) {
             if (!calc_weapon_damage_limit(player_ptr, i, damage, &basedam, o_ptr))
                 break;
 
index 1cb0efb..0c331a3 100644 (file)
@@ -36,17 +36,17 @@ static void display_spell_list(player_type *player_ptr)
 
     clear_from(0);
 
-    if (player_ptr->pclass == CLASS_SORCERER)
+    if (player_ptr->pclass == PlayerClassType::SORCERER)
         return;
-    if (player_ptr->pclass == CLASS_RED_MAGE)
+    if (player_ptr->pclass == PlayerClassType::RED_MAGE)
         return;
-    if (player_ptr->pclass == CLASS_SNIPER) {
+    if (player_ptr->pclass == PlayerClassType::SNIPER) {
         display_snipe_list(player_ptr);
         return;
     }
 
-    if ((player_ptr->pclass == CLASS_MINDCRAFTER) || (player_ptr->pclass == CLASS_BERSERKER) || (player_ptr->pclass == CLASS_NINJA)
-        || (player_ptr->pclass == CLASS_MIRROR_MASTER) || (player_ptr->pclass == CLASS_FORCETRAINER) || player_ptr->pclass == CLASS_ELEMENTALIST) {
+    if ((player_ptr->pclass == PlayerClassType::MINDCRAFTER) || (player_ptr->pclass == PlayerClassType::BERSERKER) || (player_ptr->pclass == PlayerClassType::NINJA)
+        || (player_ptr->pclass == PlayerClassType::MIRROR_MASTER) || (player_ptr->pclass == PlayerClassType::FORCETRAINER) || player_ptr->pclass == PlayerClassType::ELEMENTALIST) {
         PERCENTAGE minfail = 0;
         PLAYER_LEVEL plev = player_ptr->lev;
         PERCENTAGE chance = 0;
@@ -64,24 +64,24 @@ static void display_spell_list(player_type *player_ptr)
         put_str(_("Lv   MP 失率 効果", "Lv Mana Fail Info"), y, x + 35);
 
         switch (player_ptr->pclass) {
-        case CLASS_MINDCRAFTER:
+        case PlayerClassType::MINDCRAFTER:
             use_mind = mind_kind_type::MINDCRAFTER;
             break;
-        case CLASS_FORCETRAINER:
+        case PlayerClassType::FORCETRAINER:
             use_mind = mind_kind_type::KI;
             break;
-        case CLASS_BERSERKER:
+        case PlayerClassType::BERSERKER:
             use_mind = mind_kind_type::BERSERKER;
             use_hp = true;
             break;
-        case CLASS_MIRROR_MASTER:
+        case PlayerClassType::MIRROR_MASTER:
             use_mind = mind_kind_type::MIRROR_MASTER;
             break;
-        case CLASS_NINJA:
+        case PlayerClassType::NINJA:
             use_mind = mind_kind_type::NINJUTSU;
             use_hp = true;
             break;
-        case CLASS_ELEMENTALIST:
+        case PlayerClassType::ELEMENTALIST:
             use_mind = mind_kind_type::ELEMENTAL;
             break;
         default:
index 67aa99d..19f62e8 100644 (file)
@@ -33,7 +33,7 @@ void print_title(player_type *player_ptr)
             p = _("***勝利者***", "***WINNER***");
         }
     } else {
-        angband_strcpy(str, player_titles[player_ptr->pclass][(player_ptr->lev - 1) / 5].data(), sizeof(str));
+        angband_strcpy(str, player_titles[enum2i(player_ptr->pclass)][(player_ptr->lev - 1) / 5].data(), sizeof(str));
         p = str;
     }
 
index 60fe00b..8a611d6 100644 (file)
@@ -326,7 +326,7 @@ void print_imitation(player_type *player_ptr)
     TERM_LEN col_study = wid + COL_STUDY;
     TERM_LEN row_study = hgt + ROW_STUDY;
 
-    if (player_ptr->pclass != CLASS_IMITATOR)
+    if (player_ptr->pclass != PlayerClassType::IMITATOR)
         return;
 
     auto mane_data = PlayerClass(player_ptr).get_specific_data<mane_data_type>();
index bc674e3..3979f2c 100644 (file)
@@ -153,10 +153,10 @@ bool exe_cmd_debug(player_type *player_ptr, char cmd)
         break;
     case 'E':
         switch (player_ptr->pclass) {
-        case CLASS_BLUE_MAGE:
+        case PlayerClassType::BLUE_MAGE:
             wiz_learn_blue_magic_all(player_ptr);
             break;
-        case CLASS_SMITH:
+        case PlayerClassType::SMITH:
             wiz_fillup_all_smith_essences(player_ptr);
             break;
         default:
@@ -228,7 +228,7 @@ bool exe_cmd_debug(player_type *player_ptr, char cmd)
         wiz_lite(player_ptr, false);
         break;
     case 'w':
-        wiz_lite(player_ptr, (bool)(player_ptr->pclass == CLASS_NINJA));
+        wiz_lite(player_ptr, (bool)(player_ptr->pclass == PlayerClassType::NINJA));
         break;
     case 'x':
         gain_exp(player_ptr, command_arg ? command_arg : (player_ptr->exp + 1));
index 085a926..43fea41 100644 (file)
@@ -423,15 +423,17 @@ void wiz_change_status(player_type *player_ptr)
     for (auto j = 0; j <= TV_WEAPON_END - TV_WEAPON_BEGIN; j++) {
         for (int i = 0; i < 64; i++) {
             player_ptr->weapon_exp[j][i] = tmp_s16b;
-            if (player_ptr->weapon_exp[j][i] > s_info[player_ptr->pclass].w_max[j][i])
-                player_ptr->weapon_exp[j][i] = s_info[player_ptr->pclass].w_max[j][i];
+            auto short_pclass = enum2i(player_ptr->pclass);
+            if (player_ptr->weapon_exp[j][i] > s_info[short_pclass].w_max[j][i])
+                player_ptr->weapon_exp[j][i] = s_info[short_pclass].w_max[j][i];
         }
     }
 
     for (int j = 0; j < 10; j++) {
         player_ptr->skill_exp[j] = tmp_s16b;
-        if (player_ptr->skill_exp[j] > s_info[player_ptr->pclass].s_max[j])
-            player_ptr->skill_exp[j] = s_info[player_ptr->pclass].s_max[j];
+        auto short_pclass = enum2i(player_ptr->pclass);
+        if (player_ptr->skill_exp[j] > s_info[short_pclass].s_max[j])
+            player_ptr->skill_exp[j] = s_info[short_pclass].s_max[j];
     }
 
     int k;
@@ -678,7 +680,7 @@ void wiz_reset_race(player_type *player_ptr)
 void wiz_reset_class(player_type *player_ptr)
 {
     char ppp[80];
-    sprintf(ppp, "Class (0-%d): ", MAX_CLASS - 1);
+    sprintf(ppp, "Class (0-%d): ", enum2i(PlayerClassType::MAX) - 1);
 
     char tmp_val[160];
     sprintf(tmp_val, "%d", player_ptr->pclass);
@@ -687,12 +689,13 @@ void wiz_reset_class(player_type *player_ptr)
         return;
 
     int tmp_int = atoi(tmp_val);
-    if (tmp_int < 0 || tmp_int >= MAX_CLASS)
+    if (tmp_int < 0 || tmp_int >= enum2i(PlayerClassType::MAX))
         return;
 
     player_ptr->pclass = i2enum<PlayerClassType>(tmp_int);
-    cp_ptr = &class_info[player_ptr->pclass];
-    mp_ptr = &m_info[player_ptr->pclass];
+    auto short_pclass = enum2i(player_ptr->pclass);
+    cp_ptr = &class_info[short_pclass];
+    mp_ptr = &m_info[short_pclass];
     PlayerClass(player_ptr).init_specific_data();
     player_ptr->window_flags |= PW_PLAYER;
     player_ptr->update |= PU_BONUS | PU_HP | PU_MANA | PU_SPELLS;
index 48163e8..8973b21 100644 (file)
@@ -195,7 +195,7 @@ static spoiler_output_status spoil_player_spell(concptr fname)
     player_type dummy_p;
     dummy_p.lev = 1;
 
-    for (int c = 0; c < MAX_CLASS; c++) {
+    for (int c = 0; c < enum2i(PlayerClassType::MAX); c++) {
         auto class_ptr = &class_info[c];
         sprintf(buf, "[[Class: %s]]\n", class_ptr->title);
         spoil_out(buf);
index 410f6a3..fcce349 100644 (file)
@@ -83,7 +83,7 @@ void add_retired_class(PlayerClassType c)
  */
 bool is_winner_class(PlayerClassType c)
 {
-    if (c == MAX_CLASS)
+    if (c == PlayerClassType::MAX)
         return false;
     return w_ptr->sf_winner.has(c);
 }
@@ -93,7 +93,7 @@ bool is_winner_class(PlayerClassType c)
  */
 bool is_retired_class(PlayerClassType c)
 {
-    if (c == MAX_CLASS)
+    if (c == PlayerClassType::MAX)
         return false;
     return w_ptr->sf_retired.has(c);
 }
index 7e98929..aa00c6b 100644 (file)
@@ -49,8 +49,8 @@ struct world_type {
     uint16_t sf_lives{}; //!< このセーブファイルで何人プレイしたか / Number of past "lives" with this file
     uint16_t sf_saves{}; //!< 現在のプレイで何回セーブしたか / Number of "saves" during this life
     uint32_t sf_play_time{}; //!< このセーブファイルで遊んだ合計のプレイ時間
-    FlagGroup<PlayerClassType, MAX_CLASS> sf_winner{}; //!< このセーブファイルで*勝利*した職業
-    FlagGroup<PlayerClassType, MAX_CLASS> sf_retired{}; //!< このセーブファイルで引退した職業
+    FlagGroup<PlayerClassType, PlayerClassType::MAX> sf_winner{}; //!< このセーブファイルで*勝利*した職業
+    FlagGroup<PlayerClassType, PlayerClassType::MAX> sf_retired{}; //!< このセーブファイルで引退した職業
 
     bool character_generated{}; /* The character exists */
     bool character_dungeon{}; /* The character has a dungeon */