Only in angband-282: LOG diff -c -r angband-282/README angband-283/README *** angband-282/README Wed Sep 10 19:53:04 1997 --- angband-283/README Mon Feb 9 07:00:26 1998 *************** *** 1,37 **** - This is the README file for Angband 2.8.2 (09/01/97) - Angband 2.8.2 is a stable official release (hopefully!) incorporating all - of the improvements added since the last official release (Angband 2.7.8). ! See the Official Angband Home Page "http://www.voicenet.com/~benh/Angband/" ! for more information about exactly what has changed recently. ! See the various Angband ftp sites (including "export.andrew.cmu.edu" and ! "ftp.cis.ksu.edu") for the latest files, patches, and executables. ! Contact Ben Harrison ("benh@voicenet.com") to report any bugs or make any ! suggestions. Use the newsgroup "rec.games.roguelike.angband" to ask any ! general questions about the game. ! === General information === Angband is a "graphical" dungeon adventure game using textual characters to represent the walls and floors of a dungeon and the inhabitants therein, in the vein of "rogue", "hack", "nethack", and "moria". ! There are extensive ascii "on line help" files in the "lib/help" directory. This version of Angband will run on Macintosh, Windows, Unix (X11/Curses), ! Linux (X11/Curses), Acorn, Amiga, various IBM machines, and many others... See Makefile, h-config.h, and config.h for details on compiling. See "Makefile.xxx" and "main-xxx.c" for various supported systems. - - Visit the Angband Home Page ("http://www.voicenet.com/~benh/Angband/"), - and browse through the Angband newsgroup ("rec.games.roguelike.angband"). - - Send bug reports, suggestions, etc, to Ben Harrison ("benh@voicenet.com"). === Quick and dirty compilation instructions === --- 1,54 ---- ! ************************************************** ! ** Angband 2.8.3 ** The Pits of Angband ** ! ************************************************** ! Based on Moria: Copyright (c) 1985 Robert Alan Koeneke ! and Umoria: Copyright (c) 1989 James E. Wilson ! Angband 2.0 - 2.4 - 2.6.2 by: ! Alex Cutler, Andy Astrand, Sean Marsh, ! Geoff Hill, Charles Teague, Charles Swiger ! ! Angband 2.8.3: Copyright (c) 1997 Ben Harrison + Send comments, bug reports, and patches, to "benh@phial.com" + Visit the Angband Home Page at "http://www.phial.com/angband/" + Browse the Angband newsgroup at "news:rec.games.roguelike.angband" + Read the online help files, especially "general.txt" and "version.txt" + Angband is available for Unix, X11, DOS, Windows, Macintosh, Amiga, etc. ! ! ! === General Info === ! ! This is the README file for Angband 2.8.3 (1998-02-09) Angband is a "graphical" dungeon adventure game using textual characters to represent the walls and floors of a dungeon and the inhabitants therein, in the vein of "rogue", "hack", "nethack", and "moria". ! There are some ascii "on line help" files in the "lib/help" directory. ! ! Angband 2.8.3 is a stable official release incorporating all the changes ! and improvements added since the last official release (Angband 2.7.8). ! ! See the Official Angband Home Page "http://www.phial.com/angband/" for ! a list (mostly complete) of what has changed in each recent version. ! ! See the various Angband ftp sites (including "export.andrew.cmu.edu" and ! "ftp.cis.ksu.edu") for the latest files, patches, and executables. ! ! Contact Ben Harrison ("benh@phial.com") to report any bugs or to make any ! suggestions. Use the newsgroup "rec.games.roguelike.angband" to ask any ! general questions about the game, including compilation question. This version of Angband will run on Macintosh, Windows, Unix (X11/Curses), ! Linux (X11/Curses), Acorn, Amiga, various DOS machines, and many others... See Makefile, h-config.h, and config.h for details on compiling. See "Makefile.xxx" and "main-xxx.c" for various supported systems. === Quick and dirty compilation instructions === diff -c -r angband-282/lib/edit/a_info.txt angband-283/lib/edit/a_info.txt *** angband-282/lib/edit/a_info.txt Wed Sep 3 00:11:54 1997 --- angband-283/lib/edit/a_info.txt Fri Jan 30 00:47:03 1998 *************** *** 19,25 **** # Version stamp (required) ! V:2.8.2 --- 19,25 ---- # Version stamp (required) ! V:2.8.3 diff -c -r angband-282/lib/edit/e_info.txt angband-283/lib/edit/e_info.txt *** angband-282/lib/edit/e_info.txt Wed Sep 3 00:11:58 1997 --- angband-283/lib/edit/e_info.txt Fri Jan 30 00:47:08 1998 *************** *** 22,28 **** # Version stamp (required) ! V:2.8.2 ### Body Armor ### --- 22,28 ---- # Version stamp (required) ! V:2.8.3 ### Body Armor ### diff -c -r angband-282/lib/edit/f_info.txt angband-283/lib/edit/f_info.txt *** angband-282/lib/edit/f_info.txt Wed Sep 3 00:12:01 1997 --- angband-283/lib/edit/f_info.txt Fri Jan 30 00:47:11 1998 *************** *** 16,22 **** # Version stamp (required) ! V:2.8.2 # 0x00 --> nothing --- 16,22 ---- # Version stamp (required) ! V:2.8.3 # 0x00 --> nothing diff -c -r angband-282/lib/edit/k_info.txt angband-283/lib/edit/k_info.txt *** angband-282/lib/edit/k_info.txt Wed Sep 3 00:12:13 1997 --- angband-283/lib/edit/k_info.txt Fri Jan 30 00:47:14 1998 *************** *** 23,29 **** # Version stamp (required) ! V:2.8.2 ##### Something special ##### --- 23,29 ---- # Version stamp (required) ! V:2.8.3 ##### Something special ##### diff -c -r angband-282/lib/edit/r_info.txt angband-283/lib/edit/r_info.txt *** angband-282/lib/edit/r_info.txt Wed Sep 3 00:13:08 1997 --- angband-283/lib/edit/r_info.txt Fri Jan 30 00:47:21 1998 *************** *** 108,114 **** # Version stamp (required) ! V:2.8.2 ##### The Player ##### --- 108,114 ---- # Version stamp (required) ! V:2.8.3 ##### The Player ##### *************** *** 2693,2699 **** B:HIT:HURT:3d5 B:HIT:HURT:3d5 F:UNIQUE | MALE | ! F:FORCE_MAXHP | FORCE_SLEEP | DROP_1D2 | DROP_GOOD | F:OPEN_DOOR | BASH_DOOR | F:IM_FIRE | IM_COLD | IM_POIS | NO_CONF | NO_SLEEP S:1_IN_6 | --- 2693,2700 ---- B:HIT:HURT:3d5 B:HIT:HURT:3d5 F:UNIQUE | MALE | ! F:FORCE_MAXHP | FORCE_SLEEP | ! F:ONLY_ITEM | DROP_1D2 | DROP_GOOD | F:OPEN_DOOR | BASH_DOOR | F:IM_FIRE | IM_COLD | IM_POIS | NO_CONF | NO_SLEEP S:1_IN_6 | diff -c -r angband-282/lib/edit/v_info.txt angband-283/lib/edit/v_info.txt *** angband-282/lib/edit/v_info.txt Wed Sep 3 00:13:12 1997 --- angband-283/lib/edit/v_info.txt Fri Jan 30 00:47:26 1998 *************** *** 13,19 **** # Version stamp (required) ! V:2.8.2 ### Simple Vaults (type 7) -- maximum size 44x22 ### --- 13,19 ---- # Version stamp (required) ! V:2.8.3 ### Simple Vaults (type 7) -- maximum size 44x22 ### diff -c -r angband-282/lib/file/news.txt angband-283/lib/file/news.txt *** angband-282/lib/file/news.txt Wed Sep 3 00:13:16 1997 --- angband-283/lib/file/news.txt Sun Feb 8 04:56:22 1998 *************** *** 1,22 **** ! *********************** ! ** Angband 2.8.2 ** ! *********************** - Based on Moria: Copyright (c) 1985 Robert Alan Koeneke - and Umoria: Copyright (c) 1989 James E. Wilson - Angband 2.0 - 2.4: Alex Cutler, Andy Astrand, Sean Marsh, - Geoff Hill, Charles Teague, and others - Angband 2.5 - 2.6: Charles Swiger (cs4w+@andrew.cmu.edu) - Angband 2.7 - 2.8: Ben Harrison (benh@voicenet.com) - Curses/X11 Module: Ben Harrison, Torbj|rn Lindgren - - Angband 2.8.2 is available for Unix, X11, Macintosh, IBM, Windows, etc. - Be sure to read the online help, especially "general.txt" and "version.txt". - - Visit the Angband Home Page at "http://www.voicenet.com/~benh/Angband/". - Send all comments, bug reports, patches, etc, to "benh@voicenet.com". --- 1,24 ---- ! ************************************************** ! ** Angband 2.8.3 ** The Pits of Angband ** ! ************************************************** ! ! Based on Moria: Copyright (c) 1985 Robert Alan Koeneke ! and Umoria: Copyright (c) 1989 James E. Wilson ! ! Angband 2.0 - 2.4 - 2.6.2 by: ! Alex Cutler, Andy Astrand, Sean Marsh, ! Geoff Hill, Charles Teague, Charles Swiger ! ! Angband 2.8.3: Copyright (c) 1997 Ben Harrison ! ! Send comments, bug reports, and patches, to "benh@phial.com" ! Visit the Angband Home Page at "http://www.phial.com/angband/" ! Browse the Angband newsgroup at "news:rec.games.roguelike.angband" ! Read the online help files, especially "general.txt" and "version.txt" ! Angband is available for Unix, X11, DOS, Windows, Macintosh, Amiga, etc. diff -c -r angband-282/lib/help/general.txt angband-283/lib/help/general.txt *** angband-282/lib/help/general.txt Wed Sep 10 20:38:47 1997 --- angband-283/lib/help/general.txt Sun Feb 8 04:04:55 1998 *************** *** 55,82 **** it contained a few minor (non-fatal) bugs (see the web page). You can give Angband 2.7.8 to your friends while they wait for Angband 2.8.2. ! Angband 2.8.2 will be the next official "stable" version. A whole lot of changes have been made since Angband 2.7.8 was released, and there is now a web page listing all of the changes made in each version since that one. ! Angband 2.7.9v1, 2.7.9v2, 2.7.9v3, 2.7.9v4, 2.7.9v5, 2.7.9v6, 2.8.0, and ! 2.8.1 are intended as "transition" versions leading up to Angband 2.8.2, ! and they are all still available (for now) at the ftp sites. Note that ! Angband 2.8.2 is based on Angband 2.8.1, and will incorporate only those ! changes needed to fix problems encountered in Angband 2.8.1, so it should ! be available as soon as the public beta testing phase is complete. ! ! See the Official Angband Home Page "http://www.voicenet.com/~benh/Angband" ! for up to date information about the latest version of Angband, including ! a complete list of recent modifications and known bugs. You can obtain the latest source and pre-compiled executables from various places, try "ftp://ftp.cis.ksu.edu/pub/Games/Angband/Angband-2.7.x" and the developer site at "ftp://export.andrew.cmu.edu/angband". ! You can email compliments, complaints, bug reports, and presents to ! me ("benh@voicenet.com"), and you can post interesting experiences, ! general questions, compilation questions and code suggestions to the ! newsgroup ("rec.games.roguelike.angband"). You may freely distribute the game, and its source, though you are bound not only by the existing copyright notice from 1984, but also whatever --- 55,80 ---- it contained a few minor (non-fatal) bugs (see the web page). You can give Angband 2.7.8 to your friends while they wait for Angband 2.8.2. ! Angband 2.8.3 will be the next official "stable" version. A whole lot of changes have been made since Angband 2.7.8 was released, and there is now a web page listing all of the changes made in each version since that one. ! Angband 2.7.9v1, 2.7.9v2, 2.7.9v3, 2.7.9v4, 2.7.9v5, 2.7.9v6, 2.8.0, 2.8.1, ! and 2.8.2, are basically "transition" versions leading up to Angband 2.8.3, ! and they are all still available (for now) at the ftp sites. Angband 2.8.3 ! is based on all previous versions, and incorporates bug fixes in addition to ! new features. ! ! See the Official Angband Home Page ("http://www.phial.com/angband/") for up ! to date information about the latest version of Angband, including a complete ! list of recent modifications and known bugs. You can obtain the latest source and pre-compiled executables from various places, try "ftp://ftp.cis.ksu.edu/pub/Games/Angband/Angband-2.7.x" and the developer site at "ftp://export.andrew.cmu.edu/angband". ! You can email compliments, complaints, suggestions, bug reports, and patches ! to me ("benh@phial.com"), and you can post interesting experiences and basic ! questions to the newsgroup ("rec.games.roguelike.angband"). You may freely distribute the game, and its source, though you are bound not only by the existing copyright notice from 1984, but also whatever *************** *** 97,102 **** --- 95,102 ---- specified external directory, to allow access via the "online help" system. Remember to tell all your friends about how much you like Angband... + + === A quick demonstration === diff -c -r angband-282/lib/help/option.txt angband-283/lib/help/option.txt *** angband-282/lib/help/option.txt Wed Sep 10 20:53:39 1997 --- angband-283/lib/help/option.txt Wed Feb 11 06:30:27 1998 *************** *** 65,100 **** discounts. The resulting stack keeps the largest discount. This option may cause you to lose "value", but will give you optimal pack usage. ! Show labels in object lists [show_labels] ! Display the "labels" for objects in the "equipment" list, and in any ! "special" window which is displaying the "equipment". These labels ! indicate what the player is "using" the object for, such as "wielding" ! or "wearing" (in a given location). After you have played for a while, ! this information is no longer useful, and can be annoying. ! ! Show weights in object lists [show_weights] ! Display the weights of objects in the "inventory" and "equipment" lists, ! and in "stores", and in any "special" window which is displaying objects. ! ! Show choices in certain sub-windows [show_choices] ! Display "choices" in any sub-windows which are being used to display ! your inventory or equipment. Also, if exactly one sub-window is being ! used to display your inventory or equipment, then it will (temporarily) ! be toggled as needed to always show the "appropriate" set of objects. ! ! Show details in certain sub-windows [show_details] ! Display extra details in any sub-windows (and the main screen) which ! are being used to display monster recall. These details include the ! number of monsters killed and the textual descriptions. Audible bell (on errors, etc) [ring_bell] Attempt to make a "bell" noise when various "errors" occur. - Use color for inventory listings [inventory_colors] - Use color for object descriptions whenever the inventory, equipment, - or store contents are being displayed. The colors are based on object - types, not on actual object colors. - === Option Set 2 -- Disturbance === --- 65,97 ---- discounts. The resulting stack keeps the largest discount. This option may cause you to lose "value", but will give you optimal pack usage. ! Show labels in equipment listings [show_labels] ! Display "labels" (what an object is being used for) for objects in all ! "equipment" listings. ! ! Show weights in all object listings [show_weights] ! Display "weights" (in pounds) of objects in all "inventory", "equipment", ! "store items", and "home items" listings. ! ! Show choices in inven/equip listings [show_choices] ! Display "choices" (legal responses) in any sub-windows which are being ! used to display your inventory or equipment. Also, if one sub-window ! is being used to display your inventory or equipment, then this option ! will cause it to be (temporarily) toggled as needed to always show the ! "appropriate" set of objects (inventory or equipment). ! ! Show details in monster descriptions [show_details] ! Display "details" (including number of monsters killed, and textual ! descriptions) in monster descriptions. ! are displaying the monster. ! ! Show flavors in object descriptions [show_flavors] ! Display "flavors" (color or variety) in object descriptions, even for ! objects whose type is known. This does not affect objects in stores. Audible bell (on errors, etc) [ring_bell] Attempt to make a "bell" noise when various "errors" occur. === Option Set 2 -- Disturbance === *************** *** 148,153 **** --- 145,160 ---- Produce a "bell" noise, and flush all pending input, when various "failures" occur, as described above. + Verify destruction of objects [verify_destroy] + Prompt for verification of the "destroy" command. + + Verify use of special commands [verify_special] + Prompt for verification of the "special" commands (borg and debug). + + Allow quantity specification [allow_quantity] + Prompt for a quantity when necessary, instead of defaulting to a + single object. + === Option Set 3 -- Game-play === *************** *** 224,237 **** option is extremely slow, but can produce viciously smart monsters. Monsters chase recent locations (v.slow) [flow_by_smell] ! As above, but also allow monsters to take advantage of "old" trails ! that you may have left in the dungeon. ! ! Monsters follow the player (beta) [track_follow] ! This option is currently non-functional. ! ! Monsters target the player (beta) [track_target] ! This option is currently non-functional. Monsters learn from their mistakes [smart_learn] Allow monsters to learn what spell attacks you are resistant to, --- 231,238 ---- option is extremely slow, but can produce viciously smart monsters. Monsters chase recent locations (v.slow) [flow_by_smell] ! Allow monsters to take advantage of "old" trails that you may have left ! in the dungeon. This has no effect unless "flow_by_sound" is also set. Monsters learn from their mistakes [smart_learn] Allow monsters to learn what spell attacks you are resistant to, *************** *** 247,260 **** Reduce lite-radius when running [view_reduce_lite] Reduce the "radius" of the player's "lite" to that of a "torch" when the player is "running", which makes running more "efficient", ! but is extremely annoying. Certain older versions of Angband used ! this behavior always, so "purists" should turn it on. ! Reduce view-radius in town [view_reduce_view] ! Reduce the "radius" of the player's "view" by half when the player ! is in town. This makes running faster in town, and also allows the ! player to ignore monsters in town which are more than ten grids away, ! which is usually safe, since none have distance attacks. Avoid checking for user abort [avoid_abort] Avoid checking to see if the user has pressed a key during resting --- 248,258 ---- Reduce lite-radius when running [view_reduce_lite] Reduce the "radius" of the player's "lite" to that of a "torch" when the player is "running", which makes running more "efficient", ! but is extremely annoying. ! Hide player symbol when running [hidden_player] ! Hide the player symbol when the player is "running", which makes the ! game somewhat faster. Avoid checking for user abort [avoid_abort] Avoid checking to see if the user has pressed a key during resting *************** *** 293,302 **** time, since it will prevent you from continuing your macro while being attacked by a monster. - Flush input before every command [flush_command] - This option forces the game to flush all pending input before every - command. This option is silly, unless you are very paranoid. - Flush output before every command [fresh_before] This option forces the game to flush all output before every command. This will give you maximal information, but may slow down the game --- 291,296 ---- *************** *** 304,320 **** resting, running, or repeating commands, since the outout is always flushed when the game is waiting for a keypress from the user. ! Flush output after every command [fresh_after] This option forces the game to flush all output after not only every player command, but also after every round of processing monsters and ! objects, which will give you maximal information, but may slow down ! the game a lot, especially on slower machines, and on faster machines ! you normally do not have a chance to see the results anyway. ! ! Flush output after every message [fresh_message] ! This option forces the game to flush all output after every message ! displayed by the game. This will give you maximal information, but ! may slow down the game somewhat. Compress messages in savefiles [compress_savefile] Compress the savefile, by only saving the most recent "messages" that --- 298,309 ---- resting, running, or repeating commands, since the outout is always flushed when the game is waiting for a keypress from the user. ! Flush output after certain things [fresh_after] This option forces the game to flush all output after not only every player command, but also after every round of processing monsters and ! objects, and after every message, which will maximize your information, ! but may slow down the game a lot, especially on slower machines, and on ! faster machines you cannot see the results anyway. Compress messages in savefiles [compress_savefile] Compress the savefile, by only saving the most recent "messages" that *************** *** 410,415 **** --- 399,409 ---- Display a brief description of the character, including a breakdown of the current player "skills" (including attacks/shots per round). + Display player flags + Display a brief description of the character, including a breakdown + of the contributions of each equipment item to various resistances + and stats. + Display messages Display the most recently generated "messages". *************** *** 442,459 **** at which the player is warned that he may die. It is also used as the cut-off for using red to display both hitpoints and mana. ! The "delay_factor" value, if non-zero, is used to "slow down" the game, which is ! useful to allow you to "observe" the temporal effects of bolt, beam, and ball ! attacks. The actual delay is equal to "delay_factor" cubed, in milliseconds. ! The "preserve" flag, if set when the character was created, cancels all level feelings of the "special" variety, but allows "missed" artifacts to be "saved" by wandering monsters and found again at a later time. This only works for ! non-identified artifacts. ! The "maximize" flag, if set when the character was created, causes the "race" and "class" stat bonuses to be applied as "equipment" bonuses. This usually makes the character harder at the beginning of the game, but easier later on, ! since the stats are no longer limited to a "natural" value of "18/100". --- 436,455 ---- at which the player is warned that he may die. It is also used as the cut-off for using red to display both hitpoints and mana. ! The "delay_factor" value, if non-zero, will slow down the visual effects used ! for missile, bolt, beam, and ball attacks. The actual time delay is equal to ! "delay_factor" cubed, in milliseconds. ! The "preserve" flag (specified when a character is created) cancels all level feelings of the "special" variety, but allows "missed" artifacts to be "saved" by wandering monsters and found again at a later time. This only works for ! non-identified artifacts. The character description screen shows the value ! of this flag. ! The "maximize" flag (specified when a character is created) causes the "race" and "class" stat bonuses to be applied as "equipment" bonuses. This usually makes the character harder at the beginning of the game, but easier later on, ! since the stats are no longer limited to a "natural" value of "18/100". The ! character description screen shows the value of this flag. diff -c -r angband-282/lib/help/playing.txt angband-283/lib/help/playing.txt *** angband-282/lib/help/playing.txt Thu Sep 11 22:59:24 1997 --- angband-283/lib/help/playing.txt Sun Feb 8 03:53:56 1998 *************** *** 19,29 **** includes many more "capital" and "control" keys, as shown below. Note that any keys that are not required for access to the underlying ! command set may be used by the user as "command macro" triggers (see below). ! You may always specify any "underlying command" directly by pressing backslash ! ("\") plus the "underlying command" key. This is normally only used in "macro" ! definitions. You may often enter "control-keys" as a caret ("^") plus the key ! (so "^" + "p" often yields "^P"). Some commands allow an optional "repeat count", which allows you to tell the game that you wish to do the command multiple times, unless you press a --- 19,29 ---- includes many more "capital" and "control" keys, as shown below. Note that any keys that are not required for access to the underlying ! command set may be used by the user to extend the "keyset" which is being ! used, by defining new "keymaps". To avoid the use of any "keymaps", press ! backslash ("\") plus the "underlying command" key. This is normally only ! used in "macro" definitions. You may enter "control-keys" as a caret ("^") ! plus the key (so "^" + "p" yields "^P"). Some commands allow an optional "repeat count", which allows you to tell the game that you wish to do the command multiple times, unless you press a *************** *** 69,80 **** allow the use of the "5" key to "stand still", which is most convenient when using the original keyset. ! Note that on many systems, it is possible to define "macros" (or "command ! macros") to various keys, or key combinations, so that it is often possible to ! make macros which, for example, allow the use of the shift or control modifier ! keys, plus a numeric keypad key, to specify the "run" or "alter" command, with ! the given direction, regardless of any keymap definitions, by using the fact ! that you can always, for example, use "\" + "." + "6", to specify "run east". --- 69,80 ---- allow the use of the "5" key to "stand still", which is most convenient when using the original keyset. ! Note that on many systems, it is possible to define "macros" to various ! keys, or key combinations, so that it is often possible to make macros which, ! for example, allow the use of the shift and/or control modifier keys, plus a ! numeric keypad key, to specify the "run" or "alter" command, with the given ! direction, regardless of any keymap definitions, by using the fact that you ! can always, for example, use "\" + "." + "6", to specify "run east". *************** *** 365,437 **** "macros", which are mappings from a single logical keypress to a sequence of keypresses, allowing you to use special keys on the keyboard, such as function keys or keypad keys, possibly in conjunction with modifier keys, ! to "automate" repetitive multi-keypress commands that you use a lot. The ! macros can be marked as "normal" macros, which means they will fire any ! time you press the trigger key, or as "command" macros, which means they ! will only fire if you are being asked for a command. The command macros ! are a hack which allow you to use keys which are not used for any command ! to trigger a macro, without inducing strange behavior if you attempt to ! use those keys in a special situation, such as entering an inscription. ! Since macros represent sequences of keypresses, and not all keypresses have a printable representation, macro triggers and actions must often be "encoded" into a human readible form. This is done using several types ! of encoding, including "\xHH" for character number HH in hexidecimal, ! "\NNN" for character number NNN in octal, "\e" for the "escape" code, ! "\n" for the "newline" code, "\r" for the "return" code, "\s" for the ! "space" code, "\\" for backslash, "\^" for caret, and "^X" for the code ! for any "control" key "ctrl-X". Note that the "action" of a macro will ! not be checked against other macro triggers, so you cannot make infinite loops. You may specify extremely long macros, but you are limited in length by the underlying input mechanisms, which in general limit you to about 1024 keys in both triggers and actions. The special "\" command (which must be encoded in macros as "\\") ! is very useful in macros, since it bypasses all macros and keymaps and the ! next keystroke is considered a command in the underlying Angband command ! set. For a list of the Angband command set, see the section on Command ! Descriptions below. For example, a macro which maps Shift-KP6 to "\" + ! "." + "6" will induce the "run east" behavior, regardless of what keyset ! the user has chosen, and regardless of what keymaps have been defined. ! ! Command macros, as mentioned above, can only be triggered when the ! player is in "command" mode (when Angband is expecting a normal command). ! This is useful for defining new commands or shortcuts that you want to map ! to normal keys. For example, by default, the "X" key is bound via a ! command macro to "w0", as mentioned above, so that you can use it to ! quickly switch between two weapons (or a digger and a weapon). Were this ! defined as a regular macro rather than a command macro, you would never be ! able, for example, to enter the filename "BOXES.TXT", since the macro would ! fire, chaning your input to "BOw0ES.Tw0T". In general, you will want to use ! command macros rather than normal macros, though, for example, normal macros ! can be told to produce a leading sequence of keys starting with "\e\e\e\e", ! which will clear any "-more-" prompts or other silliness. --- User Pref Files (Keymaps) --- The "Interact with macros" command also allows you to define "keymaps", which are vaguely related to macros. A keymap maps a single ! keypress to another single keypress with an optional direction. Angband ! uses keymaps internally to map both the original and the roguelike keysets ! to the underlying command set. This means that when you are defining ! keymaps, the keypress you map a key to must be an underlying command, not ! a keypress from the original or roguelike keysets. Note that the original ! keyset is almost identical to the underlying keyset, except that "numbers" ! are mapped to "," or ";" plus a direction, "T" is mapped to "+", and a few ! control-keys are mapped to various things. See below for the full set of ! underlying commands. Normally, there is no reason to use a keymap, unless ! you want to prevent accidental use of certain commands, and you are afraid ! those commands might be contained in some macro action. Also, you could ! use a keymap to allow the use of a single set of macros which included the ! "pray prayer" ("p") or "cast spell" ("m") command, as appropriate, by using ! "m" in the macros, and making a keymap from "m" to "p" when using a priest. ! ! There is only one way to specify a "keymap" in a user pref commands. ! The "S:::" command activates a keymap from the "" key to ! the "" key, with optional direction "". Note that both "" and ! "" must currently be specified as ascii values, and "" should be a ! "numeric" direction, 1 to 9, or "zero" for "no direction". Eventually, the ! use of the "5" direction might be allowed to specify automatic use of the ! current target (if legal) with the given keymap. --- User Pref Files (Visuals) --- --- 365,415 ---- "macros", which are mappings from a single logical keypress to a sequence of keypresses, allowing you to use special keys on the keyboard, such as function keys or keypad keys, possibly in conjunction with modifier keys, ! to "automate" repetitive multi-keypress commands that you use a lot. ! ! Since macros represent keypress sequences, and not all keypresses have a printable representation, macro triggers and actions must often be "encoded" into a human readible form. This is done using several types ! of encoding, including "\xHH" for character number HH in hexidecimal, "\e" ! for the "escape" code, "\n" for the "newline" code, "\r" for the "return" ! code, "\s" for the "space" code, "\\" for backslash, "\^" for caret, and ! "^X" for the code for any "control" key "ctrl-X". Note that the "action" ! of a macro will not be checked against other macro triggers (unless the ! macro action contains a "control-backslash"), so you cannot make infinite loops. You may specify extremely long macros, but you are limited in length by the underlying input mechanisms, which in general limit you to about 1024 keys in both triggers and actions. The special "\" command (which must be encoded in macros as "\\") ! is very useful in macros, since it bypasses all keymaps and allows the next ! keystroke to be considered a command in the underlying Angband command set. ! For a list of the Angband command set, see the "command.txt" help file. ! For example, a macro which maps Shift-KP6 to "\" + "." + "6" will induce ! the "run east" behavior, regardless of what keyset the user has chosen, and ! regardless of what keymaps have been defined. ! ! Macros can be specified in user pref files as a pair of lines, one ! of the form "A:", which defines the encoded macro action, and one of ! the form "P:", which defines the encoded macro trigger. --- User Pref Files (Keymaps) --- The "Interact with macros" command also allows you to define "keymaps", which are vaguely related to macros. A keymap maps a single ! keypress to a series of keypresses, which bypass both other keymaps and ! any macros. Angband uses keymaps to map the original and the roguelike ! keysets to the underlying command set, and allows the user to modify or ! add keymaps of their own. Note that all keymap actions must be specified ! using underlying commands, not keypresses from the original or roguelike ! keysets. The original keyset is almost identical to the underlying keyset, ! except that "numbers" are mapped to ";" plus a direction, "5" is mapped to ! ",", and a few control-keys are mapped to various things. See "command.txt" ! for the full set of underlying commands. Some uses for keymaps include the ! ability to "disable" a command by mapping it to "\x00", ! ! Keymaps can be specified in user pref files as line of the form ! "M: ", where is the keyset (0/1 for original/roguelike), ! is the encoded trigger key, and is the encoded keymap action. --- User Pref Files (Visuals) --- *************** *** 453,458 **** --- 431,439 ---- Note that this command can be abused in various ways, and if you must do so, remember that you are only cheating yourself. + Keymaps can be specified in user pref files as line of the form + "R::/" or "K::/" or "F::/" or "U::/". + --- User Pref Files (Colors) --- The "Interact with colors" command allows you to change the actual *************** *** 461,466 **** --- 442,450 ---- change the actual RGB values used to represent each of the 16 colors used by Angband, and perhaps even allow you to define new colors which are not currently used by Angband. + + Colors can be specified in user pref files as line of the form + "V:::::". --- User Pref Files (Options) --- diff -c -r angband-282/lib/help/version.txt angband-283/lib/help/version.txt *** angband-282/lib/help/version.txt Wed Sep 10 20:44:46 1997 --- angband-283/lib/help/version.txt Sun Feb 8 04:08:00 1998 *************** *** 1,12 **** === Version Information === ! This file was last updated for Angband 2.8.2. ! Make sure to read the newsgroup "rec.games.roguelike.angband", and to ! visit the website "http://www.voicenet.com/~benh/Angband/" for the most up to date information about Angband. ! Angband 2.8.2 has an incredibly complex history, and is the result of a lot of work by a lot of people, all of whom have contributed their time and energy for free, being rewarded only by the pleasure of keeping alive one of the best freeware games available anywhere. --- 1,12 ---- === Version Information === ! This file was last updated for Angband 2.8.3. ! Make sure to read the newsgroup ("rec.games.roguelike.angband"), and to visit ! the Official Angband Home Page ("http://www.phial.com/angband/") for the most up to date information about Angband. ! Angband 2.8.3 has an incredibly complex history, and is the result of a lot of work by a lot of people, all of whom have contributed their time and energy for free, being rewarded only by the pleasure of keeping alive one of the best freeware games available anywhere. *************** *** 16,21 **** --- 16,22 ---- we must rely on simpler methods, such as change logs, source file diffs, and word of mouth. Some of this information is summarized in this file. + Please be sure to read the copyright information at the end of this file. === Brief Version History === *************** *** 92,115 **** After Angband 2.7.8 was released, I created a web site to keep track of all the changes made in each version (though a few may have been missed), and acquired the use of a new develoepement ftp server to supplement the ! official "mirror" server. The next few releases, from Angband 2.7.9v1 ! through Angband 2.7.9v6, really should have been given their own separate ! version numbers, but I kept thinking that I wanted to save Angband 2.8.0 ! for a really special release. Angband 2.8.0 and Angband 2.8.1 were then ! released using a more normal version scheme. Angband 2.8.2 will hopefully ! be an official stable release cleanup, and includes mostly just bug fixes ! and general cleanup of Angband 2.8.1, plus a few minor new features. Note ! that almost all changes made in each version released after Angband 2.7.8 ! can be found at the Official Angband Home Page, and I just wish that I had ! thought of keeping a change log for the earlier versions as well. ! The Official Angband Home Page ("http://www.voicenet.com/~benh/Angband/") ! was created to serve as the most up to date description of Angband, listing changes made between versions, and changes planned for upcoming versions, ! and to list various email addresses and web sites related to Angband. ! === Some of the changes from Angband 2.6.1 to Angband 2.7.9 === It is very hard to pin down, along the way from 2.6.2 to 2.7.8, exactly what changes were made, and exactly when they were made. Most releases --- 93,113 ---- After Angband 2.7.8 was released, I created a web site to keep track of all the changes made in each version (though a few may have been missed), and acquired the use of a new develoepement ftp server to supplement the ! official "mirror" server. This web site is now permanently located at ! the Official Angband Home Page (http://www.phial.com). Unfortunately, ! the next six versions were numbered Angband 2.7.9v1 to Angband 2.7.9v6, ! but really each were rather major updates. Angband 2.8.0 and 2.8.1 were ! released using a more normal version scheme. Angband 2.8.2 and 2.8.3 add ! a few random features, clean up some code, and provide graphics support ! and such for a few more platforms. ! The Official Angband Home Page ("http://www.phial.com/angband/") serves ! not only as the most up to date description of Angband, but also lists changes made between versions, and changes planned for upcoming versions, ! and lists various email addresses and web sites related to Angband. ! === Some of the changes between Angband 2.6.1 and Angband 2.7.8 === It is very hard to pin down, along the way from 2.6.2 to 2.7.8, exactly what changes were made, and exactly when they were made. Most releases *************** *** 118,125 **** Most of the changes, with the notable exception of the creation of some of the new "main-xxx.c" files for the various new platforms, and a few other minor exceptions generally noted directly in comments in the source, were ! written by myself, either spontaneously, or, more commonly, as the result of ! a suggestion or comment by an Angband player. The most important modification was a massive "code level cleanup" that made all of my other modifications much simpler and safer. This cleanup was so --- 116,123 ---- Most of the changes, with the notable exception of the creation of some of the new "main-xxx.c" files for the various new platforms, and a few other minor exceptions generally noted directly in comments in the source, were ! written by myself, either spontaneously, or, more commonly, as the result ! of a suggestion or comment by an Angband player. The most important modification was a massive "code level cleanup" that made all of my other modifications much simpler and safer. This cleanup was so *************** *** 431,435 **** --- 429,442 ---- Angband Version 2.7 : 01/01/95 Ben Harrison Angband Version 2.8 : 01/01/97 Ben Harrison + + + + Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke + + This software may be copied and distributed for educational, research, + and not for profit purposes provided that this copyright and statement + are included in all such copies. Other copyrights may also apply. + diff -c -r angband-282/lib/user/font-ami.prf angband-283/lib/user/font-ami.prf *** angband-282/lib/user/font-ami.prf Wed Sep 3 00:14:25 1997 --- angband-283/lib/user/font-ami.prf Mon Feb 9 06:30:11 1998 *************** *** 1,9 **** ! # font-ami.prf # # This file contains text remapping data # currently used in the Amiga version. # # Lars Haugseth # Color palette - Text --- 1,11 ---- ! # File: font-ami.prf ! # # This file contains text remapping data # currently used in the Amiga version. # # Lars Haugseth + # # Color palette - Text Only in angband-283/lib/user: font-dos.prf Only in angband-283/lib/user: font-x11.prf Only in angband-283/lib/user: font-xxx.prf diff -c -r angband-282/lib/user/font.prf angband-283/lib/user/font.prf *** angband-282/lib/user/font.prf Wed Sep 3 00:14:32 1997 --- angband-283/lib/user/font.prf Mon Feb 9 04:51:59 1998 *************** *** 9,26 **** # ! ## # OPTION: Display "veins" (white "%") as "normal walls" (white "#") ! ## # This replaces the old method of setting "notice_seams" to false, ! ## # which no longer works as of Angband 2.7.9, for various reasons. ! ## ! ## F:50:1/35 ! ## F:51:1/35 ! ## F:52:1/35 ! ## F:53:1/35 ##### System Specific Subfiles ##### ?:[EQU $SYS ami] %:font-ami.prf --- 9,36 ---- # ! ## # ! ## # OPTION: Display "veins" (white "%") as "normal walls" (white "#"). ! ## # ! ## F:50:0x01/0x23 ! ## F:51:0x01/0x23 ! ## F:52:0x01/0x23 ! ## F:53:0x01/0x23 ! ! ! ##### Standard font file ##### ! ! %:font-xxx.prf ##### System Specific Subfiles ##### + ?:[IOR [EQU $SYS xaw] [EQU $SYS x11]] + %:font-x11.prf + + ?:[EQU $SYS gcu] + %:font-gcu.prf + ?:[EQU $SYS ami] %:font-ami.prf *************** *** 30,35 **** --- 40,57 ---- ?:[EQU $SYS win] %:font-win.prf + ?:[EQU $SYS dos] + %:font-dos.prf + ?:[EQU $SYS ibm] %:font-ibm.prf + + ?:[EQU $SYS emx] + %:font-emx.prf + + ?:[EQU $SYS acn] + %:font-acn.prf + + ?:1 + diff -c -r angband-282/lib/user/graf-ami.prf angband-283/lib/user/graf-ami.prf *** angband-282/lib/user/graf-ami.prf Wed Sep 3 00:14:33 1997 --- angband-283/lib/user/graf-ami.prf Mon Feb 9 06:30:01 1998 *************** *** 1,9 **** ! # graf-ami.prf # # This file contains color definitions and # graphics remapping for the Amiga version. # # Lars Haugseth # Color palette - Graphics --- 1,11 ---- ! # File: graf-ami.prf ! # # This file contains color definitions and # graphics remapping for the Amiga version. # # Lars Haugseth + # # Color palette - Graphics *************** *** 23,28 **** --- 25,31 ---- V:13:0x01:0x90:0x00:0xB0 V:14:0x01:0x00:0x60:0x10 V:15:0x01:0x60:0xF0:0x40 + # Color palette - Text V:16:0x01:0x00:0x00:0x00 Only in angband-283/lib/user: graf-ibm.prf Only in angband-283/lib/user: graf-x11.prf diff -c -r angband-282/lib/user/graf-xxx.prf angband-283/lib/user/graf-xxx.prf *** angband-282/lib/user/graf-xxx.prf Wed Sep 3 00:14:48 1997 --- angband-283/lib/user/graf-xxx.prf Wed Feb 11 06:30:27 1998 *************** *** 7,48 **** # # This file is included by any platform which uses the "standard" Angband # bitmap file (a 32x32 collection of 8x8 bitmaps), including "pref-ami.prf", ! # "pref-mac.prf", and "pref-win.prf". # # Adapted from the file "graf-ami.prf", provided, along with the original # pixmap file itself, by Lars Haugseth . # - ### Graphics codes for "unknown objects" ! # Unknown Amulet ! U:40:0x87/0x81 - # Unknown Ring - U:45:0x82/0x81 ! # Unknown Staff ! U:55:0x86/0x99 - # Unknown Wand - U:65:0x86/0x8F - # Unknown Rod - U:66:0x86/0x94 ! # Unknown Scroll ! U:70:0x86/0x80 - # Unknown Potion - U:75:0x86/0x85 - - # Unknown Food - U:80:0x8A/0x94 - - - - ### Feature attr/char definitions # nothing F:0:0x81/0x80 --- 7,315 ---- # # This file is included by any platform which uses the "standard" Angband # bitmap file (a 32x32 collection of 8x8 bitmaps), including "pref-ami.prf", ! # "pref-mac.prf", "pref-win.prf", "pref-dos.prf", and "pref-x11.prf". # # Adapted from the file "graf-ami.prf", provided, along with the original # pixmap file itself, by Lars Haugseth . # ! ##### Special attr/char values ##### ! ## # Unused (@) ! ## S:0x00:0x00/0x40 ! ## S:0x01:0x01/0x40 ! ## S:0x02:0x02/0x40 ! ## S:0x03:0x03/0x40 ! ## S:0x04:0x04/0x40 ! ## S:0x05:0x05/0x40 ! ## S:0x06:0x06/0x40 ! ## S:0x07:0x07/0x40 ! ## S:0x08:0x08/0x40 ! ## S:0x09:0x09/0x40 ! ## S:0x0A:0x0A/0x40 ! ## S:0x0B:0x0B/0x40 ! ## S:0x0C:0x0C/0x40 ! ## S:0x0D:0x0D/0x40 ! ## S:0x0E:0x0E/0x40 ! ## S:0x0F:0x0F/0x40 ! ! ## # Unused (@) ! ## S:0x10:0x00/0x40 ! ## S:0x11:0x01/0x40 ! ## S:0x12:0x02/0x40 ! ## S:0x13:0x03/0x40 ! ## S:0x14:0x04/0x40 ! ## S:0x15:0x05/0x40 ! ## S:0x16:0x06/0x40 ! ## S:0x17:0x07/0x40 ! ## S:0x18:0x08/0x40 ! ## S:0x19:0x09/0x40 ! ## S:0x1A:0x0A/0x40 ! ## S:0x1B:0x0B/0x40 ! ## S:0x1C:0x0C/0x40 ! ## S:0x1D:0x0D/0x40 ! ## S:0x1E:0x0E/0x40 ! ## S:0x1F:0x0F/0x40 ! ! ## # Unused (@) ! ## S:0x20:0x00/0x40 ! ## S:0x21:0x01/0x40 ! ## S:0x22:0x02/0x40 ! ## S:0x23:0x03/0x40 ! ## S:0x24:0x04/0x40 ! ## S:0x25:0x05/0x40 ! ## S:0x26:0x06/0x40 ! ## S:0x27:0x07/0x40 ! ## S:0x28:0x08/0x40 ! ## S:0x29:0x09/0x40 ! ## S:0x2A:0x0A/0x40 ! ## S:0x2B:0x0B/0x40 ! ## S:0x2C:0x0C/0x40 ! ## S:0x2D:0x0D/0x40 ! ## S:0x2E:0x0E/0x40 ! ## S:0x2F:0x0F/0x40 ! ! # Spells (*) ! S:0x30:0x85/0x92 ! S:0x31:0x85/0x92 ! S:0x32:0x85/0x92 ! S:0x33:0x85/0x92 ! S:0x34:0x85/0x92 ! S:0x35:0x85/0x92 ! S:0x36:0x85/0x92 ! S:0x37:0x85/0x92 ! S:0x38:0x85/0x92 ! S:0x39:0x85/0x92 ! S:0x3A:0x85/0x92 ! S:0x3B:0x85/0x92 ! S:0x3C:0x85/0x92 ! S:0x3D:0x85/0x92 ! S:0x3E:0x85/0x92 ! S:0x3F:0x85/0x92 ! ! # Spells (|) ! S:0x40:0x84/0x98 ! S:0x41:0x84/0x98 ! S:0x42:0x84/0x98 ! S:0x43:0x84/0x98 ! S:0x44:0x84/0x98 ! S:0x45:0x84/0x98 ! S:0x46:0x84/0x98 ! S:0x47:0x84/0x98 ! S:0x48:0x84/0x98 ! S:0x49:0x84/0x98 ! S:0x4A:0x84/0x98 ! S:0x4B:0x84/0x98 ! S:0x4C:0x84/0x98 ! S:0x4D:0x84/0x98 ! S:0x4E:0x84/0x98 ! S:0x4F:0x84/0x98 ! ! # Spells (-) ! S:0x50:0x84/0x99 ! S:0x51:0x84/0x99 ! S:0x52:0x84/0x99 ! S:0x53:0x84/0x99 ! S:0x54:0x84/0x99 ! S:0x55:0x84/0x99 ! S:0x56:0x84/0x99 ! S:0x57:0x84/0x99 ! S:0x58:0x84/0x99 ! S:0x59:0x84/0x99 ! S:0x5A:0x84/0x99 ! S:0x5B:0x84/0x99 ! S:0x5C:0x84/0x99 ! S:0x5D:0x84/0x99 ! S:0x5E:0x84/0x99 ! S:0x5F:0x84/0x99 ! ! # Spells (/) ! S:0x60:0x84/0x9A ! S:0x61:0x84/0x9A ! S:0x62:0x84/0x9A ! S:0x63:0x84/0x9A ! S:0x64:0x84/0x9A ! S:0x65:0x84/0x9A ! S:0x66:0x84/0x9A ! S:0x67:0x84/0x9A ! S:0x68:0x84/0x9A ! S:0x69:0x84/0x9A ! S:0x6A:0x84/0x9A ! S:0x6B:0x84/0x9A ! S:0x6C:0x84/0x9A ! S:0x6D:0x84/0x9A ! S:0x6E:0x84/0x9A ! S:0x6F:0x84/0x9A ! ! # Spells (\) ! S:0x70:0x84/0x9B ! S:0x71:0x84/0x9B ! S:0x72:0x84/0x9B ! S:0x73:0x84/0x9B ! S:0x74:0x84/0x9B ! S:0x75:0x84/0x9B ! S:0x76:0x84/0x9B ! S:0x77:0x84/0x9B ! S:0x78:0x84/0x9B ! S:0x79:0x84/0x9B ! S:0x7A:0x84/0x9B ! S:0x7B:0x84/0x9B ! S:0x7C:0x84/0x9B ! S:0x7D:0x84/0x9B ! S:0x7E:0x84/0x9B ! S:0x7F:0x84/0x9B ! ! # Amulets (") ! S:0x80:0x87/0x82 ! S:0x81:0x87/0x82 ! S:0x82:0x87/0x82 ! S:0x83:0x87/0x82 ! S:0x84:0x87/0x82 ! S:0x85:0x87/0x82 ! S:0x86:0x87/0x82 ! S:0x87:0x87/0x82 ! S:0x88:0x87/0x82 ! S:0x89:0x87/0x82 ! S:0x8A:0x87/0x82 ! S:0x8B:0x87/0x82 ! S:0x8C:0x87/0x82 ! S:0x8D:0x87/0x82 ! S:0x8E:0x87/0x82 ! S:0x8F:0x87/0x82 ! ! # Rings (=) ! S:0x90:0x82/0x83 ! S:0x91:0x82/0x83 ! S:0x92:0x82/0x83 ! S:0x93:0x82/0x83 ! S:0x94:0x82/0x83 ! S:0x95:0x82/0x83 ! S:0x96:0x82/0x83 ! S:0x97:0x82/0x83 ! S:0x98:0x82/0x83 ! S:0x99:0x82/0x83 ! S:0x9A:0x82/0x83 ! S:0x9B:0x82/0x83 ! S:0x9C:0x82/0x83 ! S:0x9D:0x82/0x83 ! S:0x9E:0x82/0x83 ! S:0x9F:0x82/0x83 ! ! # Staffs (_) ! S:0xA0:0x86/0x9A ! S:0xA1:0x86/0x9A ! S:0xA2:0x86/0x9A ! S:0xA3:0x86/0x9A ! S:0xA4:0x86/0x9A ! S:0xA5:0x86/0x9A ! S:0xA6:0x86/0x9A ! S:0xA7:0x86/0x9A ! S:0xA8:0x86/0x9A ! S:0xA9:0x86/0x9A ! S:0xAA:0x86/0x9A ! S:0xAB:0x86/0x9A ! S:0xAC:0x86/0x9A ! S:0xAD:0x86/0x9A ! S:0xAE:0x86/0x9A ! S:0xAF:0x86/0x9A ! ! # Wands (-) ! S:0xB0:0x86/0x8F ! S:0xB1:0x86/0x8F ! S:0xB2:0x86/0x8F ! S:0xB3:0x86/0x8F ! S:0xB4:0x86/0x8F ! S:0xB5:0x86/0x8F ! S:0xB6:0x86/0x8F ! S:0xB7:0x86/0x8F ! S:0xB8:0x86/0x8F ! S:0xB9:0x86/0x8F ! S:0xBA:0x86/0x8F ! S:0xBB:0x86/0x8F ! S:0xBC:0x86/0x8F ! S:0xBD:0x86/0x8F ! S:0xBE:0x86/0x8F ! S:0xBF:0x86/0x8F ! ! # Rods (-) ! S:0xC0:0x86/0x94 ! S:0xC1:0x86/0x94 ! S:0xC2:0x86/0x94 ! S:0xC3:0x86/0x94 ! S:0xC4:0x86/0x94 ! S:0xC5:0x86/0x94 ! S:0xC6:0x86/0x94 ! S:0xC7:0x86/0x94 ! S:0xC8:0x86/0x94 ! S:0xC9:0x86/0x94 ! S:0xCA:0x86/0x94 ! S:0xCB:0x86/0x94 ! S:0xCC:0x86/0x94 ! S:0xCD:0x86/0x94 ! S:0xCE:0x86/0x94 ! S:0xCF:0x86/0x94 ! ! # Scrolls (?) ! S:0xD0:0x86/0x82 ! S:0xD1:0x86/0x82 ! S:0xD2:0x86/0x82 ! S:0xD3:0x86/0x82 ! S:0xD4:0x86/0x82 ! S:0xD5:0x86/0x82 ! S:0xD6:0x86/0x82 ! S:0xD7:0x86/0x82 ! S:0xD8:0x86/0x82 ! S:0xD9:0x86/0x82 ! S:0xDA:0x86/0x82 ! S:0xDB:0x86/0x82 ! S:0xDC:0x86/0x82 ! S:0xDD:0x86/0x82 ! S:0xDE:0x86/0x82 ! S:0xDF:0x86/0x82 ! ! # Potions (!) ! S:0xE0:0x86/0x8D ! S:0xE1:0x86/0x8D ! S:0xE2:0x86/0x8D ! S:0xE3:0x86/0x8D ! S:0xE4:0x86/0x8D ! S:0xE5:0x86/0x8D ! S:0xE6:0x86/0x8D ! S:0xE7:0x86/0x8D ! S:0xE8:0x86/0x8D ! S:0xE9:0x86/0x8D ! S:0xEA:0x86/0x8D ! S:0xEB:0x86/0x8D ! S:0xEC:0x86/0x8D ! S:0xED:0x86/0x8D ! S:0xEE:0x86/0x8D ! S:0xEF:0x86/0x8D ! ! # Food (,) ! S:0xF0:0x8B/0x81 ! S:0xF1:0x8B/0x81 ! S:0xF2:0x8B/0x81 ! S:0xF3:0x8B/0x81 ! S:0xF4:0x8B/0x81 ! S:0xF5:0x8B/0x81 ! S:0xF6:0x8B/0x81 ! S:0xF7:0x8B/0x81 ! S:0xF8:0x8B/0x81 ! S:0xF9:0x8B/0x81 ! S:0xFA:0x8B/0x81 ! S:0xFB:0x8B/0x81 ! S:0xFC:0x8B/0x81 ! S:0xFD:0x8B/0x81 ! S:0xFE:0x8B/0x81 ! S:0xFF:0x8B/0x81 ! ##### Feature attr/char definitions ##### # nothing F:0:0x81/0x80 *************** *** 238,244 **** ! ### Object attr/char definitions # something K:0:0x01/0x20 --- 505,512 ---- ! ##### Object attr/char definitions ##### ! # something K:0:0x01/0x20 *************** *** 1550,1556 **** ! ### Monster attr/char definitions # Player R:0:0x8C/0x80 --- 1818,1825 ---- ! ##### Monster attr/char definitions ##### ! # Player R:0:0x8C/0x80 *************** *** 3197,3200 **** --- 3466,3471 ---- R:547:0x92/0x9E + # Load the special player pictures + %:xtra-xxx.prf diff -c -r angband-282/lib/user/graf.prf angband-283/lib/user/graf.prf *** angband-282/lib/user/graf.prf Wed Sep 3 00:14:49 1997 --- angband-283/lib/user/graf.prf Mon Feb 9 04:53:06 1998 *************** *** 9,25 **** # ##### System Specific Subfiles ##### ?:[EQU $SYS ami] %:graf-ami.prf ?:[EQU $SYS mac] %:graf-mac.prf ! ?:[EQU $SYS win] %:graf-win.prf ! ## ?:[EQU $SYS ibm] ! ## %:graf-ibm.prf --- 9,45 ---- # + ##### Standard font file ##### + + %:font-xxx.prf + + ##### System Specific Subfiles ##### + ?:[IOR [EQU $SYS xaw] [EQU $SYS x11]] + %:graf-x11.prf + + ?:[EQU $SYS gcu] + %:graf-gcu.prf + ?:[EQU $SYS ami] %:graf-ami.prf ?:[EQU $SYS mac] %:graf-mac.prf ! ?:[IOR [EQU $SYS win] [EQU $SYS dos]] %:graf-win.prf ! ?:[EQU $SYS ibm] ! %:graf-ibm.prf ! ! ?:[EQU $SYS emx] ! %:graf-emx.prf ! ! ?:[EQU $SYS acn] ! %:graf-acn.prf ! ! ?:1 ! diff -c -r angband-282/lib/user/pref-emx.prf angband-283/lib/user/pref-emx.prf *** angband-282/lib/user/pref-emx.prf Wed Sep 3 00:14:53 1997 --- angband-283/lib/user/pref-emx.prf Wed Feb 11 06:18:29 1998 *************** *** 1,163 **** # File: pref-emx.prf # ! # This file is used by Angband (when it was compiled using "main-emx.c") ! # to specify various "user preferences". This file specifies some visual ! # attr/char remappings, which allow the use of some of OS/2's built in ! # pseudo-graphic pictures for walls and such. This file defines some basic ! # macros, which allow the use of the "keypad", alone, and with the shift or ! # control modifier keys. All "special" keys are translated by "main-emx.c" ! # into special "macro triggers" of the encoded form "^_SSS\r", where the ! # two digit decimal scan code of the keypress is stored in "SSS", see ! # "main-emx.c" for info. # ! # This file is only used by the VIO (text mode) version of Angband. The PM (graphical) ! # version uses *ibm.prf. The macro triggers of these two versions are not ! # compatible or interchangable. # ! ! ! ! ### Terrain Features ### ! ! ! # ! # Floors (white / centered dot) ! # ! ! F:1:1/-7 ! # ! # Invis traps (white / centered dot) ! # ! ! F:2:1/-7 ! ! ! # ! # Magma (slate / special solid block) ! # ! ! F:50:2/-80 ! F:52:2/-80 ! ! # - # Quartz (light slate / special solid block) - # - - F:51:9/-80 - F:53:9/-80 - - - # - # Secret door (white / solid block) - # - - F:48:1/-79 - - # - # Granite walls (white / solid block) - # - - F:56:1/-79 - F:57:1/-79 - F:58:1/-79 - F:59:1/-79 - - # - # Permanent rock (white / solid block) - # - - F:60:1/-79 - F:61:1/-79 - F:62:1/-79 - F:63:1/-79 - - - - ### Basic Macros ### - - - # - # Keypad (7,8,9,-,4,5,6,+,1,2,3,0,.) - # - - A:7 - P:^_071\r - - A:8 - P:^_072\r - - A:9 - P:^_073\r - - A:- - P:^_074\r - - A:4 - P:^_075\r - - A:5 - P:^_076\r - - A:6 - P:^_077\r - - A:+ - P:^_078\r - - A:1 - P:^_079\r - - A:2 - P:^_080\r - - A:3 - P:^_081\r - - A:0 - P:^_082\r - - A:. - P:^_083\r - - - # - # Shift-Keypad-8, for example, is exactly '8', so these cannot be used for macros - # - - # - # Control + Keypad (1,2,3,4,5,6,7,8,9) - # - # Run, Run, Run, Run, Run, Run, Run, Run, RUN! - # - - A:\e\e\\.1 - C:^_117\r - - A:\e\e\\.2 - C:^_145\r - - A:\e\e\\.3 - C:^_118\r - - A:\e\e\\.4 - C:^_115\r - - A:\e\e\\.5 - C:^_143\r - - A:\e\e\\.6 - C:^_116\r - - A:\e\e\\.7 - C:^_119\r - - A:\e\e\\.8 - C:^_141\r ! A:\e\e\\.9 ! C:^_132\r --- 1,16 ---- # File: pref-emx.prf # ! # Include "pref-ibm.prf" to get the default macros. # ! # Note that, while most key-to-trigger mappings are the same as DOS/Win, ! # some few odd keys will be different or not available at all. # ! # Examples: Ctrl-Escape, Alt-PrintScreen # ! # What's NOT working: color palette redefinitions. # ! %:pref-win.prf diff -c -r angband-282/lib/user/pref-gcu.prf angband-283/lib/user/pref-gcu.prf *** angband-282/lib/user/pref-gcu.prf Wed Sep 3 00:14:55 1997 --- angband-283/lib/user/pref-gcu.prf Sun Feb 8 05:02:05 1998 *************** *** 16,21 **** --- 16,22 ---- A:. P:\e[3~ + A:0 P:\e[2~ *************** *** 24,43 **** --- 25,70 ---- A:1 P:\e[4~ + P:\e[F + A:2 P:\e[B + A:3 P:\e[6~ + A:4 P:\e[D + A:5 P:\e[G + A:6 P:\e[C + A:7 P:\e[1~ + P:\e[H + A:8 P:\e[A + A:9 P:\e[5~ + + + # Basic function keys (F1 - F4) + + A:\e + P:\eOP + + A:\e + P:\eOQ + + A:\e + P:\eOR + + A:\e + P:\eOS + diff -c -r angband-282/lib/user/pref-win.prf angband-283/lib/user/pref-win.prf *** angband-282/lib/user/pref-win.prf Wed Sep 3 00:14:59 1997 --- angband-283/lib/user/pref-win.prf Tue Jan 27 01:16:44 1998 *************** *** 1,17 **** # File: pref-ibm.prf # ! # This file is used by Angband (when it was compiled using "main-ibm.c") ! # to specify various "user preferences", including "macros". # # This file defines some basic macros, which allow the use of the "keypad", # alone, and with the shift and/or control modifier keys. All "special" ! # keys are translated by "main-ibm.c" into special "macro triggers" of the ! # encoded form "^_MMMxSS\r", where the "modifier" flags are stored in "MMM", ! # and the two digit hexidecimal scan code of the keypress is stored in "SS", ! # see "main-ibm.c" for info. # - # --- 1,30 ---- # File: pref-ibm.prf # ! # This file is used by Angband (when it was compiled using "main-ibm.c" ! # or "main-dos.c" or "main-win.c") to specify various "user preferences", ! # including "macros". # # This file defines some basic macros, which allow the use of the "keypad", # alone, and with the shift and/or control modifier keys. All "special" ! # keys are translated by "main-ibm.c" (or "main-win.c") into special "macro ! # triggers" of the encoded form "^_MMMxSS\r", where the "modifier" flags are ! # stored in "MMM", and the two digit hexidecimal scan code of the keypress is ! # stored in "SS". ! # ! # The "main-ibm.prf" and "main-dos.prf" files may not be able to recognize ! # the "/" and "*" keys on the keypad, because it mistakenly classifies the ! # "0x35" and "0x37" codes as the keycodes of "normal" keys. ! # ! # The "main-win.prf" file should not be using the final "control + keypad" ! # section in this file, it was created for "main-ibm.c" and "main-dos.c". ! # ! # The "main-win.prf" file may actually send the "ascii" equivalent of some ! # keypad keys after the keypad key itself, especially if "numlock" is down, ! # which may cause problems. Or it may not, it is hard to tell. This is bad. ! # ! # See "main-ibm.c" and "main-dos.c" and "main-win.c" for more info. # # *************** *** 30,38 **** # ! # Keypad (7,8,9,-,4,5,6,+,1,2,3,0,.) # A:7 P:^_x47\r --- 43,57 ---- # ! # Keypad (/,*,7,8,9,-,4,5,6,+,1,2,3,0,.) # + A:/ + P:^_x35\r + + A:* + P:^_x37\r + A:7 P:^_x47\r *************** *** 74,82 **** # ! # Shift + Keypad (7,8,9,-,4,5,6,+,1,2,3,0,.) # A:\e\e\\.7 P:^_Sx47\r --- 93,107 ---- # ! # Shift + Keypad (/,*,7,8,9,-,4,5,6,+,1,2,3,0,.) # + A:\e\e\e + P:^_Sx35\r + + A:\e\e\e + P:^_Sx37\r + A:\e\e\\.7 P:^_Sx47\r *************** *** 118,126 **** # ! # Control + Keypad (7,8,9,-,4,5,6,+,1,2,3,0,.) # A:\e\e\\+7 P:^_Cx47\r --- 143,157 ---- # ! # Control + Keypad (/,*,7,8,9,-,4,5,6,+,1,2,3,0,.) # + A:\e\e\e + P:^_Cx35\r + + A:\e\e\e + P:^_Cx37\r + A:\e\e\\+7 P:^_Cx47\r *************** *** 162,169 **** # ! # Control + Keypad (7,8,9,-,4,5,6,+,1,2,3,0,.) # A:\e\e\\+7 P:^_Cx77\r --- 193,206 ---- # ! # Control + Keypad (/,*,7,8,9,-,4,5,6,+,1,2,3,0,.) # + + A:\e\e\e + P:^_Cx95\r + + A:\e\e\e + P:^_Cx96\r A:\e\e\\+7 P:^_Cx77\r diff -c -r angband-282/lib/user/pref.prf angband-283/lib/user/pref.prf *** angband-282/lib/user/pref.prf Wed Sep 3 00:15:03 1997 --- angband-283/lib/user/pref.prf Mon Feb 9 01:43:33 1998 *************** *** 7,21 **** # # See "lib/help/command.txt" and "src/files.c" for more information. # ! # Command macro -- "X" will now "swap weapons" as long as both weapons ! # contain the inscription "@0". For example, inscribe your main weapon ! # as "@1@0" and your digger (or secondary weapon) as "@2@0". ! ! A:w0 ! C:X ! ## # Option -- Default to original commands ## X:rogue_like_commands --- 7,20 ---- # # See "lib/help/command.txt" and "src/files.c" for more information. # + # Note that the "X" key is mapped in both keysets to the key sequence + # "w0", which will "swap weapons" as long as both weapons contain the + # inscription "@0". For example, inscribe your main weapon as "@1@0" + # and your digger (or secondary weapon) as "@2@0". + # ! ##### Force certain options ##### ## # Option -- Default to original commands ## X:rogue_like_commands *************** *** 24,36 **** ## Y:rogue_like_commands ##### System Specific Subfiles ##### ! ?:[IOR [EQU $SYS x11] [EQU $SYS xaw]] %:pref-x11.prf ! ## ?:[EQU $SYS gcu] ! ## %:pref-gcu.prf ?:[EQU $SYS ami] %:pref-ami.prf --- 23,223 ---- ## Y:rogue_like_commands + ##### Original Keyset Mappings ##### + + # Stay still + A:, + C:0:5 + + # Movement + A:;1 + C:0:1 + A:;2 + C:0:2 + A:;3 + C:0:3 + A:;4 + C:0:4 + A:;6 + C:0:6 + A:;7 + C:0:7 + A:;8 + C:0:8 + A:;9 + C:0:9 + + # Hack -- Return + A:\r + C:0:^J + + # Hack -- Commit suicide + A:Q + C:0:^K + + # Hack -- Commit suicide + A:Q + C:0:^C + + # Hack -- swap equipment + A:w0 + C:0:X + + + ##### Roguelike Keyset Mappings ##### + + # Run + A:. + C:1:, + + # Stay still + A:, + C:1:. + + # Stay still + A:, + C:1:5 + + # Movement + A:;1 + C:1:1 + A:;2 + C:1:2 + A:;3 + C:1:3 + A:;4 + C:1:4 + A:;6 + C:1:6 + A:;7 + C:1:7 + A:;8 + C:1:8 + A:;9 + C:1:9 + + # Movement (rogue keys) + A:;1 + C:1:b + A:;2 + C:1:j + A:;3 + C:1:n + A:;4 + C:1:h + A:;6 + C:1:l + A:;7 + C:1:y + A:;8 + C:1:k + A:;9 + C:1:u + + # Running (shift + rogue keys) + A:.1 + C:1:B + A:.2 + C:1:J + A:.3 + C:1:N + A:.4 + C:1:H + A:.6 + C:1:L + A:.7 + C:1:Y + A:.8 + C:1:K + A:.9 + C:1:U + + # Altering (control + rogue keys) + A:+1 + C:1:^B + A:+2 + C:1:^J + A:+3 + C:1:^N + A:+4 + C:1:^H + A:+6 + C:1:^L + A:+7 + C:1:^Y + A:+8 + C:1:^K + A:+9 + C:1:^U + + # Allow use of the "tunnel" command + A:T + C:1:^T + + # Allow use of the "destroy" command + A:k + C:1:^D + + # Locate player on map + A:L + C:1:W + + # Browse a book (Peruse) + A:b + C:1:P + + # Jam a door (Spike) + A:j + C:1:S + + # Toggle search mode + A:S + C:1:# + + # Use a staff (Zap) + A:u + C:1:Z + + # Take off equipment + A:t + C:1:T + + # Fire an item + A:f + C:1:t + + # Bash a door (Force) + A:B + C:1:f + + # Look around (examine) + A:l + C:1:x + + # Aim a wand (Zap) + A:a + C:1:z + + # Zap a rod (Activate) + A:z + C:1:a + + # Hack -- Commit suicide + A:Q + C:1:^C + + # Hack -- swap equipment + A:w0 + C:1:X + + ##### System Specific Subfiles ##### ! ?:[IOR [EQU $SYS xaw] [EQU $SYS x11]] %:pref-x11.prf ! ?:[EQU $SYS gcu] ! %:pref-gcu.prf ?:[EQU $SYS ami] %:pref-ami.prf *************** *** 38,44 **** ?:[EQU $SYS mac] %:pref-mac.prf ! ?:[IOR [EQU $SYS win] [EQU $SYS ibm]] %:pref-win.prf ?:[EQU $SYS emx] --- 225,231 ---- ?:[EQU $SYS mac] %:pref-mac.prf ! ?:[IOR [EQU $SYS win] [EQU $SYS dos] [EQU $SYS ibm]] %:pref-win.prf ?:[EQU $SYS emx] *************** *** 46,49 **** --- 233,239 ---- ?:[EQU $SYS acn] %:pref-acn.prf + + ?:1 + diff -c -r angband-282/lib/user/user.prf angband-283/lib/user/user.prf *** angband-282/lib/user/user.prf Wed Sep 3 00:15:06 1997 --- angband-283/lib/user/user.prf Tue Feb 3 22:23:20 1998 *************** *** 18,41 **** ##### System Specific Subfiles ##### ! ## ?:[IOR [EQU $SYS x11] [EQU $SYS xaw]] ! ## %:user-x11.prf ! ## ?:[EQU $SYS gcu] ! ## %:user-gcu.prf ! ## ?:[EQU $SYS ami] ! ## %:user-ami.prf ?:[EQU $SYS mac] %:user-mac.prf ! ## ?:[IOR [EQU $SYS win] [EQU $SYS ibm]] ! ## %:user-win.prf ! ## ?:[EQU $SYS emx] ! ## %:user-emx.prf - ## ?:[EQU $SYS acn] - ## %:user-acn.prf --- 18,44 ---- ##### System Specific Subfiles ##### ! ?:[IOR [EQU $SYS xaw] [EQU $SYS x11]] ! %:user-x11.prf ! ?:[EQU $SYS gcu] ! %:user-gcu.prf ! ?:[EQU $SYS ami] ! %:user-ami.prf ?:[EQU $SYS mac] %:user-mac.prf ! ?:[IOR [EQU $SYS win] [EQU $SYS dos] [EQU $SYS ibm]] ! %:user-win.prf ! ?:[EQU $SYS emx] ! %:user-emx.prf ! ! ?:[EQU $SYS acn] ! %:user-acn.prf ! ! ?:1 Only in angband-282/src: Makefile diff -c -r angband-282/src/Makefile.acn angband-283/src/Makefile.acn *** angband-282/src/Makefile.acn Wed Sep 3 11:57:32 1997 --- angband-283/src/Makefile.acn Fri Feb 6 04:08:39 1998 *************** *** 49,51 **** --- 49,52 ---- # Dynamic dependencies: + Only in angband-283/src: Makefile.dos diff -c -r angband-282/src/Makefile.emx angband-283/src/Makefile.emx *** angband-282/src/Makefile.emx Wed Sep 3 11:57:32 1997 --- angband-283/src/Makefile.emx Wed Feb 11 06:17:46 1998 *************** *** 3,11 **** # Purpose: Makefile support for "main-emx.c" # Note: Use 'dmake -B -r -f makefile.emx' to compile (see "main-emx.c" for details). - # Since "dmake" does not demand "hard" tab stops as delimiters, - # don't bother to add them. - # # Use 'dmake -B -r -f makefile.emx install' to install the executables # and the batch file used for multiple VIO windows in the parent directory. # --- 3,8 ---- *************** *** 18,24 **** # all changed files (diff -c). "..\exp\patches.uue" will # contain the same file gziped and uuencodes. "..\exp\files.uue" # will contain the three emx-specific files tared, gziped and ! # uuencoded. Needs 4OS2. # # 'export': The file "..\exp\$(EXPORT)" is created so that it # can directly be uploaded as an official distribution archive. --- 15,21 ---- # all changed files (diff -c). "..\exp\patches.uue" will # contain the same file gziped and uuencodes. "..\exp\files.uue" # will contain the three emx-specific files tared, gziped and ! # uuencoded. Needs 4OS2. # # 'export': The file "..\exp\$(EXPORT)" is created so that it # can directly be uploaded as an official distribution archive. *************** *** 28,40 **** VERSION = 279v5 EXPORT = angband-$(VERSION).os2.zip ! CC = gcc AR = ar ! CFLAGS = -MMD -O3 -DUSE_EMX -Zmt ! LFLAGS = -lvideo # Uncomment this if you have nice installed ! NICE = nice -i -n -30 ################################################################################### --- 25,37 ---- VERSION = 279v5 EXPORT = angband-$(VERSION).os2.zip ! CC = gcc AR = ar ! CFLAGS = -MMD -O3 -DUSE_EMX -Zmt ! LFLAGS = -lvideo # Uncomment this if you have nice installed ! NICE = nice -i -n -30 ################################################################################### *************** *** 45,57 **** install: ..\angband.exe ..\aclient.exe ..\startwnd.cmd clean: ! -+@ del angband.exe ! -+@ del aclient.exe ! -+@ del depends ! -+@ del _state.mk ! -+@ del *.a ! -+@ del *.d ! -+@ del *.o patches: ..\patches.txt ..\exp\patches.uue ..\exp\files.uue --- 42,54 ---- install: ..\angband.exe ..\aclient.exe ..\startwnd.cmd clean: ! -+@ del angband.exe ! -+@ del aclient.exe ! -+@ del depends ! -+@ del _state.mk ! -+@ del *.a ! -+@ del *.d ! -+@ del *.o patches: ..\patches.txt ..\exp\patches.uue ..\exp\files.uue *************** *** 62,139 **** #################################################################################### OBJS = \ ! z-util.o z-virt.o z-form.o z-rand.o z-term.o \ ! variable.o tables.o util.o cave.o \ ! object1.o object2.o monster1.o monster2.o \ ! xtra1.o xtra2.o spells1.o spells2.o \ ! melee1.o melee2.o save.o files.o \ ! cmd1.o cmd2.o cmd3.o cmd4.o cmd5.o cmd6.o \ ! store.o birth.o load1.o load2.o \ ! wizard1.o wizard2.o \ ! generate.o dungeon.o init1.o init2.o .c.o: ! $(NICE) $(CC) $(CFLAGS) -c $*.c all .PHONY: angband.exe aclient.exe ! +@echo. ! +@echo Now type ! +@echo. ! +@echo '$(MAKECMD) $(MFLAGS) $(MAKEFILE) install' ! +@echo. ! +@echo to install Angband in the parent directory, and/or ! +@echo. ! +@echo '$(MAKECMD) $(MFLAGS) $(MAKEFILE) clean' ! +@echo. ! +@echo to remove a bunch of temporary files used during compilation! ! +@echo You may want to remove the src subdirectory, now that you have ! +@echo working executables. ! +@echo. EXPFILES = angband.exe;aclient.exe;patches.txt;readme;startwnd.cmd ..\exp\$(EXPORT) .PHONY .IGNORE: install patches # Needs 4OS2! ! +@ md ..\exp >& nul ^ \ ! md ..\exp\tmpdir >& nul ^ \ ! cd ..\exp\tmpdir ^ \ ! copy ...\$(EXPFILES) > nul ^ \ ! md lib ^ \ ! copy ...\lib\ lib\ /s >& nul ^ \ ! del lib\save\player >& nul ^ \ ! zip -m -r $(EXPORT) * > nul ^ \ ! move $(EXPORT) .. ^ \ ! cd .. ^ \ ! del tmpdir /xsqy >& nul ! PATCHFILES = *.c *.h makefile* ..\lib\user\pref-emx.prf # Needs 4OS2! ..\patches.txt .PHONY .IGNORE: ! +@ echo These are the changes to the original source > ..\patches.txt ^ \ ! echo archive ($(VERSION)). You don't need to apply them >> ..\patches.txt ^ \ ! echo if you can get the latest archive, which will >> ..\patches.txt ^ \ ! echo have them applied already. >> ..\patches.txt ^ \ ! echo. >> ..\patches.txt ^ \ ! except (*~) for %a in ($(PATCHFILES)) \ ! do (diff -c ..\old\src\%a %a >> ..\patches.txt) # Needs 4OS2! ..\exp\patches.uue: ..\patches.txt ! +@ md ..\exp >& nul ^ \ ! cd ..\exp ^ \ ! copy ..\patches.txt patches-$(VERSION).os2 ^ \ ! gzip -f patches-$(VERSION).os2 ^ \ ! uuencode patches-$(VERSION).os2.gz >& nul ^ \ ! del patches-$(VERSION).os2.gz ^ \ ! move patches-$(VERSION).os2.gz.uue patches.uue FILES = main-emx.c makefile.emx ..\lib\user\pref-emx.prf FILESP = main-emx.c makefile.emx pref-emx.prf # Needs 4OS2! ..\exp\files.uue: $(FILES) ! +@ md ..\exp >& nul ^ \ cd ..\exp ^ \ for %a in ($(FILES)) copy ..\src\%a > nul ^ \ tar -cvf files.tar $(FILESP) ^ \ --- 59,136 ---- #################################################################################### OBJS = \ ! z-util.o z-virt.o z-form.o z-rand.o z-term.o \ ! variable.o tables.o util.o cave.o \ ! object1.o object2.o monster1.o monster2.o \ ! xtra1.o xtra2.o spells1.o spells2.o \ ! melee1.o melee2.o save.o files.o \ ! cmd1.o cmd2.o cmd3.o cmd4.o cmd5.o cmd6.o \ ! store.o birth.o load1.o load2.o \ ! wizard1.o wizard2.o \ ! generate.o dungeon.o init1.o init2.o .c.o: ! $(NICE) $(CC) $(CFLAGS) -c $*.c all .PHONY: angband.exe aclient.exe ! +@echo. ! +@echo Now type ! +@echo. ! +@echo '$(MAKECMD) $(MFLAGS) $(MAKEFILE) install' ! +@echo. ! +@echo to install Angband in the parent directory, and/or ! +@echo. ! +@echo '$(MAKECMD) $(MFLAGS) $(MAKEFILE) clean' ! +@echo. ! +@echo to remove a bunch of temporary files used during compilation! ! +@echo You may want to remove the src subdirectory, now that you have ! +@echo working executables. ! +@echo. EXPFILES = angband.exe;aclient.exe;patches.txt;readme;startwnd.cmd ..\exp\$(EXPORT) .PHONY .IGNORE: install patches # Needs 4OS2! ! +@ md ..\exp >& nul ^ \ ! md ..\exp\tmpdir >& nul ^ \ ! cd ..\exp\tmpdir ^ \ ! copy ...\$(EXPFILES) > nul ^ \ ! md lib ^ \ ! copy ...\lib\ lib\ /s >& nul ^ \ ! del lib\save\player >& nul ^ \ ! zip -m -r $(EXPORT) * > nul ^ \ ! move $(EXPORT) .. ^ \ ! cd .. ^ \ ! del tmpdir /xsqy >& nul ! PATCHFILES = *.c *.h makefile* ..\lib\user\pref-emx.prf # Needs 4OS2! ..\patches.txt .PHONY .IGNORE: ! +@ echo These are the changes to the original source > ..\patches.txt ^ \ ! echo archive ($(VERSION)). You don't need to apply them >> ..\patches.txt ^ \ ! echo if you can get the latest archive, which will >> ..\patches.txt ^ \ ! echo have them applied already. >> ..\patches.txt ^ \ ! echo. >> ..\patches.txt ^ \ ! except (*~) for %a in ($(PATCHFILES)) \ ! do (diff -c ..\old\src\%a %a >> ..\patches.txt) # Needs 4OS2! ..\exp\patches.uue: ..\patches.txt ! +@ md ..\exp >& nul ^ \ ! cd ..\exp ^ \ ! copy ..\patches.txt patches-$(VERSION).os2 ^ \ ! gzip -f patches-$(VERSION).os2 ^ \ ! uuencode patches-$(VERSION).os2.gz >& nul ^ \ ! del patches-$(VERSION).os2.gz ^ \ ! move patches-$(VERSION).os2.gz.uue patches.uue FILES = main-emx.c makefile.emx ..\lib\user\pref-emx.prf FILESP = main-emx.c makefile.emx pref-emx.prf # Needs 4OS2! ..\exp\files.uue: $(FILES) ! +@ md ..\exp >& nul ^ \ cd ..\exp ^ \ for %a in ($(FILES)) copy ..\src\%a > nul ^ \ tar -cvf files.tar $(FILESP) ^ \ *************** *** 144,202 **** move files.tar.gz.uue files.uue depends .IGNORE: $(OBJS) ! + echo. > depends ! + for %a in (*.d) type %a >> depends ..\angband.exe: angband.exe ! + copy angband.exe .. ! emxbind -s ..\angband.exe ..\aclient.exe: aclient.exe ! + copy aclient.exe .. ! emxbind -s ..\aclient.exe EC=+@ echo ECF=>> ..\startwnd.cmd ..\startwnd.cmd: ! $(EC) @echo off > ..\startwnd.cmd ! $(EC) REM This file starts up Angband and up to three other views. The $(ECF) ! $(EC) REM optional number behind the name sets the number of lines for $(ECF) ! $(EC) REM that screen. $(ECF) ! $(EC) REM $(ECF) ! $(EC) REM The function of the three views: $(ECF) ! $(EC) REM $(ECF) ! $(EC) REM recall window - display monster recall info $(ECF) ! $(EC) REM choice window - display equipment and inventory $(ECF) ! $(EC) REM mirror window - display both of them as new information $(ECF) ! $(EC) REM pops up - use this if you've got a small $(ECF) ! $(EC) REM screen that doesn't comfortably allow for $(ECF) ! $(EC) REM three windows. $(ECF) ! $(EC). $(ECF) ! $(EC) start /win /n aclient recall 10 $(ECF) ! $(EC) start /win /n aclient choice $(ECF) ! $(EC) rem start /win /n aclient mirror $(ECF) ! $(EC) delay $(ECF) ! $(EC) angband %1 %2 %3 %4 %5 %6 %7 %8 %9 $(ECF) angband.exe: angband.a main.o main-emx.o main-epm.o ! $(CC) -o angband.exe main.o main-emx.o angband.a $(LFLAGS) angband.a: $(OBJS) ! $(AR) r angband.a $(OBJS) aclient.exe: main-emx.c ! $(NICE) $(CC) $(CFLAGS) -Wall -D__EMX__CLIENT__ -o aclient.exe main-emx.c -lvideo main-emx.o: main-emx.c ! $(NICE) $(CC) $(CFLAGS) -Wall -c main-emx.c -o main-emx.o main-epm.o: main-emx.c ! $(NICE) $(CC) $(CFLAGS) -Wall -DEMXPM -c main-emx.c -o main-epm.o # Forgive me :) ":-)": ! +@echo. .INCLUDE .IGNORE: depends --- 141,191 ---- move files.tar.gz.uue files.uue depends .IGNORE: $(OBJS) ! + echo. > depends ! + for %a in (*.d) type %a >> depends ..\angband.exe: angband.exe ! + copy angband.exe .. ! emxbind -s ..\angband.exe ..\aclient.exe: aclient.exe ! + copy aclient.exe .. ! emxbind -s ..\aclient.exe EC=+@ echo ECF=>> ..\startwnd.cmd ..\startwnd.cmd: ! $(EC) @echo off > ..\startwnd.cmd ! $(EC) REM This file starts up Angband and up to seven other views. The $(ECF) ! $(EC) REM optional number behind the name sets the number of lines for $(ECF) ! $(EC) REM that screen. Choose contents for each via the game options. $(ECF) ! $(EC) REM $(ECF) ! $(EC). $(ECF) ! $(EC) start /win /n aclient Term-1 $(ECF) ! $(EC) start /win /n aclient Term-2 10 $(ECF) ! $(EC) rem start /win /n aclient Term-3 24 $(ECF) ! $(EC) delay $(ECF) ! $(EC) angband %1 %2 %3 %4 %5 %6 %7 %8 %9 $(ECF) angband.exe: angband.a main.o main-emx.o main-epm.o ! $(CC) -o angband.exe main.o main-emx.o angband.a $(LFLAGS) angband.a: $(OBJS) ! $(AR) r angband.a $(OBJS) aclient.exe: main-emx.c ! $(NICE) $(CC) $(CFLAGS) -Wall -D__EMX__CLIENT__ -o aclient.exe main-emx.c -lvideo main-emx.o: main-emx.c ! $(NICE) $(CC) $(CFLAGS) -Wall -c main-emx.c -o main-emx.o main-epm.o: main-emx.c ! $(NICE) $(CC) $(CFLAGS) -Wall -DEMXPM -c main-emx.c -o main-epm.o # Forgive me :) ":-)": ! +@echo. .INCLUDE .IGNORE: depends diff -c -r angband-282/src/Makefile.ibm angband-283/src/Makefile.ibm *** angband-282/src/Makefile.ibm Wed Sep 3 11:57:32 1997 --- angband-283/src/Makefile.ibm Fri Feb 6 04:08:39 1998 *************** *** 1,61 **** # File: Makefile.ibm ! # Purpose: Makefile support for "main-ibm.c" and Gnu C - # Note: Rename to "Makefile" before using - # Added extra targets: mrmarcel@eos.ncsu.edu (Mike Marcelais) OBJS = \ ! z-util.o z-virt.o z-form.o z-rand.o z-term.o \ ! variable.o tables.o util.o cave.o \ ! object1.o object2.o monster1.o monster2.o \ ! xtra1.o xtra2.o spells1.o spells2.o melee1.o melee2.o \ ! load1.o load2.o save.o files.o \ ! cmd1.o cmd2.o cmd3.o cmd4.o cmd5.o cmd6.o \ ! store.o birth.o wizard1.o wizard2.o \ generate.o dungeon.o init1.o init2.o \ ! main-ibm.o main.o ! # Compiler - CC = gcc # Compiler flags ! ! CFLAGS = -Wall -O2 -DUSE_IBM # Libraries - LIBS = -lpc - GLIBS= -lgrx20 - - # Name of Program - PROGRAM = angband.exe makepref.exe gredit.exe ! ! all: $(PROGRAM) ! ! # Generate binary file angband.exe: $(OBJS) ! $(CC) $(CFLAGS) -o angband.bin $(OBJS) $(LIBS) gredit.exe: gredit.o ! $(CC) $(CFLAGS) -o gredit.bin gredit.o $(LIBS) $(GLIBS) ! makepref.exe: makepref.o ! $(CC) $(CFLAGS) -o makepref.bin makepref.o $(LIBS) # Compile source files .c.o: $(CC) $(CFLAGS) -c $*.c # Clean up clean: ! del *.o $(PROGRAM) *.bin --- 1,85 ---- # File: Makefile.ibm ! # ! # Makefile support for "main-ibm.c" ! # ! # See "main-ibm.c" for more information. ! # + # + # Basic definitions + # + + # Objects OBJS = \ ! main.o main-ibm.o \ generate.o dungeon.o init1.o init2.o \ ! store.o birth.o wizard1.o wizard2.o \ ! cmd1.o cmd2.o cmd3.o cmd4.o cmd5.o cmd6.o \ ! load1.o load2.o save.o files.o \ ! xtra1.o xtra2.o spells1.o spells2.o melee1.o melee2.o \ ! object1.o object2.o monster1.o monster2.o \ ! variable.o tables.o util.o cave.o \ ! z-term.o z-rand.o z-form.o z-virt.o z-util.o # Compiler CC = gcc # Compiler flags ! CFLAGS = -Wall -O2 -s -DUSE_IBM # Libraries LIBS = -lpc ! # ! # Targets ! # ! ! default: angband.exe ! copy angband.exe .. ! del angband.exe ! ! install: angband.exe makepref.exe gredit.exe ! copy angband.exe .. ! copy makepref.exe .. ! copy gredit.exe .. ! ! all: angband.exe makepref.exe gredit.exe ! @echo All done. Use 'make install' to install. ! ! ! # ! # Link executables ! # angband.exe: $(OBJS) ! $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS) ! ! makepref.exe: makepref.o ! $(CC) $(CFLAGS) -o $@ makepref.o $(LIBS) gredit.exe: gredit.o ! $(CC) $(CFLAGS) -o $@ gredit.o $(LIBS) -lgrx20 ! ! # # Compile source files + # .c.o: $(CC) $(CFLAGS) -c $*.c + # # Clean up + # clean: ! del *.o ! del *.bin + cleanall: clean + del *.exe diff -c -r angband-282/src/Makefile.std angband-283/src/Makefile.std *** angband-282/src/Makefile.std Wed Sep 3 11:57:32 1997 --- angband-283/src/Makefile.std Wed Feb 11 06:30:28 1998 *************** *** 32,39 **** # with special compilers. # # If you are able to construct "main-xxx.c" and/or "Makefile.xxx" ! # files for a currently unsupported system, please send them to me ! # (benh@voicenet.com) for inclusion in future versions. # # This Makefile comes with "default" dependancies that may be obsolete. # --- 32,39 ---- # with special compilers. # # If you are able to construct "main-xxx.c" and/or "Makefile.xxx" ! # files for a currently unsupported system, please send them to ! # Ben Harrison (benh@phial.com) for inclusion in future versions. # # This Makefile comes with "default" dependancies that may be obsolete. # diff -c -r angband-282/src/Makefile.wat angband-283/src/Makefile.wat *** angband-282/src/Makefile.wat Wed Sep 3 11:57:32 1997 --- angband-283/src/Makefile.wat Fri Feb 6 04:08:39 1998 *************** *** 3,14 **** # Purpose: Makefile support for "main-ibm.c" for Watcom C/C++ # From: akemi@netcom.com (David Boeren) ! # Extra program targets by: mrmarcel@eos.ncsu.edu (Mike Marcelais) CC = wcc386 ! CFLAGS = /mf /3r /3 /wx /s /oneatx /DUSE_IBM /DUSE_WAT ! # CFLAGS = /mf /3r /3 /wx /oaeilmnrt /DUSE_IBM /DUSE_WAT OBJS = & z-util.obj z-virt.obj z-form.obj z-rand.obj z-term.obj & --- 3,20 ---- # Purpose: Makefile support for "main-ibm.c" for Watcom C/C++ # From: akemi@netcom.com (David Boeren) ! # Extra program targets by: michmarc@microsoft.com (Mike Marcelais) CC = wcc386 ! # For Watcom v11 ! CFLAGS = /mf /3r /3 /wx /s /oabhiklrsx /DUSE_IBM /DUSE_WAT ! ! # For Watcom v10 ! # CFLAGS = /mf /3r /3 /wx /s /oneasx /DUSE_IBM /DUSE_WAT ! ! # For debugging ! # CFLAGS = /mf /3r /3 /wx /d2 /od /DUSE_IBM /DUSE_WAT OBJS = & z-util.obj z-virt.obj z-form.obj z-rand.obj z-term.obj & *************** *** 25,42 **** # Use whichever of these two you wish... angband.exe: $(OBJS) angband.lnk ! wlink system dos4g @angband.lnk ! # wlink system pmodew @angband.lnk # Use whichever of these two you wish... gredit.exe: gredit.obj gredit.lnk ! wlink system dos4g @gredit.lnk ! # wlink system pmodew @gredit.lnk # Use whichever of these two you wish... makepref.exe: makepref.obj makepref.lnk ! wlink system dos4g @makepref.lnk ! # wlink system pmodew @makepref.lnk angband.lnk: %create angband.lnk --- 31,48 ---- # Use whichever of these two you wish... angband.exe: $(OBJS) angband.lnk ! # wlink system dos4g @angband.lnk ! wlink system pmodew @angband.lnk # Use whichever of these two you wish... gredit.exe: gredit.obj gredit.lnk ! # wlink system dos4g @gredit.lnk ! wlink system pmodew @gredit.lnk # Use whichever of these two you wish... makepref.exe: makepref.obj makepref.lnk ! # wlink system dos4g @makepref.lnk ! wlink system pmodew @makepref.lnk angband.lnk: %create angband.lnk *************** *** 66,69 **** $(CC) $(CFLAGS) $[*.c clean: ! del *.err *.obj *.exe *.lnk --- 72,79 ---- $(CC) $(CFLAGS) $[*.c clean: ! del *.err ! del *.obj ! del *.exe ! del *.lnk ! diff -c -r angband-282/src/Makefile.win angband-283/src/Makefile.win *** angband-282/src/Makefile.win Wed Sep 3 11:57:32 1997 --- angband-283/src/Makefile.win Fri Feb 6 04:08:39 1998 *************** *** 202,204 **** --- 202,205 ---- ..\angband32.exe,..\angband.map,import32 cw32,..\ext-win\src\angband.def | $(RC32) -w32 ..\ext-win\src\angband.rc ..\angband32.exe + diff -c -r angband-282/src/angband.h angband-283/src/angband.h *** angband-282/src/angband.h Wed Sep 3 11:57:32 1997 --- angband-283/src/angband.h Fri Feb 6 04:10:31 1998 *************** *** 84,86 **** --- 84,87 ---- #endif + diff -c -r angband-282/src/birth.c angband-283/src/birth.c *** angband-282/src/birth.c Wed Sep 3 11:57:32 1997 --- angband-283/src/birth.c Mon Feb 9 07:29:31 1998 *************** *** 744,758 **** /* Calculate the height/weight for males */ if (p_ptr->psex == SEX_MALE) { ! p_ptr->ht = randnor(rp_ptr->m_b_ht, rp_ptr->m_m_ht); ! p_ptr->wt = randnor(rp_ptr->m_b_wt, rp_ptr->m_m_wt); } /* Calculate the height/weight for females */ else if (p_ptr->psex == SEX_FEMALE) { ! p_ptr->ht = randnor(rp_ptr->f_b_ht, rp_ptr->f_m_ht); ! p_ptr->wt = randnor(rp_ptr->f_b_wt, rp_ptr->f_m_wt); } } --- 744,758 ---- /* Calculate the height/weight for males */ if (p_ptr->psex == SEX_MALE) { ! p_ptr->ht = Rand_normal(rp_ptr->m_b_ht, rp_ptr->m_m_ht); ! p_ptr->wt = Rand_normal(rp_ptr->m_b_wt, rp_ptr->m_m_wt); } /* Calculate the height/weight for females */ else if (p_ptr->psex == SEX_FEMALE) { ! p_ptr->ht = Rand_normal(rp_ptr->f_b_ht, rp_ptr->f_m_ht); ! p_ptr->wt = Rand_normal(rp_ptr->f_b_wt, rp_ptr->f_m_wt); } } *************** *** 795,816 **** /* * Display stat values, subset of "put_stats()" * ! * See 'display_player()' for basic method. */ static void birth_put_stats(void) { int i, p; byte attr; char buf[80]; /* Put the stats (and percents) */ for (i = 0; i < 6; i++) { /* Put the stat */ cnv_stat(stat_use[i], buf); ! c_put_str(TERM_L_GREEN, buf, 2 + i, 66); /* Put the percent */ if (stat_match[i]) --- 795,820 ---- /* * Display stat values, subset of "put_stats()" * ! * See 'display_player()' for screen layout constraints. */ static void birth_put_stats(void) { + int col; int i, p; byte attr; char buf[80]; + col = 42; + + /* Put the stats (and percents) */ for (i = 0; i < 6; i++) { /* Put the stat */ cnv_stat(stat_use[i], buf); ! c_put_str(TERM_L_GREEN, buf, 3+i, col+24); /* Put the percent */ if (stat_match[i]) *************** *** 818,830 **** p = 1000L * stat_match[i] / auto_round; attr = (p < 100) ? TERM_YELLOW : TERM_L_GREEN; sprintf(buf, "%3d.%d%%", p/10, p%10); ! c_put_str(attr, buf, 2 + i, 73); } /* Never happened */ else { ! c_put_str(TERM_RED, "(NONE)", 2 + i, 73); } } } --- 822,834 ---- p = 1000L * stat_match[i] / auto_round; attr = (p < 100) ? TERM_YELLOW : TERM_L_GREEN; sprintf(buf, "%3d.%d%%", p/10, p%10); ! c_put_str(attr, buf, 3+i, col+13); } /* Never happened */ else { ! c_put_str(TERM_RED, "(NONE)", 3+i, col+13); } } } *************** *** 1029,1041 **** * The delay may be reduced, but is recommended to keep players * from continuously rolling up characters, which can be VERY * expensive CPU wise. And it cuts down on player stupidity. */ static bool player_birth_aux() { int i, j, k, m, n, v; - int mode = 0; - bool flag = FALSE; bool prev = FALSE; --- 1033,1045 ---- * The delay may be reduced, but is recommended to keep players * from continuously rolling up characters, which can be VERY * expensive CPU wise. And it cuts down on player stupidity. + * + * See "display_player" for screen layout code. */ static bool player_birth_aux() { int i, j, k, m, n, v; bool flag = FALSE; bool prev = FALSE; *************** *** 1055,1077 **** bool autoroll = FALSE; ! /*** Intro ***/ /* Clear screen */ Term_clear(); - /* Title everything */ - put_str("Name :", 2, 1); - put_str("Sex :", 3, 1); - put_str("Race :", 4, 1); - put_str("Class :", 5, 1); - - /* Dump the default name */ - c_put_str(TERM_L_BLUE, op_ptr->full_name, 2, 15); - - - /*** Instructions ***/ - /* Display some helpful information */ Term_putstr(5, 10, -1, TERM_WHITE, "Please answer the following questions. Most of the questions"); --- 1059,1069 ---- bool autoroll = FALSE; ! /*** Instructions ***/ /* Clear screen */ Term_clear(); /* Display some helpful information */ Term_putstr(5, 10, -1, TERM_WHITE, "Please answer the following questions. Most of the questions"); *************** *** 1110,1128 **** c = inkey(); if (c == 'Q') quit(NULL); if (c == 'S') return (FALSE); k = (islower(c) ? A2I(c) : -1); if ((k >= 0) && (k < n)) break; if (c == '?') do_cmd_help(); ! else bell(); } /* Set sex */ p_ptr->psex = k; sp_ptr = &sex_info[p_ptr->psex]; - str = sp_ptr->title; - - /* Display */ - c_put_str(TERM_L_BLUE, str, 3, 15); /* Clean up */ clear_from(15); --- 1102,1117 ---- c = inkey(); if (c == 'Q') quit(NULL); if (c == 'S') return (FALSE); + if (c == ESCAPE) c = 'a'; k = (islower(c) ? A2I(c) : -1); if ((k >= 0) && (k < n)) break; if (c == '?') do_cmd_help(); ! else bell("Illegal sex!"); } /* Set sex */ p_ptr->psex = k; sp_ptr = &sex_info[p_ptr->psex]; /* Clean up */ clear_from(15); *************** *** 1155,1173 **** c = inkey(); if (c == 'Q') quit(NULL); if (c == 'S') return (FALSE); k = (islower(c) ? A2I(c) : -1); if ((k >= 0) && (k < n)) break; if (c == '?') do_cmd_help(); ! else bell(); } /* Set race */ p_ptr->prace = k; rp_ptr = &race_info[p_ptr->prace]; - str = rp_ptr->title; - - /* Display */ - c_put_str(TERM_L_BLUE, str, 4, 15); /* Clean up */ clear_from(15); --- 1144,1159 ---- c = inkey(); if (c == 'Q') quit(NULL); if (c == 'S') return (FALSE); + if (c == ESCAPE) c = 'a'; k = (islower(c) ? A2I(c) : -1); if ((k >= 0) && (k < n)) break; if (c == '?') do_cmd_help(); ! else bell("Illegal race!"); } /* Set race */ p_ptr->prace = k; rp_ptr = &race_info[p_ptr->prace]; /* Clean up */ clear_from(15); *************** *** 1208,1227 **** c = inkey(); if (c == 'Q') quit(NULL); if (c == 'S') return (FALSE); k = (islower(c) ? A2I(c) : -1); if ((k >= 0) && (k < n)) break; if (c == '?') do_cmd_help(); ! else bell(); } /* Set class */ p_ptr->pclass = k; cp_ptr = &class_info[p_ptr->pclass]; mp_ptr = &magic_info[p_ptr->pclass]; - str = cp_ptr->title; - - /* Display */ - c_put_str(TERM_L_BLUE, cp_ptr->title, 5, 15); /* Clean up */ clear_from(15); --- 1194,1210 ---- c = inkey(); if (c == 'Q') quit(NULL); if (c == 'S') return (FALSE); + if (c == ESCAPE) c = 'a'; k = (islower(c) ? A2I(c) : -1); if ((k >= 0) && (k < n)) break; if (c == '?') do_cmd_help(); ! else bell("Illegal class!"); } /* Set class */ p_ptr->pclass = k; cp_ptr = &class_info[p_ptr->pclass]; mp_ptr = &magic_info[p_ptr->pclass]; /* Clean up */ clear_from(15); *************** *** 1245,1251 **** if (c == ESCAPE) break; if ((c == 'y') || (c == 'n')) break; if (c == '?') do_cmd_help(); ! else bell(); } /* Set "maximize" mode */ --- 1228,1234 ---- if (c == ESCAPE) break; if ((c == 'y') || (c == 'n')) break; if (c == '?') do_cmd_help(); ! else bell("Illegal maximize flag!"); } /* Set "maximize" mode */ *************** *** 1273,1279 **** if (c == ESCAPE) break; if ((c == 'y') || (c == 'n')) break; if (c == '?') do_cmd_help(); ! else bell(); } /* Set "preserve" mode */ --- 1256,1262 ---- if (c == ESCAPE) break; if ((c == 'y') || (c == 'n')) break; if (c == '?') do_cmd_help(); ! else bell("Illegal preserve flag!"); } /* Set "preserve" mode */ *************** *** 1303,1309 **** if (c == ESCAPE) break; if ((c == 'y') || (c == 'n')) break; if (c == '?') do_cmd_help(); ! else bell(); } /* Set "autoroll" */ --- 1286,1292 ---- if (c == ESCAPE) break; if ((c == 'y') || (c == 'n')) break; if (c == '?') do_cmd_help(); ! else bell("Illegal autoroller flag!"); } /* Set "autoroll" */ *************** *** 1417,1453 **** /* Roll */ while (TRUE) { /* Feedback */ if (autoroll) { Term_clear(); ! put_str("Name :", 2, 1); ! put_str("Sex :", 3, 1); ! put_str("Race :", 4, 1); ! put_str("Class :", 5, 1); ! ! c_put_str(TERM_L_BLUE, op_ptr->full_name, 2, 15); ! c_put_str(TERM_L_BLUE, sp_ptr->title, 3, 15); ! c_put_str(TERM_L_BLUE, rp_ptr->title, 4, 15); ! c_put_str(TERM_L_BLUE, cp_ptr->title, 5, 15); ! ! /* Label stats */ ! put_str("STR:", 2 + A_STR, 61); ! put_str("INT:", 2 + A_INT, 61); ! put_str("WIS:", 2 + A_WIS, 61); ! put_str("DEX:", 2 + A_DEX, 61); ! put_str("CON:", 2 + A_CON, 61); ! put_str("CHR:", 2 + A_CHR, 61); /* Note when we started */ last_round = auto_round; - /* Indicate the state */ - put_str("(Hit ESC to abort)", 11, 61); - /* Label count */ ! put_str("Round:", 9, 61); } /* Otherwise just get a character */ --- 1400,1442 ---- /* Roll */ while (TRUE) { + int col; + + col = 42; + /* Feedback */ if (autoroll) { Term_clear(); ! /* Label */ ! put_str(" Limit", 2, col+5); ! ! /* Label */ ! put_str(" Freq", 2, col+13); ! ! /* Label */ ! put_str(" Roll", 2, col+24); ! ! /* Put the minimal stats */ ! for (i = 0; i < 6; i++) ! { ! /* Label stats */ ! put_str(stat_names[i], 3+i, col); ! ! /* Put the stat */ ! cnv_stat(stat_limit[i], buf); ! c_put_str(TERM_L_BLUE, buf, 3+i, col+5); ! } /* Note when we started */ last_round = auto_round; /* Label count */ ! put_str("Round:", 10, col+13); ! ! /* Indicate the state */ ! put_str("(Hit ESC to stop)", 12, col+13); } /* Otherwise just get a character */ *************** *** 1500,1506 **** birth_put_stats(); /* Dump round */ ! put_str(format("%6ld", auto_round), 9, 73); /* Make sure they see everything */ Term_fresh(); --- 1489,1495 ---- birth_put_stats(); /* Dump round */ ! put_str(format("%10ld", auto_round), 10, col+20); /* Make sure they see everything */ Term_fresh(); *************** *** 1522,1530 **** /*** Display ***/ - /* Mode */ - mode = 0; - /* Roll for base hitpoints */ get_extra(); --- 1511,1516 ---- *************** *** 1553,1567 **** p_ptr->csp = p_ptr->msp; /* Display the player */ ! display_player(mode); /* Prepare a prompt (must squeeze everything in) */ Term_gotoxy(2, 23); Term_addch(TERM_WHITE, b1); Term_addstr(-1, TERM_WHITE, "'r' to reroll"); if (prev) Term_addstr(-1, TERM_WHITE, ", 'p' for prev"); - if (mode) Term_addstr(-1, TERM_WHITE, ", 'h' for Misc."); - else Term_addstr(-1, TERM_WHITE, ", 'h' for History"); Term_addstr(-1, TERM_WHITE, ", or ESC to accept"); Term_addch(TERM_WHITE, b2); --- 1539,1551 ---- p_ptr->csp = p_ptr->msp; /* Display the player */ ! display_player(0); /* Prepare a prompt (must squeeze everything in) */ Term_gotoxy(2, 23); Term_addch(TERM_WHITE, b1); Term_addstr(-1, TERM_WHITE, "'r' to reroll"); if (prev) Term_addstr(-1, TERM_WHITE, ", 'p' for prev"); Term_addstr(-1, TERM_WHITE, ", or ESC to accept"); Term_addch(TERM_WHITE, b2); *************** *** 1572,1578 **** if (c == 'Q') quit(NULL); /* Start over */ ! if (c == 'S') return (FALSE); /* Escape accepts the roll */ if (c == ESCAPE) break; --- 1556,1562 ---- if (c == 'Q') quit(NULL); /* Start over */ ! if (c == 'S') return (FALSE); /* Escape accepts the roll */ if (c == ESCAPE) break; *************** *** 1587,1599 **** continue; } - /* Toggle the display */ - if ((c == 'H') || (c == 'h')) - { - mode = ((mode != 0) ? 0 : 1); - continue; - } - /* Help */ if (c == '?') { --- 1571,1576 ---- *************** *** 1602,1608 **** } /* Warning */ ! bell(); } /* Are we done? */ --- 1579,1585 ---- } /* Warning */ ! bell("Illegal autoroller command!"); } /* Are we done? */ *************** *** 1621,1628 **** /*** Finish up ***/ ! /* Get a name, recolor it, prepare savefile */ get_name(); /* Prompt for it */ prt("['Q' to suicide, 'S' to start over, or ESC to continue]", 23, 10); --- 1598,1608 ---- /*** Finish up ***/ ! /* Get a name, prepare savefile */ get_name(); + + /* Display the player */ + display_player(0); /* Prompt for it */ prt("['Q' to suicide, 'S' to start over, or ESC to continue]", 23, 10); diff -c -r angband-282/src/cave.c angband-283/src/cave.c *** angband-282/src/cave.c Wed Sep 3 11:57:32 1997 --- angband-283/src/cave.c Mon Feb 9 01:18:52 1998 *************** *** 12,18 **** - /* * Approximate Distance between two points. * --- 12,17 ---- *************** *** 22,40 **** * * Algorithm: hypot(dy,dx) = max(dy,dx) + min(dy,dx) / 2 */ ! int distance(int y1, int x1, int y2, int x2) { ! int dy, dx, d; /* Find the absolute y/x distance components */ ! dy = (y1 > y2) ? (y1 - y2) : (y2 - y1); ! dx = (x1 > x2) ? (x1 - x2) : (x2 - x1); /* Hack -- approximate the distance */ ! d = (dy > dx) ? (dy + (dx>>1)) : (dx + (dy>>1)); ! ! /* Return the distance */ ! return (d); } --- 21,36 ---- * * Algorithm: hypot(dy,dx) = max(dy,dx) + min(dy,dx) / 2 */ ! sint distance(int y1, int x1, int y2, int x2) { ! int ay, ax; /* Find the absolute y/x distance components */ ! ay = (y1 > y2) ? (y1 - y2) : (y2 - y1); ! ax = (x1 > x2) ? (x1 - x2) : (x2 - x1); /* Hack -- approximate the distance */ ! return ((ay > ax) ? (ay + (ax>>1)) : (ax + (ay>>1))); } *************** *** 42,77 **** * A simple, fast, integer-based line-of-sight algorithm. By Joseph Hall, * 4116 Brewster Drive, Raleigh NC 27606. Email to jnh@ecemwl.ncsu.edu. * ! * Returns TRUE if a line of sight can be traced from (x1,y1) to (x2,y2). ! * ! * The LOS begins at the center of the tile (x1,y1) and ends at the center of ! * the tile (x2,y2). If los() is to return TRUE, all of the tiles this line ! * passes through must be floor tiles, except for (x1,y1) and (x2,y2). ! * ! * We assume that the "mathematical corner" of a non-floor tile does not ! * block line of sight. ! * ! * Because this function uses (short) ints for all calculations, overflow may ! * occur if dx and dy exceed 90. ! * ! * Once all the degenerate cases are eliminated, the values "qx", "qy", and ! * "m" are multiplied by a scale factor "f1 = abs(dx * dy * 2)", so that ! * we can use integer arithmetic. ! * ! * We travel from start to finish along the longer axis, starting at the border ! * between the first and second tiles, where the y offset = .5 * slope, taking ! * into account the scale factor. See below. ! * ! * Also note that this function and the "move towards target" code do NOT ! * share the same properties. Thus, you can see someone, target them, and ! * then fire a bolt at them, but the bolt may hit a wall, not them. However, ! * by clever choice of target locations, you can sometimes throw a "curve". ! * ! * Note that "line of sight" is not "reflexive" in all cases. ! * ! * Use the "projectable()" routine to test "spell/missile line of sight". ! * ! * Use the "update_view()" function to determine player line-of-sight. */ bool los(int y1, int x1, int y2, int x2) { --- 38,74 ---- * A simple, fast, integer-based line-of-sight algorithm. By Joseph Hall, * 4116 Brewster Drive, Raleigh NC 27606. Email to jnh@ecemwl.ncsu.edu. * ! * This function returns TRUE if a "line of sight" can be traced from the ! * center of the grid (x1,y1) to the center of the grid (x2,y2), with all ! * of the grids along this path (except for the endpoints) being non-wall ! * grids. Actually, the "chess knight move" situation is handled by some ! * special case code which allows the grid diagonally next to the player ! * to be obstructed, because this yields better gameplay semantics. This ! * algorithm is totally reflexive, except for "knight move" situations. ! * ! * Because this function uses (short) ints for all calculations, overflow ! * may occur if dx and dy exceed 90. ! * ! * Once all the degenerate cases are eliminated, we determine the "slope" ! * ("m"), and we use special "fixed point" mathematics in which we use a ! * special "fractional component" for one of the two location components ! * ("qy" or "qx"), which, along with the slope itself, are "scaled" by a ! * scale factor equal to "abs(dy*dx*2)" to keep the math simple. Then we ! * simply travel from start to finish along the longer axis, starting at ! * the border between the first and second tiles (where the y offset is ! * thus half the slope), using slope and the fractional component to see ! * when motion along the shorter axis is necessary. Since we assume that ! * vision is not blocked by "brushing" the corner of any grid, we must do ! * some special checks to avoid testing grids which are "brushed" but not ! * actually "entered". ! * ! * Angband three different "line of sight" type concepts, including this ! * function (which is used almost nowhere), the "project()" method (which ! * is used for determining the paths of projectables and spells and such), ! * and the "update_view()" concept (which is used to determine which grids ! * are "viewable" by the player, which is used for many things, such as ! * determining which grids are illuminated by the player's torch, and which ! * grids and monsters can be "seen" by the player, etc). */ bool los(int y1, int x1, int y2, int x2) { *************** *** 294,400 **** - - - /* - * Can the player "see" the given grid? - * - * He must have vision, illumination, and line of sight. - * - * If the player is "blind", then no grids can be "seen". - * - * Note that "CAVE_LITE" means that a grid is lit by the player's torch, - * which means that the grid is "lit" and "viewable", so all such grids - * can, by definition, be "seen". - * - * Note that "CAVE_GLOW" means that a grid is "permanently illuminated", - * which, normally, means that if the grid is "viewable", then it can be - * "seen". But for wall/door grids, since they are not "translucent", - * this is only true if, in addition, the grid which is closest to the - * player and adjacent to the wall grid is also "permanently lit". - * - * This bizarre method for handling perma-lit wall grids may be more - * expensive than simply assuming that perma-lit wall grids, like the - * floor grids, can be seen when viewable, but it provides a somewhat - * more "correct" semantics, in particular, it prevents the player from - * "seeing" the wall of a room from a hallway running next to the room. - * - * Technically, we should check all eight grids adjacent to the wall grid, - * and if any of them are "perma-lit" non-wall grids which are "viewable" - * to the player, then the wall grid, if perma-lit itself, can be "seen", - * but this is extremely expensive, and dangerous, if the wall grid is - * adjacent to any "illegal" grids. But the semantics would be slightly - * better, for example, currently, wall grids which frame the "entrance" - * to a lit room cannot be "seen" by a player in a dark hallway. - * - * We must be very careful about combining this function, in particular, - * the parts which deal with "perma-lit" wall grids, with any optimized - * algorithms, such as the "update_view()" code, which only calls the - * "note_spot()" function (which uses an "inline" version of this code) - * for grids which "change" viewability, since strange things may happen - * if we are not careful. For example, when a player enters a lit room, - * from a dark hall, through a closed door, with no torch, we must ensure - * that the walls adjacent to the door are "seen" from the doorway. - * - * The "doorway" example is responsible for the "optional" method shown - * below, in which we check three adjacent grids instead of just a single - * adjacent grid, and we forbid these grids from being walls. - * - * See also the various "inline" versions of "player_can_see_bold()", for - * example, in the "note_spot()" and "map_info()" functions. - */ - bool player_can_see_bold(int y, int x) - { - /* Blind players see nothing */ - if (p_ptr->blind) return (FALSE); - - /* Note that "torch-lite" yields "illumination" */ - if (cave_info[y][x] & (CAVE_LITE)) return (TRUE); - - /* Require line of sight to the grid */ - if (!player_has_los_bold(y, x)) return (FALSE); - - /* Require "perma-lite" of the grid */ - if (!(cave_info[y][x] & (CAVE_GLOW))) return (FALSE); - - /* Floors are simple */ - if (cave_floor_bold(y, x)) return (TRUE); - - /* Walls */ - if (TRUE) - { - int py = p_ptr->py; - int px = p_ptr->px; - - /* Hack -- move towards player */ - int yy = (y < py) ? (y + 1) : (y > py) ? (y - 1) : y; - int xx = (x < px) ? (x + 1) : (x > px) ? (x - 1) : x; - - #if 0 - /* Alternative method */ - if ((cave_floor_bold(yy, xx) && (cave_info[yy][xx] & (CAVE_GLOW))) || - (cave_floor_bold(y, xx) && (cave_info[y][xx] & (CAVE_GLOW))) || - (cave_floor_bold(yy, x) && (cave_info[yy][x] & (CAVE_GLOW)))) - { - /* Assume the wall is really illuminated */ - return (TRUE); - } - #endif - - /* Check for "local" illumination */ - if (cave_info[yy][xx] & (CAVE_GLOW)) - { - /* Assume the wall is really illuminated */ - return (TRUE); - } - } - - /* Assume not visible */ - return (FALSE); - } - - - /* * Returns true if the player's grid is dark */ --- 291,296 ---- *************** *** 443,509 **** - - - - /* * Hack -- Legal monster codes */ ! static cptr image_monster_hack = \ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; /* ! * Mega-Hack -- Hallucinatory monster */ ! static void image_monster(byte *ap, char *cp) { ! int n = strlen(image_monster_hack); ! /* Random symbol from set above */ ! (*cp) = (image_monster_hack[rand_int(n)]); /* Random color */ ! (*ap) = randint(15); } /* * Hack -- Legal object codes */ ! static cptr image_object_hack = \ ! "?/|\\\"!$()_-=[]{},~"; /* ! * Mega-Hack -- Hallucinatory object */ ! static void image_object(byte *ap, char *cp) { ! int n = strlen(image_object_hack); ! /* Random symbol from set above */ ! (*cp) = (image_object_hack[rand_int(n)]); /* Random color */ ! (*ap) = randint(15); } /* * Hack -- Random hallucination */ ! static void image_random(byte *ap, char *cp) { /* Normally, assume monsters */ if (rand_int(100) < 75) { ! image_monster(ap, cp); } /* Otherwise, assume objects */ else { ! image_object(ap, cp); } } --- 339,409 ---- /* * Hack -- Legal monster codes */ ! static const char image_monster_hack[] = \ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; /* ! * Hack -- Hallucinatory monster */ ! static u16b image_monster(void) { ! byte a; ! char c; ! /* Random symbol from set above (not including final nul) */ ! c = image_monster_hack[rand_int(sizeof(image_monster_hack) - 1)]; /* Random color */ ! a = randint(15); ! ! /* Encode */ ! return (PICT(a,c)); } /* * Hack -- Legal object codes */ ! static const char image_object_hack[] = \ ! "?/|\\\"!$()_-=[]{},~"; /* " */ /* ! * Hack -- Hallucinatory object */ ! static u16b image_object(void) { ! byte a; ! char c; ! /* Random symbol from set above (not including final nul) */ ! c = image_object_hack[rand_int(sizeof(image_object_hack) - 1)]; /* Random color */ ! a = randint(15); ! ! /* Encode */ ! return (PICT(a,c)); } /* * Hack -- Random hallucination */ ! static u16b image_random(void) { /* Normally, assume monsters */ if (rand_int(100) < 75) { ! return (image_monster()); } /* Otherwise, assume objects */ else { ! return (image_object()); } } *************** *** 512,704 **** /* * Extract the attr/char to display at the given (legal) map location * ! * Basically, we "paint" the chosen attr/char in several passes, starting ! * with any known "terrain features" (defaulting to darkness), then adding ! * any known "objects", then adding any known "monsters", and then adding ! * the player if needed. This is not the fastest method but since most of ! * the calls to this function are made for grids with no objects, monsters, ! * or players, it should be fast enough. * * Note that the "zero" entry in the feature/object/monster arrays are * used to provide "special" attr/char codes, with "monster zero" being * used for the player attr/char, "object zero" being used for the "stack" ! * attr/char, and "feature zero" being used for the "nothing" attr/char, ! * though this function makes use of only "feature zero". XXX XXX XXX * ! * Note that monsters can have some "special" flags, including "ATTR_MULTI", ! * which means their color changes, and "ATTR_CLEAR", which means they take ! * the color of whatever is under them, and "CHAR_CLEAR", which means that ! * they take the symbol of whatever is under them. Technically, the flag ! * "CHAR_MULTI" is supposed to indicate that a monster looks strange when ! * examined, but this flag is currently ignored. All of these flags are ! * ignored if the "avoid_other" option is set, since checking for these ! * conditions is expensive and annoying on some systems. * - * Currently, we do nothing with multi-hued objects, because there are - * not any. If there were, they would have to set "shimmer_objects" - * when they were created, and then new "shimmer" code in "dungeon.c" - * would have to be created handle the "shimmer" effect, and the code - * in "cave.c" would have to be updated to create the shimmer effect. * ! * Note the effects of hallucination. Objects always appear as random ! * "objects", monsters as random "monsters", and normal grids occasionally ! * appear as random "monsters" or "objects", but note that these random ! * "monsters" and "objects" are really just "colored ascii symbols". ! * ! * Note that "floors" and "invisible traps" (and "zero" features) are ! * drawn as "floors" using a special check for optimization purposes, ! * and these are the only features which get drawn using the special ! * lighting effects activated by "view_special_lite". * * Note the use of the "mimic" field in the "terrain feature" processing, * which allows any feature to "pretend" to be another feature. This is * used to "hide" secret doors, and to make all "doors" appear the same, * and all "walls" appear the same, and "hidden" treasure stay hidden. ! * It is possible to use this field to make a feature "look" like a floor, ! * but the "special lighting effects" for floors will not be used. * - * Note the use of the new "terrain feature" information. Note that the - * assumption that all interesting "objects" and "terrain features" are - * memorized allows extremely optimized processing below. Note the use - * of separate flags on objects to mark them as memorized allows a grid - * to have memorized "terrain" without granting knowledge of any object - * which may appear in that grid. - * - * Note the efficient code used to determine if a "floor" grid is - * "memorized" or "viewable" by the player, where the test for the - * grid being "viewable" is based on the facts that (1) the grid - * must be "lit" (torch-lit or perma-lit), (2) the grid must be in - * line of sight, and (3) the player must not be blind, and uses the - * assumption that all torch-lit grids are in line of sight. - * - * Note that floors (and invisible traps) are the only grids which are - * not memorized when seen, so only these grids need to check to see if - * the grid is "viewable" to the player (if it is not memorized). Since - * most non-memorized grids are in fact walls, this induces *massive* - * efficiency, at the cost of *forcing* the memorization of non-floor - * grids when they are first seen. Note that "invisible traps" are - * always treated exactly like "floors", which prevents "cheating". - * - * Note the "special lighting effects" which can be activated for floor - * grids using the "view_special_lite" option (for "white" floor grids), - * causing certain grids to be displayed using special colors. If the - * player is "blind", we will use "dark gray", else if the grid is lit - * by the torch, and the "view_yellow_lite" option is set, we will use - * "yellow", else if the grid is "dark", we will use "dark gray", else - * if the grid is not "viewable", and the "view_bright_lite" option is - * set, and the we will use "slate" (gray). We will use "white" for all - * other cases, in particular, for illuminated viewable floor grids. - * - * Note the "special lighting effects" which can be activated for wall - * grids using the "view_granite_lite" option (for "white" wall grids), - * causing certain grids to be displayed using special colors. If the - * player is "blind", we will use "dark gray", else if the grid is lit - * by the torch, and the "view_yellow_lite" option is set, we will use - * "yellow", else if the "view_bright_lite" option is set, and the grid - * is not "viewable", or is "dark", or is glowing, but not when viewed - * from the player's current location, we will use "slate" (gray). We - * will use "white" for all other cases, in particular, for correctly - * illuminated viewable wall grids. - * - * Note that, when "view_granite_lite" is set, we use an inline version - * of the "player_can_see_bold()" function to check the "viewability" of - * grids when the "view_bright_lite" option is set, and we do NOT use - * any special colors for "dark" wall grids, since this would allow the - * player to notice the walls of illuminated rooms from a hallway that - * happened to run beside the room. * ! * Note that bizarre things must be done when the "attr" and/or "char" ! * codes have the "high-bit" set, since these values are used to encode ! * various "special" pictures in some versions, and certain situations, ! * such as "multi-hued" or "clear" monsters, cause the attr/char codes ! * to be "scrambled" in various ways. * - * Note that eventually we may use the "&" symbol for embedded treasure, - * and use the "*" symbol to indicate multiple objects, though this will - * have to wait for Angband 2.8.2 or later. Currently, we simply use - * the attr/char of the first "marked" object in the stack. If we did - * use some special symbol, it could be stored in "f_info[0]". * ! * Note the assumption that doing "x_ptr = &x_info[x]" plus a few of ! * "x_ptr->xxx", is quicker than "x_info[x].xxx", if this is incorrect ! * then a whole lot of code should be changed... XXX XXX XXX */ void map_info(int y, int x, byte *ap, char *cp) { feature_type *f_ptr; s16b this_o_idx, next_o_idx = 0; ! int feat; ! byte a; ! char c; ! /* Feature code */ feat = cave_feat[y][x]; ! /* Floors (etc) */ ! if (feat <= FEAT_INVIS) { ! /* Memorized (or visible) floor */ ! if ((cave_info[y][x] & (CAVE_MARK)) || ! (((cave_info[y][x] & (CAVE_LITE)) || ! ((cave_info[y][x] & (CAVE_GLOW)) && ! (cave_info[y][x] & (CAVE_VIEW)))) && ! !p_ptr->blind)) { /* Access floor */ f_ptr = &f_info[FEAT_FLOOR]; /* Normal char */ ! (*cp) = f_ptr->z_char; /* Normal attr */ ! a = f_ptr->z_attr; /* Special lighting effects */ if (view_special_lite && (a == TERM_WHITE)) { ! /* Handle "blind" */ ! if (p_ptr->blind) ! { ! /* Use "dark gray" */ ! a = TERM_L_DARK; ! } ! ! /* Handle "torch-lit" grids */ ! else if (cave_info[y][x] & (CAVE_LITE)) { ! /* Torch lite */ ! if (view_yellow_lite) { /* Use "yellow" */ a = TERM_YELLOW; } } /* Handle "dark" grids */ ! else if (!(cave_info[y][x] & (CAVE_GLOW))) { /* Use "dark gray" */ a = TERM_L_DARK; } ! /* Handle "out-of-sight" grids */ ! else if (!(cave_info[y][x] & (CAVE_VIEW))) { ! /* Special flag */ ! if (view_bright_lite) ! { ! /* Use "gray" */ ! a = TERM_SLATE; ! } } } - - /* The attr */ - (*ap) = a; } /* Unknown */ --- 412,692 ---- /* * Extract the attr/char to display at the given (legal) map location * ! * Note that this function, since it is called by "lite_spot()" which ! * is called by "update_view()", is a major efficiency concern. ! * ! * Basically, we examine each "layer" of the world (terrain, objects, ! * monsters/players), from the bottom up, extracting a new attr/char ! * if necessary at each layer, and defaulting to "darkness". This is ! * not the fastest method, but it is very simple, and it is about as ! * fast as it could be for grids which contain no "marked" objects or ! * "visible" monsters. ! * ! * We apply the effects of hallucination during each layer. Objects will ! * always appear as random "objects", monsters will always appear as random ! * "monsters", and normal grids occasionally appear as random "monsters" or ! * "objects", but note that these random "monsters" and "objects" are really ! * just "colored ascii symbols" (which may look silly on some machines). ! * ! * The hallucination functions avoid taking any pointers to local variables ! * because some compilers refuse to use registers for any local variables ! * whose address is taken anywhere in the function. ! * ! * As an optimization, we can handle the "player" grid as a special case. ! * ! * Note that the memorization of "objects" and "monsters" is not related ! * to the memorization of "terrain". This allows the player to memorize ! * the terrain of a grid without memorizing any objects in that grid, and ! * to detect monsters without detecting anything about the terrain of the ! * grid containing the monster. ! * ! * The fact that all interesting "objects" and "terrain features" are ! * memorized as soon as they become visible for the first time means ! * that we only have to check the "CAVE_SEEN" flag for "boring" grids. ! * ! * Note that bizarre things must be done when the "attr" and/or "char" ! * codes have the "high-bit" set, since these values are used to encode ! * various "special" pictures in some versions, and certain situations, ! * such as "multi-hued" or "clear" monsters, cause the attr/char codes ! * to be "scrambled" in various ways. * * Note that the "zero" entry in the feature/object/monster arrays are * used to provide "special" attr/char codes, with "monster zero" being * used for the player attr/char, "object zero" being used for the "stack" ! * attr/char, and "feature zero" being used for the "nothing" attr/char. * ! * Note that eventually we may want to use the "&" symbol for embedded ! * treasure, and use the "*" symbol to indicate multiple objects, but ! * currently, we simply use the attr/char of the first "marked" object ! * in the stack, if any, and so "object zero" is unused. XXX XXX XXX ! * ! * Note the assumption that doing "x_ptr = &x_info[x]" plus a few of ! * "x_ptr->xxx", is quicker than "x_info[x].xxx", even if "x" is a fixed ! * constant. If this is incorrect then a lot of code should be changed. * * ! * Some comments on the "terrain" layer... ! * ! * Note that "boring" grids (floors, invisible traps, and any illegal grids) ! * are very different from "interesting" grids (all other terrain features), ! * and the two types of grids are handled completely separately. The most ! * important distinction is that "boring" grids may or may not be memorized ! * when they are first encountered, and so we must use the "CAVE_SEEN" flag ! * to see if they are "see-able". ! * ! * ! * Some comments on the "terrain" layer (boring grids)... ! * ! * Note that "boring" grids are always drawn using the picture for "empty ! * floors", which is stored in "f_info[FEAT_FLOOR]". Sometimes, special ! * lighting effects may cause this picture to be modified. ! * ! * Note that "invisible traps" are always displayes exactly like "empty ! * floors", which prevents various forms of "cheating", with no loss of ! * efficiency. There are still a few ways to "guess" where traps may be ! * located, for example, objects will never fall into a grid containing ! * an invisible trap. XXX XXX ! * ! * To determine if a "boring" grid should be displayed, we simply check to ! * see if it is either memorized ("CAVE_MARK"), or currently "see-able" by ! * the player ("CAVE_SEEN"). Note that "CAVE_SEEN" is now maintained by the ! * "update_view()" function. ! * ! * Note the "special lighting effects" which can be activated for "boring" ! * grids using the "view_special_lite" option, causing certain such grids ! * to be displayed using special colors (if they are normally "white"). ! * If the grid is "see-able" by the player, we will use the normal "white" ! * (except that, if the "view_yellow_lite" option is set, and the grid ! * is *only* "see-able" because of the player's torch, then we will use ! * "yellow"), else if the player is "blind", we will use "dark gray", ! * else if the grid is not "illuminated", we will use "dark gray", else ! * if the "view_bright_lite" option is set, we will use "slate" (gray), ! * else we will use the normal "white". ! * ! * ! * Some comments on the "terrain" layer (non-boring grids)... * * Note the use of the "mimic" field in the "terrain feature" processing, * which allows any feature to "pretend" to be another feature. This is * used to "hide" secret doors, and to make all "doors" appear the same, * and all "walls" appear the same, and "hidden" treasure stay hidden. ! * Note that it is possible to use this field to make a feature "look" ! * like a floor, but the "view_special_lite" flag only affects actual ! * "boring" grids. ! * ! * Since "interesting" grids are always memorized as soon as they become ! * "see-able" by the player ("CAVE_SEEN"), such a grid only needs to be ! * displayed if it is memorized ("CAVE_MARK"). Most "interesting" grids ! * are in fact non-memorized, non-see-able, wall grids, so the fact that ! * we do not have to check the "CAVE_SEEN" flag adds some efficiency, at ! * the cost of *forcing* the memorization of all "interesting" grids when ! * they are first seen. Since the "CAVE_SEEN" flag is now maintained by ! * the "update_view()" function, this efficiency is not as significant as ! * it was in previous versions, and could perhaps be removed. ! * ! * Note the "special lighting effects" which can be activated for "wall" ! * grids using the "view_granite_lite" option, causing certain such grids ! * to be displayed using special colors (if they are normally "white"). ! * If the grid is "see-able" by the player, we will use the normal "white" ! * else if the player is "blind", we will use "dark gray", else if the ! * "view_bright_lite" option is set, we will use "slate" (gray), else we ! * will use the normal "white". ! * ! * Note that "wall" grids are more complicated than "boring" grids, due to ! * the fact that "CAVE_GLOW" for a "wall" grid means that the grid *might* ! * be glowing, depending on where the player is standing in relation to the ! * wall. In particular, the wall of an illuminated room should look just ! * like any other (dark) wall unless the player is actually inside the room. ! * ! * Thus, we do not support as many visual special effects for "wall" grids ! * as we do for "boring" grids, since many of them would give the player ! * information about the "CAVE_GLOW" flag of the wall grid, in particular, ! * it would allow the player to notice the walls of illuminated rooms from ! * a dark hallway that happened to run beside the room. * * ! * Some comments on the "object" layer... ! * ! * Currently, we do nothing with multi-hued objects, because there are ! * not any. If there were, they would have to set "shimmer_objects" ! * when they were created, and then new "shimmer" code in "dungeon.c" ! * would have to be created handle the "shimmer" effect, and the code ! * in "cave.c" would have to be updated to create the shimmer effect. ! * This did not seem worth the effort. XXX XXX * * ! * Some comments on the "monster"/"player" layer... ! * ! * Note that monsters can have some "special" flags, including "ATTR_MULTI", ! * which means their color changes, and "ATTR_CLEAR", which means they take ! * the color of whatever is under them, and "CHAR_CLEAR", which means that ! * they take the symbol of whatever is under them. Technically, the flag ! * "CHAR_MULTI" is supposed to indicate that a monster looks strange when ! * examined, but this flag is currently ignored. All of these flags are ! * ignored if the "avoid_other" option is set, since checking for these ! * conditions is expensive (and annoying) on some systems. ! * ! * Normally, players could be handled just like monsters, except that the ! * concept of the "torch lite" of others player would add complications. ! * For efficiency, however, we handle the (only) player first, since the ! * "player" symbol always "pre-empts" any other facts about the grid. ! * ! * The "hidden_player" efficiency option, which only makes sense with a ! * single player, allows the player symbol to be hidden while running. */ void map_info(int y, int x, byte *ap, char *cp) { + byte a; + char c; + + byte feat; + byte info; + feature_type *f_ptr; s16b this_o_idx, next_o_idx = 0; ! s16b m_idx; ! bool image = p_ptr->image; ! ! ! /* Monster/Player */ ! m_idx = cave_m_idx[y][x]; ! ! #ifdef MAP_INFO_MULTIPLE_PLAYERS ! ! /* Handle "player" grids below */ ! ! #else /* MAP_INFO_MULTIPLE_PLAYERS */ ! ! /* Handle "player" */ ! if ((m_idx < 0) && !(p_ptr->running && hidden_player)) ! { ! monster_race *r_ptr = &r_info[0]; ! ! /* Get the "player" attr */ ! a = r_ptr->x_attr; ! ! /* Get the "player" char */ ! c = r_ptr->x_char; + /* Result */ + (*ap) = a; + (*cp) = c; ! /* Done */ ! return; ! } ! ! #endif /* MAP_INFO_MULTIPLE_PLAYERS */ ! ! ! /* Feature */ feat = cave_feat[y][x]; ! /* Cave flags */ ! info = cave_info[y][x]; ! ! /* Hack -- rare random hallucination on non-outer walls */ ! if (image && (!rand_int(256)) && (feat < FEAT_PERM_SOLID)) ! { ! int i = image_random(); ! a = PICT_A(i); ! c = PICT_C(i); ! } ! ! /* Boring grids (floors, etc) */ ! else if (feat <= FEAT_INVIS) { ! /* Memorized (or seen) floor */ ! if ((info & (CAVE_MARK)) || ! (info & (CAVE_SEEN))) { /* Access floor */ f_ptr = &f_info[FEAT_FLOOR]; /* Normal char */ ! c = f_ptr->x_char; /* Normal attr */ ! a = f_ptr->x_attr; /* Special lighting effects */ if (view_special_lite && (a == TERM_WHITE)) { ! /* Handle "seen" grids */ ! if (info & (CAVE_SEEN)) { ! /* Only lit by "torch" lite */ ! if (view_yellow_lite && !(info & (CAVE_GLOW))) { /* Use "yellow" */ a = TERM_YELLOW; } } + /* Handle "blind" */ + else if (p_ptr->blind) + { + /* Use "dark gray" */ + a = TERM_L_DARK; + } + /* Handle "dark" grids */ ! else if (!(info & (CAVE_GLOW))) { /* Use "dark gray" */ a = TERM_L_DARK; } ! /* Handle "view_bright_lite" */ ! else if (view_bright_lite) { ! /* Use "gray" */ ! a = TERM_SLATE; } } } /* Unknown */ *************** *** 708,725 **** f_ptr = &f_info[FEAT_NONE]; /* Normal attr */ ! (*ap) = f_ptr->z_attr; /* Normal char */ ! (*cp) = f_ptr->z_char; } } ! /* Non floors */ else { /* Memorized grids */ ! if (cave_info[y][x] & (CAVE_MARK)) { /* Apply "mimic" field */ feat = f_info[feat].mimic; --- 696,713 ---- f_ptr = &f_info[FEAT_NONE]; /* Normal attr */ ! a = f_ptr->x_attr; /* Normal char */ ! c = f_ptr->x_char; } } ! /* Interesting grids (non-floors) */ else { /* Memorized grids */ ! if (info & (CAVE_MARK)) { /* Apply "mimic" field */ feat = f_info[feat].mimic; *************** *** 728,798 **** f_ptr = &f_info[feat]; /* Normal char */ ! (*cp) = f_ptr->z_char; /* Normal attr */ ! a = f_ptr->z_attr; !