Flying
Flying or flight is an intrinsic property that appears in NetHack, and allows a hero or monster to avoid contact with the ground similar to levitation while maintaining control of their vertical movement.
Description
Flight is somewhat similar to levitation, but affords much more control over movement such as being able to travel freely using stairs and throw or shoot items without subsequently being sent hurtling. Some airborne monsters are treated as floating through levitation rather than truly flying.[1][2][3]
For the hero, a source of levitation that is active will override any flight that they possess, and a hero's flight in turn supersedes the water walking property as well as the steadfast property (which both require the hero to be 'grounded').[4][5][6][7][8][9][10][11][12] A dwarven hero similarly cannot sense items that are buried in the ground beneath them if they are flying.[13]
Sources
A hero can gain flight by putting on an amulet of flying, polymorphing into a monster that has flight, or riding upon a monster that has flight and is an eligible steed—a hero with a worn amulet of flying that begins riding will cause their steed to fly if they do not possess flight themselves.[14] Eating an amulet of flying has no effect, and monsters will not wear an amulet of flying.[15][16]
In wizard mode, the player can use the #wizintrinsic extended command to grant the hero temporary flight.
Movement while flying
A hero or monster that has flight can pick up items that are inside pits and spiked pits without falling into those pits, as well as picking them up off the ground normally—pits that are created underneath a flying hero or monster will not cause them to fall in, and a hero with flight can escape from a pit or spiked pit in one turn if they are not in Sokoban (including by using <).[17][18][19][20][21] A hero with flight and can also move up or down stairs without any risk of falling from encumbrance, fumbling or being punished. A hero with flight will not have their carrying capacity reduced if they have wounded legs, though higher encumbrance will still lower their movement speed as normal.
Flight allows a hero or monster to pass over most ground-based traps such as pits, bear traps and the like without triggering them or being affected, with the exception of the pits and holes in Sokoban.[19][22][23][24][25][26][27][28] Normal trap doors will still be triggered by a flying hero moving over them, and kicking a throne still triggers its special trap door, but the hero themselves will not fall into it in either case (though any items on that square still have a chance of falling through).[29][30] Attempting to untrap a trap and failing has a chance of the hero being caught in the trap, even if they are currently flying.[31]
A hero flying over a ground-based trap can manually trigger it by sitting, and can dive into pits or swoop through holes and trap doors manually with the > command[32][33][34]—diving into a spiked pit this way will cause the hero to take damage from landing on the spikes unless they are wearing boots made of iron.[35][36] A landmine has a 1⁄3 chance of being set off by a flying hero or monster each time they move over it, and the resulting explosion will still inflict damage, but they will avoid falling into the resulting pit if they are not killed, and the explosion does not cause wounded legs for the hero.[37][38] Webs cannot be avoided by moving past them with flight, and a hero or monster caught in a web loses their ability to fly until they are released from the trap. Anti-magic fields, magic traps, polymorph traps, teleportation traps, level teleporters, and statue traps are not ground-based and will always have a chance of taking effect when a hero or monster moves onto their square regardless of flight.[22]
Heroes and monsters with flight can move over pools, moats and lava safely (including heroes that have flight and are on a steed and/or riding on a steed with flight), and can freely dip items into moats and pools while flying over them.[14][39] Ice will also not cause fumbling for heroes with flight. The Plane of Air will not obstruct a hero's movements if they have flight. If a hero with flying is trapped inside the floor, caught by a trap that pulls them to the ground, inhabiting the water on the Plane of Water, or else phasing to move through solid rock, walls, closed doors, or other similar areas, then their flight will be blocked until they are freed or otherwise enter an open space.[5][40] A hero that loses flight by any means, whether from removing or taking off an amulet of flight or from a polymorph that changes the hero to/from the form of a monster with flight, will immediately land and be subjected to the effects of the square they land on (including any traps or hazardous terrain)[41][42]—this also applies for a hero that loses flight while on a flight-less steed.[39]
If the hero level teleports to a level between -9 and -1 while they have flight, they will be treated as escaping the dungeon rather than dying.
Other traits
A hero or monster that is flying or floating (including a hero on a flying steed) takes no damage from attacks that attempt to inflict wounded legs, unless the attacker is also flying[43]—in practice, this only applies to the leg-targeting sting attack of a xan, which is a flying monster and thus capable of reaching a flying target.
Flying and floating monsters have a higher change of dodging flying debris from a falling drawbridge or portcullis, with a 5⁄8 chance for flying monsters that are not immobile and a 3⁄8 chance for floating monsters even if they are immobile.[44] Flying and floating monsters are also among the eligible monster types for random generation on the Plane of Air, with the exception of the trapper or lurker above monster class since the lurker above only inhabits levels with a ceiling.[45]
A riding hero's stealth will be blocked unless both they and their steed are flying (or levitating).[46][47] A hero with flight that falls off their steed or else is forcibly dismounted will not take physical damage or suffer wounded legs as a result.[48]
A lurker above or a hero that is polymorphed into a lurker above will not be treated as flying if they are currently hiding by clinging to the ceiling:[49] lurkers above will resume flight upon being revealed or otherwise unhidden, while a hero in the form of a lurker above can use > while hiding to unhide themselves and resume flight.
List of flying monsters
Monsters that fly are defined in the source code with the M1_FLY monster attribute flag.[50] Even though all y lights and e eye or sphere monsters possess the M1_FLY flag, they are treated as "floating" (i.e. levitating) rather than flying, including a hero that polymorphs into one of those monsters.[1][2][3][6]
The following monsters are capable of flight, with invalid polymorph forms denoted by an asterisk (*) while eligible steeds are denoted by a caret (^):
- a killer bee
- a queen bee
- g winged gargoyle
- h mind flayer
- h master mind flayer
- i homunculus
- t lurker above
- all v vortices
- x xan
- A couatl^
- A Angel*
- A ki-rin*^
- A Archon*
- all B bats and birds
- all D dragons^ (including D Ixoth*)
- E elemental
- H titan
- J jabberwock^
- all V vampires (including V Vlad the Impaler*)
- W wraith
- all ghosts*
- @ Medusa*
- @ Wizard of Yendor*
- & demon (monster class)
- & amorous demon
- & balrog
- & erinys* (only with 15+ alignment abuse)[51]
- & Juiblex*
- & Yeenoghu*
- & Orcus*
- & Geryon*
- & Dispater*
- & Baalzebub*
- & Asmodeus*
- & Demogorgon*
- & the Riders*
- & mail daemon*
- & djinni*
- & Minion of Huhetotl*
- & Nalzok*
History
Flying is formally defined as a property in NetHack 3.0.0. From this version to NetHack 3.6.7, flight for the hero is only possible in normal play through either polymorph or riding a flying steed. NetHack 5.0.0 adds the amulet of flying via commit 4d52332d as the first item in vanilla NetHack that directly grants flight to the hero.
- In versions up to NetHack 3.4.3:
- When riding a flying monster over a moat or pool, if the hero is pulled off their steed and engulfed by a monster such as a purple worm, they fall into the water and are subjected to a chance of drowning, including attempting an emergency teleport to return to safe ground while still in the process of being engulfed—this process causes the game to crash.
- This is partially fixed via commit 4d402e1b so that the monster is moved to the hero's location: in the case of a monster like the purple worm which cannot fly or swim, the engulfing monster will immediately drown if they are moved over water this way.
- A hero that has flight from polymorphing or riding a flying steed causes an erroneous message to print when flying down the trap doors to the Valley of the Dead in the Castle. (You fly through the trap door. You fly down along the stairs.) This is fixed for NetHack 3.6.0 via commit de2c772a so that manual flight through the Castle's trap doors is treated the same as other methods of falling through, which is changed in this version to its current behavior of placing the hero near the up stair in the Valley.
- Feedback for dropping items into water or lava while flying is inconsistent with other instance of dropping items into either liquid, and a hero that is polymorphed into a flying monster and returns to their normal form over water will not fall into the water until they move. This is fixed for NetHack 3.6.0 via commit d590efac so that the expected feedback and reactions occur for both scenarios.
- Related to the above, if a hero is grabbed by a holding attack while they are over a moat or pool and are levitating or polymorphed into a flying monster, they will silently break free of the hold if they lose that flight or levitation. This is fixed for NetHack 3.6.0 via commit 4cbdae2d so that feedback is produced if the hero breaks out of a monster's hold this way.
- A hero that is trapped in a pit or spiked pit and polymorphs into a flying monster still takes the same amount of time escaping the pit as a hero without flight. This is fixed for NetHack 3.6.0 via commit c90746c6 so that a hero who gains flight after falling into a pit can fly out in one turn.
- If the hero removes a worn ring of levitation while riding a flying steed, the game erroneously prints the standard message about returning "gently to the ground". This is fixed for NetHack 3.6.0 via commit c40d876c so that a proper message is produced when the steed's flight resumes effect.
- Heroes that are polymorphed into flying heroes or riding flying steeds do not have their flight noted when using ladders, stairs, or trap doors. This is a bug reported for NetHack 3.4.2, and is fixed for Nethack 3.6.0 via commit e3f1716d so that proper feedback is given for flying along stairs and ladders, as well as flying through trap doors and holes.
- Kicking a flying monster and having it evade the kick has a chance of causing the monster to swoop through a wall on sufficiently crowded levels[52]—this is part of bug C343-38, and both this and other bugged behaviors are fixed for NetHack 3.6.0 via commit bc4ccd0f so that monsters evading kicks are constrained to valid spaces where they can normally move.
- Flight and levitation allow for free movement over the Plane of Water despite the level being described as having no 'surface', and levitation does not yet suppress flight. This is fixed for NetHack 3.6.0 via commit f48de2f3 and refined via commit 282f8e8e so that levitation suppresses flight, and moving inside the waters of the Plane of Water, through solid rock, or through closed doors will block flight until the hero moves into open space.
- A hero with flight cannot deliberately swoop into pits or pick up any items inside, though they can still loot containers that are inside pits. This is fixed for NetHack 3.6.0 via commit 0a863040 so that they can enter pits without taking damage from falling and can pick up items inside pits without entering them, which was previously fixed for heroes polymorphed into phasing monsters such as xorns.
- As part of a fix to prevent a game crash from the hero teleporting onto a sink while equipping levitation boots via commit d7a467ff, the hero will not fall onto a sink as a result of the sink disabling and removing their levitation source if they also have flight (which will have been blocked by levitation prior to teleporting onto the sink).
- Flying is not displayed in the status line for X11 mode. This is fixed for NetHack 3.6.1 via commit 6d53aaa6.
- Flying monsters have a tendency to move towards items that they cannot reach, such as kelp fronds submerged in moats and pools. This is fixed for NetHack 3.6.1 via commit 66e7b840 so that flying monster AI will consider movement options beyond simply whether they are capable of reaching a given square that has something they may want.
- A hero that attempts to untrap a known bear trap while polymorphed into a flying monster and fails the attempt will cause the bear trap to become hidden again, though they are not caught in the trap. This is fixed for NetHack 3.6.2 via commit 21db5a3a and then further refined via commit 2813e42b, commit 3e19858e and commit 053880c1—known traps will not become hidden from a hero's failed untrap attempts, and a hero that fails to untrap a bear trap and ends up moved into the trap (including while flying above the trap's square) will have a chance of properly triggering the trap.
- No feedback is provided for a steed taking flight as a result of a hero mounting them while they have flight. This is fixed for NetHack 3.6.2 via commit d9ecc425.
- Timed flight granted by the #wizintrinsic command is not blocked by levitation as other types of flight are, and timed levitation from the same command does not block existing sources of flight. This is fixed for NetHack 3.6.2 via commit e486d941 so that both intrinsics behave consistently with other sources of each property when granted temporarily by #wizintrinsic.
- Flying is treated as a way for monsters to survive water while on the Plane of Water, despite earlier changes that prevent the hero from flying or levitating "above" the water on that level (as the entirety of the level is intended to be fully water with air bubbles scattered around). This is fixed for NetHack 3.6.2 via commit 234bf7b1 so that flying monsters will not attempt to leave air bubbles under normal circumstances if they cannot breathe underwater.
- If a hero is forcibly dismounted from a steed while that steed is flying over hazardous terrain due to the hero's own flight (e.g., from the engulfing attack of a lurker above) and the steed has nowhere safe nearby to be placed, then the hero is blamed for the steed's resulting death despite being dismounted against their will. This is fixed for NetHack 3.6.2 via commit b113aa74 so that the flying hero is only blamed if they voluntarily dismount from their steed while they are flying the steed over uninhabitable terrain and the steed is too far from safety.
- A hero that digs downward or performs level teleportation while their flying or floating ability is blocked (e.g. due to being inside solid rock) does not cause the game to acknowledge that it should be unblocked until they move again—this also causes a digging hero to immediately fall into the hole or pit that they create this way, since digging downward inside solid rock converts it to a normal floor square in order to place the resulting trap. This is fixed for NetHack 3.6.2 via commit 355dec4d so that the hero's flying or floating is unblocked immediately upon level teleporting or digging out of solid rock.
- A xan cannot sting the hero's legs if the hero is flying, despite xans possessing flight—this includes a hero that is riding on a flying steed or polymorphed into a flying or floating monster. This is fixed in NetHack 3.6.3 via commit 564dcd65 so that the leg-wounding sting attack checks to see if the monster using the attack is also flying.
- A flying hero cannot deliberately swoop down a hole using > as they can with a trap door. This is fixed for NetHack 3.6.4 via commit 90e4ffc0, and is later refined further for NetHack 5.0.0 via commit edd9d5b8.
- A hero that is polymorphed into a monster capable of hiding on the ceiling (e.g. a lurker above) cannot use > to stop hiding. This is fixed for NetHack 3.6.4 via commit 8349d959 so that a lurker above hero can unhide themselves at will.
- A flying hero cannot use a bullwhip to snag items from the floor below them, nor can they snag items from within water or lava, though they can pick up items on the floor beneath them normally. This is fixed for NetHack 5.0.0 via commit dbc8a702 so that bullwhip behavior is consistent and flying heroes can use them to grab items off the floor as levitating heroes can—the ability to snag items submerged in water or lava with a bullwhip is removed prior to this fix via commit ff483694.
Variants
Several NetHack variants add items that can grant the hero and monsters the ability to fly, with many of the variants created prior to NetHack 5.0.0 independently implementing the amulet of flying themselves. Some variants also add playable races, such as many implementations of vampires, that can start with intrinsic flight or gain it from raising their experience level. In addition, NetHack variants often add several monsters (including valid polymorph forms) that are capable of flight.
SLASH'EM
SLASH'EM adds the amulet of flying, which grants flight while worn and cannot be eaten to gain intrinsic flight.[53] Vampire heroes start each game with innate flight.
As a variant based on NetHack 3.4.3 and earlier contemporary versions, a flying hero cannot pick up items from pits normally, but they can do so by using the newly-added fishing pole or by gaining levitation to enable the use of bullwhips.
UnNetHack
UnNetHack adds the amulet of flying, which behaves as it does in SLASH'EM and later versions of NetHack.
Vampire heroes start each game with intrinsic flight.
dNetHack
dNetHack adds multiple sources of flight:
- Flying boots, red dragon scales, red dragon scale mail, and eilistran armor all give flying while worn.
- A pair of flying boots can be used with an upgrade kit to repair the moth wings of imperial elven body armor, granting the flying property while the armor is worn.
- The First Word of Creation grants the hero intrinsic flying upon reading it.
- Feng Huo Lun is an artifact pair of wind and fire wheels that grant flying while worn.
- The rot research path for the philosophy of defilement, which is exclusive to Undead Hunters, has a "rot wings" upgrade that grants the hero intrinsic flying.
- Chiropteran and vampire heroes start each game with flight as an innate monster trait, while half-dragon and aasimar heroes of all types gain intrinsic flight upon reaching experience level 14. Tiefling heroes can obtain one of five different mutations that grant them flying, though they cannot occur as the initial first mutation.
The "constellation" monster template grants flying to monsters with the template.
NetHack Fourk
NetHack Fourk adds the amulet of flying like many other variants. The valkyrie starting race also has intrinsic flying..
FIQHack
In FIQHack, flying is one of the properties that can be granted by quaffing or dipping into a potion of wonder.
SpliceHack
SpliceHack adds multiple sources of flight:
- The amulet of flying and cloak of flight both grant flying while worn.
- Demonbane can be invoked while carried to toggle flight on or off.
In pre-Rewrite versions, the angel race of hero starts each game with intrinsic flight.
notdNetHack
In addition to dNetHack details, notdNetHack adds the etherealoid as a playable race that starts with intrinsic flight, while the Illithanachronounbinder is a role added in the variant that gains intrinsic flying at experience level 10. Yuki-onna heroes can gain flight and various other traits by shifting to their snow cloud form.
EvilHack
EvilHack adds multiple sources of flight:
- The amulet of flying grants flight while worn, as does dragon-scaled armor that uses celestial dragon scales.
- Illithid and vampire heroes gain innate flight abilities upon reaching experience level 12. Aasimar heroes that have no alignment abuse on their record gain flight at a minimum of experience level 15 by growing wings out of their back, and using these wings require the hero to wear body armor of a material that is not metallic, glass, wood, bone, or mineral.
- Non-draugr Infidels that are crowned will become full-fledged demons with wings that grant them the ability to fly if they are not wearing rigid armor (i.e. the same types that restrict flight for aasimar).
SlashTHEM
In addition to SLASH'EM details, SlashTHEM adds the illithid as a playable race that starts with intrinsic flight.
Flying boots are an item that grant extrinsic flying while worn.
Hack'EM
Hack'EM adds multiple sources of flight:
- The amulet of flying and cloak of flight both grant flying while worn.
- Illithid and vampiric heroes start each game with innate flight abilities.
- Non-draugr Infidels that are crowned become demons with the same rules governing their flight abilities as in EvilHack.
notnotdNetHack
In addition to notdNetHack details, notnotdNetHack adds the cloak of flight as an item that grants flying while worn.
References
- ↑ 1.0 1.1 include/mondata.h in NetHack 5.0.0, line 20
- ↑ 2.0 2.1 include/mondata.h in NetHack 5.0.0, line 23
- ↑ 3.0 3.1 src/polyself.c in NetHack 5.0.0, line 96-L100: floating eye is erroneously listed as "the only 'floater'"
- ↑ include/youprop.h in NetHack 5.0.0, line 247
- ↑ 5.0 5.1 include/youprop.h in NetHack 5.0.0, line 250-L252
- ↑ 6.0 6.1 src/polyself.c in NetHack 5.0.0, line 135-L140
- ↑ src/botl.c in NetHack 5.0.0, line 199
- ↑ src/trap.c in NetHack 5.0.0, line 3999-L4001
- ↑ src/trap.c in NetHack 5.0.0, line 4056-L4064
- ↑ src/insight.c in NetHack 5.0.0, line 222-L229
- ↑ src/uhitm.c in NetHack 5.0.0, line 5223-L5228
- ↑ src/wizcmds.c in NetHack 5.0.0, line 1080-L1088
- ↑ src/dungeon.c in NetHack 5.0.0, line 1554-L1555
- ↑ 14.0 14.1 src/steed.c in NetHack 5.0.0, line 365-L366
- ↑ src/worn.c in NetHack 5.0.0, line 621: "properties which should have an effect but aren't implemented"
- ↑ src/eat.c in NetHack 5.0.0, line 2402-L2407: "nice try"
- ↑ src/music.c in NetHack 5.0.0, line 304-L308
- ↑ src/zap.c in NetHack 5.0.0, line 5219-L5227
- ↑ 19.0 19.1 src/trap.c in NetHack 5.0.0, line 633-L634
- ↑ src/trap.c in NetHack 5.0.0, line 4202-L4208
- ↑ dat/soko4-1.lua in NetHack 5.0.0, line 30-L31: comments cover all changed behavior in Sokoban
- ↑ 22.0 22.1 src/trap.c in NetHack 5.0.0, line 1059-L1082
- ↑ src/trap.c in NetHack 5.0.0, line 1084-L1094
- ↑ src/trap.c in NetHack 5.0.0, line 1419-L1426
- ↑ src/trap.c in NetHack 5.0.0, line 1492-L1493
- ↑ src/trap.c in NetHack 5.0.0, line 1849-L1863
- ↑ src/trap.c in NetHack 5.0.0, line 2803-L2826
- ↑ src/trap.c in NetHack 5.0.0, line 3014-L3024
- ↑ src/trap.c in NetHack 5.0.0, line 635-L640
- ↑ src/trap.c in NetHack 5.0.0, line 646-L655
- ↑ src/trap.c in NetHack 5.0.0, line 5512-L5517
- ↑ src/sit.c in NetHack 5.0.0, line 498-L504
- ↑ src/trap.c in NetHack 5.0.0, line 656-L689
- ↑ src/trap.c in NetHack 5.0.0, line 1877-L1880
- ↑ src/trap.c in NetHack 5.0.0, line 1901-L1903
- ↑ src/trap.c in NetHack 5.0.0, line 1920-L1947
- ↑ src/trap.c in NetHack 5.0.0, line 2548-L2562
- ↑ src/trap.c in NetHack 5.0.0, line 2608-L2623
- ↑ 39.0 39.1 src/mon.c in NetHack 5.0.0, line 975-L981: steed is kept out of water/lava by their own flight or hero's flight
- ↑ src/polyself.c in NetHack 5.0.0, line 135-L147
- ↑ src/polyself.c in NetHack 5.0.0, line 968-L975
- ↑ src/polyself.c in NetHack 5.0.0, line 1412-L1414
- ↑ src/uhitm.c in NetHack 5.0.0, line 4446-L4452
- ↑ src/dbridge.c in NetHack 5.0.0, line 506-L513
- ↑ src/makemon.c in NetHack 5.0.0, line 69-L73: exclusion of S_TRAPPER from is_flyer check prevents lurkers above appearing on Plane of Air
- ↑ src/polyself.c in NetHack 5.0.0, line 149-L151: calls steed_vs_stealth() if change in flight or levitation occurs for a stealthy riding hero
- ↑ src/polyself.c in NetHack 5.0.0, line 156-L164: steed_vs_stealth() function
- ↑ src/steed.c in NetHack 5.0.0, line 611-L616
- ↑ src/do.c in NetHack 5.0.0, line 1204-L1219
- ↑ include/monflag.h in NetHack 5.0.0, line 85
- ↑ src/mon.c in NetHack 5.0.0, line 5932-L5934
- ↑ dokick.c in NetHack 3.4.3, line 209
- ↑ eat.c in SLASH'EM 0.0.7E7F2, line 1998