summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2009-03-12 20:12:49 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2009-03-12 20:12:49 +0000
commiteaa52e83a89d49475ee00812ebcf0fe7caa89980 (patch)
tree5e5a72fe1927d96c111fddee0a0cf42109ac076a /crawl-ref/source
parentb7559dcd3bb981a5eba189eb732fb7eca60d5f70 (diff)
downloadcrawl-ref-eaa52e83a89d49475ee00812ebcf0fe7caa89980.tar.gz
crawl-ref-eaa52e83a89d49475ee00812ebcf0fe7caa89980.zip
FR 2093461: add player + allies FRIENDLY_PICKUP mode
Make Roxanne immune to disintegration (like ice statues). Move rock worms a bit lower in the dungeon and increase their damage (a tiny bit). git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9428 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/acr.cc16
-rw-r--r--crawl-ref/source/beam.cc2
-rw-r--r--crawl-ref/source/enum.h1
-rw-r--r--crawl-ref/source/initfile.cc2
-rw-r--r--crawl-ref/source/mon-data.h2
-rw-r--r--crawl-ref/source/mon-pick.cc2
-rw-r--r--crawl-ref/source/mon-util.cc18
-rw-r--r--crawl-ref/source/mon-util.h2
8 files changed, 30 insertions, 15 deletions
diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc
index b8dfd911bc..06cde2fdfe 100644
--- a/crawl-ref/source/acr.cc
+++ b/crawl-ref/source/acr.cc
@@ -1306,14 +1306,18 @@ static void _print_friendly_pickup_setting(bool was_changed)
mprf("Your intelligent allies may %sonly pick up items dropped by allies.",
now.c_str());
}
+ else if (you.friendly_pickup == FRIENDLY_PICKUP_PLAYER)
+ {
+ mprf("Your intelligent allies may %sonly pick up items dropped by you "
+ "and your allies.", now.c_str());
+ }
else if (you.friendly_pickup == FRIENDLY_PICKUP_ALL)
{
- mprf("Your intelligent allies may %spick up anything they need.", now.c_str());
+ mprf("Your intelligent allies may %spick up anything they need.",
+ now.c_str());
}
else
- {
mprf(MSGCH_ERROR, "Your allies%s are collecting bugs!", now.c_str());
- }
}
// Note that in some actions, you don't want to clear afterwards.
@@ -1444,8 +1448,8 @@ void process_command( command_type cmd )
// Toggle pickup mode for friendlies.
_print_friendly_pickup_setting(false);
- mpr("Change to (d)efault, (n)othing, (f)riend-dropped, or (a)ll? ",
- MSGCH_PROMPT);
+ mpr("Change to (d)efault, (n)othing, (f)riend-dropped, (p)layer, "
+ "or (a)ll? ", MSGCH_PROMPT);
char type = (char) getchm(KC_DEFAULT);
type = tolower(type);
@@ -1456,6 +1460,8 @@ void process_command( command_type cmd )
you.friendly_pickup = FRIENDLY_PICKUP_NONE;
else if (type == 'f')
you.friendly_pickup = FRIENDLY_PICKUP_FRIEND;
+ else if (type == 'p')
+ you.friendly_pickup = FRIENDLY_PICKUP_PLAYER;
else if (type == 'a')
you.friendly_pickup = FRIENDLY_PICKUP_ALL;
else
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index fe701dc282..eb51cc6112 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -4319,7 +4319,7 @@ bool bolt::handle_statue_disintegration(monsters* mon)
{
bool rc = false;
if ((flavour == BEAM_DISINTEGRATION || flavour == BEAM_NUKE)
- && mons_is_statue(mon->type) && !mons_is_icy(mon->type))
+ && mons_is_statue(mon->type, true))
{
rc = true;
// Disintegrate the statue.
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 727579cf10..a505667027 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -2980,6 +2980,7 @@ enum friendly_pickup_type
{
FRIENDLY_PICKUP_NONE = 0,
FRIENDLY_PICKUP_FRIEND,
+ FRIENDLY_PICKUP_PLAYER,
FRIENDLY_PICKUP_ALL
};
diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc
index 4bee7a894b..dc2ce6daaa 100644
--- a/crawl-ref/source/initfile.cc
+++ b/crawl-ref/source/initfile.cc
@@ -2107,6 +2107,8 @@ void game_options::read_option_line(const std::string &str, bool runscript)
default_friendly_pickup = FRIENDLY_PICKUP_NONE;
else if (field == "friend")
default_friendly_pickup = FRIENDLY_PICKUP_FRIEND;
+ else if (field == "player")
+ default_friendly_pickup = FRIENDLY_PICKUP_PLAYER;
else if (field == "all")
default_friendly_pickup = FRIENDLY_PICKUP_ALL;
}
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index a10c814f17..ac236ddfd5 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -3036,7 +3036,7 @@ static monsterentry mondata[] = {
M_NO_FLAGS,
MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC,
0, 10, MONS_WORM, MONS_ROCK_WORM, MH_NATURAL, -3,
- { {AT_BITE, AF_PLAIN, 20}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
+ { {AT_BITE, AF_PLAIN, 22}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 5, 5, 5, 0 },
3, 12, MST_NO_SPELLS, CE_NOCORPSE, Z_NOZOMBIE, S_SILENT, I_PLANT,
HT_ROCK, 12, DEFAULT_ENERGY, MONUSE_NOTHING, SIZE_LARGE
diff --git a/crawl-ref/source/mon-pick.cc b/crawl-ref/source/mon-pick.cc
index 2ce6a53505..b02a6e2871 100644
--- a/crawl-ref/source/mon-pick.cc
+++ b/crawl-ref/source/mon-pick.cc
@@ -665,7 +665,6 @@ int mons_standard_level(int mcls)
case MONS_WRAITH:
case MONS_UNSEEN_HORROR:
case MONS_TRAPDOOR_SPIDER:
- case MONS_ROCK_WORM:
return 14;
case MONS_ARMOUR_MIMIC:
@@ -704,6 +703,7 @@ int mons_standard_level(int mcls)
case MONS_WIZARD:
case MONS_SIMULACRUM_SMALL:
case MONS_SIMULACRUM_LARGE:
+ case MONS_ROCK_WORM:
return 17;
case MONS_DRAGON:
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 373af34708..2e7f88c2fd 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -641,12 +641,15 @@ bool invalid_monster_index(int i)
return (i < 0 || i >= MAX_MONSTERS);
}
-bool mons_is_statue(int mc)
+bool mons_is_statue(int mc, bool allow_disintegrate)
{
- return (mc == MONS_ORANGE_STATUE
- || mc == MONS_SILVER_STATUE
- || mc == MONS_ICE_STATUE
- || mc == MONS_ROXANNE);
+ if (mc == MONS_ORANGE_STATUE || mc == MONS_SILVER_STATUE)
+ return (true);
+
+ if (!allow_disintegrate)
+ return (mc == MONS_ICE_STATUE || mc == MONS_ROXANNE);
+
+ return (false);
}
bool mons_is_mimic(int mc)
@@ -5103,7 +5106,10 @@ bool monsters::pickup_item(item_def &item, int near, bool force)
// pick up anything, or only stuff dropped by (other) allies.
if (you.friendly_pickup == FRIENDLY_PICKUP_NONE
|| you.friendly_pickup == FRIENDLY_PICKUP_FRIEND
- && !testbits(item.flags, ISFLAG_DROPPED_BY_ALLY))
+ && !testbits(item.flags, ISFLAG_DROPPED_BY_ALLY)
+ || you.friendly_pickup == FRIENDLY_PICKUP_PLAYER
+ && !(item.flags & (ISFLAG_DROPPED | ISFLAG_THROWN
+ | ISFLAG_DROPPED_BY_ALLY)))
{
return (false);
}
diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.h
index 8ad2d0da56..0454c7fc83 100644
--- a/crawl-ref/source/mon-util.h
+++ b/crawl-ref/source/mon-util.h
@@ -565,7 +565,7 @@ mon_holy_type mons_class_holiness(int mc);
mon_holy_type mons_holiness(const monsters *mon);
bool mons_is_mimic( int mc );
-bool mons_is_statue( int mc );
+bool mons_is_statue( int mc, bool allow_disintegrate = false );
bool mons_is_demon( int mc );
bool mons_class_wields_two_weapons(int mc);