* @return 見つけたらtrue
*/
template <typename T>
+bool info_grab_one_flag(TrFlags &flags, const std::unordered_map<sview, T> &names, sview what)
+{
+ if (auto it = names.find(what); it != names.end()) {
+ add_flag(flags, it->second);
+ return true;
+ }
+ return false;
+}
+
+/*!
+ * @brief infoフラグ文字列をフラグビットに変換する
+ * @param flags ビットフラグ配列
+ * @param names フラグ文字列変換表
+ * @param what フラグ文字列
+ * @return 見つけたらtrue
+ */
+template <typename T>
bool info_grab_one_flag(uint32_t *flags, const std::unordered_map<sview, T> &names, sview what)
{
if (auto it = names.find(what); it != names.end()) {
samurai_slaying_type *samurai_slaying_ptr, MULTIPLY mult, const TrFlags &flags, monster_type *m_ptr, combat_options mode, monster_race *r_ptr)
{
samurai_slaying_ptr->mult = mult;
- std::copy_n(flags, TR_FLAG_SIZE, samurai_slaying_ptr->flags);
+ samurai_slaying_ptr->flags = flags;
samurai_slaying_ptr->m_ptr = m_ptr;
samurai_slaying_ptr->mode = mode;
samurai_slaying_ptr->r_ptr = r_ptr;
object_kind *k_ptr = &k_info[o_ptr->k_idx];
/* Base object */
- for (int i = 0; i < TR_FLAG_SIZE; i++) {
- flgs[i] = k_ptr->flags[i];
- }
+ flgs = k_ptr->flags;
if (o_ptr->is_fixed_artifact()) {
- artifact_type *a_ptr = &a_info[o_ptr->name1];
- for (int i = 0; i < TR_FLAG_SIZE; i++) {
- flgs[i] = a_ptr->flags[i];
- }
+ flgs = a_info[o_ptr->name1].flags;
}
if (o_ptr->is_ego()) {
{
bool spoil = false;
object_kind *k_ptr = &k_info[o_ptr->k_idx];
- for (int i = 0; i < TR_FLAG_SIZE; i++) {
- flgs[i] = 0;
- }
+ flgs.fill(0U);
if (!o_ptr->is_aware())
return;
/* Base object */
- for (int i = 0; i < TR_FLAG_SIZE; i++) {
- flgs[i] = k_ptr->flags[i];
- }
+ flgs = k_ptr->flags;
if (!o_ptr->is_known())
return;
if (spoil || o_ptr->is_fully_known()) {
if (o_ptr->is_fixed_artifact()) {
- artifact_type *a_ptr = &a_info[o_ptr->name1];
-
- for (int i = 0; i < TR_FLAG_SIZE; i++) {
- flgs[i] = a_ptr->flags[i];
- }
+ flgs = a_info[o_ptr->name1].flags;
}
/* Random artifact ! */
}
}
- for (int i = 0; i < TR_FLAG_SIZE; i++)
- if (o_ptr->art_flags[i] != j_ptr->art_flags[i])
- return 0;
+ if (o_ptr->art_flags != j_ptr->art_flags)
+ return 0;
if (o_ptr->curse_flags != j_ptr->curse_flags)
return 0;
self_info_type *initialize_self_info_type(self_info_type *self_ptr)
{
self_ptr->line = 0;
- for (int i = 0; i < TR_FLAG_SIZE; i++)
- self_ptr->flags[i] = 0L;
+ self_ptr->flags.fill(0U);
return self_ptr;
}
*/
void player_flags(player_type *creature_ptr, TrFlags &flags)
{
- for (int i = 0; i < TR_FLAG_SIZE; i++)
- flags[i] = 0L;
+ flags.fill(0U);
add_class_flags(creature_ptr, flags);
add_player_race_flags(creature_ptr, flags);
void riding_flags(player_type *creature_ptr, TrFlags &flags, TrFlags &negative_flags)
{
- for (int i = 0; i < TR_FLAG_SIZE; i++) {
- flags[i] = 0L;
- negative_flags[i] = 0L;
- }
+ flags.fill(0U);
+ negative_flags.fill(0U);
if (!creature_ptr->riding)
return;
*/
void player_immunity(player_type *creature_ptr, TrFlags &flags)
{
- for (int i = 0; i < TR_FLAG_SIZE; i++) {
- flags[i] = 0L;
- }
+ flags.fill(0U);
if (player_race_has_flag(creature_ptr, TR_IM_ACID))
add_flag(flags, TR_RES_ACID);
*/
void tim_player_immunity(player_type *creature_ptr, TrFlags &flags)
{
- for (int i = 0; i < TR_FLAG_SIZE; i++)
- flags[i] = 0L;
+ flags.fill(0U);
if (creature_ptr->special_defense & DEFENSE_ACID)
add_flag(flags, TR_RES_ACID);
*/
void known_obj_immunity(player_type *creature_ptr, TrFlags &flags)
{
- for (int i = 0; i < TR_FLAG_SIZE; i++)
- flags[i] = 0L;
+ flags.fill(0U);
for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
TrFlags o_flags;
*/
void player_vulnerability_flags(player_type *creature_ptr, TrFlags &flags)
{
- for (int i = 0; i < TR_FLAG_SIZE; i++)
- flags[i] = 0L;
+ flags.fill(0U);
if (creature_ptr->muta.has(MUTA::VULN_ELEM) || (creature_ptr->special_defense & KATA_KOUKIJIN)) {
add_flag(flags, TR_RES_ACID);
BIT_FLAGS race_class_flag = FLAG_CAUSE_CLASS;
set_bits(race_class_flag, FLAG_CAUSE_RACE);
- for (int i = 0; i < TR_FLAG_SIZE; i++)
- flags[i] = 0L;
+ flags.fill(0U);
if (is_oppose_acid(creature_ptr) && none_bits(has_immune_acid(creature_ptr), (race_class_flag | tmp_effect_flag)))
add_flag(flags, TR_RES_ACID);
*/
void get_bloody_moon_flags(object_type *o_ptr)
{
- for (int i = 0; i < TR_FLAG_SIZE; i++)
- o_ptr->art_flags[i] = a_info[ART_BLOOD].flags[i];
+ o_ptr->art_flags = a_info[ART_BLOOD].flags;
int dummy = randint1(2) + randint1(2);
for (int i = 0; i < dummy; i++) {
o_ptr->dd = 0;
o_ptr->ds = 0;
- for (int i = 0; i < TR_FLAG_SIZE; i++)
- o_ptr->art_flags[i] = 0;
+ o_ptr->art_flags.fill(0U);
/* Curse it */
o_ptr->curse_flags.set(TRC::CURSED);
if ((st_ptr->stock[what].tval == TV_ROD) || (st_ptr->stock[what].tval == TV_WAND))
st_ptr->stock[what].pval -= num * st_ptr->stock[what].pval / st_ptr->stock[what].number;
-
+
store_item_increase(what, -num);
store_item_optimize(what);
}
if (o_ptr->is_artifact() || j_ptr->is_artifact())
return false;
- for (int i = 0; i < TR_FLAG_SIZE; i++)
- if (o_ptr->art_flags[i] != j_ptr->art_flags[i])
- return false;
+ if (o_ptr->art_flags != j_ptr->art_flags)
+ return false;
if (o_ptr->xtra1 || j_ptr->xtra1)
return false;
* </pre>
*/
+#include <array>
#include <cassert>
#include <stdint.h>
typedef int16_t FEAT_PRIORITY; /*!< 地形の縮小表示優先順位 */
-using TrFlags = BIT_FLAGS[TR_FLAG_SIZE];
+using TrFlags = std::array<BIT_FLAGS, TR_FLAG_SIZE>;
enum process_result {
PROCESS_FALSE = 0,