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());