mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-29 13:16:18 +00:00
343d59c9d4
glitches: some tiles draws above figures svn-id: r16935
207 lines
4.9 KiB
C++
207 lines
4.9 KiB
C++
/* ScummVM - Scumm Interpreter
|
|
* Copyright (C) 2004-2005 The ScummVM project
|
|
*
|
|
* The ReInherit Engine is (C)2000-2003 by Daniel Balsom.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* $Header$
|
|
*
|
|
*/
|
|
|
|
// Game interface module private header file
|
|
|
|
#ifndef SAGA_INTERFACE_H__
|
|
#define SAGA_INTERFACE_H__
|
|
|
|
#include "saga/sprite.h"
|
|
#include "saga/script.h"
|
|
|
|
namespace Saga {
|
|
|
|
enum InterfaceUpdateFlags {
|
|
UPDATE_MOUSEMOVE = 1,
|
|
UPDATE_LEFTBUTTONCLICK = 2,
|
|
UPDATE_RIGHTBUTTONCLICK = 4,
|
|
UPDATE_MOUSECLICK = UPDATE_LEFTBUTTONCLICK | UPDATE_RIGHTBUTTONCLICK
|
|
};
|
|
|
|
#define ITE_INVENTORY_SIZE 24
|
|
|
|
#define VERB_STRLIMIT 32
|
|
|
|
#define STATUS_TEXT_LEN 128
|
|
|
|
// Converse-specific stuff
|
|
#define CONVERSE_MAX_TEXTS 64
|
|
#define CONVERSE_MAX_TEXT_WIDTH (256 - 60)
|
|
#define CONVERSE_TEXT_HEIGHT 10
|
|
#define CONVERSE_TEXT_LINES 4
|
|
|
|
enum PanelModes {
|
|
kPanelNull,
|
|
kPanelMain,
|
|
kPanelOption,
|
|
kPanelTextBox,
|
|
kPanelQuit,
|
|
kPanelError,
|
|
kPanelLoad,
|
|
kPanelConverse,
|
|
kPanelProtect,
|
|
kPanelPlacard,
|
|
kPanelMap,
|
|
kPanelInventory,
|
|
kPanelFade
|
|
};
|
|
|
|
struct InterfacePanel {
|
|
int x;
|
|
int y;
|
|
byte *image;
|
|
size_t imageLength;
|
|
int imageWidth;
|
|
int imageHeight;
|
|
|
|
PanelButton *currentButton;
|
|
int buttonsCount;
|
|
PanelButton *buttons;
|
|
SpriteList sprites;
|
|
};
|
|
|
|
|
|
|
|
struct Converse {
|
|
char *text;
|
|
int stringNum;
|
|
int textNum;
|
|
int replyId;
|
|
int replyFlags;
|
|
int replyBit;
|
|
};
|
|
|
|
enum ITEColors {
|
|
kITEColorBrightWhite = 0x01,
|
|
kITEColorWhite = 0x02,
|
|
kITEColorLightGrey = 0x04,
|
|
kITEColorGrey = 0x0a,
|
|
kITEColorDarkGrey = 0x0b,
|
|
kITEColorGreen = 0xba,
|
|
kITEColorBlack = 0x0f,
|
|
kITEColorRed = 0x65,
|
|
kITEColorBlue = 0x93
|
|
};
|
|
|
|
|
|
class Interface {
|
|
public:
|
|
bool _playfieldClicked;
|
|
|
|
Interface(SagaEngine *vm);
|
|
~Interface(void);
|
|
|
|
int activate();
|
|
int deactivate();
|
|
bool isActive() { return _active; }
|
|
int setMode(int mode, bool force = false);
|
|
int getMode(void) const { return _panelMode; }
|
|
void rememberMode();
|
|
void restoreMode();
|
|
bool isInMainMode() { return _inMainMode; }
|
|
int setStatusText(const char *new_txt);
|
|
void setStatusOnceColor(int color) { _statusOnceColor = color; }
|
|
int loadScenePortraits(int resourceId);
|
|
int setLeftPortrait(int portrait);
|
|
int setRightPortrait(int portrait);
|
|
int draw();
|
|
int update(const Point& mousePoint, int updateFlag);
|
|
int drawStatusBar(SURFACE *ds);
|
|
void drawVerb(int verb, int state);
|
|
|
|
bool processKeyCode(int keyCode);
|
|
|
|
void addToInventory(int sprite);
|
|
void removeFromInventory(int sprite);
|
|
void drawInventory();
|
|
|
|
private:
|
|
int inventoryTest(const Point& imousePt, int *ibutton);
|
|
PanelButton *verbHitTest(const Point& mousePoint);
|
|
void handleCommandUpdate(SURFACE *ds, const Point& mousePoint);
|
|
void handleCommandClick(SURFACE *ds, const Point& mousePoint);
|
|
|
|
void lockMode() { _lockedMode = _panelMode; }
|
|
void unlockMode() { _panelMode = _lockedMode; }
|
|
|
|
void drawPanelButtonText(SURFACE *ds, InterfacePanel *panel, PanelButton *panelButton, int textColor, int textShadowColor);
|
|
|
|
public:
|
|
void converseInit(void);
|
|
void converseClear(void);
|
|
bool converseAddText(const char *text, int replyId, byte replyFlags, int replyBit);
|
|
void converseDisplayText(int pos);
|
|
void converseSetTextLines(int row, int textcolor, bool btnDown);
|
|
void converseChangePos(int chg);
|
|
void converseSetPos(int key);
|
|
|
|
private:
|
|
void converseDisplayTextLine(int textcolor, bool btnUp, bool rebuild);
|
|
PanelButton *getPanelButtonByVerbType(int verb) {
|
|
if ((verb < 0) || (verb >= kVerbTypesMax)) {
|
|
error("Interface::getPanelButtonByVerbType wrong verb");
|
|
}
|
|
return _verbTypeToPanelButton[verb];
|
|
}
|
|
private:
|
|
SagaEngine *_vm;
|
|
|
|
bool _initialized;
|
|
RSCFILE_CONTEXT *_interfaceContext;
|
|
InterfacePanel _mainPanel;
|
|
InterfacePanel _conversePanel;
|
|
SpriteList _defPortraits;
|
|
SpriteList _scenePortraits;
|
|
PanelButton *_verbTypeToPanelButton[kVerbTypesMax];
|
|
|
|
bool _active;
|
|
int _panelMode;
|
|
int _savedMode;
|
|
int _lockedMode;
|
|
bool _inMainMode;
|
|
char _statusText[STATUS_TEXT_LEN];
|
|
int _statusOnceColor;
|
|
int _leftPortrait;
|
|
int _rightPortrait;
|
|
|
|
Point _lastMousePoint;
|
|
|
|
uint16 *_inventory;
|
|
int _inventorySize;
|
|
byte _inventoryCount;
|
|
|
|
Converse _converseText[CONVERSE_MAX_TEXTS];
|
|
int _converseTextCount;
|
|
int _converseStrCount;
|
|
int _converseStartPos;
|
|
int _converseEndPos;
|
|
int _conversePos;
|
|
|
|
byte _converseLastColors[2][CONVERSE_TEXT_LINES];
|
|
};
|
|
|
|
} // End of namespace Saga
|
|
|
|
#endif /* INTERFACE_H__ */
|
|
/* end "r_interface.h" */
|