There were a couple of functions is_something(dgn_feature_type feat) defined in travel.cc that were otherwise independent of travel. For consistency, move these to terrain.cc and rename to feat_is_something.
One might also consider renaming the various feat_is_whatever functions to just is_whatever.
RZ5DEWTN3TRCTIGQU6MQE5RYFW5FMQVW6VOD525W3PKIX3KZFGZAC
OOCUMD7ENLTBX2ER7WMZBYWHJ2SHEMP5VLPCRROZMHL33OUWK6VQC
FMJLKRXQGPKYS7KHRJGNUVGUZ2I7S34KEIRM2VVQ775F7SJJXQFAC
G7DNYFW745Q567EF3TPR2FCQ4ATPN236ON7X5TLYC7TEPZW3BAFAC
XHNJ2W4AQHIF32P2ENIMMDLWAIFWP442KJIZC6RKS4HBJNZIHHBAC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
WT66JDIRTLLP37SHTV4GI3V64JFJ4D25LNRLGCHFG6CLEFKJ3QGQC
CFWPAA7X7JQBNHFFEY7FJUZZ56YIQXGXEQ7EEVZMJ65YCPNO2L5AC
WYMN37VYSETF56RTTJ45VMB2YS4OUUKRL2JNWJSUKNLBFGGGECNQC
7PDOCETBGLAAMJUEDC25WKQR4IX75KT3BON4AXL5IE3BR3BO4L5AC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
WXWLZ6GPVBE7EMFUDIEFBLXRB7D7TNQMCZDAB6FGACH5D7FJ2LZQC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
GD2ZJU2YSVCNOJVRL7LSKE7BNF55ZMLWWUUUN32X52GJELDR3FXAC
LS5XCCGKQHSJQGWLWLGTP2F5OYWK4ND5AQQAGRN6H2HVBSXNCCZAC
TAHSTXR7ROOMDFUSBUU4ZAIEWQLAS5CIRCTARLD4Q2BGNLSL7E5QC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
SKV6JBDAWUWTFECFSQARSNA3DDPUFCR7N3T7D5J35NYTEDMXLP3QC
5FA5IEAXTMXYS2VUBVDKBKHPKAIOY4GN5SXYJORBYWQIGHVW3FFQC
SCWXQW5H65OXUP2MEJ2MEEAVPSRJDT3RQGKYCMKVTORS2334PQSQC
45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC
ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
FG6S2SNKFZWJK7PYHASHXU32ORYBOLGFL5RWQVDJ47MFVS4VMQHQC
EJRKMYKMOYRQXTWGFTMADEWIGWLMWHMUDA73AUT7HO5OBK2GUQEAC
2WRXQTGYDBLV46WRNVIUKGNA5QS563XZNNW3N2L6PVOCHIP2YGHQC
4PXWBSDP6GB3WDBHQQ2E7ZUOBJB7EJN37WBOPDK72KVVUOQ42Y2AC
NV7GHWJ2SXEVAP2NXN6SW6JTQBD3V3NIB75SLELIU4H7UVSKWJPAC
UOW2X5KTUHYCM73SWNOSJPHUKWVLF3OJTNSISSSENEURBX2XWHVQC
DQMZNXI3AGPSRNIEVWJ2PDILX3HJHBJOJJ4IBU6MTZ225GRVRC6AC
HIPFIMUOA7DFOFV3DQ55YZJVGNU2GNDYFUCB4MRPUR5DTYDO5YMAC
WWR4IDWLXP4XLBWDZBA5GFG7CRKUJQNRK7FFUFOISK6OJTMYQPFQC
TZ55IZNANEJO2WDTKYWVLY2W2VV6BR7WKIN7XLNISAMMFT6LG2WQC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
547JREUJXTZNYVGHNNAET5F5O5JYYGNTDQB6ABZNT7YX5EY64OHAC
7PVD4PKITHZU4HOWQ6BPRGMSAW5PSTAJJ4K3OWZ6Y2O6OFBXJIDQC
WJSZFY6NYXXMYNOWVE33NTEYHQ5BVWHKG7NT5UEJX2HH5JOJ55SQC
RSJN6HRUWK6AMIS5Y2DFIC5YVLCYOF7IUW2QF3FV7D64VIHLCVMAC
OTNY2YDUXCJFXDSTHNRKSZ4A5DS5RJMDMJV2Z6TYT2AUODEQIX4QC
UIVESOFZ4C262RYTFHSTFZIYTPTWSRJCFJAOZX7O2PQ35DFRDDEAC
JTQG4CMY6TPM4CHQN2KRIND2VPMQX535WGQ4AKKTGMDGP44UM3MQC
IPXXB4VRVZWOU5DKQ5ZTD37LS3QNK2R6APNZUO672YEEJT6OFAYQC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
XVX7AVLLYZJIJUZA2LZ6T57PHULWPDRZOHELDF4JHZ35EMINFFZQC
RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC
F2X5SIIXWXXEL2FVMYDC4GL2ODZ4O7RA46U66VGJ5K2EZHHAQGUAC
Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC
W4GDC5NXVAHB5DBXVBSTGKIKB5Z7QA2544ABWAPKPECARZFTO2XAC
ZBHENBGH5RNIC4L2NP45RJWYB3256NAM2JU2E3CD2RF6FEV4Z4FAC
A4FBEPVX7W4H4R7AMJEGONTJC5N7SC2E3S3CV7RZYS2SAONUQBHQC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
6DNNPEMZGBQDMA7YG4LCTQUVZ7LYPC3R4A2XBYT5SDQ65GYOLJVAC
VSXFXNKXKVVHNDE3IRQQLT5NZJNVYFZI5634RO6GZE35UFFKHIPAC
U6UUTZZVZHQVN3HWPN2CLRNE4VXESLNHS75W4CYUZIAKVHCYRCDQC
AVCMVFA3MKCXHO6H44UK5KJNIHTGQV7UA7GYXM26VI6TXXU5ZN6QC
PKV77KJ5ZLBF7O4OQ6HFQRCRQQJULUTXATPWWRXVO4T5G3HMXG7AC
MPBVX6OOMRMXWV4AZG4MZ4B6BYMWHHF5OOLD5FUGQCHM6UKBCIEAC
IYIGI5ZDHYV463AFYH7BZVIJOMNHTMPL4VZU7DHSXKFFWAPTPD5AC
SPWOUV6ZNHLBSAX455ACJDBEJYVFHGO4H76L4NPAE5DF6BEAK34QC
6YMDPDE7IBMMNJWNOSQZIQSB4B43WKMWL6RAPDURZORIFCGDCGQQC
FXK7Y2F4YJE422WMQ6TYHONWVVDRWLWCU47BXHXCR53DHF6YC76AC
R2DQBWKIW7YUJB5SOQ7J274JIYRVX4H3ISFRPAL5RG2RVVP4G2KAC
O4DT3BQQ3XYPL6PQ72G6VPBAVHXZMEOLONFXNHXFMBXBVOYMB6VQC
456KTRCLDMONHJFPEKJYMXO737ZHKN36ZU3UQ77JDERXBU5VFMVQC
PTJJ6D52LDVJN7WA7NMYV2WHH3WJMWWLRGF3D7ZSBUNLAACFRJHAC
VEHHZZFWDG5M4IXTCXXMKH3S2FSXTZ4CD23J6AYVFEPY7PBZ7GWQC
OYTCBRC7LE44EUVRZVYTOOVKQWJ6P6YE3FXTOGUTNKEMLNWPHKSQC
FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC
KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC
W5WCC5J7PL6IXZ5LPSUWGY3IVQBCTK3FKOD5ADYRWWH2N425NEAAC
2G55UEHQ7554OPNSZVTUCZTWSHIFKGT56QEGSYFKCTX547I4AL3AC
ZC24YRNAWF22TJTLXMSZI7ML5IY3LMK6QSRHPV236OZMBJPI522QC
W45PMU4HNPSAMMEBJ4XH4MTHLPVIASZT4FXTBPID5LFXKIMNUBKAC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC
}
// Returns true if the dungeon feature supplied is an altar.
bool is_altar(dungeon_feature_type grid)
{
return feat_altar_god(grid) != GOD_NO_GOD;
}
// Returns true if the given dungeon feature is a stair, i.e., a level
// exit.
bool is_stair(dungeon_feature_type gridc)
{
return (is_travelable_stair(gridc) || is_gate(gridc));
}
// Returns true if the given dungeon feature is a travelable stair, i.e.,
// it's a level exit with a consistent endpoint.
bool is_travelable_stair(dungeon_feature_type gridc)
{
switch (gridc)
{
case DNGN_STONE_STAIRS_DOWN_I:
case DNGN_STONE_STAIRS_DOWN_II:
case DNGN_STONE_STAIRS_DOWN_III:
case DNGN_ESCAPE_HATCH_DOWN:
case DNGN_STONE_STAIRS_UP_I:
case DNGN_STONE_STAIRS_UP_II:
case DNGN_STONE_STAIRS_UP_III:
case DNGN_ESCAPE_HATCH_UP:
case DNGN_ENTER_HELL:
case DNGN_EXIT_HELL:
case DNGN_ENTER_DIS:
case DNGN_ENTER_GEHENNA:
case DNGN_ENTER_COCYTUS:
case DNGN_ENTER_TARTARUS:
case DNGN_ENTER_ORCISH_MINES:
case DNGN_ENTER_HIVE:
case DNGN_ENTER_LAIR:
case DNGN_ENTER_SLIME_PITS:
case DNGN_ENTER_VAULTS:
case DNGN_ENTER_CRYPT:
case DNGN_ENTER_HALL_OF_BLADES:
case DNGN_ENTER_ZOT:
case DNGN_ENTER_TEMPLE:
case DNGN_ENTER_SNAKE_PIT:
case DNGN_ENTER_ELVEN_HALLS:
case DNGN_ENTER_TOMB:
case DNGN_ENTER_SWAMP:
case DNGN_ENTER_SHOALS:
case DNGN_RETURN_FROM_ORCISH_MINES:
case DNGN_RETURN_FROM_HIVE:
case DNGN_RETURN_FROM_LAIR:
case DNGN_RETURN_FROM_SLIME_PITS:
case DNGN_RETURN_FROM_VAULTS:
case DNGN_RETURN_FROM_CRYPT:
case DNGN_RETURN_FROM_HALL_OF_BLADES:
case DNGN_RETURN_FROM_ZOT:
case DNGN_RETURN_FROM_TEMPLE:
case DNGN_RETURN_FROM_SNAKE_PIT:
case DNGN_RETURN_FROM_ELVEN_HALLS:
case DNGN_RETURN_FROM_TOMB:
case DNGN_RETURN_FROM_SWAMP:
case DNGN_RETURN_FROM_SHOALS:
return (true);
default:
return (false);
}
}
// Returns true if the given dungeon feature is an escape hatch.
bool is_escape_hatch(dungeon_feature_type gridc)
{
switch (gridc)
{
case DNGN_ESCAPE_HATCH_DOWN:
case DNGN_ESCAPE_HATCH_UP:
return (true);
default:
return (false);
}
}
// Returns true if the given dungeon feature can be considered a gate.
bool is_gate(dungeon_feature_type gridc)
{
// Make up staircases in hell appear as gates.
if (player_in_hell())
{
switch (gridc)
{
case DNGN_STONE_STAIRS_UP_I:
case DNGN_STONE_STAIRS_UP_II:
case DNGN_STONE_STAIRS_UP_III:
return (true);
default:
break;
}
}
switch (gridc)
{
case DNGN_ENTER_ABYSS:
case DNGN_EXIT_ABYSS:
case DNGN_ENTER_LABYRINTH:
case DNGN_ENTER_PANDEMONIUM:
case DNGN_EXIT_PANDEMONIUM:
case DNGN_TRANSIT_PANDEMONIUM:
case DNGN_ENTER_PORTAL_VAULT:
case DNGN_EXIT_PORTAL_VAULT:
case DNGN_ENTER_ZOT:
case DNGN_RETURN_FROM_ZOT:
case DNGN_ENTER_HELL:
case DNGN_EXIT_HELL:
case DNGN_ENTER_DIS:
case DNGN_ENTER_GEHENNA:
case DNGN_ENTER_COCYTUS:
case DNGN_ENTER_TARTARUS:
return (true);
default:
return (false);
}
bool feat_is_escape_hatch(dungeon_feature_type feat)
{
return (feat == DNGN_ESCAPE_HATCH_UP || feat == DNGN_ESCAPE_HATCH_DOWN);
}
}
// Returns true if the given dungeon feature is a stair, i.e., a level
// exit.
bool feat_is_stair(dungeon_feature_type gridc)
{
return (feat_is_travelable_stair(gridc) || feat_is_gate(gridc));
}
// Returns true if the given dungeon feature is a travelable stair, i.e.,
// it's a level exit with a consistent endpoint.
bool feat_is_travelable_stair(dungeon_feature_type feat)
{
switch (feat)
{
case DNGN_STONE_STAIRS_DOWN_I:
case DNGN_STONE_STAIRS_DOWN_II:
case DNGN_STONE_STAIRS_DOWN_III:
case DNGN_ESCAPE_HATCH_DOWN:
case DNGN_STONE_STAIRS_UP_I:
case DNGN_STONE_STAIRS_UP_II:
case DNGN_STONE_STAIRS_UP_III:
case DNGN_ESCAPE_HATCH_UP:
case DNGN_ENTER_HELL:
case DNGN_EXIT_HELL:
case DNGN_ENTER_DIS:
case DNGN_ENTER_GEHENNA:
case DNGN_ENTER_COCYTUS:
case DNGN_ENTER_TARTARUS:
case DNGN_ENTER_ORCISH_MINES:
case DNGN_ENTER_HIVE:
case DNGN_ENTER_LAIR:
case DNGN_ENTER_SLIME_PITS:
case DNGN_ENTER_VAULTS:
case DNGN_ENTER_CRYPT:
case DNGN_ENTER_HALL_OF_BLADES:
case DNGN_ENTER_ZOT:
case DNGN_ENTER_TEMPLE:
case DNGN_ENTER_SNAKE_PIT:
case DNGN_ENTER_ELVEN_HALLS:
case DNGN_ENTER_TOMB:
case DNGN_ENTER_SWAMP:
case DNGN_ENTER_SHOALS:
case DNGN_RETURN_FROM_ORCISH_MINES:
case DNGN_RETURN_FROM_HIVE:
case DNGN_RETURN_FROM_LAIR:
case DNGN_RETURN_FROM_SLIME_PITS:
case DNGN_RETURN_FROM_VAULTS:
case DNGN_RETURN_FROM_CRYPT:
case DNGN_RETURN_FROM_HALL_OF_BLADES:
case DNGN_RETURN_FROM_ZOT:
case DNGN_RETURN_FROM_TEMPLE:
case DNGN_RETURN_FROM_SNAKE_PIT:
case DNGN_RETURN_FROM_ELVEN_HALLS:
case DNGN_RETURN_FROM_TOMB:
case DNGN_RETURN_FROM_SWAMP:
case DNGN_RETURN_FROM_SHOALS:
return (true);
default:
return (false);
}
// Returns true if the given dungeon feature is an escape hatch.
bool feat_is_escape_hatch(dungeon_feature_type feat)
{
switch (feat)
{
case DNGN_ESCAPE_HATCH_DOWN:
case DNGN_ESCAPE_HATCH_UP:
return (true);
default:
return (false);
}
}
// Returns true if the given dungeon feature can be considered a gate.
bool feat_is_gate(dungeon_feature_type feat)
{
// Make up staircases in hell appear as gates.
if (player_in_hell())
{
switch (feat)
{
case DNGN_STONE_STAIRS_UP_I:
case DNGN_STONE_STAIRS_UP_II:
case DNGN_STONE_STAIRS_UP_III:
return (true);
default:
break;
}
}
switch (feat)
{
case DNGN_ENTER_ABYSS:
case DNGN_EXIT_ABYSS:
case DNGN_ENTER_LABYRINTH:
case DNGN_ENTER_PANDEMONIUM:
case DNGN_EXIT_PANDEMONIUM:
case DNGN_TRANSIT_PANDEMONIUM:
case DNGN_ENTER_PORTAL_VAULT:
case DNGN_EXIT_PORTAL_VAULT:
case DNGN_ENTER_ZOT:
case DNGN_RETURN_FROM_ZOT:
case DNGN_ENTER_HELL:
case DNGN_EXIT_HELL:
case DNGN_ENTER_DIS:
case DNGN_ENTER_GEHENNA:
case DNGN_ENTER_COCYTUS:
case DNGN_ENTER_TARTARUS:
return (true);
default:
return (false);
}
}
// Returns true if the dungeon feature supplied is an altar.
bool feat_is_altar(dungeon_feature_type grid)
{
return feat_altar_god(grid) != GOD_NO_GOD;
}
bool feat_is_player_altar(dungeon_feature_type grid)
{
// An ugly hack, but that's what religion.cc does.
return (you.religion != GOD_NO_GOD
&& feat_altar_god(grid) == you.religion);
}
dir == CMD_GO_UPSTAIRS ? "goes up" :
dir == CMD_GO_DOWNSTAIRS ? "goes down"
: "takes",
is_escape_hatch(gridc) ? "escape hatch"
: "stairs").c_str());
dir == CMD_GO_UPSTAIRS ? "goes up" :
dir == CMD_GO_DOWNSTAIRS ? "goes down"
: "takes",
feat_is_escape_hatch(feat) ? "escape hatch"
: "stairs").c_str());