diff options
-rw-r--r-- | crawl-ref/source/direct.cc | 32 | ||||
-rw-r--r-- | crawl-ref/source/direct.h | 6 | ||||
-rw-r--r-- | crawl-ref/source/fight.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/item_use.cc | 1 | ||||
-rw-r--r-- | crawl-ref/source/luadgn.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.cc | 5 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.h | 2 | ||||
-rw-r--r-- | crawl-ref/source/monstuff.cc | 8 | ||||
-rw-r--r-- | crawl-ref/source/player.cc | 6 | ||||
-rw-r--r-- | crawl-ref/source/tile1.cc | 20 |
10 files changed, 62 insertions, 26 deletions
diff --git a/crawl-ref/source/direct.cc b/crawl-ref/source/direct.cc index 8a0774ba25..7080b81dbe 100644 --- a/crawl-ref/source/direct.cc +++ b/crawl-ref/source/direct.cc @@ -1469,7 +1469,9 @@ void describe_floor() break; } - feat = feature_description(you.x_pos, you.y_pos, DESC_NOCAP_A, false); + feat = feature_description(you.x_pos, you.y_pos, + is_bloodcovered(you.x_pos, you.y_pos), + DESC_NOCAP_A, false); if (feat.empty()) return; @@ -1528,11 +1530,14 @@ static std::string feature_do_grammar(description_level_type dtype, } std::string feature_description(dungeon_feature_type grid, - trap_type trap, + trap_type trap, bool bloody, description_level_type dtype, bool add_stop) { std::string desc = raw_feature_description(grid, trap); + if (bloody) + desc += ", spattered with blood"; + return feature_do_grammar(dtype, add_stop, grid_is_trap(grid), desc); } @@ -1782,8 +1787,8 @@ static bool interesting_feature(dungeon_feature_type feat) } #endif -std::string feature_description(int mx, int my, description_level_type dtype, - bool add_stop) +std::string feature_description(int mx, int my, bool bloody, + description_level_type dtype, bool add_stop) { dungeon_feature_type grid = grd[mx][my]; if ( grid == DNGN_SECRET_DOOR ) @@ -1794,7 +1799,7 @@ std::string feature_description(int mx, int my, description_level_type dtype, case DNGN_TRAP_MECHANICAL: case DNGN_TRAP_MAGICAL: case DNGN_TRAP_NATURAL: - return (feature_description(grid, trap_type_at_xy(mx, my), + return (feature_description(grid, trap_type_at_xy(mx, my), bloody, dtype, add_stop)); case DNGN_ENTER_SHOP: return (shop_name(mx, my, add_stop)); @@ -1804,7 +1809,7 @@ std::string feature_description(int mx, int my, description_level_type dtype, dtype, add_stop, false, marker_feature_description(coord_def(mx, my)))); default: - return (feature_description(grid, NUM_TRAPS, dtype, add_stop)); + return (feature_description(grid, NUM_TRAPS, bloody, dtype, add_stop)); } } @@ -2124,7 +2129,11 @@ static void describe_cell(int mx, int my) item_described = true; } - std::string feature_desc = feature_description(mx, my); + bool bloody = false; + if (is_bloodcovered(mx, my)) + bloody = true; + + std::string feature_desc = feature_description(mx, my, bloody); #ifdef DEBUG_DIAGNOSTICS std::string marker; if (map_marker *mark = env.markers.find(coord_def(mx, my), MAT_ANY)) @@ -2148,8 +2157,6 @@ static void describe_cell(int mx, int my) if (Options.tutorial_left && tutorial_feat_interesting(grd[mx][my])) { feature_desc += " (Press <w>v<lightgray> for more information.)"; - if (is_bloodcovered(mx, my)) - feature_desc += EOL "It is spattered with blood."; print_formatted_paragraph(feature_desc, get_number_of_cols()); } @@ -2160,13 +2167,6 @@ static void describe_cell(int mx, int my) if (interesting_feature(feat)) feature_desc += " (Press 'v' for more information.)"; - bool bloody = false; - if (is_bloodcovered(mx, my)) - { - feature_desc += EOL "It is spattered with blood."; - bloody = true; - } - // Suppress "Floor." if there's something on that square that we've // already described. if ((feat == DNGN_FLOOR || feat == DNGN_FLOOR_SPECIAL) && !bloody diff --git a/crawl-ref/source/direct.h b/crawl-ref/source/direct.h index 839b84ebe9..125b045ad1 100644 --- a/crawl-ref/source/direct.h +++ b/crawl-ref/source/direct.h @@ -168,13 +168,13 @@ std::string get_monster_desc(const monsters *mon, int dos_direction_unmunge(int doskey); -std::string feature_description(int mx, int my, +std::string feature_description(int mx, int my, bool bloody = false, description_level_type dtype = DESC_CAP_A, bool add_stop = true); std::string raw_feature_description(dungeon_feature_type grid, trap_type tr = NUM_TRAPS); -std::string feature_description(dungeon_feature_type grid, - trap_type trap = NUM_TRAPS, +std::string feature_description(dungeon_feature_type grid, + trap_type trap = NUM_TRAPS, bool bloody = false, description_level_type dtype = DESC_CAP_A, bool add_stop = true); diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc index da37438439..bec559af46 100644 --- a/crawl-ref/source/fight.cc +++ b/crawl-ref/source/fight.cc @@ -1969,7 +1969,9 @@ bool melee_attack::apply_damage_brand() case SPWPN_DRAGON_SLAYING: if (mons_genus(defender->mons_species()) == MONS_DRAGON - || mons_genus(defender->mons_species()) == MONS_DRACONIAN) + || mons_genus(defender->mons_species()) == MONS_DRACONIAN + || defender->atype() == ACT_PLAYER + && you.attribute[ATTR_TRANSFORMATION] == TRAN_DRAGON) { special_damage = 1 + random2(3*damage_done/2); if (defender_visible) diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc index 653637897e..b9742dec0a 100644 --- a/crawl-ref/source/item_use.cc +++ b/crawl-ref/source/item_use.cc @@ -514,6 +514,7 @@ void wield_effects(int item_wield_2, bool showMsgs) case SPWPN_DRAGON_SLAYING: mpr(player_genus(GENPC_DRACONIAN) + || you.attribute[ATTR_TRANSFORMATION] == TRAN_DRAGON ? "You feel a sudden desire to commit suicide." : "You feel a sudden desire to slay dragons!"); break; diff --git a/crawl-ref/source/luadgn.cc b/crawl-ref/source/luadgn.cc index da053fb639..3e41a0b07c 100644 --- a/crawl-ref/source/luadgn.cc +++ b/crawl-ref/source/luadgn.cc @@ -1275,7 +1275,7 @@ static int dgn_feature_desc(lua_State *ls) description_type_by_name(lua_tostring(ls, 2)); const bool need_stop = lua_isboolean(ls, 3)? lua_toboolean(ls, 3) : false; const std::string s = - feature_description(feat, NUM_TRAPS, dtype, need_stop); + feature_description(feat, NUM_TRAPS, false, dtype, need_stop); lua_pushstring(ls, s.c_str()); return (1); } @@ -1288,7 +1288,7 @@ static int dgn_feature_desc_at(lua_State *ls) description_type_by_name(lua_tostring(ls, 3)); const bool need_stop = lua_isboolean(ls, 4)? lua_toboolean(ls, 4) : false; const std::string s = - feature_description(luaL_checkint(ls, 1), luaL_checkint(ls, 2), + feature_description(luaL_checkint(ls, 1), luaL_checkint(ls, 2), false, dtype, need_stop); lua_pushstring(ls, s.c_str()); return (1); diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc index f74b9c364a..dff1759555 100644 --- a/crawl-ref/source/mon-util.cc +++ b/crawl-ref/source/mon-util.cc @@ -1016,12 +1016,15 @@ int mons_res_negative_energy( const monsters *mon ) || mons_holiness(mon) == MH_NONLIVING || mons_holiness(mon) == MH_PLANT || mon->type == MONS_SHADOW_DRAGON - || mon->type == MONS_DEATH_DRAKE) + || mon->type == MONS_DEATH_DRAKE + // TSO protects his warriors' life force + || mon->type == MONS_DAEVA) { return (3); // to match the value for players } int u = 0; + if (mons_itemuse(mc) >= MONUSE_STARTING_EQUIPMENT) { diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.h index e070e675b7..159fa60337 100644 --- a/crawl-ref/source/mon-util.h +++ b/crawl-ref/source/mon-util.h @@ -176,7 +176,7 @@ enum mon_resist_flags // resistances // Notes: - // - negative energy is mostly handled via mons_has_life_force() + // - negative energy is mostly handled via mons_res_negative_energy() // - acid is handled mostly by genus (jellies) plus non-living // - asphyx-resistance replaces hellfrost resistance. MR_RES_ELEC = (1<< 0), diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index 2f663aeeac..a557e30d41 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -404,7 +404,13 @@ static void give_adjusted_experience(monsters *monster, killer_type killer, if (created_friendly) ; // No experience if monster was created friendly else if (YOU_KILL(killer)) + { + int old_lev = you.experience_level; gain_exp( experience, exp_gain, avail_gain ); + // Give a message for monsters dying out of sight + if (exp_gain > 0 && !mons_near(monster) && you.experience_level == old_lev) + mpr("You feel a bit more experienced."); + } else if (pet_kill) gain_exp( experience / 2 + 1, exp_gain, avail_gain ); @@ -969,7 +975,7 @@ void monster_die(monsters *monster, killer_type killer, int i, bool silent) if (monster->type == MONS_SIMULACRUM_SMALL || monster->type == MONS_SIMULACRUM_LARGE) { - simple_monster_message( monster, " vaporises!" ); + simple_monster_message( monster, " vapourises!" ); place_cloud( CLOUD_COLD, monster->x, monster->y, 1 + random2(3), monster->kill_alignment() ); diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 056ed3a3c2..1bf82f069e 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -164,7 +164,7 @@ bool move_player_to_grid( int x, int y, bool stepped, bool allow_shift, "onto" : "into"); prompt += " that "; prompt += feature_description(new_grid, trap_type_at_xy(x,y), - DESC_BASENAME, false); + false, DESC_BASENAME, false); prompt += '?'; // Zot traps require capital confirmation @@ -6067,6 +6067,9 @@ bool player::travelling_light() const int player::mons_species() const { + if (player_genus(GENPC_DRACONIAN)) + return (MONS_DRACONIAN); + switch (species) { case SP_HILL_ORC: @@ -6074,6 +6077,7 @@ int player::mons_species() const case SP_HIGH_ELF: case SP_GREY_ELF: case SP_DEEP_ELF: case SP_SLUDGE_ELF: return (MONS_ELF); + default: return (MONS_HUMAN); } diff --git a/crawl-ref/source/tile1.cc b/crawl-ref/source/tile1.cc index a95d7a9d41..52337dbee7 100644 --- a/crawl-ref/source/tile1.cc +++ b/crawl-ref/source/tile1.cc @@ -3625,6 +3625,15 @@ void tile_place_monster(int gx, int gy, int idx, bool foreground) const monsters *mon = &menv[idx]; if (!mons_is_known_mimic(mon)) { + // if necessary add item brand + if (igrd[gx][gy] != NON_ITEM) + { + if (foreground) + t |= TILE_FLAG_S_UNDER; + else + t0 |= TILE_FLAG_S_UNDER; + } + item_def item; get_mimic_item( mon, item ); if (item_needs_autopickup(item)) @@ -3636,6 +3645,17 @@ void tile_place_monster(int gx, int gy, int idx, bool foreground) } } } + else if (menv[idx].holiness() == MH_PLANT) + { + // if necessary add item brand + if (igrd[gx][gy] != NON_ITEM) + { + if (foreground) + t |= TILE_FLAG_S_UNDER; + else + t0 |= TILE_FLAG_S_UNDER; + } + } else if (menv[idx].type >= MONS_DRACONIAN && menv[idx].type <= MONS_DRACONIAN_SCORCHER) { |