# Angband -- Changes

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

## Table of Contents

- 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.7.9v6

- The savefile loading process was repaired and improved. It is now possible to correctly load pre-2.7.0 savefiles, including old "MacAngband 1.0" savefiles, old "MacAngband 2.0.3" savefiles, old "PC Angband 1.4" savefiles.
- The Borg has been updated, and is no longer included with the official source archive, but can now be found in "/angband/Borg/", along with various other materials related to the Borg. There is a new "Borg" section on the Official Angband Home Page.
- The "debug" commands have been separated from "wizard mode", with their own "savefile marker" flag, and independant verification of usage, similar to the method used for the "borg" commands.
- The "-w" option will now allow you to correctly restore a dead character, using the "cheat death" code. The "cheat death" code now kicks in after the player has "died", and cancels the "death".
- The "update_view()" and "update_lite()" functions were optimized (again) since "update_view()" is a major bottleneck when resting.
- The class titles were restored, with one title per five levels.
- The source files were re-formatted, using four space indentation per block, and aligned stand-alone curly braces. A few of the "main-xxx.c" files were ignored because they were beyond repair.
- The "mirror" window can now be used to show debugging messages (currently used only for the Borg).
- The "mirror" window can now be used to show an overhead view of the map (normally updated only when the map sector changes).
- The "windows" now work correctly with the Windows version. Note that the scrolls bars were removed, and all windows are resizable, up to the maximum size of 80x24.
- The "lib" folder now "works" with older Macintosh computers.
- Memory wiping now clears inscriptions generated by "sensing".
- Reading unknown scrolls of identify is no longer dangerous, and using unaware wands/staffs/etc now works correctly with the choice window.
- The "handle_stuff()" function was broken into three sub-functions, "notice_stuff()", "update_stuff()", and "redraw_stuff()", each using a separate bit flag set, for various reasons. The "notice_stuff()" function now handles everything which can only be done between player turns, including pack rearrangement.
- The colors for "main-ibm.c" and "main-win.c" were changed slightly to match the "official" colors (red, light red, and violet), and "main-win.c" was changed to use the new "color_table" array. The "Term_user()" hook in "main-win.c" is now used to allow the user to force complex color or palette abilities.
- All messages are now split if they exceed 72 characters.
- The "msg_print()" and "get_xxx()" functions have been changed, primarily to simplify the "msg_print()" function. The top line of the screen should now, in general, be used only for "messages", temporary queries, and certain special full screen interactions.
- Player ghosts are no longer created, nor loaded from savefiles. They will now be restored until the player ghost code has been completely rewritten.
- The refueling code was repaired and improved.
- Item inscriptions now resist destruction by stacking.
- Changing the "rogue-like commands" option works "better".
- Some more options were removed or modified slightly.
- Artifacts are marked "(charging)" when they are charging.
- The "DELAY_R_INFO_TEXT" compilation option is now functional, and allows the "monster race descriptions" to be read from disk as needed, instead of keeping them in memory and using 60K.
- The "verification" code was moved from "init_file_paths()" to "show_news()", allowing system-specific path modification.

## Changes made for Angband 2.7.9v5

- Many of the source files were reorganized for various reasons.
- Several "Makefile.xxx" files were updated for the new files.
- Some changes were made to the "term.c" package to optimize stuff, and to allow the use of the new "Term_pict()" hook in various situations. Most "main-xxx.c" files needed some minor changes, look for "TERM_XTRA_BEVIS", "TERM_XTRA_INVIS", and "scan_events".
- The "teleport player" spells now act instantaneously.
- You are now correctly notified when you can learn new spells.
- Changing equipment now correctly updates the lite radius.
- The running code has been optimized some more, and now stops next to rubble, and can now take a "maximal run distance" argument.
- Various options have been removed, modified, or moved around.
- The "disturb" options now work "better" with "telepathy".
- The "show uniques" and "show artifacts" no longer crash if the "tmpnam()" function fails. In fact, there is a new "path_temp()" function to acquire a temporary file name, since the standard one seems to fail on many machines. Also, these commands now use the same interface as the "on line help" commands.
- The "request_command()" function is now used in stores, allowing the "keyset" and "command macro" code to work in stores. Using "p" and "s" to "buy" and "sell" in stores is handled by a hack.
- Creating a new character using a reduced savefile will not clear the "aware" flags on objects. In "player_wipe()" in "birth.c", change "if (k_ptr->has_flavor) k_ptr->aware = FALSE" into "k_ptr->aware = FALSE".
- Every call to "get_mon_num()" and "get_obj_num()" should check for "failure" (a return value of zero), since otherwise, weird things may happen, including the creation of bizarre "player" monsters, and division by zero errors if you "look" at it. These checks must be done AFTER any "global restrictions" are reset.
- The Borg no longer has problems "swapping" his rings.
- Using "angband -n" now correctly loads the old savefile.
- The Cloaks of Aman, Cloaks of Stealth, and Boots of Quiet, should all say "(+X to stealth)" not just "(+X)".
- The "user abort" code in "borg-ben.c" needs a little work.
- The "main-win.c" file (and support files) are almost ready.
- The "main-ami.c" file (and support files) are almost ready.

## Changes made for Angband 2.7.9v4

- Running no longer stops next to secret doors (early release bug).
- Wimpy monsters no longer induce cuts/stuns (early release bug).
- The "disturb_other" option now induces disturbance when the player status changes. This includes various subtle changes in "food", "cuts" and "stuns", that do not induce actual messages.
- The "tombstone" picture is now loaded from "lib/file/dead.txt".
- The "character dump" code has been cleaned up and optimized.
- The "list artifacts" and "list uniques" commands now use a generic "display file" method using a temporary file.
- The "list artifacts" command can now be used in the dungeon, since it does not show the unknown artifacts on the dungeon floor, or in the player inventory.
- You can now put "tab" characters in "help" files and other text files used by Angband. They are expanded using eight character tab stops.
- There are nice new generic "my_fgets()" and "my_fputs()" functions.
- Cheating death now restores your hitpoints and spellpoints, and your food, and such, and "recalls" you to the town.
- The "main-xaw.c" file now uses the "GRAPHIC_xxx" defines, and uses the color set from "main-x11.c" which is apparently "better".
- The "handle_stuff()" routine, and the functions which induce it, were cleaned up and verified.
- The player can now directly drop/sell "equipment" items in stores.
- The player inventory is correctly combined and reordered in stores, and the "do_cmd_redraw()" function works in almost all situations.
- The "character_icky" flag is now used only to indicate that the "dungeon" is not currently displayed in the main window. Most of the special screens were modified to allow the use of "msg_print()".
- The character display is no longer shown when loading a saved game, for increased efficiency and code simplification.
- The "notice_stuff()" function has been completely removed, and broken out into various "set_xxx()" functions, and the functions that update the bonuses, mana, and spells. This should increase efficiency and enforce more correct semantics for blindness and related things.
- Each store has been given an additional two "base items" from which to choose its "stock", making certain items more common (low level books, lanterns/oil, boots/armor, scrolls of identify/recall, and arrows/bolts), and the temple sells more potions of restore life levels and no potions of restore wisdom.
- The "halberds" now do "3d5" damage not "3d4", some of the artifacts have been given slightly different rarities or minimum levels, the "electric" and "acid" brands now do "x3" damage not "x5" or "x2", and a few monsters have been given new abilities.
- The "fiddle" flag is now used only to show extra debugging messages.
- There are new "main-win.c", "main-ibm.c", "main-ami.c", and "main-acn.c" files.
- There are some new spoiler files, and an "info.tar.gz" spoiler archive. Many (but not all) of the files have been updated for Angband 2.7.9v4.
- Items can no longer provide "immunity" to poison, only resistance, this affected only a single artifact, and simplified some code.
- The "food" code needed some work. There is now a generic "set_food()" function, and much simpler "digestion" code. The result is faster, has fewer possible bugs, and is much more sensitive to player speed.
- The eyes, icky things, jellies, oozes, molds, and mushrooms are no longer "animals".
- The "animal nest" code now uses the "animal" flag to choose contents.
- Some more attr/char changes were made to the monster list, for example, the "snakes" are now a special race using the "J" symbol.
- Some of the global arrays were made non-dynamic for efficiency.
- Monster pits/nests now include all "acceptable" non-unique monsters, including invisible, teleporting, and multiplying, monsters.
- Repeated commands are now handled by the command itself. The "repeat" count is not displayed until the command is actually repeating.
- The player can no longer target non-projectable monsters, except via the "target a location" command. This allows the use of macros which assume that the "nearest" target is actually projectable.
- The player can no longer "accidentally" run into a wall, running now stops next to embedded treasure and rubble, and the running code has been optimized some more.
- The "attr/char" info from the "I" lines in the "x_info.txt" files have been split out into a separate "G" line to fix some "sscanf()" problems.
- The user can now modify the attr/char of terrain feature zero (used for "unseen" grids), object zero (used eventually for "stacks" of items), and monster zero (used for the "player").
- Mushrooms of restore strength now cost 350 gold.
- There are now new command line arguments to activate "graphics" mode (-g) and "sound" mode (-v), when supported.
- The "auto-scum" code now accepts any non-boring feeling on the first four dungeon levels.
- The chance of out-of-depth monsters has been doubled, in such a way that it is "possible" to get monsters which are up to 10 levels out of depth.
- Out of depth monsters now contribute more to the level rating.
- Autorolling is now "aborted" after a million rounds, and uses the same "semi-efficient" method on all machines.
- Several of the "stat tables" have been adjusted slightly, the main change is that the player should get multiple blows more easily.
- The "main-ibm.c" file now uses new "true color palette code", and allows the use of the new "color specification" methods.
- Faulty use of the "GetAppDir()" function in the Macintosh version may have been "fixed".
- Invisible traps can be given different attr/char codes from floors, but the attr/char codes for invisible traps are never used.
- The "trapper" and "lurker" monsters are now "translucent".
- The "main-x11.c" file now handles the "mirror" window correctly.
- Cursed shovels can no longer have a positive "pval" bonus.
- There is a new "interact with colors" command which allows the user to modify the internal representations of various colors, on systems which support such modification, such as the Macintosh.
- The special "Term_user(0)" command is now be reserved for "weird" stuff like changing graphics/sound mode, or executing "shell" commands.
- The "command.txt" file has been updated to correctly describe the new "Interact with macros", "Interact with visuals", "Interact with colors", "Interact with options", and "Interact with the system" commands.
- Most of the commands available in the dungeon are now available in stores, though the "keymaps" are ignored.
- Various things are now updated more often in stores.
- The "Term_pict()" function, and the related hooks, now take an attr/char pair instead of a picture index for optimal usage.
- Trap doors are no longer improperly created at dungeon level 99.
- The create staircase spell now "memorizes" the new stairs.
- Angband now autoloads the "user.prf" and "user-xxx.prf" user pref files, plus one of "font-xxx.prf" or "graf-xxx.prf" as appropriate.
- The "pref-xaw.prf" file now simply includes "pref-x11.prf".
- A typo in the "pref-ibm.prf" file was fixed, and part of the file was split off a "font-ibm.prf" file. The "pref-win.prf" file now simply includes "pref-ibm.prf".
- The Windows version has a new "graf-win.prf" file that "correctly" encodes the various bitmap entries using the new row/col metaphor, plus a "font-win.prf" file with the "non-bitmap" attr/char mappings.
- Various "graf-xxx.prf" files were fixed to handle the four new items, and/or the change from "seedy looking human" to "novice paladin".
- The "Ettin" monster was restored to full hitpoints.
- The "dehex()" function was fixed.
- The "look" / "target" commands now start at the "closest" location.
- The "message recall" command now allows the use of the "/" key for a primitive "search" ability.

## Changes made for Angband 2.7.9v3

- The "main-ibm.c" file had to be rewritten several more times. It now handles all known environments correctly. It was given a new default color scheme, and a method to allow the user to choose among several pre-defined color sets. The keypress code was cleaned up once and for all, and the "main-win.c" file was changed to use the same macro triggers, and a new "pref-ibm.prf" file was created using the new triggers.
- A pre-compiled version using "main-ibm.c" for DOS-286 is now available.
- The "main-x11.c" and "main-xaw.c" files now support the "mirror" window, and correctly handle the "TERM_XTRA_CLEAR" command.
- Some minor bugs in "main-cap.c" and "main-gcu.c" were fixed.
- The "repeat count" is now used for various things, such as the "quantity" of the "drop" or "destroy" command, if it is not being used for anything else.
- The "show reduced map" command was optimized a lot.
- There is a new "recall most recent message" command ("ctrl-O").
- The "notice_stuff()" function was broken up into several generic "set_xxx()" functions, to handle "changes" in various "properties" of the player, such as "blindness" or "paralysis". This now only made the game faster, but also provided better "world semantics", and fixed some "bugs" involving "blindness", "see invisible", etc.
- One of the shop-keepers had an incorrect tolerance of zero.
- Importing pre-2.7.9 no longer causes "Calris" to become re-cursed, as long as the "uncursed" inscription is still present.
- When an object is picked up (or a trap is disarmed) in a dark hallway or room, a "marked" floor grid is no longer left behind.
- The "note_spot()" function is now called when an object is dropped into a grid (by the player or monsters). Also, neither "note_spot()" nor "lite_spot()" are called during dungeon level generation.
- Objects and terrain features now have separate "memorized" flags to prevent visual glitches when memorized objects are picked up by the player or by monsters. This had the side effect that "detected" dungeon objects converted from pre-2.7.9v3 savefiles will lose their "detection" status, leaving behind a "known" floor grid.
- The "earthquake" spell now correctly creates "wall" grids.
- The "monster health bar" is now updated after a monster casts a "heal" spell on itself, drains mana/charges to heal self, or is hit by a "heal monster" attack.
- The "staff of darkness" now attempts to blind the player.
- Aiming a wand of wonder on the ground at itself can no longer destroy the wand, since this could have "messy" results.
- Several uses of the "saving throw" now have better "semantics" and/or "messages".
- The "get_item()" function no longer has any visual glitches.
- The "get_spell()" function now correctly uses the "mirror" window.
- The player's total gold is now displayed in the Home.
- The "Giant clear centipeed" is now "clear". The "Giant purple worm" now resists poison. The "Umber Hulk" is now a light umber "X" monster. The "clear" monsters are now "white" in the recall window.
- The "color scheme" of several monsters has been changed. See the new "r_info.txt" file for more information. Most of the changes involve new color schemes for "elemental" monsters (dragons, hounds, etc) and "people" monsters (mages, warriors, etc).
- The object distribution was cleaned up slightly. The artifact damage sides were brought in line with the underlying object damage sides.
- A nice generic quick-sort function now allows all of the sorting to be done by one optimized function, and allows many more things to be sorted at low cost.
- The character description screen was cleaned up a bit, making room for on-screen display of blows/round and shots/round.
- The "options", "pref", and "macro" commands were made into full screen commands starting at line two, and were cleaned up a lot.
- A new command was added to directly specify a "user pref command", as if it came from a "user pref file".
- The Borg was given a few patches, and was optimized some more. Also, it was taught to consider all possible equipment combinations, and to use the home to "stockpile" certain items.
- The glyph of protection now uses the "semi-colon" symbol.
- Several terrain features got new colors, and the special lighting effects now only affect floor grids. The result is much faster, and still rather interesting to watch.
- Some patches for EM/ESA and Amiga and DOS-286 were added.
- More optimizations were performed (visual display of the map grids, full screen map, running, the Borg, the player command loop, message memorization, update monster).
- Several messages about traps now include the name of the trap.

## Changes made for Angband 2.7.9v2

- Throwing an object no longer causes a SEGV error.
- Bashing non-doors no longer creates open doors.
- The "destroy traps/doors" effects now works.
- The Macintosh "save bug" was squashed by using "absolute" path names.
- The "great" objects (ego-items and artifacts) are now more common.
- Several of the "main-xxx.c", "Makefile.xxx", and "pref-xxx.prf" files were updated.
- The "main-ibm.c" file absorbed the "main-wat.c" and "main-286.c" files, and uses the new "TERM_XTRA_FROSH" command for efficiency.
- Some "typos" in various files were fixed.
- The cursor is no longer misplaced in the "choose_sex()" function.
- Monsters can no longer be summoned, created, or teleported, on top of a glyph of warding.
- The priest prayer "Confuse Creature" was renamed "Scare Monster", and the mage spell "Confusion" was renamed "Confuse Monster".
- The mage spells of the "Resistance" variety are no longer worth as much experience.
- The priest prayers of the "healing" variety now heal more than the corresponding potions (Nd10 vs Nd8).
- Several hard-coded numerical constants were replaced by symbolic constants (player race, player class, etc).
- Various functions were optimized.
- The "note_spot()" function is used more often.
- When the area around the player is "forgotten", for example, by earthquake, darkness, or sunset, and the memorize torch lit grids option is set, the grids near the player are now re-memorized.
- Some "color" glitches in "main-gcu.c" were fixed.
- Some of the on-line help files and such were updated.
- The "preserve" mode now only preserves "unknown" artifacts.

## Changes made for Angband 2.7.9v1

- I may have missed some other changes, since I just started a complete change log with this version.
- Filling a level with too many objects no longer causes nasty visual errors.
- Generating a level with "too many" objects or monsters now causes the level to be regenerated, with no "annoying" messages.
- The *enchant* weapon and *enchant* armor scrolls were fixed.
- The Borg is very different (and for the better).
- The "l_list"/"r_list" arrays have been absorbed by "r_info". The "x_list"/"k_list" arrays have been absorbed by "k_info". The "v_list" array is now "a_info", and "e_info" was added, for "ego-item" info.
- The "init.c" file is MUCH faster and prettier.
- The "main-cur.c" file is gone (ancient curses support), and the "main-cap.c" file is complete (play without "curses").
- All high starting stats affect starting gold negatively. The auto-roller shows max-stats before asking for min-stats.
- Multi-hued and Clear monsters look better with "use_graphics".
- Several arrays are now malloc'd instead of staticly declared. Several tables have been moved into "init.c" or "birth.c". Several tables have been modified to use 40 (not 80) bytes.
- Monster death messages via missiles now resemble by spells.
- The "bash monster" code has been removed.
- All "commands" that take directions check for "legality" first. All "commands" that take directions will "attack" monsters in way. The "get_a_dir()" spawned "get_aim_dir()" and "get_rep_dir()".
- There are new global "running" and "resting" variables.
- Granite is harder than quartz is harder than magma. Quartz is actually rather hard, consider a digger.
- There are "generic" routines to "lose"/"gain" a stat
- Some "Random" checks now use "percentage" code.
- Spiking is now the only command that does not ask for an item.
- There is now a "generic" option manager, with an option table. You can now specify "forced values" for options in pref files.
- A few variables and defines were renamed for consistency. A few more variables have more precise types (bool,byte,s16b).
- The "make macro" function is simpler, and also easier to use.
- The "message recall" code is hyper-efficient, space-wise anyway.
- There is a generic "get_spell()" routine for casting and studying.
- Studying spells/prayers takes a turn, and requires a book choice.
- Curing of various maladies takes (blind, etc) place right away.
- Curse weapon affects only weapons, curse armor only body armor.
- There is now a "get_lib_path()" function for each machine.
- The "lib/README" and "lib/RECORD" files have been "moved". The "lib/README" file is now required (to verify "lib" folder). The "lib/RECORD" file (high scores) is portable between platforms.
- There is now a maximum limit (of 128) on all "depth" values. You cannot descend below level 128 (6400 feet) except as a wizard.
- You can customize the macro/message/quark support in "config.h".
- The ego-item indexes have been re-arranged, and renamed, etc. There has been some modification of the ego-item "textual names". Each "ego-item" can only apply to a given "equipment slot" now.
- The "attack to cause earthquakes" is now an actual blow effect.
- You now get a "You die." message when you die, ala "nethack".
- A lot of code is now conditional on "SET_UID", which is cleaner.
- You get better messages if the "lib/RECORD" file is "locked". Empty and missing files ("load.txt" or "time.txt") are different. A missing "permissions" file defaults to maximal permissions. An empty "permissions" file defaults to "standard" restrictions.
- The stores are now a slightly more complex structure.
- An explicit "break" is placed in the message recall at birth.
- The dungeon generation code has been cleaned up some more.
- Support for the "ACORN" Risk OS has been added.
- The "Q" key (suicide) has been re-installed for roguelike keyset.
- The internal direction "5" is now "target" and "zero" is nothing.
- The "inkey()" function now handles ALL keypress input.
- The "use_stat" array is now recalculated by "calc_bonuses()".
- The "handle_stuff()" function is slightly cleaner/faster.
- The "hardcoded arrays" have removed except from "save-old.c".
- Genocide (and mass genocide) no longer work on Unique monsters.
- The "name" and "text" fields of various arrays have been optimized. You can now specify a "description" for objects, artifacts, ego-items. This description, however, is not currently used for anything.
- The "player ghost" code is still a hack and a half.
- Sometime soon we should see variable energy actions.
- Sometime soon we might see a separate "unique" array.
- Some of the "ego-item extensions" are now actual "ego-items". Thus, a "Mace of Kill Evil (+1 to WIS)", and other such items.
- All "boosted" ammo is an ego-item, usually "of Wounding".
- The "recharge" scode has been "fixed" and now handles stacks.
- Turning off haggling results in fixed prices being displayed. Haggling and then turning off haggling also works "correctly".
- Picking up an item describes the entire resulting slot.
- Low dexterity no longer penalizes disarming ability.
- Clearing the screen now induces an actual screen clear. Clearing a portion of the screen now takes (x,y,w,h).
- Some unused functions (umask, chmod, etc) were removed.

Go back to the Official Angband Home Page