Angband -- Changes
This page lists "changes" in older versions of
Table of Contents
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
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.
Changes made for Angband 2.8.1
The "use_sound" and "use_graphics" flags were restored,
but must be set by "main-xxx.c" files which support them
based on the "arg_sound" and "arg_graphics" flags.
Some more sound support has been added.
The "player sex" concept was genericized into a table.
Monster death and chest death now use "drop_near()".
The "drop_near()" function was changed to use a "better"
method for determining where an object should fall, and
it seems to work well with the new "stacking" code. The
radius of the drop zone was increased.
Various "resistance tables" have been added as sub-screens
of the "character description" screen.
The race/class restrictions have been relaxed, and "illegal"
combinations are labelled "for advanced players only".
Some onscreen instructions have been added to "birth.c"
for display during initial player creation.
The "z-term.c" package has been optimized (again), causing
some changes. The "Term->pict_hook" function now takes a
length, an array of attrs and an array of chars, instead
of a single attr and char. The "Term->text_hook" function
still takes a "string", but it is no longer "null-terminated".
The "cursor" is now erased and redrawn on every non-trivial
refresh. Trivial refresh calls now have no effect.
The old "use_sound" and "use_graphics" flags have been
changed to "arg_sound" and "arg_graphics", and now have
the semantics that the user has requested the use of sound
or graphics. These flags are ignored by the game itself,
and now the appropriate "main-xxx.c" file must interpret
these flags "correctly" (or ignore them).
Macintosh Angband now supports basic "graphics" (using
the same pixmap array as Amiga Angband), allows each
window to be scaled to any desired size, allows the use
of non-mono-spaced fonts, and supports simple "sounds".
The "main-x11.c" and "main-xaw.c" files have been fixed.
Whenever the "r" key may be used to activate on-screen monster
recall, it may also be used to disable this on-screen recall.
Searching will no longer find "traps" on non-chest objects.
Cheating death no longer induces screen weirdness.
Leaving a store no longer induces screen weirdness.
Pack overflow is now handled at the start of the players
turn, not the end, which has various subtle effects.
A new monster flag was introduced to force "nasty" monsters
to refrain from using spell attacks until the player has had
a chance to react to their birth.
A new monster flag was introduced to prevent monsters from
being processed during the turn of their birth. This allowed
the removal of the "m_fast" and "o_fast" arrays, and some code.
The "other_query" option is now used exclusively to activate
verification of "use object on ground" commands, which can be
used to select objects from the middle of object stacks. The
default behavior is to accept the top-most acceptable object.
Stacks of objects on the dungeon floor, and monsters carrying
objects, are now stored in the savefile, but the "order" of
the objects in both stacks in not currently maintained.
Monsters can now "carry" objects if a special "testing" option
is activated. Looking at a monster described all of objects
being carried by the monster. When a monster dies, all of the
objects being carried are dropped in the monster grid before
the standard monster drop is calculated. When a monster is
deleted, all objects being carried are deleted as well. Any
objects picked up or stolen by the monster will be carried.
Objects can now "stack" on the ground if a special "testing"
option is activated. Looking at a stack of objects describes
each object in turn. The map displays the picture of the
uppermost "memorized" object in each grid, if any.
Objects may now "combine" on the ground with similar objects
when they are dropped into the same grid.
Unidentified missiles will no longer stack with identified
missiles, even if they are identical.
Objects are no longer restricted to a single rating bonus.
Inscriptions on store items are removed when purchased.
Cleaned up the messages involved in taking off equipment.
Cleaned up the use of "temporary" objects.
You can no longer drop equipped cursed items in your home.
Running may work better around closed doors, but more
investigation is needed.
The "you are confused" message is now used whenever the
player specifies a direction but gets a different one.
The detection spells now "detect" terrain/objects/monsters
even if they are already "visible" or "detected", and give
a message about successful detection. The "door" detection
spells now detect all doors, not just secret doors. The
monster detection spells now make every detected monster
"visible" for one player turn.
Using the "finder" string now activates the "shower" string,
and the "shower" string now hilites only the matching portion
of each line, if any.
A problem with the interactive creation of new macros using
"main-x11.c" or "main-xaw.c" has been repaired.
The player's current mana/hitpoints are no longer adjusted when
the maximum mana/hitpoints change, except to enforce maximum
limits. Among other things, gaining a level no longer raises
the player's current mana/hitpoints immediately. This prevents
some bizarre implications of the old adjustment semantics.
The "target" and "look" commands have been combined. Both allow
the user to "examine" nearby "interesting" grids (or all grids),
setting a target if desired. The "target" command requires grids
to contain "targetable" monsters to be considered interesting, and
uses the "space" key to jump immediately to the next "interesting"
grid, instead of furthur examining the grid containing the monster.
The "return" key will always step through the description (forever),
and the "+" key will always jump to the next "interesting" grid.
The monster recall window is now maintained in a more intelligent
manner. Whenever the player attacks a single monster, that monster
race will be auto-recalled. Note that player spells which affect
multiple monsters, or which work by affecting all monsters in line
of sight (even if only a single monster is thus affected), will not
trigger auto-recall. The "monster recall window" is now updated
whenever "interesting" information (flags, attacks, spells) is
learned by the player while the monsters are being processed.
Scrolls/Staffs of darkness now blind before bringing darkness.
The messages about remaining spells/prayers to be learned are
now more detailed and correctly pluralized.
It is no longer possible to accidentally accept a shop-keepers
initial (non-final) offer by hitting return.
The player now gets experience from killing monsters based on
his "maximum" player level, not the "current" player level.
All artifact activations now include a brief visual description.
Inability to create a glyph of warding is now mentioned.
Scrolls of identify/recharging/enchantment no longer describe
themselves when they are read.
The "stat display" now indicates which stats cannot be improved
by quaffing stat potions, using a "bang" instead of a "colon".
There is an optional "pref-gcu.prf" file which allows basic use
of the standard VT100 keypad keys and arrow keys.
The basic "tunnel" command is now selected using "T" (or "^T"
in the roguelike command set) if needed. The standard "open"
and "disarm" commands must be used on chests, and the standard
"bash" command may be used on locked doors.
The "+" keypress (as well as the various "control" combinations
such as control-direction or control-keypad, which map to the "+"
keypress) is now a new "alter" command, which will take a direction,
and perform the "obvious" command that direction, that is, attack
monsters, tunnel into walls (or veins or rubble), disarm traps,
bash jammed doors, open closed (or locked) doors. This command
always takes a full turn, and will have no effect if there is no
"obvious" command, in particular, this command will only induce
movement when used to bash jammed doors or disarm traps, so it can
be used to attack adjacent grids without moving into those grids.
Opening doors now takes energy.
The sub-window processing has been optimized, especially for
the cases when they are not being actively used.
The "display objects" window option is now used to allow an
object kind to be "recalled" in a window. Currently, this is
used to provide the old "display spell choices" functionality,
using the same display code as the "browse" command, with the
browse, study, cast, and pray commands auto-tracking whichever
book is used with the command.
Wearing unidentified artifacts no longer allows artifact
identity detection via the "list artifacts" command.
Direction "5" is no longer accepted for commands such as "run"
or "close", so running in place is no longer a fatal error,
and in fact, "5" acts like "escape" for these commands.
Creating a character dump no longer messes up the screen.
The "shower" hiliting in "files.c" has been repaired.
Digestion can no longer be negative or non-existant.
Changing the terrain feature of a grid has been made into
a general function, catching some weirdness involving things
like the memorization of new glyphs of warding in dark rooms.
Several spoiler files have been updated. New directories have
been created at the ftp site for help files and spoiler files.
Changes made for Angband 2.8.0
Use "Rand_div()" instead of the faster but less random "Rand_mod()",
and save the RNG state in the savefile.
New methods are needed for loading/saving savefiles with the new
terrain feature flags, and to save normal options and window options
so that future option changes will not cause trouble.
Messages are now memorized as complete strings. The message recall
window shows one message per line, using the '4' and '6' keys to
"slide" the viewing area left and right to view long messages.
The "look" command now starts on the player.
Monsters are now healed when they drain charges from the pack.
The "options" interface was cleaned up somewhat.
The "z-term.c" function was optimized and verified some more.
Object destruction now uses correct pluralization rules.
The "overhead map window" is redrawn whenever the player moves.
Stupid monsters now rarely wake up when illuminated.
Pack combination now performs its own "reorganization", avoiding
bizarre "rearrangement" messages.
There is a new function to combine "paths" with "files", which
allows the use of "absolute filenames" and "tilde filenames" in
certain situations, such as the "character dump".
Using a "count" with the "destroy" command will bypass
"verification" unless the "other_query_flag" option is set.
The "wield" and "takeoff" commands now use the "w" and "t" keys
(like the original keyset) for the underlying commands, and the
"[" and "]" keys are now unused. The "_" key can now be used to
enter a store, and walking onto a store generates this "keypress".
The "ctrl-e" command was replaced by the "ctrl-i" (tab) command,
to "flip" any "windows" displaying the equipment or inventory.
There are some new "sub-window flags" which induce various new
displays in sub-windows, including "recall old messages" and
"display complete spell list".
The various "windows" are now handled in a more generic manner,
using a set of 8 pointers to "term" structures, and, for each,
a set of "usage" flags, accessable via a new "options" screen,
which, in combination with the new "p_ptr->window" field, allows
the game to determine what should be displayed in each window.
All of the source files were "indented" and cleaned up a bit.
The "main-mac.c" file was cleaned up quite a bit, and, among other
things, now allows "monster recall" to "wrap" at the window edges.
The "resurrection" code now works, and "cheating death" now marks
your social class as zero (and counts deaths in your age), as well
as marking your savefile as having cheated death, which disables
placement on the high-score list.
There is now a generalized "c_roff()" command, which provides colored,
word-wrapping, multi-line output, and which is now used for the monster
recall code, which may thus be "colored" at some point.
An object inscription of the form "^x" will induce verification of
the command "x" while the object is being worn. Inscribing "^;" on
a shovel will thus prevent attacking (or walking) with the shovel,
while inscribing "^+" on your weapon will prevent digging with it.
Several options were added, removed, modified, combined, etc, and
the "option.txt" helpfile was updated accordingly, so read it.
New options allow the "look" command to see everything on the current
panel, and for the "list" commands to "wrap" at the edges of the list,
and for new "special lighting effects", and for new "optimizations"
of various things, and for new "disturbance" criteria, etc.
The "map_info()" function was optimized, and the "special lighting
effects" were completely rewritten.
Shop-keeper rotation is no longer optional, and is four times as
common as before. Buying the last item from a shop now induces
a possible shop-keeper rotation, plus the creation of new stock.
The "feature types" can now take an index of another feature type
which they should "mimic", allowing the generic "conversion" of
secret doors into walls, all locked/jammed doors into closed doors,
all walls into the same wall, and hidden treasure into normal veins.
Floors and invisible traps often bypass this field for efficiency.
The general store now buys and sells basic ammunition.
New object/monster allocation table routines have been written,
which optimize various things, including the generation of pits
and nests, and the summon/escort code. Monster nests now contain
up to 64 different types of monsters.
Thrown objects (and fired missiles) now rarely "disappear" unless
they are thrown at a monster (intentionally or accidentally), or
if they attempt to land in a crowded area.
The "inkey()" code was cleaned up somewhat. The "default action"
code in the X11 keypress code needs to be tested.
The hard-coded "feature" codes were replaced with constants, plus
a few hard-coded "offsets" from the "shop"/"trap"/"door" constants.
Several fields and variables and such were renamed, primarily to
migrate from "inven_type *i_ptr" to "object_type *o_ptr", and from
"fdat" and "ftyp" to "info" and "feat" for cave grids.
The "delay()" function has been migrated into another "Term_xtra()"
hook, using the "TERM_XTRA_DELAY" action. All standard "main-xxx.c"
files were changed to use the new method. The "delay_factor" is now
"cubed" when used to give a better "range" of delay values, ranging
from a single millisecond to almost a full second.
Chests are now quite a bit "better" than they used to be.
The windows no longer continuously "shrink" in the Windows version,
the pixmaps are not "garbled", and double-clicking savefiles works.
Ancient "Archimedes Angband 1.2" savefiles can now be parsed.
Dungeon generation now uses "stack" memory instead of heap memory,
since the Windows version appeared to be fragmenting memory for no
Artifacts are no longer lost due to "aborted" level generation.
The "showing" ('=') action (which displays matching lines in yellow),
and the "finding" ('/') action (which changes the current line), are
now available in the online help, listing uniques/artifacts, and the
message recall, and both actions remember "previous" settings.
Starting a new character should reset the "cheat" options.
The "main-gcu.c" file needs to play games with "bool" to prevent
conflicts with various versions of "curses".
The "polymorph" code was slightly broken.
Certain versions (DOS, Windows, etc, but not Unix or Macintosh)
require the "O_BINARY" flag in the "fd_make()" and "fd_open()"
routines in "util.c" or the "lib/data/*.raw" files get broken.
Some compilers do not support the "O_CREAT" flag. (?)
Go back to the
Official Angband Home Page
See also Ben Harrison's Home Page /
Ben Harrison /