/** * @file help.cpp * * Implementation of the in-game help text. */ #include "all.h" int help_select_line; int dword_634494; BOOL helpflag; int displayinghelp[22]; /* check, does nothing? */ int HelpTop; const char gszHelpText[] = { #ifdef SPAWN "Shareware Diablo Help|" "|" "$Keyboard Shortcuts:|" "Diablo can be played exclusively by using the mouse controls. " "There are times, however, when you may want to use shortcuts to some " "commands by using the keyboard. These shortcuts are listed below:|" "|" "F1: Open the Help Screen|" "Esc: Displays the main menu|" "Tab: Displays the Auto-map|" "Space: Removes any pop-up menus or maps from the play area|" "S: Open Speedbook|" "B: Open Spellbook|" "I: Opens the Inventory screen|" "C: Opens the Character screen|" "Z: Zooms the game screen in and out|" "F: Reduces the brightness of the screen|" "G: Increases the brightness of the screen|" "Q: Opens the Quest log (non-functional in the Shareware version)|" "1 - 8: Use that item from your Belt|" "F5, F6, F7, F8: Sets a hot key for a selected skill or spell|" "Shift + Left Click: Use any weapon without moving|" "|" "|" "$Movement:|" "Movement is controlled by the mouse. The gauntlet on the screen is " "your cursor. Use this to indicate the destination of your character " "and then left-click to move to that area. " "If you hold the mouse button down while moving, the character " "will continue to move in that direction.|" "|" "$Selecting Items:|" "What you can interact with within the game is easily identifiable. " "Move the cursor over any object or creature. If the object can be " "picked up, attacked, activated or used in any way, it will be " "immediately outlined. A description of the highlighted object appears " "in the text area on the control panel.|" "|" "Example: If you select a door and then left-click the character will " "walk to the door and open it. If you left-click on a highlighted " "weapon, the character will walk over to it and put it in his " "inventory. If you left-click on a highlighted creature...|" "|" "$Combat:|" "Combat is initiated by left-clicking on a creature that has been " "highlighted. If your character is equipped with a melee weapon " "(Sword, Mace, Ax, etc.) your character will move to range and attack. " "If your character is equipped with a bow, left-clicking will fire an " "arrow at the highlighted creature. " "Holding down the shift key and then left-clicking allows the " "character to attack without moving.|" "|" "$Picking up Objects:|" "If you left-click on an item - such as a weapon, shield, armor or " "book - your character will move to that item and add it to his " "inventory automatically.|" "|" "Useable items that are small in size - such as a potion or " "scroll - are automatically placed in your 'belt', located at the " "top of the Interface bar . When an item is placed in the belt, " "a small number appears in that box. Items may be used by either " "right-clicking on the item or pressing the corresponding number on " "the keyboard.|" "|" "If you do not have enough room in your inventory or belt for an item " "that you try to pick up, it will fall from your grasp. Open your " "inventory screen and try re-arranging or removing items to carry " "what you really want or need.|" "|" "$Inventory:|" "You can toggle the Inventory screen on and off by clicking the " "INV> button on the control panel. Items may be moved around in " "your inventory by selecting them and then left-clicking to pick " "them up. When you pick up an item while in the inventory screen, " "your cursor changes into the item. You can then place this item into " "empty spaces in your inventory, swap them with other items in your " "inventory or equip them.|" "|" "If you have an item that you no longer wish to carry, simply " "grab the item from your inventory and then left-click in the " "play area to drop it.|" "|" "$Equipping Items:|" "To equip an item, open the inventory screen and pick up the desired " "item, either from play or from your inventory, placing it in the " "appropriate box on the figure in the inventory screen. Weapons and " "shields go into the large spaces to the right or left of the figure. " "Two-handed weapons such as bows and axes preclude the use of a " "shield and will take up both of these large spaces.|" "|" "Cloaks, robes, capes and all other armor must go in the central " "torso slot of the figure. |" "|" "Helmets and caps go in the box over the head of the character.|" "|" "Rings go into the small boxes at the hands of the figure.|" "|" "Amulets go into the small box at the next to the neck of the figure.|" "|" "To change items that your character has equipped, pick up a new " "item and place it on top of the item you wish to remove. Your " "character will automatically swap the items and the cursor will " "now change into the item that was in that box.|" "|" "$Usable Items:|" "Potions, elixirs and books are classified as usable items. These " "items can be used by right-clicking on them in the inventory screen. " "Books are too large to be placed in the belt, but any potions or " "scrolls that are put there can also be used by pressing the " "corresponding number on the keyboard.|" "|" "$Gold:|" "You can select a specific amount of gold to drop by right " "clicking on a pile of gold in your inventory. " "A dialog will appear that allows you to select a specific amount of " "gold to take. When you have entered that number, your cursor will " "change into that amount of gold.|" "|" "$Item Information:|" "Many items in Diablo share certain common attributes. These are " "damage, durability, charges and minimum requirements..|" "|" "Damage: This is represented by a range that indicates the minimum " "and maximum damage that item can inflict. A short sword has a (2-6) " "after its name, meaning it inflicts a minimum of two damage and a " "maximum of six when it hits. Damage can be modified by the quality " "of the weapon, the character's strength and magical effects.|" "|" "Durability: This is the amount of damage that an item can take " "before it is rendered useless. Durability is represented by a " "ratio of current durability to maximum durability. A shield that " "has a durability of 15/20 would still have 15 points of damage it " "could take from use before it was rendered useless. Maximum " "durability can be affected by the quality of the item, enchantments " "or repairs made upon the item. The minimum durability can be raised " "by repairing an item.|" "|" "Charges: Some items have charges associated with them. Charges " "indicate how many times that item can be used to cast the spell or " "affect indicated in its description. Charges are represented by " "a ratio of charges left to maximum charges. A staff that has charges " "listed as 2/5 could be used to cast 2 more spells before it was " "rendered powerless. It could still be used to attack with as a " "physical weapon, however. Maximum charges can be affected by the " "magic or recharges cast upon the item. Minimum charges can be " "raised by recharging the item.|" "|" "Minimum Requirements: These are the minimum requirements that a " "character must meet to wield the item. The more powerful an item is, " "the higher the minimum requirements will be. If a character " "does not meet these requirements, he will be unable to equip the " "item and its name and information will be displayed in red. " "The item artwork will also have a red tint in the Inventory screen.|" "|" "$Items Classes:|" "There are three classes of items in Diablo - Mundane, " "Magic and Unique:|" "|" "Mundane items have no special attributes. Their information is " "displayed in white text.|" "|" "Magic Items are represented by blue names and text descriptions. " "Use the Identify spell or speak to Cain in town to determine their " "exact properties and attributes.|" "|" "Unique items are represented by gold names and text descriptions. " "Use the Identify spell or speak to Cain in town to determine their " "exact properties and attributes.|" "|" "$Skills & Spells:|" "You can access your list of skills and spells by left-clicking on " "the SPELLS button in the interface bar. This 'Spellbook' contains all " "of the skills and spells that your character knows. Spells " "available through staffs are also listed here. Left-clicking on " "the Icon of the spell you wish to ready will place it in the " "'select current spell' icon/area and set it as the current " "readied spell. A readied spell " "may be cast by simply right-clicking in the play area.|" "|" "Left-clicking on the 'select current spell' button will also " "open a 'Speedbook' menu that also allows you to ready a skill " "or spell for use. To use a readied skill or spell, simply " "right-click in the main play area.|" "|" "Skills are the innate abilities of your character. These skills " "are different depending on what class you choose and require no " "mana to use.|" "|" "Warrior:|" "The Warrior has the skill of Repair Items. This allows him to fix " "an item that has been worn by use or is damaged in combat. " "To accomplish this, select the Repair Skill through the " "Spellbook or Speedbook and right-click the mouse as if you were " "casting a spell. Your cursor will change into a Hammer Icon " "that you will use to select the item to be repaired. " "Although Repairing an item in this way will decrease the " "maximum durability of that item, it can be done without leaving " "the labyrinth.|" "|" "The Blacksmith can also repair items for a price. When the " "Blacksmith performs this service, it does decrease the maximum " "durability of the item.|" "|" "Rogue:|" "The Rogue has the skill of Disarm Traps. This allows her to not only " "remove traps, but also acts as a 'sixth sense' that warns her of " "where these trapped items are located. To accomplish this, select " "the Disarm Trap skill through the Spellbook or Speedbook and " "right-click the mouse as if you were casting a spell. " "Your cursor will change into a Targeting Cursor that you will " "use to select the item to be disarmed. The success of this " "attempt is based on the level of the Rogue and the expertise of " "whomever set the trap.|" "|" "Sorcerer:|" "The Sorcerer has the skill of Recharge Staffs. This allows him to " "focus his mana into an staff that has been drained of its magical " "energies. To accomplish this, select the Recharge Staffs skill " "through the Spellbook or Speedbook and right-click the mouse as " "if you were casting a spell. Your cursor will change into a " "Staff Icon that you will use to select the item to be recharged. " "Although Recharging a staff in this way will decrease its maximum " "charges, it can be done without leaving the labyrinth.|" "|" "The Witch can also recharge staffs for a price. When the Witch " "performs this service, it does decrease the maximum charges of the " "item.|" "|" "Spells are magical effects that can be cast from a scroll, " "a staff or memorized from a book. Spells may or may not require " "mana to use and are available to all classes.|" "|" "Spells cast from a scroll cost no mana to use, but are limited " "to only one charge. Casting a spell from a scroll is accomplished " "by either right clicking on the scroll or, if it is located in " "our belt, pressing the corresponding number on the keyboard. " "Scrolls can also be readied in the Speedbook and are represented " "by a red icon/button in the 'select current spell' area.|" "|" "Spells cast from staffs cost no mana to use, but are limited by " "the number of charges available. To cast spells from a staff, " "it must first be equipped. The 'select current spell' icon/button " "will change to indicate that the spell on the staff is currently " "ready to cast. Scrolls can also be readied in the Spellbook or " "Speedbook and are represented by an orange icon/button in the " "'select current spell' area.|" "|" "Spells that are memorized cost mana to cast, but they can be used " "as long as the character has mana to power them. The Warrior " "and Rogue start the game with no memorized spells while " "the sorcerer begins with Firebolt. If the character finds a book " "in the labyrinth, he can memorize the spell written in that book " "by opening the Inventory screen and right-clicking on the book. " "This will make that spell always available to the character for " "casting. Memorized spells can be readied through either the " "Spellbook or Speedbook and are represented by a blue icon/button " "in the 'select current spell' area.|" "|" "$Important note on books:|" "Reading more than one book increases your knowledge of that spell " "and gives you the spell at a higher level. The higher the level " "of a spell the more effective it is.|" "|" "While some spells affect the caster, other spells require a target. " "These targeted spells are cast in the direction that you indicate " "with your cursor on the play area. If you highlight a creature, " "you will cast that spell at that creature. Not all items within " "the labyrinth can be targeted.|" "|" "Example: A fireball spell will travel at the creature or to the " "location you right-click on. A Healing spell will simply add " "health to your character while diminishing his available mana " "and requires no targeting.|" "|" "You can also set a spell or scroll as a Hot Key position for " "instant selection. Start by opening the pop-up menu as described " "in the skill section above. Assign Hot Keys by hitting the " "F5, F6, F7 or F8 keys on your keyboard after scrolling through " "the available spells and highlighting the one you wish to assign. |" "|" "$Health and Mana:|" "The two orbs in the Information Bar display your life and mana. " "The red sphere of fluid on the left side of the control panel " "represents the overall health of your character. When the fluid " "is gone - your character is dead.|" "|" "The blue fluid on the right side of the control panel represents " "your character's available mana. Mana is the magical force used by " "your character to cast spells. When the liquid in the sphere is " "low or depleted, you may be unable to cast some (or all) of your " "spells.|" "|" "$Information Bar:|" "The Information Bar is where you receive detailed information in " "Diablo and interact with much of your surroundings. Here is a " "quick run-down of the control panel areas and their use:|" "|" "CHAR: This button is used to access your Character Statistics screen|" "INV: This button is used to access your Inventory screen|" "Quest: This button displays your Quest Log (inactive in " "Shareware version)|" "Automap: This button activates the mapping overlay|" "Menu: This button activates the game menu screen|" "Spells: This button is used to access your Spellbook|" "Current Spell: This is the spell that has been readied for " "immediate casting|" "Life Orb: This is the amount of health your character currently has|" "Mana Orb: This is the amount of mana your character currently has|" "Multiplayer Message: This activates the Message Area|" "Description Area: This is where any important information about " "creatures or items you can interact with is displayed. " "This is also where you will enter the text you wish to send when " "sending multiplayer messages.|" "|" "$Character Info:|" "Toggle the Character Statistics Screen on and off by clicking the " "= 577) { c--; while (tempstr[c] != ' ') { s--; c--; } } if (*s == '|') { s++; } } for (i = 7; i < 22; i++) { c = 0; w = 0; while (*s == '\0') { s++; } if (*s == '$') { s++; col = COL_RED; } else { col = COL_WHITE; } if (*s == '&') { HelpTop = help_select_line; continue; } while (*s != '|' && w < 577) { while (*s == '\0') { s++; } tempstr[c] = *s; w += fontkern[fontframe[gbFontTransTbl[(BYTE)tempstr[c]]]] + 1; c++; s++; } if (w >= 577) { c--; while (tempstr[c] != ' ') { s--; c--; } } if (c != 0) { tempstr[c] = '\0'; DrawHelpLine(0, i, tempstr, col); } if (*s == '|') { s++; } } PrintSString(0, 23, TRUE, "Press ESC to end or the arrow keys to scroll.", COL_GOLD, 0); } void DrawHelpLine(int always_0, int help_line_nr, char *text, char color) { int off, width; BYTE c; width = 0; off = PitchTbl[SStringY[help_line_nr] + 204] + always_0 + 96 + PANEL_LEFT; while (*text) { c = gbFontTransTbl[(BYTE)*text]; text++; c = fontframe[c]; width += fontkern[c] + 1; if (c) { if (width <= 577) PrintChar(off, c, color); } off += fontkern[c] + 1; } } void DisplayHelp() { help_select_line = 0; helpflag = TRUE; HelpTop = 5000; } void HelpScrollUp() { if (help_select_line > 0) help_select_line--; } void HelpScrollDown() { if (help_select_line < HelpTop) help_select_line++; }