# Angband -- Changes

This page lists "changes" in recent versions of Angband.

## Table of Contents

- Changes made for Angband 2.8.3
- Changes made for Angband 2.8.2
- Changes made for Angband 2.8.1
- Changes made for Angband 2.8.0
- Changes made for Angband 2.7.9v6
- Changes made for Angband 2.7.9v5
- Changes made for Angband 2.7.9v4
- Changes made for Angband 2.7.9v3
- Changes made for Angband 2.7.9v2
- Changes made for Angband 2.7.9v1

## Changes made for Angband 2.8.3

- The "lib/file/news.txt" file was redesigned. Various of the online help files were updated slightly. Much commenting was performed.
- The old "depth_in_feet" option has been removed, and in its place, a new "show_flavors" option has been added, to allow object flavors to be shown even on "aware" objects (except in stores).
- The "misc_to_attr"/"misc_to_char" arrays have been activated, and are being used for both "spell effects" and "object flavors", which will allow "lib/user/font.prf" and/or "lib/user/graf.prf" to specify better attr/char codes when they are available. It is no longer possible to force a flavored objects to change its "appearance" when identified.
- The inventory, equipment, and browsing commands now display a special prompt of the form "(xxx) Command: ", where "xxx" indicates what type of special display mode is active, and then they prompt for a command. The "total weight" is no longer displayed in the prompts.
- The character display screens have been cleaned up and consolidated into two screens. Both display the player name, sex, race, class, title, hitpoints, mana, and complete stat info. The "standard" one also displays age, height, weight, status, maximize, preserve, level, experience, gold, burden, bonuses, infravision, skills, and history. The "special" one also displays player level and various flags which are known to be induced by equipment (or inate abilities).
- The "NOT" expression in user pref files has been fixed.
- The "interact with macros (and keymaps)" screen now uses a more user friendly method for macro/keymap creation.
- Command macros have been replaced by keymaps (or normal macros). Macros are now really intended to be used only as a simulation of real hardware based macros, with the ability to manage them at a software level.
- Keymaps may now specify a command count, so, for example, you can now make a keymap from "s" to "05s" to induce semi-repeated searching, but then you would have to use "d" or "\s" or "01s" to sell single items. Pre-supplying an explicit command count will allow the keymap to be used without its numeric count, so, for example, typing "01s" in the example above would search for one turn.
- Keymaps have been changed. For each "mode" (original and roguelike), each "keypress" can be mapped to any sequence of keys, as with macros. This sequence of keys will not be matched against macros or keymaps, and so every "command key" in the sequence must be an "underlying" one. The "interact with macros" command now allows dumping of all keymaps for the current mode to a file, and for interactive modification of keymaps. Keymaps can appear in user pref files. The default mappings for both keysets are listed in the main "pref.prf" file. Commands which take a direction now extract the legal directions from the bodies of keymaps for the current mode. Note that a keymap may specify a sequence of several actions, and if the "flush_failure" option is set, then any failures will cancel any pending actions.
- Nar the Dwarf now has the "ONLY_ITEM" flag.
- Objects from the second page of a store are now always have indexes from "m" to "x", and you may get/purchase objects from either "page" of the display. The "m" and "p" and "s" store commands will be, at some point in the future, removed. Start using "g" and "d" instead.
- A new "main-dos.c" file has been created to leverage the "Allegro" graphics library for DOS-386 machine. It can now be compiled with the standard "main-ibm.c" file as a backup method. Both files have been cleaned up somewhat. The "main-ibm.c" file now sets the cursor visibility correctly, and cleans up the video mode on exit.
- The "Term_save()" and "Term_load()" calls have been wrapped in new "screen_save()" and "screen_load()" functions, with a static variable to make sure they are never called incorrectly. The "character_icky" and "character_xtra" flags have been converted into counters.
- The "main-win.c" file now recognizes "keypad 5" (and various other special keys, such as "pause").
- The "main-win.c" and "main-mac.c" files no longer allow the game to be saved when it is in an inconsistant state.
- The "bell()" function now takes a string to add to the message recall, and it may be extended at some point to use the "plog" method to show error messages to the user, but this would require special code for some of the "main-xxx.c" files.
- It is now officially illegal to "resize" the primary Angband window (this is enforced by the "z-term.c" package), which must be at least 24x80 in size. This change has made a lot of code faster and safer.
- The "target" code was wrapped lightly in an interface. The "macro" and "quark" and "message" packages were wrapped lightly as well.
- The "dispel" prayers now do the "correct" amount of damage, that is, for some number D between 1 and N, where N is some multiple of the player level, all appropriate monsters take D damage.
- The "main-xaw.c" file now saves all keypress events in "old_td", which should fix some old bugs.
- The "update_flow()" function was optimized.
- The "Borg" and "Debug" commands now always prompt for acceptance of the first usage per session, with plenty of warnings, unless a new option is set.
- Multi-page self knowledge displays have been fixed.
- A source only beta release of Angband 2.8.2 with the changes below has been released for testing purposes only.
- Minor cleanups (comments, indentation, and such).
- Most global array variables are now dynamically allocated.
- Allow "special" artifacts to be created in any order.
- Only the "cave_set_feat()" function may change features.
- Cleaned up "generate.c" with some higher level functions.
- Optimized "message_add()" and "object_desc()" functions.
- Major optimizations of various "cave.c" functions.
- New "project_path()" function (using actual range).
- New "update_view()" code (absorbed "update_lite()").
- The entrances to shops are now more widely illuminated.
- Compilation option for "new field of view algorithm".
- Compilation option for "complex wall illumination".
- Option "hidden_player" to hide player when running.
- Option "verify_destroy" to verify object destruction.
- Option "verify_special" to verify unsupported commands.
- Option "allow_quantity" to allow quantity specification.
- There is a new "project_path()" function for calculating projection paths. Range is now correctly applied to diagonal projections. All "ball" attacks now auto-explode if they reach maximum range.
- The "update_view()" function was optimized, and absorbed the "update_lite()" function. The "display torch lit grids in yellow" option now affects only grids which are not perma-lit. There is a new version of the "update_view()" algorithm which is much better.
- A new bitmap file has been uploaded for Windows Angband, and the precompiled archive has been recreated using the new file.
- New "ext-mac" and "ext-win" archives have been uploaded.

## Changes made for Angband 2.8.2

- The "help" files have been cleaned up and updated (a little).
- Filling up the object array in "drop_near()" and "place_object()" will no longer result in the possible permanent loss of artifacts.
- The "sounds" have been cleaned up somewhat, but they are still really stupid.
- The "show_choices" option, if active, and if only one sub-window is being used to display inventory or equipment, will temporarily take control of that sub-window to make sure it always displays the "relevant" screen during item selection. This is independant of the "ctrl-e" command, which changes the "default" display.
- The useless "display spell info in a sub-window" option has been replaced with a new "display player flags in a sub-window", using the new "display_player(2)" method. The only way to see a list of spells is to activate "object recall" in a window (possibly the same one in which "monster recall" is active), and then you will see your "most recently selected spellbook" spells. Also, stat modifiers are always "known" in the "player flags" display.
- The heroism and beserk strength potions no longer affect maximum health, but they still do a small amount of healing when used.
- The "color" handling was cleaned up in "main-win.c", "main-mac.c", and "main-x11.c". The default colors for "dark gray" and "blue" were made slightly "lighter".
- The source files were cleaned up. Various comments were updated.
- The "xtra object flags" from old savefiles are ignored. Some new flags (resist fear, lite, dark) have been added to the "resist" set.
- Objects now lose their "marked" flag when picked up from the ground. Old savefiles will be repaired.
- The "other_query_flag" option allows the user to choose items from floor stacks, instead of just auto-choosing the first legal item.
- The spoiler file generation code had a few syntactic flaws.
- The "graphics" support for the Amiga, Macintosh, and Windows versions have all been unified, and they all use the same "graf-xxx.prf" file.
- The "main-win.c" has been rewritten, and seems to work. It now uses the "standard" bitmap file, and can handle any "tile size", whether or not there is a font available in that size, though the interface is pretty annoying.
- Five more (obvious) types of ego-ammo are half-added to the game.
- The "cheating" options are handled in a standardized manner.
- Using the "option" screen now induces a complete "redraw" because people get confused otherwise. The "do_cmd_redraw()" command now completely redraws the current "lite" and "view" regions.
- When the player dies, the "savefile" is now untouched until after the "tombstone" is displayed. This will facilitate some forms of savefile abuse which were disabled a few versions back.
- Warriors now get intrinsic "resist fear" at player level 30.
- When saving the game, monster/object compaction is now synchronized, preventing a variety of bizarre bugs.
- The "z-term.c" file no longer induces occasional graphics glitches.
- Paralysis attacks on a paralyzed player always do at least one hp of damage. This should prevent "infinite paralysis" from floating eyes. Being paralyzed or stunned now prevents regeneration just like being cut or poisoned (or starving).
- The "main.c" file now allows specific "visual display systems" to be chosen, and allows "command line args" to be passed to the underlying "main-xxx.c" file. The "main-x11.c" and "main-xaw.c" files are better.
- The "rubble" terrain is now a "pile of rubble".
- Some code has been cleaned up somewhat, including the "sector" code, the "haggling" code, the "running" code, the "get_item()" code, and the "object_forge" code.
- Some functions have been optimized, including "update_view()", "update_lite()", "update_mon()", and "process_monsters()".
- The old "cave" variable was split into several global two dimensional arrays, one for each field in the old "cave_type" structure. All of these new variables, and some of the old variables, are now allocated in global memory, instead of dynamically on the heap, for efficiency.
- The "option" variables were moved into the player structure as an array of bool's, and the global "option" structures were broken out into several different arrays. The old "allow_stack" options were replaced by the new stack/carry options. The "show_details" option now defaults to TRUE.
- The old negative "c_ptr->m_idx" semantics have been restored. The player grid now always contains a "c_ptr->m_idx" value of -1. A new "monster_swap()" function has been added to swap the locations of any two monsters and players, by location. A new "player_place" function has been added to control initial player placement.
- Savefiles containing dungeons with illegal depth, size, or player location (including all old "town" levels) will be ignored, and the player will be placed in a newly generated town level. Any savefile checksums from old versions are also ignored.
- The "town" is now centered in a large field of solid walls, and the panel always causes the town to be "centered" on the screen, except when the "view world" command is being used. All dungeon levels are now the same size, though smaller levels may be created if desired by filling the rest of the dungeon with perma-walls.
- The "cur_hgt" and "cur_wid" variables have been replaced by direct reference to the DUNGEON_HGT and DUNGEON_WID compilation constants, which replace the old MAX_HGT and MAX_WID compilation constants.
- The "tval_to_char" array has been removed. The "use_color" option has been converted into an "inventory_colors" option, which allows the "tval_to_attr" array to be used. You must now redefine all the standard colors to "white" to totally disable the use of color, and even that will only affect the physical appearance.
- You must now use the "repeat count" method to specify any quantity above one for any command, including the buy/sell store commands. The "zero" count may be used to special "all" of a stack, which also disables the confirmation for the "destroy" command.
- High stats are now displayed "correctly" (not as "18/***").
- The use of various pointer variables was standardized.
- The "resistance" screen was cleaned up, more flags were added, footers were added, the columns are now color coded by parity, and the equippy chars use the actual object attr/chars.
- All of the "do_cmd_xxx()" functions now take no arguments, so "do_cmd_help()" lost an argument, and "do_cmd_walk()" and "do_cmd_stay()" were broken into sub-functions.
- Only walking and running induce standard player movement. This has affected the semantics of bashing and disarming.
- The "extra shots" and "extra might" flags were turned into flags which are modified by "pval". The artifact launchers were slightly rebalanced, changing Cubragol from "M*4" to "M*3", Belthronding from "M*6,D+3" to "M*6,D+1", and Bard from "M*4,D+3" to "M*5,D+2".
- The object flags were reorganized slightly for various reasons. Some of the object flags were renamed. The "RES_FEAR" object flag was added. All objects which grant immunity also grant resistance, for consistency.
- The "p_ptr" structure was cleaned up somewhat, and absorbed many global variables, as well as a few newly created ones.
- The initialization of options was moved into "init2.c" and "load2.c" where it belonged. The "X"/"Y" actions can now be used in "pref.prf" to set "default" options, and in "user.prf" to set "override" options.
- The ability to conditionally evaluate sections of user pref files based on the current "system", and/or player class or race or name has been added. The standard user pref files have been converted to use this method. The "RACE.prf" and "CLASS.prf" files are no longer included explicitly, and any old files should be moved into "user.prf" with conditionals. The game now loads "pref.prf" during initialization, one of "font.prf" or "graf.prf" during "reset_visuals()", and then "user.prf" and "PLAYER.prf" after a character is prepared.
- The "wizard" flag no longer grants telepathy, but there is a new "detect all monsters" debug command.
- Offscreen monsters can be "visible" if appropriate, and messages about such monsters will mention the fact that they are currently "offscreen".
- Telepathy on "weird mind" monsters will now work on some monsters, all of the time, instead of on all monsters, some of the time.
- Monsters now stay fully visible while detected, so that, for example, the "center map" and "redraw" commands will not cancel the effects of "detect monsters". The "mflag" repair code has been rewritten.
- The player can now tunnel through doors, they are harder than anything except granite. You may also tunnel through secret doors, and there is a (small) chance you will find the door while digging.
- New "floor_carry()", "monster_carry()", "monster_place()" functions were created, unifying a lot of redundant code. Objects can now combine when picked up by monsters.
- Normal commands which take a direction now verify that the direction makes sense before applying confusion and attempting the action. It is now illegal to attempt some actions on an unknown grid. The "alter" command chooses the action based on the requested grid, which may or may not work if the player is confused.
- The recall window updating code has been optimized, and is only performed when the player is about to type a command.
- A bug in "excise_object_idx()" meant that if you picked up an object from the middle of a stack, then the objects below that one will be "invisible" until you save/restore.
- The "main-mac.c" file was modified to use the "modern" names for all "Toolbox" functions, to allow compilation with the latest version of CodeWarrior. Note that the resulting executable cannot read "Unix" style text files.
- The "toggle choice window" command was restored to "^E", so that the "tab" key ("^I") can be saved for something special in the future.
- A new command, "knowledge", has been created, and bound to the "~" (and "|") key, absorbing the old "known artifacts" and "known uniques" commands, and adding a new (silly) sub-option for "known objects".
- The "object_flags_known()" function now assumes that the player knows the "standard" properties of all ego-items.
- The "update_view()" function was excessively optimized, so that in certain circumstances, certain perma-lit wall grids were not memorized or displayed when they should have been. Making all perma-lit walls "translucent" would have fixed all these problems, and would make the game faster, but would cause annoying visual and semantic weirdness when a dark hallway was placed next to a lit room.
- The official source upload contains a bad Makefile, some bad function stubs in "main.c", and a disabled "username()" function in "util.c". The "Makefile" may by default generate an executable called "testing".
- Some early uploads contained a bug which caused the "sex" of new characters to be an illegal value.

Go back to the Official Angband Home Page