extern char info[] is almost gone.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1387 c06c8d41-db1a-0410-9941-cceddc491573
XRZPPYWPWUOM4SFNI6BHKH2UKJQNLKOV6Y7XIEPEZXE5QYRT26PAC UFLQNWY753LLYGHIEO3REFZWKQ7WNVVIHBQPCKCEEX2KQGUFEPZAC VXJEANI25DSSF6RUTT3HK7FRI5A6D5OHDUM3NENDG6KULMAR6ZHAC BKL4VOE2R2ZZS35A3HTLVZW5FBIV7Y4YSHSS2PTBLRXMZCIP6JCAC 5Z6ZTK37C3X2YBHO2HX3ULMCHKQXDUDMX4TUIRCBTTP2IQ57BVQAC PT7EKXV55EVJ2EYFZEL3KCGRI37KKMNXGN76CYVBAUPHKP4ZLDLAC 6KCWO7XCDBGOYSUWVEXC74XC6RZ7ZJQLLSES5IIPCTILTECYMFZAC 6LT6USGJOTDMRJGXLAN2NSZXK2GKWEXDKKUV6SVV7ZC6WI6EKMDQC IHIJSWVOONSTA2WCHKW3YKBLETUQECFVBVLMET5SGQZ4C6U3GCUQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC 77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC 7NDXS36TE7QVXTXJWMYSVG5UHCCLPIO4VL6NXFGTDK3ZNKE3A2IAC 6HQB2N6N75R2RGKJFWRUN7WAC2PNGWQFXTII5DTRLTHZ2BOTMTVAC RCU52DRCPWJVQ6HME4QR6V6EVQWTBKZTPWDI47UGUDAUBPOO5YNAC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC GACH6PWPGGUBEE7PFEPQMOZKSR7HTQGL2WLGF2AQPJD3FCCSKZNQC CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC 4JNV6RTRY2UR3PZFMCNPRGCBSUAB7QTXYJCSYBIUAFMCCYVGN6PQC 2KTJHQUX2LTU2BCLS5YXVRRKMOYKKIZAPF2LBKORFGSHEN5IO3IAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC NNG27Y5ZQAZX6UD7F7M4F6KEZBEDFXPEEC3LFUSX4ESKT7K6UJQAC DODCHP2S4I6VZKQAVXX6D76OPNFI2YWZ4XH3HZTMAJZXA2RJ3XRQC 6GQU5BMORHTHJGGVYPGJZSEIHPOVXDAS23BE7OHU4X6WVDYRC2MAC Q5SFQO7ANODRI6OXKHPFQ4QWKGQ367S64DPURQW2TWK7ANTYO4NQC X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC 3GSAVTNKEG45AT2U734R5STSRP22WJZL3H6KUFRUWCIA6A4CZE5QC OP6CTAKWCAU64JXQ3USQYR5E5IFHQHNCACII5UMVRXUTZXJQOAZAC textcolor( WHITE );cprintf("You must be new here indeed!");cprintf(EOL EOL);textcolor( CYAN );cprintf("You can be:");cprintf(EOL EOL);textcolor( LIGHTGREY );for (int i = 0; i < TUT_TYPES_NUM; i++)print_tutorial_menu(i);textcolor( BROWN );cprintf(EOL "SPACE - Back to class selection; Bksp - Back to race selection; X - Quit"EOL "* - Random tutorial"EOL);printed = true;}keyn = c_getch();if (keyn == '*')keyn = 'a' + random2(TUT_TYPES_NUM);
formatted_string::parse_string(EOL"<brown>SPACE - Back to class selection; ""Bksp - Back to race selection; X - Quit"EOL "* - Random tutorial""</brown>" EOL).display();
// activate all triggersfor (int i = 0; i < TUT_EVENTS_NUM; i++)Options.tutorial_events[i] = 1;Options.tutorial_left = TUT_EVENTS_NUM;// store whether explore, stash search or travelling was usedOptions.tut_explored = 1;Options.tut_stashes = 1;Options.tut_travel = 1;// used to compare which fighting means was used most oftenOptions.tut_spell_counter = 0;Options.tut_throw_counter = 0;Options.tut_berserk_counter = 0;Options.tut_melee_counter = 0;
if (keyn == '*')keyn = 'a' + random2(TUT_TYPES_NUM);
// for occasional healing remindersOptions.tut_last_healed = 0;Options.random_pick = true; // random choice of starting spellbookOptions.weapon = WPN_HAND_AXE; // easiest choice for fightersreturn true;}
// choose character for tutorial game and set starting valuesif (keyn >= 'a' && keyn <= 'a' + TUT_TYPES_NUM - 1){Options.tutorial_type = keyn - 'a';you.species = get_tutorial_species(Options.tutorial_type);you.char_class = get_tutorial_job(Options.tutorial_type);// activate all triggersOptions.tutorial_events.init(true);Options.tutorial_left = TUT_EVENTS_NUM;// store whether explore, stash search or travelling was usedOptions.tut_explored = true;Options.tut_stashes = true;Options.tut_travel = true;// used to compare which fighting means was used most oftenOptions.tut_spell_counter = 0;Options.tut_throw_counter = 0;Options.tut_berserk_counter = 0;Options.tut_melee_counter = 0;// for occasional healing remindersOptions.tut_last_healed = 0;Options.random_pick = true; // random choice of starting spellbookOptions.weapon = WPN_HAND_AXE; // easiest choice for fightersreturn true;}
if (keyn == CK_BKSP || keyn == ' '){// in this case, undo previous choices// set_startup_options();you.species = 0; you.char_class = JOB_UNKNOWN;Options.race = 0; Options.cls = 0;}
if (keyn == CK_BKSP || keyn == ' '){// in this case, undo previous choices// set_startup_options();you.species = 0;you.char_class = JOB_UNKNOWN;Options.race = 0;Options.cls = 0;}
switch (keyn){case CK_BKSP:choose_race();break;case ' ':choose_class();break;case 'X':cprintf(EOL "Goodbye!");end(0);break;default:printed = false;goto tut_query;
switch (keyn){case CK_BKSP:choose_race();return false;case ' ':choose_class();return false;case 'X':cprintf(EOL "Goodbye!");end(0);return false; // as if}
result += "<white>Welcome to Dungeon Crawl!</white>" EOL EOL;text += "Your object is to lead a ";snprintf(info, INFO_SIZE, "%s %s ", species_name(get_tutorial_species(Options.tutorial_type), 1),get_class_name(get_tutorial_job(Options.tutorial_type)));text += info;text += "safely through the depths of the dungeon, retrieving the fabled orb of Zot and ""returning it to the surface. In the beginning, however, let discovery be your ""main goal. Try to delve as deeply as possible but beware; death lurks around ""every corner." EOL EOL;linebreak_string2(text, width);result += formatted_string::parse_string(text);result += "For the moment, just remember the following keys and their functions:" EOL;result += " <white>?</white> - shows the items and the commands" EOL;result += " <white>S</white> - saves the game, to be resumed later (but note that death is permanent)" EOL;result += " <white>x</white> - examine something in your vicinity" EOL EOL;text = "This tutorial will help you play Crawl without reading any documentation. ""If you feel intrigued, there is more information available in these files ""(all of which can also be read in-game):" EOL;linebreak_string2(text, width);result += formatted_string::parse_string(text);result += " <lightblue>readme.txt</lightblue> - A very short guide to Crawl." EOL;result += " <lightblue>manual.txt</lightblue> - This contains all details on races, magic, skills, etc." EOL;result += " <lightblue>crawl_options.txt</lightblue> - Crawl's interface is highly configurable. This document " EOL;result += " explains all the options." EOL;result += EOL;result += "Press <white>Space</white> to proceed to the basics (the screen division and movement)." EOL;result += "Press <white>Esc</white> to fast forward to the game start.";return formatted_string::parse_block(result);
istr << "<white>Welcome to Dungeon Crawl!</white>" EOL EOL<< "Your object is to lead a "<< species_name(get_tutorial_species(Options.tutorial_type), 1)<< " " << get_class_name(get_tutorial_job(Options.tutorial_type))<<" safely through the depths of the dungeon, retrieving the ""fabled orb of Zot and returning it to the surface. "" In the beginning, however, let discovery be your ""main goal. Try to delve as deeply as possible but beware; ""death lurks around every corner." EOL EOL"For the moment, just remember the following keys ""and their functions:" EOL" <white>?</white> - shows the items and the commands" EOL" <white>S</white> - saves the game, to be resumed later ""(but note that death is permanent)" EOL" <white>x</white> - examine something in your vicinity" EOL EOL"This tutorial will help you play Crawl without reading any ""documentation. If you feel intrigued, there is more information ""available in these files (all of which can also be read in-game):"EOL" <lightblue>readme.txt</lightblue> - ""A very short guide to Crawl." EOL" <lightblue>manual.txt</lightblue> - ""This contains all details on races, magic, skills, etc." EOL" <lightblue>crawl_options.txt</lightblue> - ""Crawl's interface is highly configurable. This document " EOL" explains all the options." EOLEOL"Press <white>Space</white> to proceed to the basics ""(the screen division and movement)." EOL"Press <white>Esc</white> to fast forward to the game start.";std::string broken = istr.str();linebreak_string2(broken, width);return formatted_string::parse_block(broken);
result = "<magenta>""What you see here is the typical Crawl screen. The upper left map ""shows your hero as the <white>@<magenta> in the center. The parts ""of the map you remember but cannot currently see, will be greyed ""out.""</magenta>" EOL;
result = "<magenta>""What you see here is the typical Crawl screen. The upper left map ""shows your hero as the <white>@<magenta> in the center. The parts ""of the map you remember but cannot currently see, will be greyed ""out.""</magenta>" EOL;
result += "To the right, important properties of \n";result += "the character are displayed. The most \n";result += "basic one is your health, measured as \n";snprintf(info, INFO_SIZE, "<white>HP: %d/%d<magenta>. ",you.hp, you.hp_max);result += info;
// Note: must fill up everything to override the mapistr << "<magenta>""To the right, important properties of \n""the character are displayed. The most \n""basic one is your health, measured as \n""<white>HP: " << you.hp << "/" << you.hp_max << "<magenta>. ";
result += " ";result += "These are your current out \n";result += "of maximum health points. When health \n";result += "drops to zero, you die. \n";snprintf(info, INFO_SIZE, "<white>Magic: %d/%d<magenta>", you.magic_points, you.max_magic_points);result += info;result += " is your energy for casting \n";result += "spells, although more mundane actions \n";result += "often draw from Magic, too. \n";result += "Further down, <white>Str<magenta>ength, <white>Dex<magenta>terity and \n";result += "<white>Int<magenta>elligence are shown and provide an \n";result += "all-around account of the character's \n";result += "attributes. \n";
istr << " ";
result += "<lightgrey>";result += " \n";result += " --more-- Press <white>Escape</white> to skip the basics\n";result += " \n";result += " \n";return formatted_string::parse_block(result, false);
istr <<"These are your current out \n""of maximum health points. When health \n""drops to zero, you die. \n""<white>Magic: "<< you.magic_points << "/" << you.max_magic_points <<"<magenta> is your energy for casting \n""spells, although more mundane actions \n""often draw from Magic, too. \n""Further down, <white>Str<magenta>ength, <white>Dex<magenta>terity and \n""<white>Int<magenta>elligence are shown and provide an \n""all-around account of the character's \n""attributes. \n""<lightgrey>"" \n"" --more-- Press <white>Escape</white> to skip the basics\n"" \n"" \n";return formatted_string::parse_block(istr.str(), false);
case TUT_SEEN_POTION:text = "You have picked up your first potion ('<w>!<magenta>'). Use ""<w>q<magenta> to drink (quaff) it.";
case TUT_SEEN_POTION:text << "You have picked up your first potion ('<w>!<magenta>'). ""Use <w>q<magenta> to drink (quaff) it.";
text = "You have picked up a spellbook ('<w>";text += ch;text += "'<magenta>). You can read it by typing <w>r<magenta>, ""memorise spells via <w>M<magenta> and cast a memorised spell ""with <w>Z<magenta>.";
text << "You have picked up a spellbook ('<w>"<< static_cast<char>(ch)<<"'<magenta>). You can read it by typing <w>r<magenta>, ""memorise spells via <w>M<magenta> and cast a memorised ""spell with <w>Z<magenta>.";
text = "This is the first weapon ('<w>(<magenta>') you've picked up. ""Use <w>w<magenta> to wield it, but be aware that this weapon ""might train a different skill from your current one. You can ""view the weapon's properties with <w>v<magenta>.";
text <<"This is the first weapon ('<w>(<magenta>') you've picked up. ""Use <w>w<magenta> to wield it, but be aware that this weapon ""might train a different skill from your current one. You can ""view the weapon's properties with <w>v<magenta>.";
snprintf( info, INFO_SIZE, "\nNote that as a %s, you will be unable to wear %s.",species_name(you.species, 1), you.species == SP_CENTAUR ? "boots" : "helmets");text += info;
text << "\nNote that as a " << species_name(you.species, 1)<< "you will be unable to wear "<< (you.species == SP_CENTAUR ? "boots" : "helmets");
text = "You have picked up a magic staff or a rod, both of which are ""represented by '<w>";text += ch;text += "<magenta>'. Both must be <w>i<magenta>elded to be of use. "
text << "You have picked up a magic staff or a rod, both of which are ""represented by '<w>"<< static_cast<char>(ch)<< "<magenta>'. Both must be <w>i<magenta>elded to be of use. "
text = "The <w>";text += colour_to_tag(colour);text += ch;text += "<magenta> are some downstairs. You can enter the next (deeper) "
text << "The <w>" << colour_to_tag(colour) << static_cast<char>(ch)<< "<magenta> are some downstairs. You can enter the next (deeper) "
text = "The ";text += colour_to_tag(colour);text += ch;text += "<magenta> is an altar. You can get information about it by pressing "
text << "The " << colour_to_tag(colour) << static_cast<char>(ch)<< "<magenta> is an altar. You can get information about it by pressing "
text = "The <yellow>";text += get_screen_glyph(x,y);text += "<magenta> is a shop. You can enter it by typing <w><<<magenta>.";
text << "The <yellow>" << static_cast<char>(get_screen_glyph(x,y))<< "<magenta> is a shop. You can enter it by typing ""<w><<<magenta>.";
text = "The <w>";text += get_screen_glyph(x,y);text += "<magenta> is a closed door. You can open it by walking into it. "
text << "The <w>" << static_cast<char>(get_screen_glyph(x,y))<< "<magenta> is a closed door. You can open it by walking into it. "
text += "\nTo dedicate your kills to ";text += god_name(you.religion);text += " <w>p<magenta>ray before battle. Not all gods will be "
text << "\nTo dedicate your kills to "<< god_name(you.religion)<< " <w>p<magenta>ray before battle. Not all gods will be "
text += "\nNote that dissection under prayer offers the corpse to ";text += god_name(you.religion);text += " - check your god's attitude about this with <w>^<magenta>.";
text << "\nNote that dissection under prayer offers the corpse to "<< god_name(you.religion)<< " - check your god's attitude about this with <w>^<magenta>.";
if ( !text.empty() )print_formatted_paragraph(text, get_tutorial_cols(), MSGCH_TUTORIAL);
if ( !text.str().empty() ){std::string s = text.str();print_formatted_paragraph(s, get_tutorial_cols(), MSGCH_TUTORIAL);}
{snprintf(matchtitle, sizeof matchtitle,"[%s] %s (%d)",place.c_str(),res.match.c_str(),res.matches);}else{snprintf(matchtitle, sizeof matchtitle,"[%s] %s",place.c_str(),res.match.c_str());}std::string mename = matchtitle;MenuEntry *me = new MenuEntry(mename, MEL_ITEM, 1, hotkey);
matchtitle << " (" << res.matches << ")";MenuEntry *me = new MenuEntry(matchtitle.str(), MEL_ITEM, 1, hotkey);
strcat(info, (temp_rand == 0) ? "twist" :(temp_rand == 1) ? "bend" :(temp_rand == 2) ? "vibrate" :(temp_rand == 3) ? "flex" :(temp_rand == 4) ? "wobble": "twang");
msg += ((temp_rand == 0) ? "twist" :(temp_rand == 1) ? "bend" :(temp_rand == 2) ? "vibrate" :(temp_rand == 3) ? "flex" :(temp_rand == 4) ? "wobble": "twang");
snprintf(info, INFO_SIZE, "Welcome to %s!",shop_name(the_shop.x, the_shop.y) );shop_print(info, 20);
{std::string welcome_message = "Welcome to ";welcome_message += shop_name(the_shop.x, the_shop.y);welcome_message += "!";shop_print(welcome_message.c_str(), 20);}
snprintf(info, INFO_SIZE,"You %s %s!",wounded_damaged(monster->type) ? "destroy" : "kill",ptr_monam(monster, DESC_NOCAP_THE));mpr(info, MSGCH_MONSTER_DAMAGE, MDAM_DEAD);
mprf(MSGCH_MONSTER_DAMAGE, MDAM_DEAD, "You %s %s!",wounded_damaged(monster->type) ? "destroy" : "kill",ptr_monam(monster, DESC_NOCAP_THE));
strcpy(info, "You hear a");if (!monsterNearby)strcat(info, " distant");strcat(info, " slurping noise.");mpr(info, MSGCH_SOUND);
mprf(MSGCH_SOUND, "You hear a%s slurping noise.",monsterNearby ? "" : " distant");
strcat(info, " shoves you out of the ");strcat(info, (stair_gfx == '>' || stair_gfx == '<') ? "stairwell!": "gateway!");mpr(info);
msg += " shoves you out of the ";if (stair_gfx == '>' || stair_gfx == '<')msg += "stairwell!";elsemsg += "gateway!";mpr(msg.c_str());
strcat(info, (stair_gfx == '>') ? " comes up the stairs." :(stair_gfx == '<') ? " comes down the stairs.": " comes through the gate.");mpr(info);
if ( stair_gfx == '>' )msg += " comes up the stairs.";else if (stair_gfx == '<')msg += " comes down the stairs.";elsemsg += " comes through the gate.";mpr(msg.c_str());
strcpy(info, "The Singing Sword ");temp_rand = random2(32);strcat(info,(temp_rand == 0) ? "hums a little tune." :(temp_rand == 1) ? "breaks into glorious song!" :(temp_rand == 2) ? "sings." :(temp_rand == 3) ? "sings loudly." :(temp_rand == 4) ? "chimes melodiously." :(temp_rand == 5) ? "makes a horrible noise." :(temp_rand == 6) ? "sings off-key." :(temp_rand == 7) ? "sings 'tra-la-la'." :(temp_rand == 8) ? "burbles away merrily." :(temp_rand == 9) ? "gurgles." :(temp_rand == 10) ? "suddenly shrieks!" :(temp_rand == 11) ? "cackles." :(temp_rand == 12) ? "warbles." :(temp_rand == 13) ? "chimes harmoniously." :(temp_rand == 14) ? "makes beautiful music." :(temp_rand == 15) ? "produces a loud orchestral chord." :(temp_rand == 16) ? "whines plaintively." :(temp_rand == 17) ? "tinkles." :(temp_rand == 18) ? "rings like a bell." :(temp_rand == 19) ? "wails mournfully." :(temp_rand == 20) ? "practices its scales." :(temp_rand == 21) ? "lilts tunefully." :(temp_rand == 22) ? "hums tunelessly." :(temp_rand == 23) ? "sighs." :(temp_rand == 24) ? "makes a deep moaning sound." :(temp_rand == 25) ? "makes a popping sound." :(temp_rand == 26) ? "sings a sudden staccato note." :(temp_rand == 27) ? "says 'Hi! I'm the Singing Sword!'." :(temp_rand == 28) ? "whispers something." :(temp_rand == 29) ? "speaks gibberish." :(temp_rand == 30) ? "raves incoherently.": "yells in some weird language.");mpr(info, MSGCH_SOUND);
const char* suffixes[32] = {"hums a little tune.", "breaks into glorious song!","sings.", "sings loudly.", "chimes melodiously.","makes a horrible noise.", "sings off-key.","sings 'tra-la-la'.", "burbles away merrily.","gurgles.", "suddenly shrieks!", "cackles.", "warbles.","chimes harmoniously.", "makes beautiful music.","produces a loud orchestral chord.", "whines plaintively.","tinkles.", "rings like a bell.", "wails mournfully.","practices its scales.", "lilts tunefully.","hums tunelessly.", "sighs.", "makes a deep moaning sound.","makes a popping sound.", "sings a sudden staccato note.","says 'Hi! I'm the Singing Sword!'.", "whispers something.","speaks gibberish.", "raves incoherently","yells in some weird language." };mprf("The Singing Sword %s", suffixes[random2(32)]);
strcpy(info, (magnitude <= 100) ? "You feel slightly " :(magnitude <= 350) ? "You feel somewhat " :(magnitude <= 800) ? "You feel a quite a bit ": "You feel a lot ");
if ( magnitude <= 100 )msg = "You feel slightly ";else if (magnitude <= 350)msg = "You feel somewhat ";else if (magnitude <= 800)msg = "You feel a quite a bit ";elsemsg = "You feel a lot ";
strcat(info, (temp_rand == 0) ? "frog" :(temp_rand == 1) ? "pill bug" :(temp_rand == 2) ? "millipede" :(temp_rand == 3) ? "eggplant" :(temp_rand == 4) ? "albino dragon" :(temp_rand == 5) ? "dragon" :(temp_rand == 6) ? "human": "slug");strcat(info, "!");mpr(info);
mprf("You hear the distant roaring of an enraged %s!",(temp_rand == 0) ? "frog" :(temp_rand == 1) ? "pill bug" :(temp_rand == 2) ? "millipede" :(temp_rand == 3) ? "eggplant" :(temp_rand == 4) ? "albino dragon" :(temp_rand == 5) ? "dragon" :(temp_rand == 6) ? "human": "slug");
strcat(info, (temp_rand == 0) ? "coffee." :(temp_rand == 1) ? "salt." :(temp_rand == 2) ? "burning hair!" :(temp_rand == 3) ? "baking bread." :(temp_rand == 4) ? "something weird." :(temp_rand == 5) ? "wet wool." :(temp_rand == 6) ? "sulphur.": "fire and brimstone!");mpr(info);
mprf("You smell %s",(temp_rand == 0) ? "coffee." :(temp_rand == 1) ? "salt." :(temp_rand == 2) ? "burning hair!" :(temp_rand == 3) ? "baking bread." :(temp_rand == 4) ? "something weird." :(temp_rand == 5) ? "wet wool." :(temp_rand == 6) ? "sulphur.": "fire and brimstone!");
strcat(info, (temp_rand == 0) ? "snatches of song" :(temp_rand == 1) ? "a voice call someone else's name" :(temp_rand == 2) ? "a very strange noise" :(temp_rand == 3) ? "roaring flame" :(temp_rand == 4) ? "a very strange noise indeed" :(temp_rand == 5) ? "the chiming of a distant gong" :(temp_rand == 6) ? "the bellowing of a yak" :(temp_rand == 7) ? "a crunching sound": "the tinkle of an enormous bell");strcat(info, ".");mpr(info);
mprf("You hear %s.",(temp_rand == 0) ? "snatches of song" :(temp_rand == 1) ? "a voice call someone else's name" :(temp_rand == 2) ? "a very strange noise" :(temp_rand == 3) ? "roaring flame" :(temp_rand == 4) ? "a very strange noise indeed" :(temp_rand == 5) ? "the chiming of a distant gong" :(temp_rand == 6) ? "the bellowing of a yak" :(temp_rand == 7) ? "a crunching sound": "the tinkle of an enormous bell");
(i == EQ_BOOTS&& !(you.species == SP_CENTAUR || you.species == SP_NAGA))? "Boots " :(i == EQ_BOOTS&& (you.species == SP_CENTAUR || you.species == SP_NAGA))? "Barding": "unknown" );
estr << ((i == EQ_CLOAK) ? "Cloak " :(i == EQ_HELMET) ? "Helmet " :(i == EQ_GLOVES) ? "Gloves " :(i == EQ_SHIELD) ? "Shield " :(i == EQ_BODY_ARMOUR) ? "Armour " :(i == EQ_BOOTS) ?((you.species == SP_CENTAUR || you.species == SP_NAGA) ?"Barding" : "Boots ") : "unknown")<< " : ";