diff options
Diffstat (limited to 'src/spells.pkg')
-rw-r--r-- | src/spells.pkg | 2448 |
1 files changed, 0 insertions, 2448 deletions
diff --git a/src/spells.pkg b/src/spells.pkg deleted file mode 100644 index e785de0d..00000000 --- a/src/spells.pkg +++ /dev/null @@ -1,2448 +0,0 @@ -/* File: spells.pkg */ - -/* - * Purpose: Lua interface defitions for spells. - * To be processed by tolua to generate C source code. - */ - -$#include "angband.h" -$#include "lua.h" - -/** @typedef *mcptr - * @note String - */ -typedef char *mcptr; - -/** @typedef cptr - * @note String - */ -typedef const char* cptr; - -/** @typedef errr - * @note Number - */ -typedef int errr; - -/** @typedef bool - * @note Boolean - */ -typedef unsigned char bool; - -/** @typedef byte - * @note Number - */ -typedef unsigned char byte; - -/** @typedef s16b - * @note Number - */ -typedef signed short s16b; - -/** @typedef u16b - * @note Number - */ -typedef unsigned short u16b; - -/** @typedef s32b - * @note Number - */ -typedef signed int s32b; - -/** @typedef u32b - * @note Number - */ -typedef unsigned int u32b; - -/** @def DEFAULT_RADIUS */ -#define DEFAULT_RADIUS 25 - -/** @name Spell Damage Types - * @brief Type of damage caused by spell - * @{ */ -/** @def GF_ELEC */ -#define GF_ELEC 1 - -/** @def GF_POIS */ -#define GF_POIS 2 - -/** @def GF_ACID */ -#define GF_ACID 3 - -/** @def GF_COLD */ -#define GF_COLD 4 - -/** @def GF_FIRE */ -#define GF_FIRE 5 - -/** @def GF_UNBREATH */ -#define GF_UNBREATH 6 - -/** @def GF_CORPSE_EXPL */ -#define GF_CORPSE_EXPL 7 - -/** @def GF_MISSILE */ -#define GF_MISSILE 10 - -/** @def GF_ARROW */ -#define GF_ARROW 11 - -/** @def GF_PLASMA */ -#define GF_PLASMA 12 - -/** @def GF_WAVE */ -#define GF_WAVE 13 - -/** @def GF_WATER */ -#define GF_WATER 14 - -/** @def GF_LITE */ -#define GF_LITE 15 - -/** @def GF_DARK */ -#define GF_DARK 16 - -/** @def GF_LITE_WEAK */ -#define GF_LITE_WEAK 17 - -/** @def GF_DARK_WEAK */ -#define GF_DARK_WEAK 18 - -/** @def GF_SHARDS */ -#define GF_SHARDS 20 - -/** @def GF_SOUND */ -#define GF_SOUND 21 - -/** @def GF_CONFUSION */ -#define GF_CONFUSION 22 - -/** @def GF_FORCE */ -#define GF_FORCE 23 - -/** @def GF_INERTIA */ -#define GF_INERTIA 24 - -/** @def GF_MANA */ -#define GF_MANA 26 - -/** @def GF_METEOR */ -#define GF_METEOR 27 - -/** @def GF_ICE */ -#define GF_ICE 28 - -/** @def GF_CHAOS */ -#define GF_CHAOS 30 - -/** @def GF_NETHER */ -#define GF_NETHER 31 - -/** @def GF_DISENCHANT */ -#define GF_DISENCHANT 32 - -/** @def GF_NEXUS */ -#define GF_NEXUS 33 - -/** @def GF_TIME */ -#define GF_TIME 34 - -/** @def GF_GRAVITY */ -#define GF_GRAVITY 35 - -/** @def GF_KILL_WALL */ -#define GF_KILL_WALL 40 - -/** @def GF_KILL_DOOR */ -#define GF_KILL_DOOR 41 - -/** @def GF_KILL_TRAP */ -#define GF_KILL_TRAP 42 - -/** @def GF_MAKE_WALL */ -#define GF_MAKE_WALL 45 - -/** @def GF_MAKE_DOOR */ -#define GF_MAKE_DOOR 46 - -/** @def GF_MAKE_TRAP */ -#define GF_MAKE_TRAP 47 - -/** @def GF_OLD_CLONE */ -#define GF_OLD_CLONE 51 - -/** @def GF_OLD_POLY */ -#define GF_OLD_POLY 52 - -/** @def GF_OLD_HEAL */ -#define GF_OLD_HEAL 53 - -/** @def GF_OLD_SPEED */ -#define GF_OLD_SPEED 54 - -/** @def GF_OLD_SLOW */ -#define GF_OLD_SLOW 55 - -/** @def GF_OLD_CONF */ -#define GF_OLD_CONF 56 - -/** @def GF_OLD_SLEEP */ -#define GF_OLD_SLEEP 57 - -/** @def GF_OLD_DRAIN */ -#define GF_OLD_DRAIN 58 - -/** @def GF_AWAY_UNDEAD */ -#define GF_AWAY_UNDEAD 61 - -/** @def GF_AWAY_EVIL */ -#define GF_AWAY_EVIL 62 - -/** @def GF_AWAY_ALL */ -#define GF_AWAY_ALL 63 - -/** @def GF_TURN_UNDEAD */ -#define GF_TURN_UNDEAD 64 - -/** @def GF_TURN_EVIL */ -#define GF_TURN_EVIL 65 - -/** @def GF_TURN_ALL */ -#define GF_TURN_ALL 66 - -/** @def GF_DISP_UNDEAD */ -#define GF_DISP_UNDEAD 67 - -/** @def GF_DISP_EVIL */ -#define GF_DISP_EVIL 68 - -/** @def GF_DISP_ALL */ -#define GF_DISP_ALL 69 - -/* New types for Zangband begin here... */ - -/** @def GF_DISP_DEMON */ -#define GF_DISP_DEMON 70 - -/** @def GF_DISP_LIVING */ -#define GF_DISP_LIVING 71 - -/** @def GF_ROCKET */ -#define GF_ROCKET 72 - -/** @def GF_NUKE */ -#define GF_NUKE 73 - -/** @def GF_MAKE_GLYPH */ -#define GF_MAKE_GLYPH 74 - -/** @def GF_STASIS */ -#define GF_STASIS 75 - -/** @def GF_STONE_WALL */ -#define GF_STONE_WALL 76 - -/** @def GF_DEATH_RAY */ -#define GF_DEATH_RAY 77 - -/** @def GF_STUN */ -#define GF_STUN 78 - -/** @def GF_HOLY_FIRE */ -#define GF_HOLY_FIRE 79 - -/** @def GF_HELL_FIRE */ -#define GF_HELL_FIRE 80 - -/** @def GF_DISINTEGRATE */ -#define GF_DISINTEGRATE 81 - -/** @def GF_CHARM */ -#define GF_CHARM 82 - -/** @def GF_CONTROL_UNDEAD */ -#define GF_CONTROL_UNDEAD 83 - -/** @def GF_CONTROL_ANIMAL */ -#define GF_CONTROL_ANIMAL 84 - -/** @def GF_PSI */ -#define GF_PSI 85 - -/** @def GF_PSI_DRAIN */ -#define GF_PSI_DRAIN 86 - -/** @def GF_TELEKINESIS */ -#define GF_TELEKINESIS 87 - -/** @def GF_JAM_DOOR */ -#define GF_JAM_DOOR 88 - -/** @def GF_DOMINATION */ -#define GF_DOMINATION 89 - -/** @def GF_DISP_GOOD */ -#define GF_DISP_GOOD 90 - -/** @def GF_IDENTIFY */ -#define GF_IDENTIFY 91 - -/** @def GF_RAISE */ -#define GF_RAISE 92 - -/** @def GF_STAR_IDENTIFY */ -#define GF_STAR_IDENTIFY 93 - -/** @def GF_DESTRUCTION */ -#define GF_DESTRUCTION 94 - -/** @def GF_STUN_CONF */ -#define GF_STUN_CONF 95 - -/** @def GF_STUN_DAM */ -#define GF_STUN_DAM 96 - -/** @def GF_CONF_DAM */ -#define GF_CONF_DAM 98 - -/** @def GF_STAR_CHARM */ -#define GF_STAR_CHARM 99 - -/** @def GF_IMPLOSION */ -#define GF_IMPLOSION 100 - -/** @def GF_LAVA_FLOW */ -#define GF_LAVA_FLOW 101 - -/** @def GF_FEAR */ -#define GF_FEAR 102 - -/** @def GF_BETWEEN_GATE */ -#define GF_BETWEEN_GATE 103 - -/** @def GF_WINDS_MANA */ -#define GF_WINDS_MANA 104 - -/** @def GF_DEATH */ -#define GF_DEATH 105 - -/** @def GF_CONTROL_DEMON */ -#define GF_CONTROL_DEMON 106 - -/** @def GF_RAISE_DEMON */ -#define GF_RAISE_DEMON 107 - -/** @def GF_TRAP_DEMONSOUL */ -#define GF_TRAP_DEMONSOUL 108 - -/** @def GF_ATTACK */ -#define GF_ATTACK 109 - -/** @def GF_CHARM_UNMOVING */ -#define GF_CHARM_UNMOVING 110 - -/** @def MAX_GF */ -#define MAX_GF 111 -/** @} */ - -/** @name Spell Projection Flags - * @brief Area affected by spell - * @{ */ -/** @def PROJECT_JUMP - * @note Jump directly to the target location (this is a hack) - */ -#define PROJECT_JUMP 0x00000001 - -/** @def PROJECT_BEAM - * @note Work as a beam weapon (affect every grid passed through) - */ -#define PROJECT_BEAM 0x00000002 - -/** @def PROJECT_THRU - * @note Continue "through" the target (used for "bolts"/"beams") - */ -#define PROJECT_THRU 0x00000004 - -/** @def PROJECT_STOP - * @note Stop as soon as we hit a monster (used for "bolts") - */ -#define PROJECT_STOP 0x00000008 - -/** @def PROJECT_GRID - * @note Affect each grid in the "blast area" in some way - */ -#define PROJECT_GRID 0x00000010 - -/** @def PROJECT_ITEM - * @note Affect each object in the "blast area" in some way - */ -#define PROJECT_ITEM 0x00000020 - -/** @def PROJECT_KILL - * @note Affect each monster in the "blast area" in some way - */ -#define PROJECT_KILL 0x00000040 - -/** @def PROJECT_HIDE - * @note Hack -- disable "visual" feedback from projection - */ -#define PROJECT_HIDE 0x00000080 - -/** @def PROJECT_VIEWABLE - * @note Affect monsters in LOS - */ -#define PROJECT_VIEWABLE 0x00000100 - -/** @def PROJECT_METEOR_SHOWER - * @note Affect random grids - */ -#define PROJECT_METEOR_SHOWER 0x00000200 - -/** @def PROJECT_BLAST - * @note Like Mega_blast, but will only affect viewable grids - */ -#define PROJECT_BLAST 0x00000400 - -/** @def PROJECT_PANEL - * @note Affect everything in the panel. - */ -#define PROJECT_PANEL 0x00000800 - -/** @def PROJECT_ALL - * @note Affect every single grid. - */ -#define PROJECT_ALL 0x00001000 - -/** @def PROJECT_WALL - * @note Continue "through" the walls - */ -#define PROJECT_WALL 0x00002000 - -/** @def PROJECT_MANA_PATH - * @note Follow a mana path. - */ -#define PROJECT_MANA_PATH 0x00004000 - -/** @def PROJECT_ABSORB_MANA - * @note The spell increase in power as it absord grid's mana. - */ -#define PROJECT_ABSORB_MANA 0x00008000 - -/** @def PROJECT_STAY */ -#define PROJECT_STAY 0x00010000 -/** @} */ - -/** @var project_time - * @brief Number - * @note The length of time a spell effect exists. - */ -extern int project_time; - -/** @fn teleport_player_directed(int rad, int dir) - * @brief Teleport a player up to "rad" grids away roughly in "dir" - * direction.\n - * @param rad Number \n rad must not exceed 200. The distance teleported is - * at least a quarter of rad. - * @brief Distance - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @note - * Teleport player, using a distance and a direction as a rough guide.\n\n - * This function is not at all obsessive about correctness.\n - * This function allows teleporting into vaults (!) - * @note (see file spells1.c) - */ -extern void teleport_player_directed(int rad, int dir); - -/** @fn teleport_away(int m_idx, int dis) - * @brief Teleport monster indicated by "m_idx" up to "dis" grids away.\n - * @param m_idx Number \n m_idx is the index of the monster in m_list[]. - * @brief Monster index - * @param dis Number \n dis must not exceed 200. The distance teleported - * is a minimum of a quarter of "dis". - * @brief Distance - * @note - * Teleport a monster, normally up to "dis" grids away.\n\n - * Attempt to move the monster at least "dis/2" grids away.\n\n - * But allow variation to prevent infinite loops. - * @note (see file spells1.c) - */ -extern void teleport_away(int m_idx, int dis); - -/** @fn teleport_player(int dis) - * @brief Teleport player up to "dis" grids away.\n - * @param dis Number \n dis must not exceed 200. The distance teleported - * is a minimum of a quarter of dis. - * @brief Distance - * @note - * Teleport the player to a location up to "dis" grids away.\n\n - * If no such spaces are readily available, the distance may increase.\n - * Try very hard to move the player at least a quarter that distance. - * @note (see file spells1.c) - */ -extern void teleport_player(int dis); - -/** @fn teleport_player_to(int ny, int nx) - * @brief Teleport player to a grid near coordinate ("ny", "nx").\n - * @param ny Number \n ny is the y co-ordinate of the location. - * @brief Y coordinate - * @param nx Number \n nx is the x co-ordinate of the location. - * @brief X coordinate - * @note - * Teleport player to a grid near the given location\n\n - * This function is slightly obsessive about correctness.\n - * This function allows teleporting into vaults (!)\n\n - * If the location is empty, the player goes there, otherwise they go to - * a grid as close as possible to the location. - * @note (see file spells1.c) - */ -extern void teleport_player_to(int ny, int nx); - -/** @fn teleport_monster_to(int m_idx, int ny, int nx) - * @brief Teleport monster indicated by "m_idx" to a grid near coordinate - * ("ny", "nx").\n - * @param m_idx Number \n m_idx is the index of the monster in m_list[]. - * @brief Monster index - * @param ny Number \n ny is the y co-ordinate of the location. - * @brief Y coordinate - * @param nx Number \n nx is the x co-ordinate of the location. - * @brief X coordinate - * @note - * Teleport a monster to a grid near the given location\n\n - * This function is slightly obsessive about correctness.\n\n - * If the location is empty, the monster goes there, otherwise they go to - * a grid as close as possible to the location. - * @note (see file spells1.c) - */ -extern void teleport_monster_to(int m_idx, int ny, int nx); - -/** @fn teleport_monster(int dir) - * @brief Teleport away all monsters in direction "dir".\n - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * All monsters in direction "dir" are teleported away and sustain - * MAX_SIGHT (20) x 5 damage.\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir". - * @note (see file spells2.c) - */ -extern bool teleport_monster(int dir); - -/** @fn teleport_player_level(void) - * @brief Teleport the player one level up or down at random. - * @note - * Teleport the player one level up or down (random when legal) - * @note (see file spells1.c) - */ -extern void teleport_player_level(void); - -/** @fn fetch(int dir, int wgt, bool require_los) - * @brief Fetch an item in direction "dir" with weight "wgt" possibly not in - * line of sight.\n - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param wgt Number \n maximum weight of object. - * @brief Weight - * @param require_los Boolean \n TRUE if line of sight is required, otherwise - * FALSE. - * @brief Require-line-of-sight flag - * @note - * Fetch an item (teleport it right underneath the caster)\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir". - * Fetch will fail if player is standing on something, or if the object is - * too far away, or if require_los is TRUE and player does not have line - * of sight to the object, or the object is too heavy. Otherwise the - * object appears at the player's feet (same grid as player). - * @note (see file cmd5.c) - */ -extern void fetch(int dir, int wgt, bool require_los); - -/** @fn recall_player(int d, int f) - * @brief Recall the player to town (if in dungeon) or dungeon (if in town).\n - * @param d Number \n Random time interval - * @brief Dice - * @param f Number \n Fixed time interval - * @brief Fixed - * @note (see file spells1.c) - */ -extern void recall_player(int d, int f); - -/** @fn take_hit(int damage, cptr kb_str) - * @brief Reduce player hit points by "damage" inflicted by "kb_str".\n - * @param damage Number \n damage is the number of hit points of damage. - * @brief Damage - * @param kb_str String \n kb_str describes what killed the player - * (in the event the player dies) - * @brief Killed by - * @note - * Decreases players hit points and sets death flag if necessary\n\n - * XXX XXX XXX Invulnerability needs to be changed into a "shield"\n\n - * XXX XXX XXX Hack -- this function allows the user to save (or quit) - * the game when he dies, since the "You die." message is shown before - * setting the player to "dead". - * @note (see file spells1.c) - */ -extern void take_hit(int damage, cptr kb_str); - -/** @fn take_sanity_hit(int damage, cptr hit_from) - * @brief Reduce player sanity points by "damage" inflicted by "hit_from".\n - * @param damage Number \n damage is the number of sanity points of damage. - * @brief Damage - * @param hit_from String \n hit_from describes what caused the damage. - * @brief Hit from - * @note - * Decrease player's sanity. This is a copy of the function above.\n\n - * Reduce the player's current sanity points by "damage" points. If the - * player dies, "hit_from" is used to record what the player was killed - * by (see high-score table). - * @note (see file spells1.c) - */ -extern void take_sanity_hit(int damage, cptr hit_from); - -/** @fn project(int who, int rad, int y, int x, int dam, int typ, int flg) - * @brief Generate a beam/bolt/ball with properties "flg" starting from "who" - * with a radius of "rad" at target grid "y,x" for "dam" points of "typ" - * damage.\n - * @param who Number \n who is > 0 (index of monster in m_list[]), < 0 and - * not -100 or -101 (player), -100 or -101 (trap). - * @brief Source - * @param rad Number \n rad is 0 for a beam/bolt and 1-9 for a ball. - * @brief Radius - * @param y Number \n y is the y coordinate of the target grid. - * @brief Y-coordinate - * @param x Number \n x is the x co-ordinate of the target grid. - * @brief X-coordinate - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param flg Number \n flg is the projection effect (PROJECT field). - * @brief Properties flag - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Generic "beam"/"bolt"/"ball" projection routine.\n\n - * Input:\n - * who: Index of "source" monster (negative for "player")\n - * jk -- -2 for traps, only used with project_jump\n - * rad: Radius of explosion (0 = beam/bolt, 1 to 9 = ball)\n - * y,x: Target location (or location to travel "towards")\n - * dam: Base damage roll to apply to affected monsters (or player)\n - * typ: Type of damage to apply to monsters (and objects)\n - * flg: Extra bit flags (see PROJECT_xxxx in "defines.h")\n\n - * Return:\n - * TRUE if any "effects" of the projection were observed, else FALSE\n\n - * Allows a monster (or player) to project a beam/bolt/ball of a given kind - * towards a given location (optionally passing over the heads of interposing - * monsters), and have it do a given amount of damage to the monsters (and - * optionally objects) within the given radius of the final location.\n\n - * A "bolt" travels from source to target and affects only the target grid.\n - * A "beam" travels from source to target, affecting all grids passed through.\n - * A "ball" travels from source to the target, exploding at the target, and - * affecting everything within the given radius of the target location.\n\n - * Traditionally, a "bolt" does not affect anything on the ground, and does - * not pass over the heads of interposing monsters, much like a traditional - * missile, and will "stop" abruptly at the "target" even if no monster is - * positioned there, while a "ball", on the other hand, passes over the heads - * of monsters between the source and target, and affects everything except - * the source monster which lies within the final radius, while a "beam" - * affects every monster between the source and target, except for the casting - * monster (or player), and rarely affects things on the ground.\n\n - * Two special flags allow us to use this function in special ways, the - * "PROJECT_HIDE" flag allows us to perform "invisible" projections, while - * the "PROJECT_JUMP" flag allows us to affect a specific grid, without - * actually projecting from the source monster (or player).\n\n - * The player will only get "experience" for monsters killed by himself - * Unique monsters can only be destroyed by attacks from the player\n\n - * Only 256 grids can be affected per projection, limiting the effective - * "radius" of standard ball attacks to nine units (diameter nineteen).\n\n - * One can project in a given "direction" by combining PROJECT_THRU with small - * offsets to the initial location (see "line_spell()"), or by calculating - * "virtual targets" far away from the player.\n\n - * One can also use PROJECT_THRU to send a beam/bolt along an angled path, - * continuing until it actually hits something (useful for "stone to mud").\n\n - * Bolts and Beams explode INSIDE walls, so that they can destroy doors.\n\n - * Balls must explode BEFORE hitting walls, or they would affect monsters - * on both sides of a wall. Some bug reports indicate that this is still - * happening in 2.7.8 for Windows, though it appears to be impossible.\n\n - * We "pre-calculate" the blast area only in part for efficiency. - * More importantly, this lets us do "explosions" from the "inside" out. - * This results in a more logical distribution of "blast" treasure. - * It also produces a better (in my opinion) animation of the explosion. - * It could be (but is not) used to have the treasure dropped by monsters - * in the middle of the explosion fall "outwards", and then be damaged by - * the blast as it spreads outwards towards the treasure drop location.\n\n - * Walls and doors are included in the blast area, so that they can be - * "burned" or "melted" in later versions.\n\n - * This algorithm is intended to maximise simplicity, not necessarily - * efficiency, since this function is not a bottleneck in the code.\n\n - * We apply the blast effect from ground zero outwards, in several passes, - * first affecting features, then objects, then monsters, then the player. - * This allows walls to be removed before checking the object or monster - * in the wall, and protects objects which are dropped by monsters killed - * in the blast, and allows the player to see all affects before he is - * killed or teleported away. The semantics of this method are open to - * various interpretations, but they seem to work well in practice.\n\n - * We process the blast area from ground-zero outwards to allow for better - * distribution of treasure dropped by monsters, and because it provides a - * pleasing visual effect at low cost.\n\n - * Note that the damage done by "ball" explosions decreases with distance. - * This decrease is rapid, grids at radius "dist" take "1/dist" damage.\n\n - * Notice the "napalm" effect of "beam" weapons. First they "project" to - * the target, and then the damage "flows" along this beam of destruction. - * The damage at every grid is the same as at the "centre" of a "ball" - * explosion, since the "beam" grids are treated as if they ARE at the - * centre of a "ball" explosion.\n\n - * Currently, specifying "beam" plus "ball" means that locations which are - * covered by the initial "beam", and also covered by the final "ball", except - * for the final grid (the epicentre of the ball), will be "hit twice", once - * by the initial beam, and once by the exploding ball. For the grid right - * next to the epicentre, this results in 150% damage being done. The centre - * does not have this problem, for the same reason the final grid in a "beam" - * plus "bolt" does not -- it is explicitly removed. Simply removing "beam" - * grids which are covered by the "ball" will NOT work, as then they will - * receive LESS damage than they should. Do not combine "beam" with "ball".\n\n - * The array "gy[],gx[]" with current size "grids" is used to hold the - * collected locations of all grids in the "blast area" plus "beam path".\n\n - * Note the rather complex usage of the "gm[]" array. First, gm[0] is always - * zero. Second, for N>1, gm[N] is always the index (in gy[],gx[]) of the - * first blast grid (see above) with radius "N" from the blast centre. Note - * that only the first gm[1] grids in the blast area thus take full damage. - * Also, note that gm[rad+1] is always equal to "grids", which is the total - * number of blast grids.\n\n - * Note that once the projection is complete, (y2,x2) holds the final location - * of bolts/beams, and the "epicentre" of balls.\n\n - * Note also that "rad" specifies the "inclusive" radius of projection blast, - * so that a "rad" of "one" actually covers 5 or 9 grids, depending on the - * implementation of the "distance" function. Also, a bolt can be properly - * viewed as a "ball" with a "rad" of "zero".\n\n - * Note that if no "target" is reached before the beam/bolt/ball travels the - * maximum distance allowed (MAX_RANGE), no "blast" will be induced. This - * may be relevant even for bolts, since they have a "1x1" mini-blast.\n\n - * Note that for consistency, we "pretend" that the bolt actually takes "time" - * to move from point A to point B, even if the player cannot see part of the - * projection path. Note that in general, the player will *always* see part - * of the path, since it either starts at the player or ends on the player.\n\n - * Hack -- we assume that every "projection" is "self-illuminating".\n\n - * Hack -- when only a single monster is affected, we automatically track - * (and recall) that monster, unless "PROJECT_JUMP" is used.\n\n - * Note that all projections now "explode" at their final destination, even - * if they were being projected at a more distant destination. This means - * that "ball" spells will *always* explode.\n\n - * Note that we must call "handle_stuff()" after affecting terrain features - * in the blast radius, in case the "illumination" of the grid was changed, - * and "update_view()" and "update_monsters()" need to be called. - * @note (see file spells1.c) - */ -extern bool project(int who, int rad, int y, int x, int dam, int typ, int flg); - -/** @fn corrupt_player(void) - * @brief Swap two of the player's stats at random. - * @note (see file spells1.c) - */ -extern void corrupt_player(void); - -/** @fn grow_things(s16b type, int rad) - * @brief Grow "type" things within "rad" distance of the player.\n - * @param type Number \n type of thing to grow (FEAT field). - * @brief Type - * @param rad Number \n rad is the radius of the area where things may grow. - * @brief Radius - * @note - * Grow things\n\n - * Up to (rad * (rad + 11)) things can be grown around the player. The - * grids must support growth. - * @note (see file spells2.c) - */ -extern void grow_things(s16b type, int rad); - -/** @fn grow_grass(int rad) - * @brief Grow grass within "rad" distance of the player.\n - * @param rad Number \n rad is the radius of the area where grass may grow. - * @brief Radius - * @note - * Grow grass\n\n - * Up to (rad * (rad + 11)) grass can be grown around the player. The - * grids must support growth. - * @note (see file spells2.c) - */ -extern void grow_grass(int rad); - -/** @fn grow_trees(int rad) - * @brief Grow trees within "rad" distance of the player.\n - * @param rad Number \n rad is the radius of the area where trees may grow. - * @brief Radius - * @note - * Grow trees\n\n - * Up to (rad * (rad + 11)) trees can be grown around the player. The - * grids must support growth. - * @note (see file spells2.c) - */ -extern void grow_trees(int rad); - -/** @fn hp_player(int num) - * @brief Add "num" points to the player's current hit points.\n - * @param num Number \n num is the number of points to add. - * @brief Number - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Increase players hit points, notice effects\n\n - * The total can not exceed the maximum. - * @note (see file spells2.c) - */ -extern bool hp_player(int num); - -/** @fn heal_insanity(int val) - * @brief Add "val" points to the player's current sanity points.\n - * @param val Number \n val is the number of points to add. - * @brief Value - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Heal insanity.\n\n - * The total can not exceed the maximum. - * @note (see file spells2.c) - */ -extern bool heal_insanity(int val); - -/** @fn warding_glyph(void) - * @brief Place a glyph at the player's location. - * @note - * Leave a "glyph of warding" which prevents monster movement\n\n - * The location must be bare. - * @note (see file spells2.c) - */ -extern void warding_glyph(void); - -/** @fn explosive_rune(void) - * @brief Place a minor glyph (explosive rune) at the player's location. - * @note - * The location must be bare. - * @note (see file spells2.c) - */ -extern void explosive_rune(void); - -/** @fn do_dec_stat(int stat, int mode) - * @brief Attempt to reduce the player's "stat" statistic by a point.\n - * @param stat Number \n stat is the statistic - * @brief Statistic - * @param mode Number \n mode is the type of decrease: temporary, normal, - * or permanent - * @brief Mode - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Lose a "point" - * @note (see file spells2.c) - */ -extern bool do_dec_stat(int stat, int mode); - -/** @fn do_res_stat(int stat, bool full) - * @brief Restore the player's "stat" statistic.\n - * @param stat Number \n stat is the statistic. - * @brief Statistic - * @param full Boolean \n TRUE if full restore is required, otherwise FALSE. - * @brief Full restore flag - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Restore lost "points" in a stat - * @note (see file spells2.c) - */ -extern bool do_res_stat(int stat, bool full); - -/** @fn do_inc_stat(int stat) - * @brief Increase the player's "stat" statistic by a point.\n - * @param stat Number \n stat is the statistic. - * @brief Statistic - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Gain a "point" in a stat - * @note (see file spells2.c) - */ -extern bool do_inc_stat(int stat); - -/** @fn identify_pack(void) - * @brief Identify all items in the inventory. - * @note - * Identify everything being carried.\n - * Done by a potion of "self knowledge". - * @note (see file spells2.c) - */ -extern void identify_pack(void); - -/** @fn remove_curse(void) - * @brief Remove all curses except for heavy curses. - * @return Boolean \n TRUE if at least one item was uncursed, otherwise FALSE. - * @note - * Remove most curses\n\n - * There is a 1 in (55 - level) chance of reversing the curse effects for - * items which are not artifacts. For example, a Ring of Damage (-15) will - * become a Ring of Damage (+15). - * @note (see file spells2.c) - */ -extern bool remove_curse(void); - -/** @fn remove_all_curse(void) - * @brief Remove all curses including heavy curses. - * @return Boolean \n TRUE if at least one item was uncursed, otherwise FALSE. - * @note - * Remove all curses\n\n - * There is a 1 in (55 - level) chance of reversing the curse effects for - * items which are not artifacts. For example, a Ring of Damage (-15) will - * become a Ring of Damage (+15). - * @note (see file spells2.c) - */ -extern bool remove_all_curse(void); - -/** @fn restore_level(void) - * @brief Restore all drained experience points (if any). - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Restores any drained experience - * @note (see file spells2.c) - */ -extern bool restore_level(void); - -/** @fn self_knowledge(FILE *fff=NULL) - * @brief Show all attributes including racial powers, mutations, and - * equipment effects.\n - * @param *fff FILE \n write info to screen if fff is NULL, - * otherwise write info to file fff. - * @brief Output file - * @note - * self-knowledge... idea from nethack. Useful for determining powers and - * resistances of items. It saves the screen, clears it, then starts listing - * attributes, a screenful at a time. (There are a LOT of attributes to - * list. It will probably take 2 or 3 screens for a powerful character whose - * using several artifacts...) -CFT\n\n - * It is now a lot more efficient. -BEN-\n\n - * See also "identify_fully()".\n\n - * XXX XXX XXX Use the "show_file()" method, perhaps. - * @note (see file spells2.c) - */ -extern void self_knowledge(FILE *fff=NULL); - -/** @fn lose_all_info(void) - * @brief Forget about objects and the map. - * @return Boolean \n TRUE (always). - * @note - * Forget everything - * @note (see file spells2.c) - */ -extern bool lose_all_info(void); - -/** @fn detect_traps(int rad) - * @brief Detect all traps within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE (always). - * @note - * All grids within the radius are searched.\n - * A message is displayed if traps are detected. - * @note (see file spells2.c) - */ -extern bool detect_traps(int rad); - -/** @fn detect_doors(int rad) - * @brief Detect all doors within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if doors were detected, otherwise FALSE. - * @note - * All grids within the radius are searched.\n - * A message is displayed if doors are detected. - * @note (see file spells2.c) - */ -extern bool detect_doors(int rad); - -/** @fn detect_stairs(int rad) - * @brief Detect all exits within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if exits were detected, otherwise FALSE. - * @note - * All grids within the radius are searched.\n - * A message is displayed if exits are detected. Exits can be stairs, - * shafts, and ways out. - * @note (see file spells2.c) - */ -extern bool detect_stairs(int rad); - -/** @fn detect_treasure(int rad) - * @brief Detect all buried treasure within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if buried treasure was detected, otherwise FALSE. - * @note - * All grids within the radius are searched.\n - * A message is displayed if buried treasure is detected. Treasure can be - * buried in magma, quartz, or sandwall. - * @note (see file spells2.c) - */ -extern bool detect_treasure(int rad); - -/** @var hack_no_detect_message - * @brief Boolean - * @note Suppress messages generated by "detect" spells? - */ -extern bool hack_no_detect_message; - -/** @fn detect_objects_gold(int rad) - * @brief Detect all gold within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if gold was detected, otherwise FALSE. - * @note - * All grids within the radius are searched.\n - * A message is displayed if gold is detected. Gold can be coins or mimics. - * Monsters of type "$" are detected but not shown or reported. - * @note (see file spells2.c) - */ -extern bool detect_objects_gold(int rad); - -/** @fn detect_objects_normal(int rad) - * @brief Detect all normal (not gold) items within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if normal items were detected, otherwise FALSE. - * @note - * All grids within the radius are searched.\n - * A message is displayed if normal items are detected. Items include mimics. - * Monsters of type "!=?|" are detected but not shown or reported. - * @note (see file spells2.c) - */ -extern bool detect_objects_normal(int rad); - -/** @fn detect_objects_magic(int rad) - * @brief Detect all magic (not gold) items within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if magic items were detected, otherwise FALSE. - * @note - * This will light up all spaces with "magic" items, including artifacts, - * ego-items, potions, scrolls, books, rods, wands, staves, amulets, rings, - * and "enchanted" items of the "good" variety.\n\n - * It can probably be argued that this function is now too powerful.\n\n - * All grids within the radius are searched.\n - * A message is displayed if magic items are detected. Items include mimics. - * @note (see file spells2.c) - */ -extern bool detect_objects_magic(int rad); - -/** @fn detect_monsters_normal(int rad) - * @brief Detect all non-invisible monsters within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if non-invisible monsters were detected, - * otherwise FALSE. - * @note - * A non-invisible monster is one which is visible, or one which is invisible - * but the player can see invisible monsters. - * @note (see file spells2.c) - */ -extern bool detect_monsters_normal(int rad); - -/** @fn detect_monsters_invis(int rad) - * @brief Detect all invisible monsters within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if invisible monsters were detected, - * otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool detect_monsters_invis(int rad); - -/** @fn detect_monsters_evil(int rad) - * @brief Detect all evil monsters within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if evil monsters were detected, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool detect_monsters_evil(int rad); - -/** @fn detect_monsters_good(int rad) - * @brief Detect all good monsters within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if good monsters were detected, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool detect_monsters_good(int rad); - -/** @fn detect_monsters_xxx(u32b match_flag, int rad) - * @brief Detect all monsters with flag "match_flag" within radius "rad" of the - * player.\n - * @param match_flag Number \n match_flag is the type of monster. It must be - * a RF3_ flag (see defines.h). - * @brief Match flag - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if monsters were detected, otherwise FALSE. - * @note - * A "generic" detect monsters routine, tagged to flags3\n\n - * This routine will work with ANY RF3 flag, but messages will only be - * printed if the following monsters are detected: demon, undead, good. - * @note (see file spells2.c) - */ -extern bool detect_monsters_xxx(u32b match_flag, int rad); - -/** @fn detect_monsters_string(cptr chars, int rad) - * @brief Detect all monsters whose monster symbol is in "chars" within - * radius "rad" of the player.\n - * @param chars String \n chars is the string of monster types. For - * available characters, see the "symbol" field of the graphics (G) - * line of r_info.txt. - * @brief Symbols - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if monsters were detected, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool detect_monsters_string(cptr chars, int rad); - -/** @fn detect_monsters_nonliving(int rad) - * @brief Detect all nonliving monsters within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if nonliving monsters were detected, - * otherwise FALSE. - * @note - * Detect all "nonliving", "undead" or "demonic" monsters on current panel\n\n - * Nonliving monsters are either RF3_NONLIVING, RF3_UNDEAD, or RF3_DEMON. - * @note (see file spells2.c) - */ -extern bool detect_monsters_nonliving(int rad); - -/** @fn detect_all(int rad) - * @brief Detect everything within radius "rad" of the player.\n - * @param rad Number \n rad is the radius of circle of detection. - * @brief Radius - * @return Boolean \n TRUE if something was detected, otherwise FALSE. - * @note - * Detect everything\n\n - * Detects traps, doors, stairs, treasure, gold objects, normal objects, - * invisible monsters, non-invisible monsters. - */ -extern bool detect_all(int rad); - -/** @fn stair_creation(void) - * @brief Create stairs at the player location - * @note - * This is not allowed if the grid is not empty, the player is not in a - * dungeon, the player is on a special level, the player is in an arena - * or quest. If the player is in the town or wilderness the stairs will - * go down. If the player is on a quest level or at the bottom of a - * dungeon, the stairs will go up. Otherwise there is an even chance the - * stairs will go up or down. - */ -extern void stair_creation(void); - -/** @fn tgt_pt (int *x=0, int *y=0) - * @brief Set a target point\n - * @param *x Number - * @brief X-coordinate - * @param *y Number - * @brief Y-coordinate - * @return *x Number \n X-coordinate of target. - * @return *y Number \n Y-coordinate of target. - * @return Boolean \n True if a target was selected, otherwise FALSE. - * @note - * Allow the user to move the cursor around the screen to select a target. - * The user must press the space key to set the target. - * @note (see file xtra2.c) - */ -extern bool tgt_pt (int *x=0, int *y=0); - -/** @fn wall_stone(int y, int x) - * @brief Create a stone wall at dungeon grid ("y", "x").\n - * @param y Number \n Y-coordinate of dungeon grid. - * @brief Y-coordinate - * @param x Number \n X-coordinate of dungeon grid. - * @brief X-coordinate - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool wall_stone(int y, int x); - -/** @fn create_artifact(object_type *o_ptr, bool a_scroll, bool get_name) - * @brief Create an artifact from object "o_ptr".\n - * @param *o_ptr object_type \n object to become an artifact - * @brief Object - * @param a_scroll Boolean \n Is a scroll used to create the artifact?\n - * TRUE if the artifact is created by reading a scroll. - * @brief Use scroll? - * @param get_name Boolean \n Get a name for the artifact?\n - * TRUE if the artifact is to be named by the player (if a_scroll is true) or - * created randomly (a_scroll is false), or FALSE if an inscription is used. - * @brief Get name? - * @return *o_ptr object_type \n The artifact. - * @return Boolean \n TRUE (always). - * @note (see file randart.c) - */ -extern bool create_artifact(object_type *o_ptr, bool a_scroll, bool get_name); - -/** @fn wall_to_mud(int dir) - * @brief Cast a wall-to-mud spell in direction "dir".\n - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir". - * @note (see file spells2.c) - */ -extern bool wall_to_mud(int dir); - -/** @fn ident_spell(void) - * @brief Identify an object in the inventory (or on the floor). - * @return Boolean \n TRUE if object is identified, otherwise FALSE. - * @note - * Identify an object in the inventory (or on the floor). - * This routine does *not* automatically combine objects. - * @note (see file spells2.c) - */ -extern bool ident_spell(void); - -/** @fn identify_fully(void) - * @brief Fully "identify" an object in the inventory (or on the floor). - * @return Boolean \n TRUE if object is identified, otherwise FALSE. - * @note - * Fully "identify" an object in the inventory -BEN- - * @note (see file spells2.c) - */ -extern bool identify_fully(void); - -/** @fn recharge(int num) - * @brief Recharge an object in the inventory (or on the floor) with "num" - * power.\n - * @param num Number \n num is the power used in recharging. It is compared - * to the object's level to determine whether the item is recharged - * successfully or destroyed. If it is recharged, it also determines - * how many charges are added, or how much recharge time is reduced. - * @brief Power - * @return Boolean \n TRUE if something was recharged, otherwise FALSE. - * @note - * Recharge a wand/staff/rod from the pack or on the floor.\n - * This function has been rewritten in Oangband. -LM-\n\n - * Mage -- Recharge I --> recharge(90)\n - * Mage -- Recharge II --> recharge(150)\n - * Mage -- Recharge III --> recharge(220)\n\n - * Priest or Necromancer -- Recharge --> recharge(140)\n - * Scroll of recharging --> recharge(130)\n - * Scroll of *recharging* --> recharge(200)\n\n - * It is harder to recharge high level, and highly charged wands, - * staffs, and rods. The more wands in a stack, the more easily and - * strongly they recharge. Staffs, however, each get fewer charges if - * stacked.\n\n - * XXX XXX XXX Beware of "sliding index errors". - * @note (see file spells2.c) - */ -extern bool recharge(int num); - -/** @fn aggravate_monsters(int who) - * @brief Aggravate monsters, originating from "who".\n - * @param who Number \n who is the index of monster in m_list[] - * (1 if it is the player) which triggers the aggravation. - * @brief Source - * @note - * Wake up all monsters, and speed up "los" monsters. - * @note (see file spells2.c) - */ -extern void aggravate_monsters(int who); - -/** @fn genocide_aux(bool player_cast, char typ) - * @brief Genocide a monster race.\n - * @param player_cast Boolean \n player_cast is true if the player cast the - * spell so the player can take damage. - * @param typ Char \n typ is the letetr of the genocided monsters - * @return Boolean \n TRUE if genocide was cast, otherwise FALSE. - * @note - * Genocide will not work on DF2_NO_GENO dungeon levels, or on "fated to - * die" levels. - * The player gets 4 points of damage per monster genocided. - * @note (see file spells2.c) - */ -extern bool genocide_aux(bool player_cast, char typ); - -/** @fn genocide(bool player_cast) - * @brief Genocide a monster race.\n - * @param player_cast Boolean \n player_cast is true if the player cast the - * spell so the player can take damage. - * @brief Player cast spell? - * @return Boolean \n TRUE if genocide was cast, otherwise FALSE. - * @note - * Genocide will not work on DF2_NO_GENO dungeon levels, or on "fated to - * die" levels. - * The player gets 4 points of damage per monster genocided. - * @note (see file spells2.c) - */ -extern bool genocide(bool player_cast); - -/** @fn mass_genocide(bool player_cast) - * @brief Delete all nearby (non-unique) monsters.\n - * @param player_cast Boolean \n player_cast is true if the player cast the - * spell so the player can take damage. - * @brief Player cast spell? - * @return Boolean \n TRUE (always). - * @note - * Genocide will not work on DF2_NO_GENO dungeon levels, or on "fated to - * die" levels.\n - * The player gets 3 points of damage per monster genocided. - * @note (see file spells2.c) - */ -extern bool mass_genocide(bool player_cast); - -/** @fn probing(void) - * @brief Probe all nearby monsters. - * @return Boolean \n TRUE if probe was successful, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool probing(void); - -/** @fn banish_evil(int dist) - * @brief Banish nearby evil monsters doing "dist" points of GF_AWAY_EVIL - * damage.\n - * @param dist Number \n dist is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool banish_evil(int dist); - -/** @fn dispel_evil(int dam) - * @brief Dispel nearby evil monsters doing "dam" points of GF_DISP_EVIL - * damage.\n - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool dispel_evil(int dam); - -/** @fn dispel_good(int dam) - * @brief Dispel nearby good monsters doing "dam" points of GF_DISP_GOOD - * damage.\n - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool dispel_good(int dam); - -/** @fn dispel_undead(int dam) - * @brief Dispel nearby undead monsters doing "dam" points of GF_DISP_UNDEAD - * damage.\n - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool dispel_undead(int dam); - -/** @fn dispel_monsters(int dam) - * @brief Dispel all nearby monsters doing "dam" points of GF_DISP_ALL - * damage.\n - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool dispel_monsters(int dam); - -/** @fn dispel_living(int dam) - * @brief Dispel nearby living monsters doing "dam" points of GF_DISP_LIVING - * damage.\n - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool dispel_living(int dam); - -/** @fn dispel_demons(int dam) - * @brief Dispel nearby demon monsters doing "dam" points of GF_DISP_DEMON - * damage.\n - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool dispel_demons(int dam); - -/** @fn turn_undead(void) - * @brief Turn nearby undead monsters doing a point of GF_TURN_UNDEAD damage - * for each player level. - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool turn_undead(void); - -/** @fn door_creation(void) - * @brief Create doors in all grids adjacent to the player. - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool door_creation(void); - -/** @fn trap_creation(void) - * @brief Create traps in all grids adjacent to the player. - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool trap_creation(void); - -/** @fn glyph_creation(void) - * @brief Create glyphs in all grids adjacent to the player. - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool glyph_creation(void); - -/** @fn wipe(int y1, int x1, int r) - * @brief Delete monsters and objects from an area of the dungeon centred at - * grid "y1,x1" for a radius "r".\n - * @param y1 Number \n Y-coordinate of dungeon grid. - * @brief Y-coordinate - * @param x1 Number \n X-coordinate of dungeon grid. - * @brief X-coordinate - * @param r Number \n rad is the radius of circle of detection. - * @brief Radius - * @note - * Wipe -- Empties a part of the dungeon\n\n - * This does not work on special levels or quests. The player may become - * blinded. The player forgets the affected area and it becomes dark. - * All grids become floor. - * @note (see file spells2.c) - */ -extern void wipe(int y1, int x1, int r); - -/** @fn destroy_area(int y1, int x1, int r, bool full, bool bypass) - * @brief Delete monsters and objects from an area of the dungeon centred at - * grid "y1,x1" for a radius "r".\n - * @param y1 Number \n Y-coordinate of dungeon grid. - * @brief Y-coordinate - * @param x1 Number \n X-coordinate of dungeon grid. - * @brief X-coordinate - * @param r Number \n rad is the radius of circle of detection. - * @brief Radius - * @param full Boolean \n unused - * @brief *Unused* - * @param bypass Boolean \n TRUE if quest levels are not destroyed, otherwise - * FALSE. - * @brief Exempt quest levels? - * @note - * The spell of destruction\n\n - * This spell "deletes" monsters (instead of "killing" them).\n\n - * Later we may use one function for both "destruction" and - * "earthquake" by using the "full" to select "destruction".\n\n - * This does not work on special levels. This does not work on quests if the - * bypass flag is set. The epicentre is NOT affected. The player may become - * blinded. The player forgets the affected area and it becomes dark. The - * grids can become granite, quartz, magma, or floor. - * @note (see file spells2.c) - */ -extern void destroy_area(int y1, int x1, int r, bool full, bool bypass); - -/** @fn earthquake(int cy, int cx, int r) - * @brief Create an earthquake centred on grid "cy,cx" with a radius of "r".\n - * @param cy Number \n Y-coordinate of dungeon grid. - * @brief Y-coordinate - * @param cx Number \n X-coordinate of dungeon grid. - * @brief X-coordinate - * @param r Number \n rad is the radius of circle of detection. - * @brief Radius - * @note - * Induce an "earthquake" of the given radius at the given location.\n\n - * This will turn some walls into floors and some floors into walls.\n\n - * The player will take damage and "jump" into a safe grid if possible, - * otherwise, he will "tunnel" through the rubble instantaneously.\n\n - * Monsters will take damage, and "jump" into a safe grid if possible, - * otherwise they will be "buried" in the rubble, disappearing from - * the level in the same way that they do when genocided.\n\n - * Note that thus the player and monsters (except eaters of walls and - * passers through walls) will never occupy the same grid as a wall. - * Note that as of now (2.7.8) no monster may occupy a "wall" grid, even - * for a single turn, unless that monster can pass_walls or kill_walls. - * This has allowed massive simplification of the "monster" code.\n\n - * This does not work on quest levels. The epicentre is NOT affected. - * Only about 15% of the grids are affected. The player takes 300 points - * of damage if they can't be moved to a safe grid, otherwise damage is - * from 10 to 40 points. The player forgets the affected area and it - * becomes dark. The grids can become granite, quartz, magma, or floor. - * @note (see file spells2.c) - */ -extern void earthquake(int cy, int cx, int r); - -/** @fn lite_room(int y1, int x1) - * @brief Lite room containing grid "y1,x1".\n - * @param y1 Number \n Y-coordinate of dungeon grid. - * @brief Y-coordinate - * @param x1 Number \n X-coordinate of dungeon grid. - * @brief X-coordinate - * @note - * Illuminate any room containing the given location. - * @note (see file spells2.c) - */ -extern void lite_room(int y1, int x1); - -/** @fn unlite_room(int y1, int x1) - * @brief Unlite room containing grid "y1,x1".\n - * @param y1 Number \n Y-coordinate of dungeon grid. - * @brief Y-coordinate - * @param x1 Number \n X-coordinate of dungeon grid. - * @brief X-coordinate - * @note - * Darken all rooms containing the given location. - * @note (see file spells2.c) - */ -extern void unlite_room(int y1, int x1); - -/** @fn lite_area(int dam, int rad) - * @brief Lite area around player of radius "rad" causing "dam" points of - * damage to monsters. - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param rad Number \n rad is the radius of circle of lite. - * @brief Radius - * @return Boolean \n TRUE (always). - * @note - * Hack -- call light around the player\n - * Affect all monsters in the projection radius\n\n - * Generate a ball of spell type GF_LITE_WEAK.\n - * @note (see file spells2.c) - */ -extern bool lite_area(int dam, int rad); - -/** @fn unlite_area(int dam, int rad) - * @brief Unlite area around player of radius "rad" causing "dam" points of - * damage to monsters. - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param rad Number \n rad is the radius of circle of lite. - * @brief Radius - * @return Boolean \n TRUE (always). - * @note - * Hack -- call darkness around the player\n - * Affect all monsters in the projection radius\n\n - * Generate a ball of spell type GF_DARK_WEAK.\n - * @note (see file spells2.c) - */ -extern bool unlite_area(int dam, int rad); - -/** @fn fire_ball_beam(int typ, int dir, int dam, int rad) - * @brief Generate a ball spell of type "typ" with radius "rad" aimed in - * direction "dir" for "dam" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param rad Number \n rad is 0 for a beam/bolt and 1-16 for a ball. - * @brief Radius - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a ball-beamed spell\n - * Stop if we hit a monster, act as a "ball"\n - * Allow "target" mode to pass over monsters\n - * Affect grids, objects, and monsters\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir".\n\n - * Any radius >16 is treated as 16. - * @note (see file spells2.c) - */ -extern bool fire_ball_beam(int typ, int dir, int dam, int rad); - -/** @fn make_wish(void) - * @brief Allow the player to make a wish. - * @note (see file xtra2.c) - */ -extern void make_wish(void); - -/** @fn fire_wave(int typ, int dir, int dam, int rad, int time, s32b eff) - * @brief Generate a ball spell of type "typ" with radius "rad" and effect - * "eff" lasting "time" turns aimed in direction "dir" for "dam" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param rad Number \n rad is 0 for a beam/bolt and 1-16 for a ball. - * @brief Radius - * @param time Number \n time is the number of turns the spell lasts. - * @brief Duration - * @param eff Number \n eff is the spell effect (EFF field) - * @brief Effect - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a wave spell\n - * Stop if we hit a monster, act as a "ball"\n - * Allow "target" mode to pass over monsters\n - * Affect grids, objects, and monsters\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir".\n\n - * Any radius >16 is treated as 16. - * @note (see file spells2.c) - */ -extern bool fire_wave(int typ, int dir, int dam, int rad, int time, s32b eff); - -/** @name Spell Effect Flags - * @brief Effect of spell - * @{ */ -/** @def EFF_WAVE - * @note A circle whose radius increase - */ -#define EFF_WAVE 0x00000001 - -/** @def EFF_LAST - * @note The wave lasts - */ -#define EFF_LAST 0x00000002 - -/** @def EFF_STORM - * @note the effect follows the player - */ -#define EFF_STORM 0x00000004 - -/** @name Spell Effect Direction Flags - * @brief Direction of the spell - * @{ */ -#define EFF_DIR1 0x00000008 /* Directed effect */ -#define EFF_DIR2 0x00000010 /* Directed effect */ -#define EFF_DIR3 0x00000020 /* Directed effect */ -#define EFF_DIR4 0x00000040 /* Directed effect */ -#define EFF_DIR6 0x00000080 /* Directed effect */ -#define EFF_DIR7 0x00000100 /* Directed effect */ -#define EFF_DIR8 0x00000200 /* Directed effect */ -#define EFF_DIR9 0x00000400 /* Directed effect */ -/** @} */ -/** @} */ - -/** @fn fire_cloud(int typ, int dir, int dam, int rad, int time) - * @brief Generate a ball spell of type "typ" with radius "rad" lasting - * "time" turns aimed in direction "dir" for "dam" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param rad Number \n rad is 0 for a beam/bolt and 1-16 for a ball. - * @brief Radius - * @param time Number \n time is the number of turns the spell lasts. - * @brief Duration - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a cloud spell\n - * Stop if we hit a monster, act as a "ball"\n - * Allow "target" mode to pass over monsters\n - * Affect grids, objects, and monsters\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir".\n\n - * Any radius >16 is treated as 16. - * @note (see file spells2.c) - */ -extern bool fire_cloud(int typ, int dir, int dam, int rad, int time); - -/** @fn fire_wall(int typ, int dir, int dam, int time) - * @brief Generate a beam spell of type "typ" lasting "time" turns aimed in - * direction "dir" for "dam" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param time Number \n time is the number of turns the spell lasts. - * @brief Duration - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a persistant beam spell\n - * Pass through monsters, as a "beam"\n - * Affect monsters (not grids or objects)\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir". - * @note (see file spells2.c) - */ -extern bool fire_wall(int typ, int dir, int dam, int time); - -/** @fn fire_ball(int typ, int dir, int dam, int rad) - * @brief Generate a ball spell of type "typ" with radius "rad" aimed in - * direction "dir" for "dam" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param rad Number \n rad is 0 for a beam/bolt and 1-16 for a ball. - * @brief Radius - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a ball spell\n - * Stop if we hit a monster, act as a "ball"\n - * Allow "target" mode to pass over monsters\n - * Affect grids, objects, and monsters\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir". - * @note (see file spells2.c) - */ -extern bool fire_ball(int typ, int dir, int dam, int rad); - -/** @fn fire_bolt(int typ, int dir, int dam) - * @brief Generate a bolt spell of type "typ" aimed in direction "dir" - * for "dam" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a bolt spell\n - * Stop if we hit a monster, as a "bolt"\n - * Affect monsters (not grids or objects)\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir". - * @note (see file spells2.c) - */ -extern bool fire_bolt(int typ, int dir, int dam); - -/** @fn fire_beam(int typ, int dir, int dam) - * @brief Generate a beam spell of type "typ" aimed in direction "dir" - * for "dam" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a beam spell\n - * Pass through monsters, as a "beam"\n - * Affect monsters (not grids or objects)\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir". - * @note (see file spells2.c) - */ -extern bool fire_beam(int typ, int dir, int dam); - -/** @fn fire_druid_ball(int typ, int dir, int dam, int rad) - * @brief Generate a druid ball spell of type "typ" with radius "rad" aimed in - * direction "dir" for "dam" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param rad Number \n rad is 0 for a beam/bolt and 1-16 for a ball. - * @brief Radius - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a druidistic ball spell\n - * Stop if we hit a monster, act as a "ball"\n - * Allow "target" mode to pass over monsters\n - * Affect grids, objects, and monsters\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir".\n\n - * The spells follows a mana path\n\n - * WARNING: This routine has been deprecated. - * @note (see file spells2.c) - */ -extern bool fire_druid_ball(int typ, int dir, int dam, int rad); - -/** @fn fire_druid_bolt(int typ, int dir, int dam) - * @brief Generate a druid bolt spell of type "typ" aimed in direction "dir" - * for "dam" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a druidistic bolt spell\n - * Stop if we hit a monster, as a "bolt"\n - * Affect monsters (not grids or objects)\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir".\n\n - * The spells follows a mana path\n\n - * WARNING: This routine has been deprecated. - * @note (see file spells2.c) - */ -extern bool fire_druid_bolt(int typ, int dir, int dam); - -/** @fn fire_druid_beam(int typ, int dir, int dam) - * @brief Generate a druid beam spell of type "typ" aimed in direction "dir" - * for "dam" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a druidistic beam spell\n - * Pass through monsters, as a "beam"\n - * Affect monsters (not grids or objects)\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir".\n\n - * The spells follows a mana path\n\n - * WARNING: This routine has been deprecated. - * @note (see file spells2.c) - */ -extern bool fire_druid_beam(int typ, int dir, int dam); - -/** @fn fire_bolt_or_beam(int prob, int typ, int dir, int dam) - * @brief Generate a bolt spell of type "typ" aimed in direction "dir" - * for "dam" damage with "prob" percent chance of a beam.\n - * @param prob Number \n prob is the percentage chance the spell will be a - * beam instead of a bolt. - * @brief Beam probability percentage - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Cast a bolt spell, or rarely, a beam spell\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir".\n\n - * @note (see file spells2.c) - */ -extern bool fire_bolt_or_beam(int prob, int typ, int dir, int dam); - -/** @fn alchemy(void) - * @brief Turns an object into gold, gain some of its value in a shop - * @return Boolean \n TRUE if object turns to gold, otherwise FALSE. - * @note - * The player selects an object (and quantity if it applies) from the - * inventory or the floor and attempts to turn it into gold. If the - * price of the item is < 0 then the player gains nothing (fool's gold), - * otherwise the player gets a third of the price in gold. Artifacts are - * not affected. - * @note (see file spells2.c) - */ -extern bool alchemy(void); - -/** @fn alter_reality(void) - * @brief The player leaves the level immediately. - * @note (see file spells2.c) - */ -extern void alter_reality(void); - -/** @fn swap_position(int lty, int ltx) - * @brief Swap the position of the player with whatever is in grid "lty,ltx".\n - * @param lty Number \n Y-coordinate of target location. - * @brief Y-coordinate - * @param ltx Number \n X-coordinate of target location. - * @brief X-coordinate - * @note - * Player moves to target location. If there is a monster at the target - * location, it is moved to the player location. This is not allowed if - * the space-time continuum can not be disrupted. - * @note (see file spells2.c) - */ -extern void swap_position(int lty, int ltx); - -/** @fn teleport_swap(int dir) - * @brief Player swaps places with target in direction "dir".\n - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @note - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, the target is the grid adjacent to the player in direction - * "dir".\n\n - * The target must be a monster. It will not work if the space-time continuum - * can not be disrupted or if the monster resists teleportation. - * @note (see file spells2.c) - */ -extern void teleport_swap(int dir); - -/** @fn project_meteor(int radius, int typ, int dam, u32b flg) - * @brief Generate from "radius" to ("radius" x2) ball spells with properties - * "flg" of type "typ" for "dam" damage.\n - * @param radius Number \n rad is the minimum number of balls created. - * rad + randint("rad") balls are created. - * @brief Balls - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param flg Number \n flg is the projection effect (PROJECT field). - * @brief Properties flag - * @note - * Apply a "project()" a la meteor shower\n\n - * Each ball has a radius of 2 grids. Each target grid is within 5 grids of - * the player. - * @note (see file spells2.c) - */ -extern void project_meteor(int radius, int typ, int dam, u32b flg); - -/** @fn passwall(int dir, bool safe) - * @brief Move the player through walls in direction "dir", to a "safe" - * location.\n - * @param dir Number \n dir must be a value from 0 to 9. It can not be 5. - * @brief Direction - * @param safe Boolean \n TRUE if location must be a safe one, otherwise FALSE. - * @brief Safe location? - * @return Boolean \n TRUE if move was successful, otherwise FALSE. - * @note - * Send the player shooting through walls in the given direction until - * they reach a non-wall space, or a monster, or a permanent wall.\n\n - * If the player ends up in a wall, they take 10d8 damage and the wall is - * replaced by a floor.\n\n - * This does not work in the wilderness, on quest levels, or if teleport is - * not allowed. Stopping on monsters or inside vaults is not allowed. - * @note (see file spells2.c) - */ -extern bool passwall(int dir, bool safe); - -/** @fn project_hook(int typ, int dir, int dam, int flg) - * @brief Generate a bolt/beam with properties "flg" in direction "dir" for - * "dam" points of "typ" damage.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @param flg Number \n flg is the projection effect (PROJECT field). - * @brief Properties flag - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Hack -- apply a "projection()" in a direction (or at the target)\n\n - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir". - * @note (see file spells2.c) - */ -extern bool project_hook(int typ, int dir, int dam, int flg); - -/** @fn wizard_lock(int dir) - * @brief Cast a wizard_lock spell in direction "dir".\n - * @param dir Number \n dir must be a value from 0 to 9. - * @brief Direction - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * If direction is 5 and a target has been selected, then the target is used. - * Otherwise, a target is calculated based on a distance of 999 grids away - * from the player in direction "dir". - * @note (see file spells2.c) - */ -extern bool wizard_lock(int dir); - -/** @fn reset_recall(bool no_trepas_max_depth) - * @brief Ask the user to set a recall level in a dungeon, possibly no - * deeper than maximum dungeon depth.\n - * @param no_trepas_max_depth Boolean \n TRUE if user can select maximum - * dungeon depth, FALSE if user can select up to player's maximum depth - * in the dungeon so far. - * @brief Allow maximum dungeon depth? - * @return Boolean \n TRUE of recall level was reset, otherwise FALSE. - * @note - * Ask the user for a dungeon and appropriate level within the dungeon.\n - * The user can not specify a dungeon the player has not gone to yet.\n - * If the depth is <1, reset fails. If depth is 99 or 100, the level is set - * to 98. - * @note (see file spells2.c) - */ -extern bool reset_recall(bool no_trepas_max_depth); - -/** @fn get_aim_dir(int *dp=0) - * @brief Get an aiming direction from the user and store it in "dp".\n - * @param *dp Number - * @brief Direction - * @return *dp Number \n Aiming direction. - * @return Boolean \n TRUE if a valid direction was returned, otherwise FALSE. - * @note - * Get an "aiming direction" from the user.\n\n - * The "dir" is loaded with 1,2,3,4,6,7,8,9 for "actual direction", and - * "0" for "current target", and "-1" for "entry aborted".\n\n - * Note that "Force Target", if set, will pre-empt user interaction, - * if there is a usable target already set.\n\n - * Note that confusion over-rides any (explicit?) user choice. - * @note (see file xtra2.c) - */ -extern bool get_aim_dir(int *dp=0); - -/** @fn get_rep_dir(int *dp=0) - * @brief Get a movement direction from the user and store it in "dp".\n - * @param *dp Number - * @brief Direction - * @return *dp Number \n Movement direction. - * @return Boolean \n TRUE if a valid direction was returned, otherwise FALSE. - * @note - * Request a "movement" direction (1,2,3,4,6,7,8,9) from the user, - * and place it into "command_dir", unless we already have one.\n\n - * This function should be used for all "repeatable" commands, such as - * run, walk, open, close, bash, disarm, spike, tunnel, etc, as well - * as all commands which must reference a grid adjacent to the player, - * and which may not reference the grid under the player. Note that, - * for example, it is no longer possible to "disarm" or "open" chests - * in the same grid as the player.\n\n - * Direction "5" is illegal and will (cleanly) abort the command.\n\n - * This function tracks and uses the "global direction", and uses - * that as the "desired direction", to which "confusion" is applied. - * @note (see file xtra2.c) - */ -extern bool get_rep_dir(int *dp=0); - -/** @fn project_los(int typ, int dam); - * @brief Generate a bolt/beam for "dam" points of "typ" damage to all - * viewable monsters in line of sight.\n - * @param typ Number \n typ is the type of damage (GF field). - * @brief Type - * @param dam Number \n dam is the number of hit points of damage. - * @brief Damage - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note - * Apply a "project()" directly to all viewable monsters\n\n - * Note that affected monsters are NOT auto-tracked by this usage. - * @note (see file spells2.c) - */ -extern bool project_hack @ project_los(int typ, int dam); - -/** @fn map_area(void) - * @brief Map current area. - * @note - * Hack -- map the current panel (plus some) ala "magic mapping"\n\n - * Up to 10 grids above and below, and up to 20 grids either side of the - * panel are mapped. - * @note (see file cave.c) - */ -extern void map_area(void); - -/** @fn wiz_lite(void) - * @brief Lite level using "clairvoyance". - * @note - * This function "illuminates" every grid in the dungeon, memorizes all - * "objects", memorizes all grids as with magic mapping, and, under the - * standard option settings (view_perma_grids but not view_torch_grids) - * memorizes all floor grids too.\n\n - * Note that if "view_perma_grids" is not set, we do not memorize floor - * grids, since this would defeat the purpose of "view_perma_grids", not - * that anyone seems to play without this option.\n\n - * Note that if "view_torch_grids" is set, we do not memorize floor grids, - * since this would prevent the use of "view_torch_grids" as a method to - * keep track of what grids have been observed directly. - * @note (see file cave.c) - */ -extern void wiz_lite(void); - -/** @fn wiz_lite_extra(void) - * @brief Lite and memorize level. - * @note (see file cave.c) - */ -extern void wiz_lite_extra(void); - -/** @fn wiz_dark(void) - * @brief Forget all grids and objects. - * @note - * Forget the dungeon map (ala "Thinking of Maud..."). - * @note (see file cave.c) - */ -extern void wiz_dark(void); - -/** @fn create_between_gate(int dist, int y, int x) - * @brief Create a between gate at grid "y,x" or at a target grid within - * distance "dist" of the player.\n - * @param dist Number \n dist is the maximum distance from the player of the - * between gate. - * @brief Distance - * @param y Number \n Y-coordinate of dungeon grid. - * @brief Y-coordinate - * @param x Number \n X-coordinate of dungeon grid. - * @brief X-coordinate - * @note - * Creates a between gate\n\n - * This will fail if teleporting is not allowed on the level.\n\n - * If the coordinates are given, a between gate is created under the player - * and at the given coordinate.\n\n - * If there are no coordinates, a target is selected. The gate will not be - * created if the grid is not empty, or the grid is in a vault, or the grid - * is too far away. There is always a chance (1 in (Conveyance Skill * - * Conveyance Skill / 2)) the gate will not be created. - * @note (see file spells2.c) - */ -extern void create_between_gate(int dist, int y, int x); - -/** @fn destroy_doors_touch(void) - * @brief Destroy all doors adjacent to the player. - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool destroy_doors_touch(void); - -/** @fn destroy_traps_touch(void) - * @brief Destroy all traps adjacent to the player. - * @return Boolean \n TRUE if player notices, otherwise FALSE. - * @note (see file spells2.c) - */ -extern bool destroy_traps_touch(void); - -/** @struct magic_power - * @brief Innate powers - */ -struct magic_power -{ - /** @structvar min_lev - * @brief Number - */ - int min_lev; - - /** @structvar mana_cost - * @brief Number - */ - int mana_cost; - - /** @structvar fail - * @brief Number - */ - int fail; - - /** @structvar name - * @brief String - */ - cptr name; - - /** @structvar desc - * @brief String - */ - cptr desc; -}; - -/** @fn get_magic_power(magic_power *m_ptr, int num); - * @dgonly - * @brief Get magic power number "num" from array "m_ptr" of magic powers.\n - * @param *m_ptr magic_power \n m_ptr is the array of magic powers. - * @brief Powers - * @param num Number \n num is the index to the array. - * @brief Index - * @return magic_power \n A magic power. - * @note - * Note: do not call this function.\n - * By order of DG. - * @note (see file lua_bind.c) - */ -extern magic_power *grab_magic_power @ get_magic_power(magic_power *m_ptr, int num); - -/** @fn magic_power_sucess(magic_power *spell, int stat, char *oups_fct=NULL); - * @dgonly - * @brief Determine if using a magic power succeeds.\n - * @param *spell magic_power \n Spell is the magic power the player is using. - * @brief Power (spell) - * @param stat Number \n stat is the required casting statistic (INT or WIS). - * @brief Casting statistic - * @param *oups_fct String \n oups_fct is the message displayed when the power - * fails. - * @brief Fail message - * @return Boolean \n TRUE if spell succeeds, otherwise FALSE. - * @note - * The chance of using a power is adjusted for player magic skill, casting - * statistic, player mana points, and stunning. There is always at least a - * 5% chance the power works.\n\n - * Note: do not call this function.\n - * By order of DG. - * @note (see file lua_bind.c) - */ -extern bool lua_spell_success @ magic_power_sucess(magic_power *spell, int stat, char *oups_fct=NULL); - -/** @fn add_new_power(cptr name, cptr desc, cptr gain, cptr lose, byte level, byte cost, byte stat, byte diff) - * @dgonly - * @brief Add a new power to the array of magic powers.\n - * @param name String \n name is the name of the power. - * @brief Name - * @param desc String \n desc is the description of the power. - * @brief Description - * @param gain String \n gain describes the effect when the power starts - * working. - * @brief Gain message - * @param lose String \n loss describes the effect when the power stops - * working. - * @brief Lose message - * @param level Number \n level is the magic skill level a player needs to - * use the power. - * @brief Level - * @param cost Number \n cost is the number of mana points required to use the - * power. - * @brief Mana cost - * @param stat Number \n stat is the required casting statistic (INT or WIS). - * @brief Casting statistic - * @param diff Number \n diff is the difficulty. - * @brief Difficulty - * @return Number \n The index of the new power in the magic power array. - * @note - * Note: do not call this function.\n - * By order of DG. - * @note (see file lua_bind.c) - */ -s16b add_new_power(cptr name, cptr desc, cptr gain, cptr lose, byte level, byte cost, byte stat, byte diff); - -/** @var power_max - * @brief Number - * @note Maximum number of innate powers. - */ -extern s16b power_max; - -/* Schools */ - -/** @struct school_spell_type - * @brief Spell - * @note The spell function must provide the desc - */ -struct spell_type@school_spell_type -{ - /** @structvar name - * @brief String - */ - cptr name; - - /** @structvar skill_level - * @brief Number - * @note Required level (to learn) - */ - byte skill_level; - - /** @structvar mana - * @brief Number - * @note Required mana at lvl 1 - */ - byte mana; - - /** @structvar mana_max - * @brief Number - * @note Required mana at max lvl - */ - byte mana_max; - - /** @structvar fail - * @brief Number - * @note Minimum chance of failure - */ - s16b fail; - - /** @structvar level - * @brief Number - * @note Spell level(0 = not learnt) - */ - s16b level; -}; - -/** @struct school_type - * @brief Spell school - */ -struct school_type -{ - /** @structvar name - * @brief String - * @note Name - */ - cptr name; - /** @structvar skill - * @brief Number - * @note Skil used for that school - */ - s16b skill; -}; - -/** @fn new_school(int i, cptr name, s16b skill) - * @dgonly - * @brief Add school to array of schools.\n - * @param i Number \n i is index of school array where school is added. - * There is no range checking. - * @brief Index - * @param name String \n name is the name of the school. - * @brief Name - * @param skill Number \n skill is the skill of the school. - * @brief Skill - * @return Number \ The index parameter. - * @note - * Note: do not call this function directly.\n - * Please use add_school() in s_aux.lua instead.\n - * By order of DG. - * @note (see file lua_bind.c) - */ -extern s16b new_school(int i, cptr name, s16b skill); - -/** @fn new_spell(int i, cptr name) - * @dgonly - * @brief Add spell to array of spells for a school.\n - * @param i Number \n i is index of school spell array where spell is added. - * There is no range checking. - * @brief Index - * @param name String \n name is the name of the spell. - * @brief Name - * @return Number \ The index parameter. - * @note - * Spell level is set to zero.\n\n - * Note: do not call this function directly.\n - * By order of DG. - * @note (see file lua_bind.c) - */ -extern s16b new_spell(int i, cptr name); - -/** @fn spell(s16b num); - * @dgonly - * @brief Get spell "num" from array of spells for a school.\n - * @param num Number \n num is the index of the spell. - * There is no range checking. - * @brief Index - * @return spell_type \n The spell. - * @note - * Note: do not call this function directly.\n - * By order of DG. - * @note (see file lua_bind.c) - */ -extern spell_type *grab_spell_type @ spell(s16b num); - -/** @fn school(s16b num); - * @dgonly - * @brief Get school "num" from array of schools.\n - * @param num Number \n num is the index of the school. - * There is no range checking. - * @brief Index - * @return school_type \n The school. - * @note - * Note: do not call this function directly.\n - * By order of DG. - * @note (see file lua_bind.c) - */ -extern school_type *grab_school_type @ school(s16b num); - -/** @fn lua_get_level(s32b s, s32b lvl, s32b max, s32b min, s32b bonus) - * @dgonly - * @brief Get the casting level of school spell "s".\n - * @param s Number \n s is the index of the spell in array of school spells. - * There is no range checking. - * @brief Spell index - * @param lvl Number \n lvl represents the level of player skill. - * @brief Player skill level - * @param max Number \n max is the maximum level for the spell. - * @brief Maximum spell level - * @param min Number \n min is the minimum level for the spell. - * @brief Minimum spell level - * @param bonus Number \n bonus is any bonus to final level. - * @brief Bonus - * @return Number \n Casting level. - * @note - * Note: do not call this function directly.\n - * By order of DG. - * @note (see file lua_bind.c) - */ -extern s32b lua_get_level(s32b s, s32b lvl, s32b max, s32b min, s32b bonus); - -/** @fn lua_spell_chance(s32b chance, int level, int skill_level, int mana, int cur_mana, int stat) - * @dgonly - * @brief Get the chance a spell will fail.\n - * @param chance Number \n chance is the inital chance a spell will work. - * @brief Initial chance - * @param level Number \n level represents the level of player skill. - * @brief Player skill level - * @param skill_level Number \n *unused*. - * @brief *Unused* - * @param mana Number \n mana is the mana required by the spell. - * @brief Spell mana - * @param cur_mana Number \n cur_mana is the player's current mana. - * @brief Player mana - * @param stat Number \n stat is the required casting statistic (INT or WIS). - * @brief Casting statistic - * @return Number \n Chance of failure. - * @note - * Note: do not call this function directly.\n - * By order of DG. - * @note (see file lua_bind.c) - */ -extern s32b lua_spell_chance(s32b chance, int level, int skill_level, int mana, int cur_mana, int stat); - -/** @fn lua_spell_device_chance(s32b chance, int level, int base_level) - * @dgonly - * @brief Get the chance a device will fail.\n - * @param chance Number \n chance is the inital chance a spell will work. - * @brief Initial chance - * @param level Number \n level represents the level of player skill. - * @brief Player skill level - * @param base_level Number \n *unused* - * @brief *Unused* - * @return Number \n Chance of failure. - * @note - * Note: do not call this function directly.\n - * By order of DG. - * @note (see file lua_bind.c) - */ -extern s32b lua_spell_device_chance(s32b chance, int level, int base_level); - -/** @fn get_school_spell(cptr do_what, cptr check_fct, s16b force_book) - * @brief Get a spell from a book.\n - * @param do_what String \n what the player wants to do with the spell, - * for example "cast" or "copy". - * @brief Action - * @param check_fct String \n check_fct is the name of a function which checks - * if the player has access to the spell. - * @brief Check function - * @param force_book Number \n If it is different from 0 it for'ces the use of - * a spellbook, bypassing spellbook selection - * @brief Bypass book selection - * @return Number \n Spell number. - * @note - * Get a spell from a book\n\n - * The player must have a book to select a spell. When a book is chosen, the - * player is given a choice of spells to select. The player must be able to - * access the spell.\n\n - * If no spell is chosen, -1 is returned. - * @note (see file cmd5.c) - */ -extern s32b get_school_spell(cptr do_what, cptr check_fct, s16b force_book); - -/** @name Last Teleportation - * @brief Coordinates of last successful teleportation - * @{ */ -/** @var last_teleportation_y - * @brief Number - * @note y-coordinate of last successful teleportation - */ -extern s16b last_teleportation_y; - -/** @var last_teleportation_x - * @brief Number - * @note x-coordinate of last successful teleportation - */ -extern s16b last_teleportation_x; -/** @} */ - -/** @fn get_pos_player(int dis, int *ny=0, int *nx=0) - * @brief Get a grid near the player.\n - * @param dis Number \n is the maximum distance away from the player. - * This is limited to 200. - * @brief Distance from player - * @return y Number \n Y-coordinate of grid. - * @return x Number \n X-coordinate of grid. - * @note - * This function is slightly obsessive about correctness.\n\n - * Minimum distance is half the maximum distance. The function attempts to - * find a valid grid up to 500 times. If no valid grid is found, the maximum - * distance is doubled (though no more than 200) and the minimum distance is - * halved. The function does this 100 times. - * @note (see file spells1.c) - */ -extern void get_pos_player(int dis, int *ny=0, int *nx=0); |