You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
213 lines
5.7 KiB
213 lines
5.7 KiB
/** |
|
* @file help.cpp |
|
* |
|
* Implementation of the in-game help text. |
|
*/ |
|
|
|
#include "control.h" |
|
#include "engine/render/text_render.hpp" |
|
#include "init.h" |
|
#include "minitext.h" |
|
#include "stores.h" |
|
#include "utils/language.h" |
|
|
|
namespace devilution { |
|
|
|
int help_select_line; |
|
bool helpflag; |
|
int HelpTop; |
|
|
|
const char gszHelpText[] = { |
|
// TRANSLATORS: HUGE KEY. There might be changes in a future version where redundant keys between the shareware help and the full game help will be consolidated. |
|
N_("$Keyboard Shortcuts:|" |
|
"F1: Open Help Screen|" |
|
"Esc: Display Main Menu|" |
|
"Tab: Display Auto-map|" |
|
"Space: Hide all info screens|" |
|
"S: Open Speedbook|" |
|
"B: Open Spellbook|" |
|
"I: Open Inventory screen|" |
|
"C: Open Character screen|" |
|
"Q: Open Quest log|" |
|
"F: Reduce screen brightness|" |
|
"G: Increase screen brightness|" |
|
"Z: Zoom Game Screen|" |
|
"+ / -: Zoom Automap|" |
|
"1 - 8: Use Belt item|" |
|
"F5, F6, F7, F8: Set hotkey for skill or spell|" |
|
"Shift + Left Mouse Button: Attack without moving|" |
|
"Shift + Left Mouse Button (on character screen): Assign all stat points|" |
|
"Shift + Left Mouse Button (on inventory): Move item to belt or equip/unequip item|" |
|
"Shift + Left Mouse Button (on belt): Move item to inventory|" |
|
"|" |
|
"$Movement:|" |
|
"If you hold the mouse button down while moving, the character " |
|
"will continue to move in that direction.|" |
|
"|" |
|
"$Combat:|" |
|
"Holding down the shift key and then left-clicking allows the " |
|
"character to attack without moving.|" |
|
"|" |
|
"$Auto-map:|" |
|
"To access the auto-map, click the 'MAP' button on the " |
|
"Information Bar or press 'TAB' on the keyboard. Zooming in and " |
|
"out of the map is done with the + and - keys. Scrolling the map " |
|
"uses the arrow keys.|" |
|
"|" |
|
"$Picking up Objects:|" |
|
"Useable items that are small in size, such as potions or scrolls, " |
|
"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 pressing " |
|
"the corresponding number or right-clicking on the item.|" |
|
"|" |
|
"$Gold|" |
|
"You can select a specific amount of gold to drop by" |
|
"right-clicking on a pile of gold in your inventory.|" |
|
"|" |
|
"$Skills & Spells:|" |
|
"You can access your list of skills and spells by left-clicking on " |
|
"the 'SPELLS' button in the interface bar. Memorized spells and " |
|
"those available through staffs are listed here. Left-clicking on " |
|
"the spell you wish to cast will ready the spell. A readied spell " |
|
"may be cast by simply right-clicking in the play area.|" |
|
"|" |
|
"$Using the Speedbook for Spells|" |
|
"Left-clicking on the 'readied spell' button will open the 'Speedbook' " |
|
"which allows you to select a skill or spell for immediate use. " |
|
"To use a readied skill or spell, simply right-click in the main play " |
|
"area.|" |
|
"Shift + Left-clicking on the 'select current spell' button will clear the readied spell|" |
|
"|" |
|
"$Setting Spell Hotkeys|" |
|
"You can assign up to four Hotkeys for skills, spells or scrolls. " |
|
"Start by opening the 'speedbook' as described in the section above. " |
|
"Press the F5, F6, F7 or F8 keys after highlighting the spell you " |
|
"wish to assign.|" |
|
"|" |
|
"$Spell Books|" |
|
"Reading more than one book increases your knowledge of that " |
|
"spell, allowing you to cast the spell more effectively.|" |
|
"&") |
|
}; |
|
|
|
void InitHelp() |
|
{ |
|
helpflag = false; |
|
} |
|
|
|
static void DrawHelpLine(const CelOutputBuffer &out, int x, int y, char *text, uint16_t style) |
|
{ |
|
const int sx = x + 32 + PANEL_X; |
|
const int sy = y * 12 + 44 + UI_OFFSET_Y; |
|
DrawString(out, text, { sx, sy, 577, 0 }, style); |
|
} |
|
|
|
void DrawHelp(const CelOutputBuffer &out) |
|
{ |
|
int i, c, w; |
|
const char *s; |
|
|
|
DrawSTextHelp(); |
|
DrawQTextBack(out); |
|
PrintSString(out, 0, 2, gbIsHellfire ? _("Hellfire Help") : _("Diablo Help"), UIS_GOLD | UIS_CENTER); |
|
DrawSLine(out, 5); |
|
|
|
s = _(&gszHelpText[0]); |
|
|
|
for (i = 0; i < help_select_line; i++) { |
|
c = 0; |
|
w = 0; |
|
while (*s == '\0') { |
|
s++; |
|
} |
|
if (*s == '$') { |
|
s++; |
|
} |
|
if (*s == '&') { |
|
continue; |
|
} |
|
while (*s != '|' && w < 577) { |
|
while (*s == '\0') { |
|
s++; |
|
} |
|
tempstr[c] = *s; |
|
w += fontkern[GameFontSmall][fontframe[GameFontSmall][gbFontTransTbl[(BYTE)tempstr[c]]]] + 1; |
|
c++; |
|
s++; |
|
} |
|
if (w >= 577) { |
|
c--; |
|
while (tempstr[c] != ' ') { |
|
s--; |
|
c--; |
|
} |
|
} |
|
if (*s == '|') { |
|
s++; |
|
} |
|
} |
|
for (i = 7; i < 22; i++) { |
|
c = 0; |
|
w = 0; |
|
while (*s == '\0') { |
|
s++; |
|
} |
|
uint16_t style = UIS_SILVER; |
|
if (*s == '$') { |
|
s++; |
|
style = UIS_RED; |
|
} |
|
if (*s == '&') { |
|
HelpTop = help_select_line; |
|
continue; |
|
} |
|
while (*s != '|' && w < 577) { |
|
while (*s == '\0') { |
|
s++; |
|
} |
|
tempstr[c] = *s; |
|
BYTE tc = gbFontTransTbl[(BYTE)tempstr[c]]; |
|
w += fontkern[GameFontSmall][fontframe[GameFontSmall][tc]] + 1; |
|
c++; |
|
s++; |
|
} |
|
if (w >= 577) { |
|
c--; |
|
while (tempstr[c] != ' ') { |
|
s--; |
|
c--; |
|
} |
|
} |
|
if (c != 0) { |
|
tempstr[c] = '\0'; |
|
DrawHelpLine(out, 0, i, tempstr, style); |
|
} |
|
if (*s == '|') { |
|
s++; |
|
} |
|
} |
|
|
|
PrintSString(out, 0, 23, _("Press ESC to end or the arrow keys to scroll."), UIS_GOLD | UIS_CENTER); |
|
} |
|
|
|
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++; |
|
} |
|
|
|
} // namespace devilution
|
|
|