Release Notes for the ADND Game ************************************************************************* Author: Steve Segreto Revisions: 12-19-93 (Version 0.0.1) 12-20-93 (Version 0.0.2) 01-07-94 (Version 0.0.3) 05-15-94 (Version 0.1.3) 05-17-94 (Version 0.1.4) 07-23-94 (Version 0.1.8) 01-06-95 (Version 0.2.5) 01-10-95 (Version 0.2.7) 07-26-96 (Version 0.3.3) 08-06-96 (Version 0.3.9) 05-07-97 (Version 0.4.0) 05-11-97 (Version 0.4.1) 08-16-97 (Version 0.4.2) 05-09-98 (Version 0.4.3) 07-15-98 (Version 0.5.2) 08-06-98 (Version 0.5.3) 08-31-98 (Version 0.5.4) 10-10-98 (Version 0.5.5) 10-12-98 (Version 0.5.6) 10-28-98 (Version 0.5.7) 11-05-98 (Version 0.5.8) 12-11-98 (Version 0.5.9) 12-12-98 (Version 0.6.0) 12-25-98 (Version 0.6.1) 12-26-98 (Version 0.6.2) 12-27-98 (Version 0.6.3) 12-28-98 (Version 0.6.4) 12-29-98 (Version 0.6.5) 12-30-98 (Version 0.6.6) 12-31-98 (Version 0.6.7) 01-02-98 (Version 0.6.8) 01-03-98 (Version 0.6.9) 01-05-99 (Version 0.7.0) 01-10-99 (Version 0.7.1) 01-11-99 (Version 0.7.2) 01-17-99 (Version 0.7.3) 01-21-99 (Version 0.7.4) 02-12-99 (Version 0.7.5) 02-18-99 (Version 0.7.6) 03-03-99 (Version 0.7.7) 03-07-99 (Version 0.7.8) 03-10-99 (Version 0.7.9) 03-12-99 (Version 0.8.0) ************************************************************************* Authors Note: As you can probably tell, developing this game is my hobby. I started playing rogue-a-likes back in 1988 with the first IBM port of Unix's Rogue, Hack v0.0.1 (MS-DOS translation by Don Kneller). Why create an ASCII graphics based text game when everyone else is using 3d-engines and wireframe skeletons with texture-mapped skins? Every now and again I enjoy playing games like that, but they don't hold my attention for long. Even SSI's graphically updated line of adventure games get old after a time. The thing they lack is imagination. They provide you with pictures (often bitmaps) of the dungeon, the monsters, your treasure, your character, etc. I would rather read short, well-written verbal descriptions of such things (often just a name suffices) and leave the rest for my imagination. If I tell you your character has found a long sword, you may imagine it to look however you wish. It may have a bright, shiny blade. It may have a dragon's head for the pommel. I believe that on the other hand, if every time you find a long sword, you see the same little graphical icon for it (a picture of a plain, functional long sword), then you become jaded. Every orc or goblin you meet looks the same. They were all cut from the same cloth. Each goblin wears a dirty vest and carries a dagger. All the orcs in the game have axes. One of the advantages of a textually oriented media is that the game can often flow like a book, with simple messages indicating what you are doing and what your enemies are doing. Many people are frustrated by having to constantly read and imagine and think about what they are seeing on a computer screen. For these people, I don't recommend trying to play this game. Go play a running shotgun in the latest remake of Doom. When something moves press CTRL (you can press it even if that thing in the corner isn't moving, everything in the game was made for you to destroy, so go ahead). It just occurred to me as I write this that I am most likely preaching to the converted, since the type of people I am trying to scare off would never bother to read the Release Notes. Oh well. I hope everyone enjoys the game, whatever form I release it in. Design Note: Parts of the game were originally coded in Microsoft QuickBASIC v4.5 on an Intel 8086 with 640K of RAM. Later these parts were ported to Turbo Pascal v7.0 by Borland International (running on an 80386 w/ 4 megs). The remainder of the game was coded entirely in Turbo Pascal v7.0 on a Pentium 166 Mhz machine with 81 megs of RAM. Later the game was ported to ANSI C with a Turbo C/C++ 4.5 compiler. System Requirements: I haven't done any real testing, but I think its safe to say that the game requires at least an 80486 66 Mhz computer with 8 megs RAM (it may run on older systems, but I just haven't tried it). You will need at least 8 megs of free hard drive space (1.5-2 megs for the installation, and the rest for a couple of save games and monster level files). The game uses the 80x25 16 color text mode for most screens, but the auto-map is displayed in a VGA 16 color mode, so I recommend a color monitor with at least a VGA card. The game uses overlays, and Borland's overlay manager likes to use EMS (not XMS) memory. The good news is that it only uses EMS memory to make the overlay swapping process faster. Computers with a CPU above 100 Mhz can power right past this deficiency and never need to have a single Meg of EMS memory! Installation: You should have the file ADNDxxx.ZIP (where xxx is the release number, as in 0.7.0) located either on your hard disk or on a floppy diskette. Download the PKUNZIP.EXE utility into either your C:\DOS directory or your C:\WINDOWS\COMMAND directory. 1. Start an MS-DOS prompt and make a folder for the game (type md adnd). 2. Now move into that folder (type cd \adnd). 3. Unpack the Zip file you downloaded using PKUNZIP. If for example you downloaded ADND085.ZIP, then type 'PKUNZIP ADND085.ZIP -d' 4. Exit from the MS-DOS prompt and return to Windows. 5. Now just put a shortcut to the EXE file on your desktop and double-click from Windows (95/98/NT) and you are ready to go! ///////////////////////////////////////////////////////////////////////////// // ADND Version 0.0.1 to Present // ///////////////////////////////////////////////////////////////////////////// Version 0.0.1 * Interactive ADND> prompt - Help session enabled Version 0.0.2 * Dungeons correctly read and displayed - Five dungeons (Lamorte, Telengard, The Warren, Shvenk's Lair, The Cavern) - Twenty levels per dungeon Version 0.0.3 * Complete ADND 2nd Edition character generation enabled - Six character races - Multi-classed characters Version 0.0.4 * Characters saved/restored from PLAYERS.DAT which holds up to 20 different player characters. Version 0.0.5 * Run character enabled - Move> Prompt - Information Window (Displays character information) - Map Window (Displays ASCII map) - User Window (Displays messages to the user) Version 0.0.6 * Random dungeon generation implemented for when .BIN file containing dungeon information is deleted. Version 0.0.7 * Sixth dungeon, Moria, created randomly to MORIA.BIN Version 0.0.8 * Character status added (OKAY, DEAD, STONED, GONE, POISONED, etc.) Version 0.0.9 * Dungeon fixtures implemented (MIR, ALT, DGN) - Lighting effects achieved Version 0.1.0 * Thrones, Treasure Vaults and Fountains implemented. Version 0.1.1 * ADND Game Store implemented (later invalidated). Version 0.1.2 * The Orb of Immortality implemented. Version 0.1.3 * Elevators, Teleports, Stairs, Pits, The Excelsior Transporter and Genies implemented. Version 0.1.4 * You can now discover a hole in the ceiling if the square above you contains a PIT. Version 0.1.5 * Minor revisions to the format of PLAYERS.DAT Version 0.1.6 * Cheat command to gain/lose a level. Version 0.1.7 * Cheat command to damage yourself. Version 0.1.8 * Character death completely implemented via the check_for_death() routine. Version 0.1.9 * The run_character() routine was re-written to be cleaner, more compact. Version 0.2.0 * Spell module (WIZARD/PRIEST spells) - Spell casting from Move> prompt - Target is yourself ONLY. - Durations implemented - Spell regeneration Version 0.2.1 * Temple implemented - Raise the dead - Meet characters already in play Version 0.2.2 * Temple RESTORATION spell implemented to regain experience levels lost due to energy drain. Version 0.2.3 * Levitate up through gaping black holes. Version 0.2.4 * Travel spell implemented. Version 0.2.5 * Remove Barrier and Pass Wall spells implemented. Version 0.2.6 * Some fixtures will now grant you bonus spells. Version 0.2.7 * Character saving throws implemented. Version 0.2.8 * Characters can now lose a class if they are multi-classed and they are drained below the 1st level. Version 0.2.9 * item_record defined for use in a linked list of treasure. Version 0.3.0 * Linked list of treasure implemented - More than 60 percent of magical items from DMG included. - Inventory locations (HEAD, TORSO, R_HAND, L_HAND, etc.) - Corpses implemented. a. Looting dead characters b. Rescuing dead characters - Generate any treasure type (A-Z) Version 0.3.1 * Treasure list saved/restored from disk file "dungeon_name.dat", e.g. LAMORTE.DAT for Lamorte. Version 0.3.2 * Treasure may be picked up and used, with appropriate messages. * Cheat command '$' which dumps treasure linked list and '%' which will generate a specific treasure type (such as 'C' or 'E'). Version 0.3.3 * Cheat command '^' which displays character combat information such as saving throws, THAC0 and Armor Class (AC). Version 0.3.4 * Treasure may augment the amount/type of spells a character can use. Version 0.3.5 * begin_duration and stop_duration allow messages and special durational effects to occur when a specified duration starts/stops. * More weapons/armor added * The cheat command '&' has been added, allowing you to identify all of your carried items. Version 0.3.6 * Implemented automap feature, which charts a characters progress through the mazes. * Characters can become lost and no longer able to keep a map, but they can stumble into familiar territory and no longer be lost. Version 0.3.7 * Posioning a character added, with eight strengths of poison. * Special cheat command '*' added, allowing you to administer poison to yourself. Version 0.3.8 * More durational/instantaneous spells correctly implemented. (Neutralize Poison, Cure Light Wounds, Word of Recall, etc.) Version 0.3.9 * Output to the USER window cleaned up a little (still needs more work). Version 0.4.0 * When you pick up a R_HAND, L_HAND, R_FINGER, L_FINGER, ABOVE_HEAD1..3 or WAND1..3, the item goes in the next available slot, if the first is filled (ripple_swap()). Version 0.4.1 * Weapons detailed. - Two-handed weapons prohibit the use of an item in the other hand (right or left). - Two weapons use is allowed, but with a penalty of -2/-4 to hit Rangers wearing std lthr or lighter are not subject to this penalty. * class_restricted() function decides who can use what equipment. Version 0.4.2 * Restrictive access to modifying important character data. Ability scores treated in the following way: * Initial (base) scores generated at character creation time. * Permanent ability score modification results in permanently raising or lowering ability base scores. * Temporary ability score modification is factored in by the find_ability_adjustments procedure. Version 0.4.3 * Protection scrolls and potion durations added. - Protection Scrolls Acid APROT Cold CPROT Dragon Breath DPROT Electricity EPROT1 Elementals EPROT2 Fire FPROT Gas GPROT Lycanthropes LPROT Magic MPROT Petrification SPROT Plants PPROT1 Poison PPROT2 Possession PPROT3 Undead UPROT Water WPROT - Potions Diminution SHRNK Gaseous Form GASF Giant Strength STRNG Growth GRWTH Fire Resistance FREST Heroism HERO Invulnerability INVUL Acid Resistance AREST Fumbling FUMBL Speed HASTE Super-Heroism SUPER Slow SLOW Version 0.4.4 * drink_potion() implemented. * read_scroll() implemented. * read_book() implemented. * The '(' command clears your memory of magical books so that you can read a given book more than once. Version 0.4.5 * Implemented items that modify more than just a character's AC and/or saves - Items that modify # of spells (find_spells()) - Items that modify hit points (find_hps()) - Items that modify one or more ability scores (change_scores) - Items that modify combat ability (to hit and damage) (find_thac0, find_damage) - Items that modify experience levels (gain_levels) - Items that modify other properties of a character. * Created two new functions, put_on_item() and take_off_item() which detail what happens when a character puts on or takes off any given item. These procedures would for example cause the player to gain a point of CON and lose a point of CHA when they first donned a Helm of Dwarvenkind. When the helm was removed, the point of CON would be lost and the point of CHA would be restored. It is similar to begin_duration() and stop_duration() * Cheat command ')' which grants character any specific piece of treasure. Version 0.4.6 * The following HARMFUL durations can now affect a character: - Poisoned (POISN) - Sick (SICK) - Diseased (DISEA) - Cursed (CURSE) - Geased (GEAS) - Blind (BLND) - Deaf (DEAF) - Confused (CONF) - Insane (CRAZY) - Paralyzed (PARAL) - Held (HELD) - Sleeping (SLEEP) - Feeblemind (DUMB) - Enfeebled (WEAK) - Weakened (WEAK) - Afraid (AFRAD) - Charmed (CHARM) - Enchanted (CHARM) Version 0.4.7 * An array of 400 pointers to linked lists of indices into a "level file" shows what monsters can be found in any given (row, col) of the dungeon. * The array of linked lists is written to disk as a "level file", which is simply a list of all "monster_records", one per individual creature. (Thus 2 Orcs would generate 2 monster_records, one for Orc 1 and one for Orc 2). The array of linked lists of indices into this level file is re-built whenever the player changes dungeon depth, and whenever a day of game time elapses (triggering a re-stocking of the dungeon level). * The '-' cheat command dumps the linked list of monsters for the current level. Version 0.4.8 * The ability to add/remove nodes from the array of linked lists above has been added, thus enabling a monster to be "killed". * process_encounter() has been added, allowing the character to engage in combat with monsters found in the square they are in. * To enable code re-usability, a monster_record (and its appropriate permanent_info record) are converted into a pointer to a mobile_object_reocrd (a PMOB). Now a monster can be passed into any of the character-related functions detailed in the previous versions above. Version 0.4.9 * Looked through each of the character related functions and procedures and made it so that they will also return valid results when PMOB points to a creature. * Monsters now start with equipment/ability scores/character classes and levels appropriate to their creature type. Version 0.5.0 * Experience points gained from defeating a monster are now calculated on the fly based on their relative strengths/powers/weaknesses. * Monsters can be damaged, can be affected by spells/durations, can attack with natural and/or hand-held attacks, and can die. Version 0.5.1 * Monsters now display cheat information detailing their combat info, their hit points, their equipment carried, etc. Version 0.5.2 * Many COMBAT-ONLY spells have now been implemented, such as Magic Missile, Fireball, Web, Shocking Grasp, Lightning Bolt, Holy Word, etc. Version 0.5.3 * More priest/wizard spells completed. * Re-worked memory usage, removing heap leaks, dangling pointers, etc. * Current size of heap is displayed (temporarily) on the user screen, allowing user to watch the heap size ebb and flow. Version 0.5.4 * Defrag_heap() function usually regains fragmented free heap blocks. * Code tuned so as to lower the number of relocation items (code was reaching the upper MS-DOS limit of 64K) * Added an attack type quantifier to each of a creature's attacks in the database. Thus an attack such as 1d3/1d3/1d6 is now, 1d3[claw]/1d3[claw]/1d6[bite]. * Rudimentarily implemented encounter tables for some of the dungeons "in code". * Corrected potion of heroism, super-heroism errors. * Changed cast_spell() procedure so that ANY type of character can call it, character or monster. Version 0.5.5 * Implemented ITEM.BIN, an item database with a corresponding index file which is used to store all the permanent information about the items that can be found in the game. * The following spells must still be implemented: Wizard 1-5 Gaze Reflection (No gaze attacks to protect against yet) 2-8 Protection from Paralysis (No paralysis yet) 5-4 Conjure Elemental (Summoning spells cannot yet be implemented) 5-6 Monster Summoning I (Summoning spells cannot yet be implemented) 6-2 Chain Lightning 6-7 True Seeing (Requirements lacking) 7-6 Spell Turning (affect_targets() re-coding required) 7-9 Monster Summoning II (Summoning spells cannot yet be implemented) 8-2 Maze (Requirements lacking) 8-8 Permanency (Waiting for enhanced inventory/duration navigation) 8-9 Monster Summoning III (Summoning spells cannot yet be implemented) 8-0 Polymorph Object (Requirements lacking) 9-4 Prismatic Sphere 9-5 Time Stop (Requirements lacking) 9-7 Chain Contingency (Requirements lacking) Priest 1-4 Detect Traps (There are no traps yet) 1-5 Invisibility to Undead (Requirements lacking) 3-3 Cause Disease (Disease has no affect!) 3-6 Negative Plane Protection (Energy drains not fully implemented yet) 4-3 Chaotic Combat (Requirements lacking) 4-5 Free Action (In progress) 4-0 Sticks to Snakes (Summoning spells cannot yet be implemented) 5-4 Dispel Evil 5-9 True Seeing (Requirements lacking) 5-0 Undead Ward 6-1 Aerial Servant (Summoning spells cannot yet be implemented) 7-2 Conjure Elemental (Summoning spells cannot yet be implemented) * Player slain by vampiric touch returns as a vampire * Player petrified becomes a "strange statue" item Version 0.5.6 * Priest ability to Turn Undead implemented. * Speed factors based on spells, weapon used, or combat action implemented. This causes characters to act slower or faster depending on what they did in the last combat round. Version 0.5.7 * Player inventory implemented as Backpack linked list (old TList changed to Floor linked list). * TAB brings up inventory of Backpack * Implemented Priest Spells 1-5 Invisibility to Undead (Requirements lacking) * Added Diablo Prefixes/Suffixes Version 0.5.8 * Use an item available. * Items can appear/disappear in your Backpack * Encumbrance implemented * Monster types added to the database (NORMAL_ANIMAL, GIANT_ANIMAL, etc). Version 0.5.9 * Spells revised/debugged/updated * Added innate powers (found in POWERS.ASC) to monsters. * Program changed so that units are now overlaid as needed. This greatly increases the amount of Heap space, at only a small cost in speed. Version 0.6.0 * Bug fixes (player inventory) * Changed check_for_death() so that it would not downgrade a character's status from CORPSE_GONE to DEAD. Version 0.6.1 * Added constants for each spell and spell-like power, thus allowing a 3-d representation of the spell (Wiz 1-6, for example) to be represented linearily with a constant (WIZ_LIGHT). Version 0.6.2 * Worked on the polymorph other spell, so that it allows the caster to create a copy of himself as any type of monster they wish. Version 0.6.3 * Added more messages in begin_duration()/stop_duration() * Most Diablo prefixes/suffixes are implemented now. Version 0.6.4 * Added killed_by string, which details what killed the player and where they were at the time. * Small characters must use 2-hands to wield M-size weapons. * Small characters cannot use L-size weapons. Version 0.6.5 * Changed the HeapError pointer function to my own OutOfMemory function (returns a nil pointer). * Using the New keyword to allocate memory was made more robust by being checked for nil values. Version 0.6.6 * Changed references to global variable saved_map to local variables in their respective functions. * Added a "small club" to the item database for halfling characters to use. Version 0.6.7 * Re-worked Telengard Level I encounter tables. * Added the phrase "faintly glowing" to identify magical items when they are first found. Version 0.6.8 * Rangers may now use armor heavier than studded leather, but they are then subject to (reduced) penalties for two-weapon usage. Version 0.6.9 * procedure equip_monster() reduced in size as a result of storing percentile tables on disk in EQUIP.BIN Version 0.7.0 * Fleshed out avatar powers, equipment, statistics. Version 0.7.1 * Changed spell lists so that Rangers, Druids, Clerics, Paladins and Illusionists now have spells based on allowed schools/spheres of magic. * Tactical battle-field added. Game zooms map window in/out before and after combat. Version 0.7.2 * Creature symbols generated based on monster type. Creatures now move (somewhat) intelligently around the field. Version 0.7.3 * Added RESIST.ASC, a data file which allows you to detail the specific resistances/vulnerabilities of a creature. * Game now checks to see if a creature is resistant/vulnerable to a physical attack before inflicting the damage. This is not yet done for spells or other forms of damage aside from being physically struck in combat. Version 0.7.4 * The weight of a coin was increased slightly to reflect the actual value given in the Player's Handbook (page 66) * Creatures on the battle-field now move relative to the slowest creature type. For example, if you (a human, move 12) are fighting a goblin (move 6) and a bullywug (move 3), each move you make reduces your move for that round by 3 (thus you can move 4 squares before your turn is over). The goblin can move 2 squares and the bullywug 1 single square. Version 0.7.5 * Stack overflow error corrected. * Warrior multiple attacks per round implemented. * The game can now create an NPC (non-player character) based on all sorts of input (or on no input at all). For example, you could ask for a half-elf and get all sorts of different half-elves (fighters, thiefs, multi-classed, etc). You could just ask for an NPC and get say a human thief. You could ask for a human thief and get one between levels 1 and 40 (depending on current dungeon depth). You could ask for a human thief with 3000 experience points and get a 3rd level thief (or whatever). Each NPC has a chance (based on experience level) of possessing magical equipment. This equipment will be used in the most advantageous way by the NPC. Version 0.7.6 * Some problems with the inventory were corrected. * Character movement rates now decrease towards 1 as you become more and more encumbered. Version 0.7.7 * Minor bugs corrected. * The starting room of a dungeon now will not contain monsters. This gives the player a chance to explore a little bit before being attacked. Version 0.7.8 * Spell casting routine revised to allow easy change from switch-based procedure to data file input (input spell range, spell damage, etc). Version 0.7.9 * Conjured animals are now implemented. * Monster summoning fully implemented. * The ability to polymorph your wizard into another monster (complete with special powers, natural attacks, etc) has been temporarily removed. * When you died because of a 'Vampiric Touch' spell, your character would be transformed into a specific class and level of Vampire and then dropped into that room as an underling to the original vampire. This has been temporarily disabled. Version 0.8.0 * Character Kits were added to allow players to flesh out more fully what "kind" of character they want. These kits will help determine starting weapons, equipment and followers. ///////////////////////////////////////////////////////////////////////////// // Goals for Future Versions of ADND // ///////////////////////////////////////////////////////////////////////////// Version 0.8.1 Version 0.8.2 Version 0.8.3 Version 0.8.4 Version 0.8.5 Version 0.8.6 Version 0.8.7 Version 0.8.8 Version 0.8.9 Version 0.9.0 * Implement a "Hall of Fame" concept, so that when a character dies they are compared to other characters and possibly added to a high score list. Version 0.9.1 * Re-work the magical item tables so that they not only give out the full range of items, but they give it out based on dungeon depth. This way characters on weak dungeon levels like 1 or 2 (for example) will find extremely powerful magical items EXTREMELY rarely. * Implement the (Z)ap a wand function, allowing characters to use their wands, either from the Move> prompt or in combat. Version 0.9.2 * Make it so that item identification is fully implemented as follows: - When you first find an item, it will be given a mystery name based on a random table of names. For example, when you first find a potion of healing, which is number 16 of its class, the program will tell you you have found a swirly potion for example. Then, for this character, all potions of healing will be swirly. - More permanent items can either be identified in the temple (at a small cost!) or identified by casting the Identify spell (usable by Wizards only) or by reading a scroll of Identify. - The only other way to identify an item is to use it (zap a wand, wear a necklace, helm, or other such item, etc). Some of these items will have an immediate and recognizable effect (for example, wearing gauntlets of ogre power will immediately tell the user what they have!) In this case, simply using the item will identify it. - Until you have identified an item, you won't have any clue what you've got, however once you've identified one of those items, that particular character will always recognize it. Version 0.9.3 Version 0.9.4 Version 0.9.5 Version 0.9.6 Version 0.9.7 Version 0.9.8 Version 0.9.9 Version 1.0.0 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²² ² ²° ² ²° ² ô ²° ² @####³ðððLong-Swordððððð卿° ² õ ²° ² by ²° * Rename the game to: ² ²° ² Steve Segreto ²° ² ²° ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²° °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°