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.

168 lines
4.5 KiB

/**
* @file control.h
*
* Interface of the character and main control panels
*/
#pragma once
#include <cstdint>
#include "engine.h"
#include "spelldat.h"
#include "spells.h"
#include "utils/ui_fwd.h"
namespace devilution {
#define PANEL_WIDTH 640
#define PANEL_HEIGHT 128
#define PANEL_TOP (gnScreenHeight - PANEL_HEIGHT)
#define PANEL_LEFT (gnScreenWidth - PANEL_WIDTH) / 2
#define PANEL_X PANEL_LEFT
#define PANEL_Y PANEL_TOP
#define SPANEL_WIDTH 320
#define SPANEL_HEIGHT 352
#define RIGHT_PANEL (gnScreenWidth - SPANEL_WIDTH)
#define RIGHT_PANEL_X RIGHT_PANEL
enum text_color : uint8_t {
COL_WHITE,
COL_BLUE,
COL_RED,
COL_GOLD,
COL_BLACK,
};
struct RECT32 {
int x;
int y;
int w;
int h;
};
extern bool drawhpflag;
extern bool dropGoldFlag;
extern bool chrbtn[4];
extern bool lvlbtndown;
extern int dropGoldValue;
extern bool drawmanaflag;
extern bool chrbtnactive;
extern BYTE *pPanelText;
5 years ago
extern int pnumlines;
extern bool pinfoflag;
extern spell_id pSpell;
extern text_color infoclr;
extern char tempstr[256];
extern int sbooktab;
extern spell_type pSplType;
extern int initialDropGoldIndex;
extern bool talkflag;
extern bool sbookflag;
extern bool chrflag;
extern bool drawbtnflag;
extern char infostr[64];
extern bool panelflag;
extern int initialDropGoldValue;
extern bool panbtndown;
extern bool spselflag;
void DrawSpellList(const CelOutputBuffer &out);
void SetSpell();
void SetSpeedSpell(int slot);
void ToggleSpell(int slot);
/**
* @brief Print letter to the given buffer
* @param out The buffer to print to
* @param sx Backbuffer offset
* @param sy Backbuffer offset
* @param nCel Number of letter in Windows-1252
* @param col text_color color value
*/
void PrintChar(const CelOutputBuffer &out, int sx, int sy, int nCel, text_color col);
void AddPanelString(const char *str, bool just);
void ClearPanel();
5 years ago
void DrawPanelBox(const CelOutputBuffer &out, int x, int y, int w, int h, int sx, int sy);
/**
* Draws the top dome of the life flask (that part that protrudes out of the control panel).
* First it draws the empty flask cel and then draws the filled part on top if needed.
*/
void DrawLifeFlask(const CelOutputBuffer &out);
/**
* Controls the drawing of the area of the life flask within the control panel.
* First sets the fill amount then draws the empty flask cel portion then the filled
* flask portion.
*/
void UpdateLifeFlask(const CelOutputBuffer &out);
void DrawManaFlask(const CelOutputBuffer &out);
void control_update_life_mana();
/**
* Controls the drawing of the area of the life flask within the control panel.
* Also for some reason draws the current right mouse button spell.
*/
void UpdateManaFlask(const CelOutputBuffer &out);
void InitControlPan();
void DrawCtrlPan(const CelOutputBuffer &out);
/**
* Draws the control panel buttons in their current state. If the button is in the default
* state draw it from the panel cel(extract its sub-rect). Else draw it from the buttons cel.
*/
void DrawCtrlBtns(const CelOutputBuffer &out);
void DoSpeedBook();
void DoPanBtn();
void control_check_btn_press();
void DoAutoMap();
void CheckPanelInfo();
void CheckBtnUp();
void FreeControlPan();
bool control_WriteStringToBuffer(BYTE *str);
/**
* Sets a string to be drawn in the info box and then draws it.
*/
void DrawInfoBox(const CelOutputBuffer &out);
void PrintGameStr(const CelOutputBuffer &out, int x, int y, const char *str, text_color color);
void DrawChr(const CelOutputBuffer &out);
void CheckLvlBtn();
void ReleaseLvlBtn();
void DrawLevelUpIcon(const CelOutputBuffer &out);
void CheckChrBtns();
void ReleaseChrBtns(bool addAllStatPoints);
void DrawDurIcon(const CelOutputBuffer &out);
5 years ago
void RedBack(const CelOutputBuffer &out);
void DrawSpellBook(const CelOutputBuffer &out);
void CheckSBook();
const char *get_pieces_str(int nGold);
void DrawGoldSplit(const CelOutputBuffer &out, int amount);
void control_drop_gold(char vkey);
void control_remove_gold(int pnum, int goldIndex);
void control_set_gold_curs(int pnum);
void DrawTalkPan(const CelOutputBuffer &out);
bool control_check_talk_btn();
void control_release_talk_btn();
void control_type_message();
void control_reset_talk();
bool control_talk_last_key(int vkey);
bool control_presskeys(int vkey);
/* rdata */
extern const BYTE fontframe[128];
extern const BYTE fontkern[68];
extern const BYTE gbFontTransTbl[256];
/* data */
extern RECT32 ChrBtnsRect[4];
} // namespace devilution