CLO5METZJ4WBV3KWGW3WJ4WY5NYWCOHCGEIMJU4NYWKECWQ536QAC LE5U6CTXEIETQN5GOVYF2K2VCISRXR3ULORXDKIKWYDVBG5GS3WAC OYTCBRC7LE44EUVRZVYTOOVKQWJ6P6YE3FXTOGUTNKEMLNWPHKSQC ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC FQ7XALBL6NZAGBKKYIFHYQ7MUWIHR4TEU4TCS33EG4I3JTND5SQAC W52PCSHX72WAMWKG6L4BPUBVMO6E72KYYBNKAA7554KNOTY6V7WQC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC RZHJQU3Y6KKMNJKGL6P4IXBJTKWFO4YARAQSWYCETXXNSZG4BN7QC JT672SIJK4BOIUAGL2WQ6NR2NF4PSWP3BT6Q4HMNRF25UN6JQ2MAC JUCA26S3JSQFMZTBL7566ITHCOXXEFTFT7KDOWSUXA5JLZK5QJWAC IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC JQFQX7IWSJ4TYWVUVXAFMCPSAN67PRMNECDQI5WMON2JFMQVVUEQC 2ZZD6EYMSPVCXZTICL4VGYGGQRRWDLZ24KBCDBVIYC54OZ4C6GGAC GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC CPBVQFT7NWEYLYD34D5VYZIEOZ32YADXYTSFMS635YNXX4OFIZVAC TPO6FNMPNUSWH4NCKO3VLYNAADEPSAXLUITCCACLZZSY53PKA62QC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC WUCXHWMF2FL5KCC6E6KNKMYL2NBXXC3WVRY2AUPWSBAPWJFGS34QC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC };typedef std::pair<int, int> map_weighted_fprop;class map_fprop_list : public std::vector<map_weighted_fprop>{public:bool parse(const std::string &fp, int weight);};class fprop_spec{public:fprop_spec(int _key, bool _fix, const map_fprop_list &flist): key(_key), fix(_fix), fixed_prop(FPROP_NONE), fprops(flist){}int get_property();public:int key;bool fix;int fixed_prop;map_fprop_list fprops;
bool map_fprop_list::parse(const std::string &fp, int weight){const int fprop = fp == "none" ? FPROP_NONE : str_to_fprop(fp);if (fprop == -1)return false;push_back(map_weighted_fprop(fprop, weight));return true;}std::string map_lines::add_fproperty(const std::string &sub){std::string s = trimmed_string(sub);if (s.empty())return ("");int sep = 0;std::string key;std::string substitute;
std::string err = mapdef_split_key_item(sub, &key, &sep, &substitute);if (!err.empty())return (err);map_fprop_list fprops;err = parse_weighted_str<map_fprop_list>(substitute, fprops);if (!err.empty())return (err);fprop_spec spec(key[0], sep == ':', fprops);overlay_fprops(spec);return ("");}
// fprop_specint fprop_spec::get_property(){if (fixed_prop != FPROP_NONE)return (fixed_prop);int chosen = FPROP_NONE;int cweight = 0;for (int i = 0, size = fprops.size(); i < size; ++i)if (x_chance_in_y(fprops[i].second, cweight += fprops[i].second))chosen = fprops[i].first;if (fix)fixed_prop = chosen;return (chosen);}//////////////////////////////////////////////////////////////////////////