Angband 3.0.8

From Angband Wiki
Jump to navigation Jump to search

Background

Version 3.0.8 was released on 8th July 2007 by Anna Sidwell, her first official release as Angband maintainer, after a long period of uncertainty for the game.

After Robert Rühlmann announced he no longer wanted the job of looking after Angband in October 2005, there was much discussion about who would be best for the job, with people nominating themselves or others (well, mostly others), and many discussions between candidates. Eventually, in March 2006, Robert chose Julian Lighton as his successor, as someone who shared Robert's goals for the future, had a long history with the game, and who had proven his credentials as a coder in his own variant, Sangband.

Sadly, it soon became apparent that Julian, though he had the desire to improve Angband, had no more time than Robert had to devote to it, and so there was very little progress made. Julian made a few alterations to the CVS version of Angband, and spoke of the sort of changes he was intending to make (such as removing Lua, and adding support for "squelching"), but there was little progress.

At the beginning of December, Anna Sidwell released her first unofficial beta version, 3.0.7s1, which made a number of the uncontroversial changes everyone agreed needed to be made, while keeping the quality of the code high so that it would be easy for Julian to reincorporate into the official release, which he indicated he would. Shortly afterwards, he posted to the newsgroup explaining the reasons for him not having time to do much work on the game, and saying "If I'm still not getting around to getting anything done by the end of the year, I will likely step aside."

Anna released two more unofficial beta-versions, 3.0.7s2 and s3, before someone stepped forward and nominated her as the maintainer in March 2007. There was widespread agreement, though at the time of writing, Julian has yet to publicly comment. Reinvigorated by her new appointment, Anna set about drawing up plans for a 3.0.8 official release, and asked for anyone interested in improving the game to get in touch.

As might be expected after such a long gap between this and the last release, there were a lot of changes waiting to be made, both internally and externally, and plenty of people queuing up to help, whether with code or suggestions.

The most notable of these was Pete Mack, who made numerous improvements to the OS X port, but also did a massive amount of work on cleaning up the internals of the game, and laying the foundations for even more improvements in the future by implementing a new "menu interface" and then moving large parts of the existing codebase over to use it. These included the new knowledge browser, birth screen, options and stores. This not only makes the code smaller but also makes it much easier to make the UI of the game consistent throughout.

In terms of gameplay, one thing that was always going to be added was "squelch" support to automatically destroy items the player decides they no longer want to be bothered with. Originally, the version of squelch used in NPPAngband was to be used, but as Anna didn't consider the code up to Angband standards she rewrote it and used a new approach based on EyAngband. After suggestions from the newsgroup on a pre-release version, this was again changed for a new version that gave the player the choice of whether to simply hide "squelched" items from view, or to destroy them.

Another major change was the clearing out of a lot of options that were little-used. Some of these were efficiency choices, which have little effect even on what passes for a slow machine today, and others simply caused more trouble than they were worth. Yet more were reclassified as "difficulty" options that can only be set at character birth so that they are immutable in any given game once it has started. This was as part of an ongoing attempt to balance the game - by having one "official" set of gameplay options the game could theoretically be balanced in a way it can't if artifacts can be permanently lost before the player has noticed them, and so on.

There are many other changes ranging from significant to hardly worth mentioning, and they are all listed in the "official" changelist below, except that store discounts, after much tweaking by the previous two maintainers, were simply removed for this release.

Changelist

Major visible changes

   New splash screen.
   The Ey/Un-style knowledge browser has been imported. You can set autoinscription settings through that browser now.
   Mouse support a la FAangband added, but nowhere near as advanced or useful. Most of the menus you encounter can be selected using the mouse now, as well as using keypresses. Clicking somewhere on the map will now "walk" there, within certain constraints. It's a tad bizarre in the town, but seems to work OK otherwise.
   Massive options clearout/reorganisation/redefaulting:
   many options have been removed (20 or so, I think)
   a large number have new default settings
   new option: remaining HP changes the colour of the '@' sign.
   experience to next level always displayed until clev50
   macros/visuals/colours are now accessible (only) from the options menu
   Sangband-style object handling, which makes it much easier to sift through things in the dungeon.
   Item squelching support.
   This can operate in one of two ways. If you prefer your squelchables hidden, then turn on hide_squelchable, and whenever you find an item which matches your squelch settings, it will be dropped but not destroyed. This means that you can unsquelch it by changing your settings later if you so desire.
   If you prefer squelch to just help automate item destruction, then you can press '!' at the "destroy" prompt to destroy all squelchables on the floor or in your inventory.
   You can set individual squelch settings for only those items which do not get pseudo-ID'd. For those that do, you can choose to mark things as "squelch" depending on the feeling you get when you first ID them in that way. These categories are much broader than those found in other variants; complain if necessary.
   Worthless items and emptied chests are automatically squelched, saving some micromanagement. All item destruction now takes 0 energy.
   When objects are compressed, gold and squelched items are the first to be destroyed.
   Two kinds of ego-light added. You'll know when you find one; there's no ID required to figure out if your lantern is special or not.
   Lights now don't use fuel in the daylight in the town.
   Amnesia (the monster attack) is now a timed effect (a la confusion), and has makes you forget how to read scrolls/pray/cast spells one time in two. Fewer monsters now have the attack, too.
   CCW, Healing, *Healing* and Life are the only things which will get rid of amnesia early, but it goes away within a few turns.
   Defined potions of life, healing, *healing*, augmentation as 'good' drops, as well as restore mana for spell casters, and stat potions, when the stat is not maximised.

Minor visible changes

   Allow weapons and armour to be damaged instead of destroyed by inventory damage effects, thus making swap weapons more viable.
   Browsing books now displays information about the spells therein, if requested. As part of this, move spell names/descriptions/locations out into a new file, spell.txt. (Hugo Kornelis)
   Arrow keys are now distinct from the numeric movement keys, and because of this you can now edit text at prompts in game properly. Supported on Windows, Mac (untested), and curses. If you get it working for anything else, please send the patch!
   Resizing the game window automatically updates its contents, on platforms which support this.
   Inscribing an item with '!t' will now confirm if you try to take it off.
   If a stack of rods is recharging, you'll get a message when the first rod is recharged and another message when they are all recharged. There is no message when the second, third, etc., rod is recharged. (Hugo Kornelis)
   The recharge notification will now disturb you if you have set the option to be disturbed when boring things happen (disturb_minor) to yes. (Hugo Kornelis)
   Add the recharging fix from V CVS -- things can now explode when you recharge them once more.
   Added support for improved pluralization of object names. Allow custom plurals for words which need them (e.g. "Kni|fe|ves" and "M|ous|ic|e"). Unused at present. (Hugo Kornelis)
   Bugfix: Monsters that resist one or more of acid, lightning, fire, cold, poison and water and resist one or more of nether, plasma, nexus and disenchantment had two "it resists ..." sentences in the monster info. (Hugo Kornelis)
   Bugfix: Sustain CON was reported before Sustain DEX in self knowledge. Since DEX is reported before CON in all other situations, this is now reversed. (Hugo Kornelis)
   Set wrapping width to 72 for character dumps' item information, to avoid well-behaved newsreaders messing them up.
   Move back to pre-3.0.6 panel changing behaviour.
   Semi-rewrite of the store code; now uses a scrolling menu with a slightly more streamlined interface. Bigscreen support in stores. Ammo is treated in more aesthetically pleasing quantities. General Store always stocks what it stocks now, and doesn't buy anything back off the player.
   Remove double-rate spellcasting with the smart_monsters option. (imported from V CVS; Julian Lighton).
   '[' command displays a monster list in the main terminal window.
   "Enter" key brings up a little window in the middle of the screen, from which you can select what command you would like to use. This is inspired by (but not derived from) Hengband. Don't like it? Macro "Enter" to " ".
   Prompt for overwriting savefiles.
   Added echo to macro trigger entry.
   Restore some pre-Ben flavour text.

Major code cleanup

Most of the cleanup has been related to removing ancient or non-functional craft.

   A powerful generic menu interface has been added and used throughout the code. It reduces code duplication and makes it much much easier to create menus in various styles; e.g. scrolling or multi-column. See ui.c.
   Event handler added. (Menus can listen to each other, etc.)
   Lots and lots of code duplication removed:
   pref file dumping now has much less boilerplate
   the status line, sidebar, and term window update code is much more streamlined.
   Nuked a lot of old ports: cap, lsl, sla, xpj, ibm, dos, vcs, lfb, ami, emx, vme.
   As a result of the above, makefiles considerably simplified. As many makefiles as possible use a common list of source files in "Makefile.src", which simplifies maintainance. Makefile.std has also been rewritten and contains much less cruft.
   Timed player modifiers (blind, confused, etc.) are now kept in an array, rather than being separate variables in p_ptr. This simplifies a lot of code, and makes it trivial to add new effects. The majority of the work was done using sed scripts.
   Use a new autoconf/automake system, called OMK.
   Removed Lua.
   Charges for wands/staves are customizable in the lib/edit/ files.
   Considerably simplify and speed up main-gcu.c. (Thanks to Christer Nyfalt.)
   Removed trivial-to-hack-around or non-functional compile-time options (VERIFYSAVEFILE, _TIMESTAMP, and _HONOR, CHECKTIME).
   Combine the various h-*.h files into a single header file; remove a lot of cruft, use C99 types when available,
   Clean up file locking, move file handling functions into z-file.c, remove usleep() function, add a "portable" directory scanning interface (works on Windows and Unixes at the moment), and my_fexists().
   Use the safer string handling functions much more; the only use of the "unsafe" built-ins are in the various main-* files.
   Split random name code from randart code into its own file with a bit of a rewrite. Use this code for scroll names.
   Move lots of things out of defines.h to more appropriate places, like h-basic.h and config.h.
   Replace various magic numbers with constants or N_ELEMENTS(). (Hallvard Furuseth)
   Use C99 types where appropriate (for bools and ints).
   Import Sangband's/Steamband's code to put chance of generating piles of items in object.txt.
   Use tables of commands instead of a big switch, to allow doing thing like the new command menu easily without duplication. (See cmd0.c.)
   Switch to new model for producing sound: instead of a TERMXTRASOUND hook, we now have a simple "sound_hook" which should be set to the appropriate function to play a sound. Introduce a new modular system for sound modules for ports that use main.c (for the future, in case we want to use e.g. gstreamer). Allow sound to be toggled as an in-game option.
   Remove hardcoded values for p_ptr->noscore.

Platform

   Modernize Mac support; now works on OS X 10.3 onwards, but the old main-mac has been removed, as has the MPW makefile. (Pete Mack)
   OSX font selection problem fixed.
   Add console mode patch for Windows (Frank Palazzolo). This is basically playing the game in an old-school terminal window for those who like uncluttered gameplay.
   main-x11 now reads window placement from x11-settings.prf.
   Fixed Windows bug where you can't move one of the font files after having played a game this reboot. (Thanks to Leon Marrick.)
   Add platform-specific ifdefs to readdib.c and main-ami.c.
   Allow ^S without freezing the game on the console. (Hallvard Furuseth)
   Mouse support on RISC OS.
   Sort out licences for the various fonts distributed with the game.
   Import the old DOS/IBM fonts for use in the Windows port.
   Include SDL_mixer sound module, useable on any port that uses the main.c mechanism. Thanks to Brendon Oliver for the initial code for this.
   GTK port is a GTK2 port, and uses pango and cairo. (Shanoah Alkire)
   Added a new SDL port by Iain McFall, based on the ToME and Sang ports. Both the SDL and GTK ports are disabled by default, as neither is quite finished, though both are perfectly functional.