}
} else if (tokens[0] == "M") {
// M:monsterflags
+ if (tokens[1] == "X") {
+ if (tokens.size() < 3) {
+ return PARSE_ERROR_TOO_FEW_ARGUMENTS;
+ }
+ uint32_t sex;
+ if (!info_grab_one_const(sex, r_info_sex, tokens[2])) {
+ return PARSE_ERROR_INVALID_FLAG;
+ }
+ d_ptr->mon_sex = static_cast<MonsterSex>(sex);
+ return 0;
+ }
if (tokens.size() < 2) {
return PARSE_ERROR_TOO_FEW_ARGUMENTS;
}
is_possible_monster_and(r_ptr->population_flags, d_ptr->mon_population_flags),
is_possible_monster_and(r_ptr->speak_flags, d_ptr->mon_speak_flags),
is_possible_monster_and(r_ptr->brightness_flags, d_ptr->mon_brightness_flags),
+ is_male(d_ptr->mon_sex) ? is_male(r_ptr->sex) : true,
+ is_female(d_ptr->mon_sex) ? is_female(r_ptr->sex) : true,
};
auto result = std::all_of(is_possible.begin(), is_possible.end(), [](const auto &v) { return v; });
is_possible_monster_or(r_ptr->population_flags, d_ptr->mon_population_flags),
is_possible_monster_or(r_ptr->speak_flags, d_ptr->mon_speak_flags),
is_possible_monster_or(r_ptr->brightness_flags, d_ptr->mon_brightness_flags),
+ is_male(d_ptr->mon_sex) ? is_male(r_ptr->sex) : true,
+ is_female(d_ptr->mon_sex) ? is_female(r_ptr->sex) : true,
};
auto result = std::any_of(is_possible.begin(), is_possible.end(), [](const auto &v) { return v; });
enum class FixedArtifactId : short;
enum class MonsterRaceId : int16_t;
+enum class MonsterSex;
struct feat_prob {
FEAT_IDX feat{}; /* Feature tile */
EnumClassFlagGroup<MonsterPopulationType> mon_population_flags;
EnumClassFlagGroup<MonsterSpeakType> mon_speak_flags;
EnumClassFlagGroup<MonsterBrightnessType> mon_brightness_flags;
+ MonsterSex mon_sex{};
std::vector<char> r_chars; /* Monster symbols allowed */
short final_object{}; /* The object you'll find at the bottom */