A trickery that occurs in the absence of cheating is a bug.
Events that end the game in trickery are:
- Removing a level file from a game in progress, possibly an attempt to cause the level to be generated anew.
- Renaming a bones file in an attempt to load it on a different level from where it was generated. This only happens if the bones file is actually loaded.
- Copying a level file from a different game.
- Copying a level file out of the playground, saving, restoring, and then copying the level file back in (even if the level hasn't changed; it's the process ID that is checked).
Some operating systems do not support process IDs; on these, the game cannot detect cross-game or cross-session copying of level files, and will not declare a trickery.
Not all possible cheating with level or bones files is detected as trickery. A level file could be copied out of the playground and then copied back in, restoring the level to its previous state; or a bones file, once used, could be copied back into the playground for a future game. Scumming with level files will be detected as trickery if the user saves and restores in the meantime, because that would be a different session of the game.
Consequences of trickeryEdit
If the game is in wizard mode, the message "You are a very tricky wizard, it seems." is printed, and the game continues (except for deleted level files). Otherwise, the game immediately ends. An amulet of life saving will not continue the game.
A game that ends in trickery is not eligible to leave bones.
Source code referencesEdit
bones.c line 409 -- detects renaming of bones files, which if undetected would use the bones on a different level from where they were generated.
do.c line 1102 -- opens a level file for an already-generated level, in order to enter the level; declares a trickery if the file can't be opened.
restore.c line 722 -- detects renaming of level files to appear on a different level (dlvl != lev) and copying of level files from another game or a different session of the same game (pid != hpid).
save.c line 245 -- opens a level file in order to copy its contents to the save file; declares a trickery if the file can't be opened.
save.c line 351 -- opens the "level 0 file", which is not a true level file but contains the state of the game at the last level change; declares a trickery if it can't be opened or if the file belongs to a different game or session than this one.