Tile getAsciiTile(const ViewObject& obj) { ViewId id = obj.id(); if (id == ViewId::SPECIAL_BEAST) return getSpecialCreature(obj, false); if (id == ViewId::SPECIAL_HUMANOID) return getSpecialCreature(obj, true); if (symbols.count(id)) return symbols.at(id); else FAIL << "unhandled view id " << EnumInfo<ViewId>::getString(id); return Tile::unicode(' ', ColorId(0)); }
Tile getSpecialCreature(const ViewObject& obj, bool humanoid) { RandomGen r; r.init(hash<string>()(obj.getBareDescription())); string let = humanoid ? "WETUIPLKJHFAXBM" : "qwetyupkfaxbnm"; char c; if (contains(let, obj.getBareDescription()[0])) c = obj.getBareDescription()[0]; else if (contains(let, tolower(obj.getBareDescription()[0]))) c = tolower(obj.getBareDescription()[0]); else c = let[r.get(let.size())]; return Tile::unicode(c, ColorId(Random.get(EnumInfo<ColorId>::getSize()))); }