redraw_dexterity now implies redraw_evasion.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@987 c06c8d41-db1a-0410-9941-cceddc491573
74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC
EIULXYQC3OPXDGTBRDOI7ITILQ22RGEGG6UFCGY2O5HD7SN5NUUQC
SUQ7J6V6BDWG6G6KBGPQ6HYKBMJDM6VKN7ODHVU6YCPRWNEOZCJQC
VJMZ3UWE4TY2RPKX32HI2K6OAZJKULKWJISAOTU2W5UHKUJ463NQC
IJ6KN5MQLEB7DR7NW2AYQNCVBV5IUKECUSECUMEJWOBRNJBAXHCQC
GZAXHJZJ7XJYCMNEYCLWIZFF3RTJI66627YDHVH5MO3ZHKSAEVXAC
CAHE52HL2ZGRJPBYZ3DS4BVKUD2XC7N3SG25TGG7JGHGJDST4P3QC
MBBPLL4SZUB3JUUYQYLZW7S5OXRCEGJX3WWADOQXGHWQ7BIKCY5QC
LW4N5EHKL776DURXZMAM6JEW3JPWWX5BSNP7TCZHTLCDOQTTGFCAC
WTBQLBYFLQCF3NRAMB4Z2YA4MHYVFYI5YS7FXXBPICY2KCBA63AQC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
T7PHMSG47WP4MTKIGVBP4EAQRGXHMZPYSI3GT3DAEWKHUDFCH3QQC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC
43ZTEB57FU7KE5EVMYWZONNVJBZCGF3JEAJZIY25LC4LGE65PG5QC
YRY2TC3VHOYE47M23UJGUWDGF7H7WGU7WLWI4SUNM4EDNTGUPHGAC
ZK5H5YBD3R7H3KKNKSJYE65TUEPPWIWUJLU567FKSZYQYIW6ZVFAC
TXFN7TLLKYEM2W5HVB2UXKXUH7MTXOU77PXBPMP7NJKXSLVX5PMQC
AY7Z23L4WPEFEL2HMF3KX3IM6OYMLB2QWY3AIHHQ37CMRVCXRCMAC
GBUB77EAYHOFY6GQ5IY3ZSBC7FSQFZZKYNBD5QMCQFIKFLYLWHOQC
R325RPUV26YH65VIJKYEFZ2XCVXQHO5N3ELPX6RNQ5TSI3JJNQGQC
JM6GKZ6VMX6FNVOZIDXIV22HGX7YESMIFZFE6EEQVCMFJIEA3FNAC
QVVC7AYGVA6U64PTNA7L27422NLMO327P22BQKXEVIMPZHIHO7MQC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
JJH7VX2LLBZPDKG24SQREWQLX6I6RYNWFECHRZVK7PT5KPQ4MAMAC
// 35--48 is the spell schools
gotoxy(51, wherey());
cprintf("%s",spell_power_to_string(calc_spell_power(spell,true)));
// 35--48 is the spell schools
gotoxy(51, wherey());
cprintf("%s",spell_power_to_string(calc_spell_power(spell,true)));
const bool can_afford = (you.gold >= gp_value);
textcolor( can_afford ? LIGHTGREEN : LIGHTRED );
const bool can_afford = (you.gold >= gp_value);
textcolor( can_afford ? LIGHTGREEN : LIGHTRED );
char buf[ITEMNAME_SIZE];
char buf2[ITEMNAME_SIZE];
item_name( mitm[item_got], DESC_NOCAP_A, buf );
strcpy(buf2, origin_desc(mitm[item_got]).c_str());
take_note(Note(NOTE_ID_ITEM, 0, 0, buf, buf2));
char buf[ITEMNAME_SIZE];
char buf2[ITEMNAME_SIZE];
item_name( mitm[item_got], DESC_NOCAP_A, buf );
strcpy(buf2, origin_desc(mitm[item_got]).c_str());
take_note(Note(NOTE_ID_ITEM, 0, 0, buf, buf2));
char buf[200];
sprintf(buf, "HP: %d/%d MP: %d/%d",
you.hp, you.hp_max, you.magic_points, you.max_magic_points);
take_note(Note(NOTE_XP_LEVEL_CHANGE, you.experience_level, 0, buf));
char buf[200];
sprintf(buf, "HP: %d/%d MP: %d/%d",
you.hp, you.hp_max, you.magic_points, you.max_magic_points);
take_note(Note(NOTE_XP_LEVEL_CHANGE, you.experience_level, 0, buf));
"%s in your current equipment.",
(to_hit < 1) ? "You are completely incapable of fighting" :
(to_hit < 5) ? "Hitting even clumsy monsters is extremely awkward" :
(to_hit < 10) ? "Hitting average monsters is awkward" :
(to_hit < 15) ? "Hitting average monsters is difficult" :
(to_hit < 20) ? "Hitting average monsters is hard" :
(to_hit < 30) ? "Very agile monsters are a bit awkward to hit" :
(to_hit < 45) ? "Very agile monsters are a bit difficult to hit" :
(to_hit < 60) ? "Very agile monsters are a bit hard to hit" :
(to_hit < 100) ? "You feel comfortable with your ability to fight"
: "You feel confident with your ability to fight" );
"%s in your current equipment.",
(to_hit < 1) ? "You are completely incapable of fighting" :
(to_hit < 5) ? "Hitting even clumsy monsters is extremely awkward" :
(to_hit < 10) ? "Hitting average monsters is awkward" :
(to_hit < 15) ? "Hitting average monsters is difficult" :
(to_hit < 20) ? "Hitting average monsters is hard" :
(to_hit < 30) ? "Very agile monsters are a bit awkward to hit" :
(to_hit < 45) ? "Very agile monsters are a bit difficult to hit" :
(to_hit < 60) ? "Very agile monsters are a bit hard to hit" :
(to_hit < 100) ? "You feel comfortable with your ability to fight"
: "You feel confident with your ability to fight" );
(ustealth < 10) ? "extremely un" :
(ustealth < 20) ? "very un" :
(ustealth < 30) ? "un" :
(ustealth < 50) ? "fairly " :
(ustealth < 80) ? "" :
(ustealth < 120) ? "quite " :
(ustealth < 160) ? "very " :
(ustealth < 200) ? "extremely "
: "incredibly " );
(ustealth < 10) ? "extremely un" :
(ustealth < 20) ? "very un" :
(ustealth < 30) ? "un" :
(ustealth < 50) ? "fairly " :
(ustealth < 80) ? "" :
(ustealth < 120) ? "quite " :
(ustealth < 160) ? "very " :
(ustealth < 200) ? "extremely "
: "incredibly " );
note.type == NOTE_GET_GOD ||
note.type == NOTE_GOD_GIFT ||
note.type == NOTE_GET_MUTATION ||
note.type == NOTE_LOSE_MUTATION ||
note.type == NOTE_GET_GOD ||
note.type == NOTE_GOD_GIFT ||
note.type == NOTE_GET_MUTATION ||
note.type == NOTE_LOSE_MUTATION ||
if ( is_noteworthy_skill_level(note.second) )
return true;
if ( Options.note_skill_max && is_highest_skill(note.first) )
return true;
return false;
if ( is_noteworthy_skill_level(note.second) )
return true;
if ( Options.note_skill_max && is_highest_skill(note.first) )
return true;
return false;
if ( note_list[i].type != note.type )
continue;
const Note& rnote( note_list[i] );
switch ( note.type )
if ( note_list[i].type != note.type )
continue;
const Note& rnote( note_list[i] );
switch ( note.type )
case NOTE_DUNGEON_LEVEL_CHANGE:
if ( rnote.packed_place == note.packed_place )
return false;
break;
case NOTE_LEARN_SPELL:
if (spell_difficulty(rnote.first) >= spell_difficulty(note.first))
return false;
break;
case NOTE_GOD_POWER:
if ( rnote.first == note.first && rnote.second == note.second )
return false;
break;
case NOTE_ID_ITEM:
/* re-id'ing an item, e.g. second copy of book, isn't
noteworthy */
if ( rnote.name == note.name )
return false;
break;
case NOTE_HP_CHANGE:
/* not if we have a recent warning */
if ( (note.turn - rnote.turn < 5) &&
/* unless we've lost half our HP since then */
(note.first * 2 >= rnote.first) )
return false;
break;
default:
case NOTE_DUNGEON_LEVEL_CHANGE:
if ( rnote.packed_place == note.packed_place )
return false;
break;
case NOTE_LEARN_SPELL:
if (spell_difficulty(rnote.first) >= spell_difficulty(note.first))
return false;
break;
case NOTE_GOD_POWER:
if ( rnote.first == note.first && rnote.second == note.second )
return false;
break;
case NOTE_ID_ITEM:
/* re-id'ing an item, e.g. second copy of book, isn't
noteworthy */
if ( rnote.name == note.name )
return false;
break;
case NOTE_HP_CHANGE:
/* not if we have a recent warning */
if ( (note.turn - rnote.turn < 5) &&
/* unless we've lost half our HP since then */
(note.first * 2 >= rnote.first) )
return false;
break;
default:
(get_helmet_type(you.inv[you.equip[EQ_HELMET]]) == THELM_CAP ||
get_helmet_type(you.inv[you.equip[EQ_HELMET]]) == THELM_WIZARD_HAT))
(get_helmet_type(you.inv[you.equip[EQ_HELMET]]) == THELM_CAP ||
get_helmet_type(you.inv[you.equip[EQ_HELMET]]) == THELM_WIZARD_HAT))
if ( spell_cast == MS_SUMMON_SMALL_MAMMALS )
sumcount2 = 1 + random2(4);
else
sumcount2 = 3 + random2(3) + monster->hit_dice / 5;
if ( spell_cast == MS_SUMMON_SMALL_MAMMALS )
sumcount2 = 1 + random2(4);
else
sumcount2 = 3 + random2(3) + monster->hit_dice / 5;
learned_something_new(TUT_KILLED_MONSTER);
else if (Options.tutorial_left && (you.religion == GOD_TROG || you.religion == GOD_OKAWARU || you.religion == GOD_MAKHLEB)
&& !you.duration[DUR_PRAYER])
tutorial_prayer_reminder();
learned_something_new(TUT_KILLED_MONSTER);
else if (Options.tutorial_left && (you.religion == GOD_TROG || you.religion == GOD_OKAWARU || you.religion == GOD_MAKHLEB)
&& !you.duration[DUR_PRAYER])
tutorial_prayer_reminder();
// If old monster is visible to the player, and is interesting,
// then note why the interesting monster went away.
if (player_monster_visible(monster) && mons_near(monster)
&& MONST_INTERESTING(monster))
// If old monster is visible to the player, and is interesting,
// then note why the interesting monster went away.
if (player_monster_visible(monster) && mons_near(monster)
&& MONST_INTERESTING(monster))
// If new monster is visible to player, then we've seen it
if (player_monster_visible(monster) && mons_near(monster))
seen_monster(monster);
// If new monster is visible to player, then we've seen it
if (player_monster_visible(monster) && mons_near(monster))
seen_monster(monster);
moname(monster->type, true, DESC_NOCAP_A, namebuf);
std::string iname = namebuf;
for (unsigned i = 0; i < Options.note_monsters.size(); ++i) {
if (Options.note_monsters[i].matches(iname)) {
interesting = true;
break;
}
}
moname(monster->type, true, DESC_NOCAP_A, namebuf);
std::string iname = namebuf;
for (unsigned i = 0; i < Options.note_monsters.size(); ++i) {
if (Options.note_monsters[i].matches(iname)) {
interesting = true;
break;
}
}
you.level_type == LEVEL_DUNGEON &&
mons_level(monster->type) >= you.your_level + ood_limit() &&
mons_level(monster->type) < 99 &&
!(monster->type >= MONS_EARTH_ELEMENTAL &&
monster->type <= MONS_AIR_ELEMENTAL) )
interesting = true;
you.level_type == LEVEL_DUNGEON &&
mons_level(monster->type) >= you.your_level + ood_limit() &&
mons_level(monster->type) < 99 &&
!(monster->type >= MONS_EARTH_ELEMENTAL &&
monster->type <= MONS_AIR_ELEMENTAL) )
interesting = true;
/* make a note of it */
if ( is_interesting_item(item) ) {
char buf[ITEMNAME_SIZE];
char buf2[ITEMNAME_SIZE];
item_name( item, DESC_NOCAP_A, buf );
strcpy(buf2, origin_desc(item).c_str());
take_note(Note(NOTE_ID_ITEM, 0, 0, buf, buf2));
}
/* make a note of it */
if ( is_interesting_item(item) ) {
char buf[ITEMNAME_SIZE];
char buf2[ITEMNAME_SIZE];
item_name( item, DESC_NOCAP_A, buf );
strcpy(buf2, origin_desc(item).c_str());
take_note(Note(NOTE_ID_ITEM, 0, 0, buf, buf2));
}
const std::string& r(you.inv[i].inscription);
/* note that r.size() is unsigned */
for ( j = 0; j + 2 < r.size(); ++j ) {
if ( r[j] == '@' &&
(r[j+1] == iletter || r[j+1] == '*') &&
r[j+2] == digit ) {
return i;
}
}
}
const std::string& r(you.inv[i].inscription);
/* note that r.size() is unsigned */
for ( j = 0; j + 2 < r.size(); ++j ) {
if ( r[j] == '@' &&
(r[j+1] == iletter || r[j+1] == '*') &&
r[j+2] == digit ) {
return i;
}
}
}
fprintf(f, "book = %s\n",
Options.prev_book == SBT_FIRE ? "fire" :
Options.prev_book == SBT_COLD ? "cold" :
Options.prev_book == SBT_SUMM ? "summ" :
"random");
fprintf(f, "book = %s\n",
Options.prev_book == SBT_FIRE ? "fire" :
Options.prev_book == SBT_COLD ? "cold" :
Options.prev_book == SBT_SUMM ? "summ" :
"random");
for (int i = 0; i < ENDOFPACK; ++i) {
if (is_valid_item( you.inv[i] )
&& can_cut_meat( you.inv[i] )
&& you.inv[i].base_type == OBJ_WEAPONS
&& item_known_uncursed(you.inv[i])
&& item_type_known(you.inv[i])
&& get_weapon_brand(you.inv[i]) != SPWPN_DISTORTION
&& can_wield( &you.inv[i] ))
{
mpr("Switching to a butchering implement.");
wield_weapon( true, i, false );
for (int i = 0; i < ENDOFPACK; ++i)
{
if (is_valid_item( you.inv[i] )
&& can_cut_meat( you.inv[i] )
&& you.inv[i].base_type == OBJ_WEAPONS
&& item_known_uncursed(you.inv[i])
&& item_type_known(you.inv[i])
&& get_weapon_brand(you.inv[i]) != SPWPN_DISTORTION
&& can_wield( &you.inv[i] ))
{
mpr("Switching to a butchering implement.");
wield_weapon( true, i, false );
// Account for the weapon switch...we're doing this here
// since the above switch may reveal information about the
// weapon (curse status, ego type). So even if the
// character fails to or decides not to butcher past this
// point, they have achieved something and there should be
// a cost.
start_delay( DELAY_UNINTERRUPTIBLE, 1 );
return true;
}
// Account for the weapon switch...we're doing this here
// since the above switch may reveal information about the
// weapon (curse status, ego type). So even if the
// character fails to or decides not to butcher past this
// point, they have achieved something and there should be
// a cost.
start_delay( DELAY_UNINTERRUPTIBLE, 1 );
return true;
}
you.attribute[ATTR_TRANSFORMATION] == TRAN_DRAGON ||
(you.attribute[ATTR_TRANSFORMATION] == TRAN_NONE &&
(you.species == SP_TROLL ||
you.species == SP_GHOUL ||
you.mutation[MUT_CLAWS])));
you.attribute[ATTR_TRANSFORMATION] == TRAN_DRAGON ||
(you.attribute[ATTR_TRANSFORMATION] == TRAN_NONE &&
(you.species == SP_TROLL ||
you.species == SP_GHOUL ||
you.mutation[MUT_CLAWS])));
for(item_tries = 0; item_tries < 50; item_tries++)
{
// BCR - unique is now used for food quantity.
thing_created = items( unique, class_wanted, type_wanted, true,
MAKE_GOOD_ITEM, 250 );
// MT - Check: god-gifted weapons and armor shouldn't kill you. Except Xom.
if(agent != GOD_TROG && agent != GOD_OKAWARU)
break;
else
{
randart_wpn_properties( mitm[thing_created], proprt );
for (int item_tries = 0; item_tries < 50; item_tries++)
{
// BCR - unique is now used for food quantity.
thing_created = items( unique, class_wanted, type_wanted, true,
MAKE_GOOD_ITEM, 250 );
if (thing_created == NON_ITEM)
continue;
// MT - Check: god-gifted weapons and armor shouldn't kill you.
// Except Xom.
if (agent == GOD_TROG || agent == GOD_OKAWARU)
break;
else
{
randart_wpn_properties( mitm[thing_created], proprt );
//check vs stats. positive stats will automatically fall through.
//As will negative stats that won't kill you.
if((proprt[RAP_STRENGTH] * -1 >= you.strength ||
proprt[RAP_INTELLIGENCE] * -1 >= you.intel ||
proprt[RAP_DEXTERITY] * -1 >= you.dex) && item_tries < 50)
{
//try again
destroy_item(thing_created);
thing_created = NON_ITEM;
}
else
break;
}
}
// check vs stats. positive stats will automatically fall
// through. As will negative stats that won't kill you.
if (-proprt[RAP_STRENGTH] >= you.strength ||
-proprt[RAP_INTELLIGENCE] >= you.intel ||
-proprt[RAP_DEXTERITY] >= you.dex)
{
// try again
destroy_item(thing_created);
thing_created = NON_ITEM;
}
else
break;
}
}
// don't give top-tier wands before 5 HD
if ( menv[mid].hit_dice < 5 )
{
// technically these wands will be undercharged, but it
// doesn't really matter
if ( mitm[thing_created].sub_type == WAND_FIRE )
mitm[thing_created].sub_type = WAND_FLAME;
if ( mitm[thing_created].sub_type == WAND_COLD )
mitm[thing_created].sub_type = WAND_FROST;
if ( mitm[thing_created].sub_type == WAND_LIGHTNING )
mitm[thing_created].sub_type = (coinflip() ?
WAND_FLAME : WAND_FROST);
}
// don't give top-tier wands before 5 HD
if ( menv[mid].hit_dice < 5 )
{
// technically these wands will be undercharged, but it
// doesn't really matter
if ( mitm[thing_created].sub_type == WAND_FIRE )
mitm[thing_created].sub_type = WAND_FLAME;
if ( mitm[thing_created].sub_type == WAND_COLD )
mitm[thing_created].sub_type = WAND_FROST;
if ( mitm[thing_created].sub_type == WAND_LIGHTNING )
mitm[thing_created].sub_type = (coinflip() ?
WAND_FLAME : WAND_FROST);
}
"this spell has little to do with one's skill with "
"weapons, and more to do with personal strength, "
"translocation skill, and magic ability. ";
"this spell has little to do with one's skill with "
"weapons, and more to do with personal strength, "
"translocation skill, and magic ability. ";
if ( spell_line.length() > 24 )
spell_line = spell_line.substr(0, 24);
for (int i = spell_line.length(); i < 26; i++)
spell_line += ' ';
if ( spell_line.length() > 24 )
spell_line = spell_line.substr(0, 24);
for (int i = spell_line.length(); i < 26; i++)
spell_line += ' ';