/**
* @ 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