*/
static bool grab_one_dungeon_flag(dungeon_type *d_ptr, std::string_view what)
{
- if (EnumClassFlagGroup<DungeonFeatureType>::grab_one_flag(d_ptr->flags, d_info_flags, what))
+ if (EnumClassFlagGroup<DungeonFeatureType>::grab_one_flag(d_ptr->flags, d_info_flags, what)) {
return true;
+ }
msg_format(_("未知のダンジョン・フラグ '%s'。", "Unknown dungeon type flag '%s'."), what.data());
return false;
*/
static bool grab_one_basic_monster_flag(dungeon_type *d_ptr, std::string_view what)
{
- if (info_grab_one_flag(d_ptr->mflags1, r_info_flags1, what))
+ if (info_grab_one_flag(d_ptr->mflags1, r_info_flags1, what)) {
return true;
+ }
- if (info_grab_one_flag(d_ptr->mflags2, r_info_flags2, what))
+ if (info_grab_one_flag(d_ptr->mflags2, r_info_flags2, what)) {
return true;
+ }
- if (info_grab_one_flag(d_ptr->mflags3, r_info_flags3, what))
+ if (info_grab_one_flag(d_ptr->mflags3, r_info_flags3, what)) {
return true;
+ }
- if (info_grab_one_flag(d_ptr->mflags7, r_info_flags7, what))
+ if (info_grab_one_flag(d_ptr->mflags7, r_info_flags7, what)) {
return true;
+ }
- if (info_grab_one_flag(d_ptr->mflags8, r_info_flags8, what))
+ if (info_grab_one_flag(d_ptr->mflags8, r_info_flags8, what)) {
return true;
+ }
- if (info_grab_one_flag(d_ptr->mflags9, r_info_flags9, what))
+ if (EnumClassFlagGroup<MonsterResistanceType>::grab_one_flag(d_ptr->mon_resistance_flags, r_info_flagsr, what)) {
return true;
+ }
- if (info_grab_one_flag(d_ptr->mflagsr, r_info_flagsr, what))
+ if (EnumClassFlagGroup<MonsterBehaviorType>::grab_one_flag(d_ptr->mon_behavior_flags, r_info_behavior_flags, what)) {
return true;
+ }
- if (EnumClassFlagGroup<MonsterBehaviorType>::grab_one_flag(d_ptr->mon_behavior_flags, r_info_behavior_flags, what))
+ if (EnumClassFlagGroup<MonsterVisualType>::grab_one_flag(d_ptr->mon_visual_flags, r_info_visual_flags, what)) {
return true;
+ }
- if (EnumClassFlagGroup<MonsterVisualType>::grab_one_flag(d_ptr->mon_visual_flags, r_info_visual_flags, what))
+ if (EnumClassFlagGroup<MonsterKindType>::grab_one_flag(d_ptr->mon_kind_flags, r_info_kind_flags, what)) {
return true;
+ }
+
+ if (EnumClassFlagGroup<MonsterDropType>::grab_one_flag(d_ptr->mon_drop_flags, r_info_drop_flags, what)) {
+ return true;
+ }
+
+ if (EnumClassFlagGroup<MonsterWildernessType>::grab_one_flag(d_ptr->mon_wilderness_flags, r_info_wilderness_flags, what)) {
+ return true;
+ }
msg_format(_("未知のモンスター・フラグ '%s'。", "Unknown monster flag '%s'."), what.data());
return false;
*/
static bool grab_one_spell_monster_flag(dungeon_type *d_ptr, std::string_view what)
{
- if (EnumClassFlagGroup<MonsterAbilityType>::grab_one_flag(d_ptr->mon_ability_flags, r_info_ability_flags, what))
+ if (EnumClassFlagGroup<MonsterAbilityType>::grab_one_flag(d_ptr->mon_ability_flags, r_info_ability_flags, what)) {
return true;
+ }
msg_format(_("未知のモンスター・フラグ '%s'。", "Unknown monster flag '%s'."), what.data());
return false;
if (tokens[0] == "N") {
// N:index:name_ja
- if (tokens.size() < 3 || tokens[1].size() == 0)
+ if (tokens.size() < 3 || tokens[1].size() == 0) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
auto i = std::stoi(tokens[1]);
- if (i < error_idx)
+ if (i < error_idx) {
return PARSE_ERROR_NON_SEQUENTIAL_RECORDS;
+ }
if (i >= static_cast<int>(d_info.size())) {
d_info.resize(i + 1);
}
#ifdef JP
d_ptr->name = tokens[2];
#endif
- } else if (!d_ptr)
+ } else if (!d_ptr) {
return PARSE_ERROR_MISSING_RECORD_HEADER;
- else if (tokens[0] == "E") {
+ } else if (tokens[0] == "E") {
// E:name_en
#ifndef JP
- if (tokens.size() < 2 || tokens[1].size() == 0)
+ if (tokens.size() < 2 || tokens[1].size() == 0) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
d_ptr->name = tokens[1];
#endif
} else if (tokens[0] == "D") {
// D:text_ja
// D:$text_en
- if (tokens.size() < 2 || tokens[1].size() == 0)
+ if (tokens.size() < 2 || tokens[1].size() == 0) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
#ifdef JP
- if (tokens[1][0] == '$')
+ if (tokens[1][0] == '$') {
return PARSE_ERROR_NONE;
+ }
d_ptr->text.append(buf.substr(2));
#else
- if (tokens[1][0] != '$')
+ if (tokens[1][0] != '$') {
return PARSE_ERROR_NONE;
+ }
append_english_text(d_ptr->text, buf.substr(3));
#endif
} else if (tokens[0] == "W") {
// (3)maximum probability of level boost of allocation monster
// (4)maximum probability of dropping good objects
// (5)maximum probability of dropping great objects
- if (tokens.size() < 11)
+ if (tokens.size() < 11) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
info_set_value(d_ptr->mindepth, tokens[1]);
info_set_value(d_ptr->maxdepth, tokens[2]);
info_set_value(d_ptr->nest, tokens[10], 16);
} else if (tokens[0] == "P") {
// P:wild_y:wild_x
- if (tokens.size() < 3)
+ if (tokens.size() < 3) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
info_set_value(d_ptr->dy, tokens[1]);
info_set_value(d_ptr->dx, tokens[2]);
} else if (tokens[0] == "L") {
// L:floor_1:prob_1:floor_2:prob_2:floor_3:prob_3:tunnel_prob
- if (tokens.size() < DUNGEON_FEAT_PROB_NUM * 2 + 2)
+ if (tokens.size() < DUNGEON_FEAT_PROB_NUM * 2 + 2) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
for (size_t i = 0; i < DUNGEON_FEAT_PROB_NUM; i++) {
auto feat_idx = i * 2 + 1;
auto per_idx = feat_idx + 1;
d_ptr->floor[i].feat = f_tag_to_index(tokens[feat_idx]);
- if (d_ptr->floor[i].feat < 0)
+ if (d_ptr->floor[i].feat < 0) {
return PARSE_ERROR_UNDEFINED_TERRAIN_TAG;
+ }
info_set_value(d_ptr->floor[i].percent, tokens[per_idx]);
}
info_set_value(d_ptr->tunnel_percent, tokens[tunnel_idx]);
} else if (tokens[0] == "A") {
// A:wall_1:prob_1:wall_2:prob_2:wall_3:prob_3:outer_wall:inner_wall:stream_1:stream_2
- if (tokens.size() < DUNGEON_FEAT_PROB_NUM * 2 + 5)
+ if (tokens.size() < DUNGEON_FEAT_PROB_NUM * 2 + 5) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
for (int i = 0; i < DUNGEON_FEAT_PROB_NUM; i++) {
auto feat_idx = i * 2 + 1;
auto prob_idx = feat_idx + 1;
d_ptr->fill[i].feat = f_tag_to_index(tokens[feat_idx]);
- if (d_ptr->fill[i].feat < 0)
+ if (d_ptr->fill[i].feat < 0) {
return PARSE_ERROR_UNDEFINED_TERRAIN_TAG;
+ }
info_set_value(d_ptr->fill[i].percent, tokens[prob_idx]);
}
auto idx = DUNGEON_FEAT_PROB_NUM * 2 + 1;
d_ptr->outer_wall = f_tag_to_index(tokens[idx++]);
- if (d_ptr->outer_wall < 0)
+ if (d_ptr->outer_wall < 0) {
return PARSE_ERROR_UNDEFINED_TERRAIN_TAG;
+ }
d_ptr->inner_wall = f_tag_to_index(tokens[idx++]);
- if (d_ptr->inner_wall < 0)
+ if (d_ptr->inner_wall < 0) {
return PARSE_ERROR_UNDEFINED_TERRAIN_TAG;
+ }
d_ptr->stream1 = f_tag_to_index(tokens[idx++]);
- if (d_ptr->stream1 < 0)
+ if (d_ptr->stream1 < 0) {
return PARSE_ERROR_UNDEFINED_TERRAIN_TAG;
+ }
d_ptr->stream2 = f_tag_to_index(tokens[idx]);
- if (d_ptr->stream2 < 0)
+ if (d_ptr->stream2 < 0) {
return PARSE_ERROR_UNDEFINED_TERRAIN_TAG;
+ }
} else if (tokens[0] == "F") {
// F:flags
- if (tokens.size() < 2)
+ if (tokens.size() < 2) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
const auto &flags = str_split(tokens[1], '|', true);
for (const auto &f : flags) {
- if (f.size() == 0)
+ if (f.size() == 0) {
continue;
+ }
const auto &f_tokens = str_split(f, '_');
if (f_tokens.size() == 3) {
}
}
- if (!grab_one_dungeon_flag(d_ptr, f))
+ if (!grab_one_dungeon_flag(d_ptr, f)) {
return PARSE_ERROR_INVALID_FLAG;
+ }
}
} else if (tokens[0] == "M") {
// M:monsterflags
- if (tokens.size() < 2)
+ if (tokens.size() < 2) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
const auto &flags = str_split(tokens[1], '|', true);
for (const auto &f : flags) {
- if (f.size() == 0)
+ if (f.size() == 0) {
continue;
+ }
const auto &m_tokens = str_split(f, '_');
if (m_tokens[0] == "R" && m_tokens[1] == "CHAR") {
- if (m_tokens[2].size() > 4)
- return PARSE_ERROR_GENERIC;
-
- strcpy(d_ptr->r_char, m_tokens[2].c_str());
+ d_ptr->r_chars.insert(d_ptr->r_chars.end(), m_tokens[2].begin(), m_tokens[2].end());
continue;
}
- if (!grab_one_basic_monster_flag(d_ptr, f))
+ if (!grab_one_basic_monster_flag(d_ptr, f)) {
return PARSE_ERROR_INVALID_FLAG;
+ }
}
} else if (tokens[0] == "S") {
// S: flags
- if (tokens.size() < 2)
+ if (tokens.size() < 2) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
const auto &flags = str_split(tokens[1], '|', true);
for (const auto &f : flags) {
- if (f.size() == 0)
+ if (f.size() == 0) {
continue;
+ }
const auto &s_tokens = str_split(f, '_');
if (s_tokens.size() == 3 && s_tokens[1] == "IN") {
- if (s_tokens[0] != "1")
+ if (s_tokens[0] != "1") {
return PARSE_ERROR_GENERIC;
+ }
continue; //!< r_info.txtからのコピペ対策
}
- if (!grab_one_spell_monster_flag(d_ptr, f))
+ if (!grab_one_spell_monster_flag(d_ptr, f)) {
return PARSE_ERROR_INVALID_FLAG;
+ }
}
- } else
+ } else {
return PARSE_ERROR_UNDEFINED_DIRECTIVE;
+ }
return 0;
}