classes' associated habitats into the monsterentry struct.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3182 c06c8d41-db1a-0410-9941-cceddc491573
CG4TL4AKSN4J7CMATZFJ5N7PSDCQXLS3QYX7PZ3K67KMMBT675OQC
7AREIGBWRJPQI7N7UMSXYWGOI5D6OFUKX656PX3GOZVY3ALY75BAC
2H32CFFM2FNS63JJPNM2S6HMO543EX72GMPOU5GI6HTMQYPL6I3AC
AS2IQQJNNCEQNXXKTGYHLB7RO3ZKCF4F7GK6FJH66BOOKDDRGNIQC
KWKVXUJSWKBWPRXD6JVI6K4YHHHNRO525VHPPDQ52XCGQRUHVXQAC
HIRKGUMNJPWKSVTR6TVBPD3MWNA63CEHCLCIPWEMGDFHVB3NPLDQC
LJLLVQR6KB3QE5CKBL7REN47FL54W557UHETOW7ACIR4P6RXIVLQC
ISSEUTHG7EH3QTFLS23GXFIOQXCI5HJPJMK6GWNFMC6NDRD2H34QC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC
KRN7O2VJTLPT5KLUEMNGNYDSVHB3LYWONSREU2GOUXRMM3J6REYQC
J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC
LJK4ZQATLSB4MKZG3ARZX5V6RFGTN3NLCN6GTCUGJQKU26SOXMUAC
4JJ6TWOZOPXBIOEQA2CXASS2TO5AMNXNY7LG67NXIVLDVJTJW6KAC
OONYLF4DAPLIYLBNNRW74IVT5BBTWI4XHQBXSNSPVRX3FTKJBTRAC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
PM65H4V4GNPVIJFUQW57DC3VDB7TRUUNXKVZONQKEFZSK3AXX5GQC
WUWTYSQ2Z7HI637WNO2J55LW6WLPBDF2ILH622T47ICW3AN7OWMQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
3V52MSSK7QX7FWLLUW63DTWCBAJEK674EFZLKP45FLZ5KZKVARHAC
F7Q5PX44SLPANIZXCY67TG2W5JTRVJMHGQW54VJLGB4XRH7R6JBQC
52W74WXL5XIH6YFJBQRVAO47YHCS3CPMUUZS4Q3AZ3HAPDWMT54AC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC
OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC
K2MLPJIAXXZRWEWZCNSGICCBNIU2WAAPT7SPIMOH7FLLTOB4QFRAC
SJDOBXECX7F3ZPPVR7FPURE53D47PP2TFIF4SB6XPS456PZV3DQAC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
XFIU6NZ2FVPF7EPMMXLC5O4P7EKGVBC6K2IA3WSVJ57JONFIPKZQC
IIK2W5J4NQWD3BVXPJDUCTONSF2ENXPSZBWMZCBC25RCTNMKSK6AC
IPQ63XIUPHFMCQOZZAVSGCJOZFDRDWZTUUJSAUMARNDUFLBEMYIAC
2TTHWHQ3ZDD3DLB3KRULTBMS3ZREJG472IBVZXIGTP7MBZWAU52QC
JDM27QE4HR52AYFSQE763BFF57ANOTF5MXKMO377PP5EXMN7SAOAC
YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC
RSIUBEQUGNU4LO6KH4PKVROWQS33DAKSY4XFVGN7T3CEKSXABCSAC
* called from: acr - bang - beam - direct - dungeon - fight - files -
* monplace - mstuff2 - spells3 - view
* *********************************************************************** */
dungeon_feature_type monster_habitat(int which_class);
/* ***********************************************************************
if (monster_can_submerge(monster->type, grd[monster->x][monster->y])
&& ( !player_beheld_by(monster) // no submerging if player entranced
&& (one_chance_in(5)
|| ((grid_distance( monster->x, monster->y,
you.x_pos, you.y_pos ) > 1
// FIXME This is better expressed as a
// function such as
// monster_has_ranged_attack:
&& monster->type != MONS_ELECTRICAL_EEL
&& monster->type != MONS_LAVA_SNAKE
&& (monster->type != MONS_MERMAID
|| you.species == SP_MERFOLK)
// Don't submerge if we just unsubmerged for
// the sake of shouting.
&& monster->seen_context != "bursts forth shouting"
&& !one_chance_in(20)) ))
|| monster->hit_points <= monster->max_hit_points / 2)
|| env.cgrid[monster->x][monster->y] != EMPTY_CLOUD)
{
monster->add_ench(ENCH_SUBMERGED);
update_beholders(monster);
return;
}
case MONS_LAVA_WORM:
case MONS_LAVA_FISH:
case MONS_LAVA_SNAKE:
case MONS_SALAMANDER:
case MONS_MERFOLK:
case MONS_MERMAID:
case MONS_BIG_FISH:
case MONS_GIANT_GOLDFISH:
case MONS_ELECTRICAL_EEL:
case MONS_JELLYFISH:
case MONS_WATER_ELEMENTAL:
case MONS_SWAMP_WORM:
if (monster_can_submerge(monster->type, grd[monster->x][monster->y])
&& ( !player_beheld_by(monster) // no submerging if player entranced
&& (one_chance_in(5)
|| ((grid_distance( monster->x, monster->y,
you.x_pos, you.y_pos ) > 1
// FIXME This is better expressed as a
// function such as
// monster_has_ranged_attack:
&& monster->type != MONS_ELECTRICAL_EEL
&& monster->type != MONS_LAVA_SNAKE
&& (monster->type != MONS_MERMAID
|| you.species == SP_MERFOLK)
// Don't submerge if we just unsubmerged for
// the sake of shouting.
&& monster->seen_context != "bursts forth shouting"
&& !one_chance_in(20)) ))
|| monster->hit_points <= monster->max_hit_points / 2)
|| env.cgrid[monster->x][monster->y] != EMPTY_CLOUD)
{
monster->add_ench(ENCH_SUBMERGED);
update_beholders(monster);
}
break;
dungeon_feature_type monster_habitat(int which_class)
{
switch (which_class)
{
case MONS_MERFOLK:
case MONS_MERMAID:
case MONS_BIG_FISH:
case MONS_GIANT_GOLDFISH:
case MONS_ELECTRICAL_EEL:
case MONS_JELLYFISH:
case MONS_SWAMP_WORM:
case MONS_WATER_ELEMENTAL:
return (DNGN_DEEP_WATER); // no shallow water (only) monsters? {dlb}
// must remain DEEP_WATER for now, else breaks code {dlb}
case MONS_LAVA_WORM:
case MONS_LAVA_FISH:
case MONS_LAVA_SNAKE:
case MONS_SALAMANDER:
return (DNGN_LAVA);
// Rock worms are native to walls but are happy on the floor
// as well.
|| (monster_class == MONS_ROCK_WORM
// Rock wall critters are native to walls but are happy on
// the floor as well.
|| (preferred_habitat == DNGN_ROCK_WALL
case MONS_MERFOLK:
case MONS_MERMAID:
case MONS_BIG_FISH:
case MONS_GIANT_GOLDFISH:
case MONS_ELECTRICAL_EEL:
case MONS_JELLYFISH:
case MONS_WATER_ELEMENTAL:
case MONS_SWAMP_WORM:
return (grid == DNGN_DEEP_WATER || grid == DNGN_BLUE_FOUNTAIN);
return true;
}
dungeon_feature_type spcw = ((mons_class == RANDOM_MONSTER)? DNGN_FLOOR
: monster_habitat( mons_class ));
dungeon_feature_type spcw = ((mons_class == RANDOM_MONSTER) ? DNGN_FLOOR
: habitat2grid( mons_habitat(mons_class) ));
const dungeon_feature_type habitat = monster_habitat(mid);
if (habitat != DNGN_FLOOR)
grd[vx][vy] = habitat;
const habitat_type habitat = mons_habitat(mid);
if (habitat != HT_NORMAL)
grd[vx][vy] = habitat2grid(habitat);
"hab=%s beh=%s(%d) foe=%s(%d) mem=%d target=(%d,%d)",
((hab == DNGN_DEEP_WATER) ? "water" :
(hab == DNGN_LAVA) ? "lava"
: "floor"),
"hab=%s beh=%s(%d) foe=%s(%d) mem=%d target=(%d,%d)",
((hab == HT_DEEP_WATER) ? "deep water" :
(hab == HT_SHALLOW_WATER) ? "shallow water" :
(hab == HT_LAVA) ? "lava" :
(hab == HT_ROCK_WALL) ? "rock wall" :
(hab == HT_FLOOR) ? "floor" :
: "unknown"),