- fixed savegame description loading in kyra1

- added Kyra2 load menu, currently just accessable from startup menu though

svn-id: r31331
This commit is contained in:
Johannes Schickel 2008-03-30 18:27:46 +00:00
parent 5f3529ce78
commit f4e6109b33
12 changed files with 395 additions and 40 deletions

View file

@ -112,7 +112,6 @@ void GUI::initMenu(Menu &menu) {
menuButtonData->width = menu.item[i].width - 1;
menuButtonData->height = menu.item[i].height - 1;
menuButtonData->buttonCallback = menu.item[i].callback;
menuButtonData->index = menu.item[i].saveSlot;
menuButtonData->unk6 = menu.item[i].unk1F;
menuButtonData->unk8 = 0;
@ -122,19 +121,19 @@ void GUI::initMenu(Menu &menu) {
_screen->fillRect(x1, y1, x2, y2, menu.item[i].bkgdColor);
_screen->drawShadedBox(x1, y1, x2, y2, menu.item[i].color1, menu.item[i].color2);
if (menu.item[i].itemString) {
if (getMenuItemTitle(menu.item[i])) {
if (menu.item[i].titleX != -1)
textX = x1 + menu.item[i].titleX + 3;
else
textX = _text->getCenterStringX(menu.item[i].itemString, x1, x2);
textX = _text->getCenterStringX(getMenuItemTitle(menu.item[i]), x1, x2);
textY = y1 + 2;
_text->printText(menu.item[i].itemString, textX - 1, textY + 1, defaultColor1(), 0, 0);
_text->printText(getMenuItemTitle(menu.item[i]), textX - 1, textY + 1, defaultColor1(), 0, 0);
if (i == menu.highlightedItem)
_text->printText(menu.item[i].itemString, textX, textY, menu.item[i].highlightColor, 0, 0);
_text->printText(getMenuItemTitle(menu.item[i]), textX, textY, menu.item[i].highlightColor, 0, 0);
else
_text->printText(menu.item[i].itemString, textX, textY, menu.item[i].textColor, 0, 0);
_text->printText(getMenuItemTitle(menu.item[i]), textX, textY, menu.item[i].textColor, 0, 0);
if (getMenuItemLabel(menu.item[i])) {
_text->printText(getMenuItemLabel(menu.item[i]), menu.x + menu.item[i].labelX - 1, menu.y + menu.item[i].labelY + 1, defaultColor1(), 0, 0);
@ -248,6 +247,7 @@ void GUI::updateMenuButton(Button *button) {
_screen->hideMouse();
updateButton(button);
_screen->updateScreen();
_screen->showMouse();
}

View file

@ -625,10 +625,10 @@ void GUI_v1::setupSavegames(Menu &menu, int num) {
startSlot = 0;
}
KyraEngine::SaveHeader header;
for (int i = startSlot; i < num; i++) {
if ((in = _vm->_saveFileMan->openForLoading(_vm->getSavegameFilename(i + _savegameOffset)))) {
in->skip(8);
in->read(savenames[i], 31);
if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(i + _savegameOffset), header))) {
strncpy(savenames[i], header.description.c_str(), 31);
menu.item[i].itemString = savenames[i];
menu.item[i].enabled = 1;
menu.item[i].saveSlot = i + _savegameOffset;
@ -772,7 +772,7 @@ void GUI_v1::updateSavegameString() {
int GUI_v1::saveGame(Button *button) {
debugC(9, kDebugLevelGUI, "GUI_v1::saveGame()");
updateMenuButton(button);
_vm->_gameToLoad = button->index;
_vm->_gameToLoad = _menu[2].item[button->index-0xC].saveSlot;
_screen->loadPageFromDisk("SEENPAGE.TMP", 0);
_screen->savePageToDisk("SEENPAGE.TMP", 0);
@ -830,7 +830,7 @@ int GUI_v1::loadGame(Button *button) {
debugC(9, kDebugLevelGUI, "GUI_v1::loadGame()");
updateMenuButton(button);
_displaySubMenu = false;
_vm->_gameToLoad = button->index;
_vm->_gameToLoad = _menu[2].item[button->index-0xC].saveSlot;
return 0;
}

View file

@ -27,6 +27,9 @@
#include "kyra/kyra_v2.h"
#include "kyra/screen.h"
#include "kyra/wsamovie.h"
#include "kyra/timer.h"
#include "common/savefile.h"
namespace Kyra {
@ -226,12 +229,12 @@ void KyraEngine_v2::gui_printString(const char *format, int x, int y, int col1,
void KyraEngine_v2::loadButtonShapes() {
const uint8 *src = _screen->getCPagePtr(3);
_screen->loadBitmap("_BUTTONS.CSH", 3, 3, 0);
_buttonShapes[0] = _screen->makeShapeCopy(src, 0);
_buttonShapes[1] = _screen->makeShapeCopy(src, 1);
_buttonShapes[2] = _screen->makeShapeCopy(src, 2);
_buttonShapes[3] = _screen->makeShapeCopy(src, 3);
_buttonShapes[4] = _screen->makeShapeCopy(src, 4);
_buttonShapes[5] = _screen->makeShapeCopy(src, 5);
_gui->_scrollUpButton.data0ShapePtr = _buttonShapes[0] = _screen->makeShapeCopy(src, 0);
_gui->_scrollUpButton.data2ShapePtr = _buttonShapes[1] = _screen->makeShapeCopy(src, 1);
_gui->_scrollUpButton.data1ShapePtr = _buttonShapes[2] = _screen->makeShapeCopy(src, 2);
_gui->_scrollDownButton.data0ShapePtr = _buttonShapes[3] = _screen->makeShapeCopy(src, 3);
_gui->_scrollDownButton.data2ShapePtr = _buttonShapes[4] = _screen->makeShapeCopy(src, 4);
_gui->_scrollDownButton.data1ShapePtr = _buttonShapes[5] = _screen->makeShapeCopy(src, 5);
_buttonShapes[6] = _screen->makeShapeCopy(src, 6);
_buttonShapes[7] = _screen->makeShapeCopy(src, 7);
_buttonShapes[8] = _screen->makeShapeCopy(src, 6);
@ -245,6 +248,12 @@ void KyraEngine_v2::loadButtonShapes() {
GUI_v2::GUI_v2(KyraEngine_v2 *vm) : GUI(vm), _vm(vm), _screen(vm->screen_v2()) {
_backUpButtonList = _unknownButtonList = 0;
initStaticData();
_currentMenu = 0;
_isDeathMenu = false;
_isSaveMenu = false;
_scrollUpFunctor = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::scrollUpButton);
_scrollDownFunctor = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::scrollDownButton);
}
Button *GUI_v2::addButtonToList(Button *list, Button *newButton) {
@ -268,19 +277,23 @@ void GUI_v2::processButton(Button *button) {
byte val1 = 0, val2 = 0, val3 = 0;
const uint8 *dataPtr = 0;
Button::Callback callback;
if (entry == 1) {
val1 = button->data1Val1;
dataPtr = button->data1ShapePtr;
callback = button->data1Callback;
val2 = button->data1Val2;
val3 = button->data1Val3;
} else if (entry == 4 || entry == 5) {
val1 = button->data2Val1;
dataPtr = button->data2ShapePtr;
callback = button->data2Callback;
val2 = button->data2Val2;
val3 = button->data2Val3;
} else {
val1 = button->data0Val1;
dataPtr = button->data0ShapePtr;
callback = button->data0Callback;
val2 = button->data0Val2;
val3 = button->data0Val3;
}
@ -313,14 +326,13 @@ void GUI_v2::processButton(Button *button) {
break;
case 3:
warning("STUB processButton with func 3");
//XXX
if (callback)
(*callback)(button);
break;
case 4:
warning("STUB processButton with func 4");
_screen->hideMouse();
//XXX
_screen->drawBox(x, y, x2, y2, val2);
_screen->showMouse();
break;
@ -1141,4 +1153,241 @@ int KyraEngine_v2::cauldronButton(Button *button) {
return 0;
}
#pragma mark -
int GUI_v2::optionsButton(Button *button) {
_restartGame = false;
_reloadTemporarySave = false;
_screen->hideMouse();
updateButton(&_vm->_inventoryButtons[0]);
_screen->showMouse();
if (!_screen->isMouseVisible())
return 0;
_vm->showMessage(0, 0xCF);
if (_vm->_handItemSet < -1) {
_vm->_handItemSet = -1;
_screen->hideMouse();
_screen->setMouseCursor(1, 1, _vm->getShapePtr(0));
_screen->showMouse();
return 0;
}
//int oldHandItem = _vm->_itemInHand;
_screen->setMouseCursor(0, 0, _vm->getShapePtr(0));
_vm->displayInvWsaLastFrame();
//XXX
_displayMenu = true;
if (!_vm->gameFlags().isTalkie) {
//XXX
}
for (uint i = 0; i < ARRAYSIZE(_menuButtons); ++i) {
_menuButtons[i].data0Val1 = _menuButtons[i].data1Val1 = _menuButtons[i].data2Val1 = 4;
_menuButtons[i].data0Callback = _redrawShadedButtonFunctor;
_menuButtons[i].data1Callback = _menuButtons[i].data2Callback = _redrawButtonFunctor;
}
//XXX
_loadMenu.numberOfItems = 6;
initMenuLayout(_loadMenu);
if (_vm->_menuDirectlyToLoad) {
backUpPage1(_vm->_screenBuffer);
setupPalette();
_loadedSave = false;
loadMenu(0);
if (_loadedSave) {
if (_restartGame)
_vm->_itemInHand = -1;
} else {
restorePage1(_vm->_screenBuffer);
restorePalette();
}
resetState(-1);
_vm->_menuDirectlyToLoad = false;
return 0;
}
return 0;
}
#pragma mark -
void GUI_v2::setupPalette() {
//if (_isDeathMenu)
// memcpy(_vm->_unkBuffer1040Bytes, _screen->getPalette(0), 768);
memcpy(_screen->getPalette(1), _screen->getPalette(0), 768);
uint8 *palette = _screen->getPalette(0);
for (int i = 0; i < 768; ++i)
palette[i] >>= 1;
static const uint8 guiPal[] = { 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFc, 0xFD, 0xFE };
for (uint i = 0; i < ARRAYSIZE(guiPal); ++i)
memcpy(_screen->getPalette(0)+guiPal[i]*3, _screen->getPalette(1)+guiPal[i]*3, 3);
if (_isDeathMenu)
_screen->fadePalette(_screen->getPalette(0), 0x64);
else
_screen->setScreenPalette(_screen->getPalette(0));
}
void GUI_v2::restorePalette() {
memcpy(_screen->getPalette(0), _screen->getPalette(1), 768);
_screen->setScreenPalette(_screen->getPalette(0));
}
void GUI_v2::backUpPage1(uint8 *buffer) {
_screen->copyRegionToBuffer(1, 0, 0, 320, 200, buffer);
}
void GUI_v2::restorePage1(const uint8 *buffer) {
_screen->copyBlockToPage(1, 0, 0, 320, 200, buffer);
}
void GUI_v2::resetState(int item) {
_vm->_timer->resetNextRun();
_vm->setNextIdleAnimTimer();
_isDeathMenu = false;
if (!_loadedSave) {
_vm->setHandItem(item);
} else {
_vm->setHandItem(_vm->_itemInHand);
_vm->setTimer1DelaySecs(7);
_vm->_shownMessage = " ";
_vm->_fadeMessagePalette = false;
}
_buttonListChanged = true;
}
void GUI_v2::setupSavegameNames(Menu &menu, int num) {
for (int i = 0; i < num; ++i) {
strcpy(_vm->getTableString(menu.item[i].itemId, _vm->_optionsBuffer, 0), "");
menu.item[i].saveSlot = -1;
menu.item[i].enabled = false;
}
KyraEngine::SaveHeader header;
Common::InSaveFile *in;
for (int i = 0; i < num; ++i) {
if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(i + _savegameOffset), header)) != 0) {
strncpy(_vm->getTableString(menu.item[i].itemId, _vm->_optionsBuffer, 0), header.description.c_str(), 80);
menu.item[i].saveSlot = i + _savegameOffset;
menu.item[i].enabled = true;
delete in;
}
}
if (_savegameOffset == 0) {
char *dst = _vm->getTableString(menu.item[0].itemId, _vm->_optionsBuffer, 0);
const char *src = _vm->getTableString(34, _vm->_optionsBuffer, 0);
strcpy(dst, src);
}
}
int GUI_v2::scrollUpButton(Button *button) {
int startSlot = _isSaveMenu ? 1 : 0;
updateMenuButton(button);
if (_savegameOffset <= startSlot)
return 0;
--_savegameOffset;
if (_displaySubMenu) {
setupSavegameNames(_loadMenu, 5);
// original calls something different here...
initMenu(_loadMenu);
} else if (_isSaveMenu) {
}
return 0;
}
int GUI_v2::scrollDownButton(Button *button) {
updateMenuButton(button);
++_savegameOffset;
if (_displaySubMenu) {
setupSavegameNames(_loadMenu, 5);
// original calls something different here...
initMenu(_loadMenu);
} else if (_isSaveMenu) {
}
return 0;
}
#pragma mark -
int GUI_v2::loadMenu(Button *caller) {
if (!_vm->_menuDirectlyToLoad) {
updateMenuButton(caller);
restorePage1(_vm->_screenBuffer);
backUpPage1(_vm->_screenBuffer);
}
_savegameOffset = 0;
setupSavegameNames(_loadMenu, 5);
initMenu(_loadMenu);
_displaySubMenu = true;
_cancelSubMenu = false;
_vm->_gameToLoad = -1;
updateAllMenuButtons();
_screen->updateScreen();
while (_displaySubMenu) {
Common::Point mouse = _vm->getMousePos();
processHighlights(_loadMenu, mouse.x, mouse.y);
_vm->checkInput(_menuButtonList);
}
if (_cancelSubMenu) {
if (!_vm->_menuDirectlyToLoad) {
restorePage1(_vm->_screenBuffer);
backUpPage1(_vm->_screenBuffer);
initMenu(*_currentMenu);
updateAllMenuButtons();
}
} else {
restorePage1(_vm->_screenBuffer);
restorePalette();
_vm->loadGame(_vm->getSavegameFilename(_vm->_gameToLoad));
if (_vm->_gameToLoad == 0) {
_restartGame = true;
for (int i = 0; i < 23; ++i)
_vm->resetCauldronStateTable(i);
_vm->runStartScript(1, 1);
}
_displayMenu = false;
_loadedSave = true;
}
return 0;
}
int GUI_v2::clickLoadSlot(Button *caller) {
updateMenuButton(caller);
assert((caller->index-0x10) >= 0 && (caller->index-0x10 <= 6));
MenuItem &item = _loadMenu.item[caller->index-0x10];
if (item.saveSlot >= 0) {
_vm->_gameToLoad = item.saveSlot;
_displaySubMenu = false;
}
return 0;
}
} // end of namespace Kyra

View file

@ -51,6 +51,44 @@
button.data2Val3 = s; \
button.flags2 = t;
#define GUI_V2_MENU(menu, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) \
menu.x = a; \
menu.y = b; \
menu.width = c; \
menu.height = d; \
menu.bkgdColor = e; \
menu.color1 = f; \
menu.color2 = g; \
menu.menuNameId = h; \
menu.textColor = i; \
menu.titleX = j; \
menu.titleY = k; \
menu.highlightedItem = l; \
menu.numberOfItems = m; \
menu.scrollUpButtonX = n; \
menu.scrollUpButtonY = o; \
menu.scrollDownButtonX = p; \
menu.scrollDownButtonY = q
#define GUI_V2_MENU_ITEM(item, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) \
item.enabled = a; \
item.itemId = b; \
item.x = c; \
item.y = d; \
item.width = e; \
item.height = f; \
item.textColor = g; \
item.highlightColor = h; \
item.titleX = i; \
item.bkgdColor = j; \
item.color1 = k; \
item.color2 = l; \
item.saveSlot = m; \
item.labelString = n; \
item.labelX = o; \
item.labelY = p; \
item.unk1F = q
namespace Kyra {
class KyraEngine_v2;
@ -66,27 +104,62 @@ public:
void processButton(Button *button);
int processButtonList(Button *button, uint16 inputFlag);
int optionsButton(Button *button);
private:
Button _menuButtons[7];
Button _scrollUpButton;
Button _scrollDownButton;
Menu _loadMenu;
void initStaticData();
const char *getMenuTitle(const Menu &menu);
const char *getMenuItemTitle(const MenuItem &menuItem);
const char *getMenuItemLabel(const MenuItem &menuItem);
Button *getButtonListData() { return 0; }
Button *getScrollUpButton() { return 0; }
Button *getScrollDownButton() { return 0; }
Button *getButtonListData() { return _menuButtons; }
Button::Callback getScrollUpButtonHandler() const { return Button::Callback(); }
Button::Callback getScrollDownButtonHandler() const { return Button::Callback(); }
Button *getScrollUpButton() { return &_scrollUpButton; }
Button *getScrollDownButton() { return &_scrollDownButton; }
int scrollUpButton(Button *button);
int scrollDownButton(Button *button);
Button::Callback _scrollUpFunctor;
Button::Callback _scrollDownFunctor;
Button::Callback getScrollUpButtonHandler() const { return _scrollUpFunctor; }
Button::Callback getScrollDownButtonHandler() const { return _scrollDownFunctor; }
uint8 defaultColor1() const { return 0xCF; }
uint8 defaultColor2() const { return 0xF8; }
void setupPalette();
void restorePalette();
void backUpPage1(uint8 *buffer);
void restorePage1(const uint8 *buffer);
void resetState(int item);
KyraEngine_v2 *_vm;
Screen_v2 *_screen;
bool _buttonListChanged;
Button *_backUpButtonList;
Button *_unknownButtonList;
Menu *_currentMenu;
bool _isDeathMenu;
bool _isSaveMenu;
bool _loadedSave;
bool _restartGame;
bool _reloadTemporarySave;
int _savegameOffset;
void setupSavegameNames(Menu &menu, int num);
// load menu
int loadMenu(Button *caller);
int clickLoadSlot(Button *caller);
};
} // end of namespace Kyra

View file

@ -116,7 +116,7 @@ public:
// access to Kyra specific functionallity
Resource *resource() { return _res; }
virtual Screen *screen() = 0;
TextDisplayer *text() { return _text; }
virtual TextDisplayer *text() { return _text; }
Sound *sound() { return _sound; }
StaticResource *staticres() { return _staticres; }
TimerManager *timer() { return _timer; }

View file

@ -408,7 +408,6 @@ void KyraEngine_v1::startup() {
snd_playTheme(1);
if (_gameToLoad == -1) {
enterNewScene(_currentCharacter->sceneId, _currentCharacter->facing, 0, 0, 1);
if (_abortIntroFlag && _skipIntroFlag) {
_menuDirectlyToLoad = true;
_screen->setMouseCursor(1, 1, _shapes[0]);

View file

@ -142,6 +142,8 @@ KyraEngine_v2::KyraEngine_v2(OSystem *system, const GameFlags &flags) : KyraEngi
_cauldronState = 0;
_cauldronUseCount = 0;
memset(_cauldronStateTables, 0, sizeof(_cauldronStateTables));
_menuDirectlyToLoad = false;
}
KyraEngine_v2::~KyraEngine_v2() {
@ -263,7 +265,7 @@ int KyraEngine_v2::go() {
_res->loadFileList(_ingamePakList, _ingamePakListSize);
}
//_menuDirectlyToLoad = (_menuChoice == 3) ? true : false;
_menuDirectlyToLoad = (_menuChoice == 3) ? true : false;
if (_menuChoice & 1) {
startup();
@ -394,6 +396,9 @@ void KyraEngine_v2::startup() {
_screen->showMouse();
if (_menuDirectlyToLoad)
(*_inventoryButtons[0].buttonCallback)(&_inventoryButtons[0]);
setNextIdleAnimTimer();
//XXX
_timer->setDelay(0, 5);
@ -953,12 +958,12 @@ void KyraEngine_v2::changeFileExtension(char *buffer) {
strcpy(buffer, _languageExtension[_lang]);
}
const uint8 *KyraEngine_v2::getTableEntry(const uint8 *buffer, int id) {
uint8 *KyraEngine_v2::getTableEntry(uint8 *buffer, int id) {
return buffer + READ_LE_UINT16(buffer + (id<<1));
}
const char *KyraEngine_v2::getTableString(int id, const uint8 *buffer, int decode) {
const char *string = (const char*)getTableEntry(buffer, id);
char *KyraEngine_v2::getTableString(int id, uint8 *buffer, int decode) {
char *string = (char*)getTableEntry(buffer, id);
if (decode && _flags.lang != Common::JA_JPN) {
decodeString1(string, _internStringBuf);

View file

@ -29,6 +29,7 @@
#include "kyra/kyra.h"
#include "kyra/script.h"
#include "kyra/screen_v2.h"
#include "kyra/text_v2.h"
#include "kyra/gui_v2.h"
#include "common/list.h"
@ -169,6 +170,7 @@ public:
virtual Screen *screen() { return _screen; }
Screen_v2 *screen_v2() { return _screen; }
virtual TextDisplayer *text() { return _text; }
int language() const { return _lang; }
virtual Movie *createWSAMovie();
@ -606,6 +608,7 @@ protected:
int _nextAnimItem;
// gui
bool _menuDirectlyToLoad;
GUI_v2 *_gui;
void loadButtonShapes();
@ -676,8 +679,8 @@ protected:
int _currentChapter;
int _newChapterFile;
const uint8 *getTableEntry(const uint8 *buffer, int id);
const char *getTableString(int id, const uint8 *buffer, int decode);
uint8 *getTableEntry(uint8 *buffer, int id);
char *getTableString(int id, uint8 *buffer, int decode);
const char *getChapterString(int id);
int decodeString1(const char *src, char *dst);
void decodeString2(const char *src, char *dst);

View file

@ -107,10 +107,8 @@ Common::InSaveFile *KyraEngine::openSaveForReading(const char *filename, SaveHea
debugC(9, kDebugLevelMain, "KyraEngine::openSaveForReading('%s', -)", filename);
Common::InSaveFile *in = 0;
if (!(in = _saveFileMan->openForLoading(filename))) {
warning("Can't open file '%s', game not loadable", filename);
if (!(in = _saveFileMan->openForLoading(filename)))
return 0;
}
kReadSaveHeaderError errorCode = KyraEngine::readSaveHeader(in, header);
if (errorCode != kRSHENoError) {

View file

@ -40,8 +40,10 @@ void KyraEngine_v1::loadGame(const char *fileName) {
SaveHeader header;
Common::InSaveFile *in = openSaveForReading(fileName, header);
if (!in)
if (!in) {
warning("Can't open file '%s', game not loadable", fileName);
return;
}
if (header.originalSave) {
// no support for original savefile in Kyrandia 1 (yet)

View file

@ -39,8 +39,10 @@ void KyraEngine_v2::saveGame(const char *fileName, const char *saveName) {
debugC(9, kDebugLevelMain, "KyraEngine_v2::saveGame('%s', '%s')", fileName, saveName);
Common::OutSaveFile *out = openSaveForWriting(fileName, saveName);
if (!out)
if (!out) {
warning("Can't open file '%s', game not loadable", fileName);
return;
}
_timer->saveDataToFile(*out);

View file

@ -1431,7 +1431,7 @@ void KyraEngine_v2::initInventoryButtonList() {
assert(_inventoryButtons);
GUI_V2_BUTTON(_inventoryButtons[0], 0x1, 0x4F, 0, 1, 1, 1, 0x4487, 0, 0x00A, 0x95, 0x39, 0x1D, 0xC7, 0xCF, 0xC7, 0xCF, 0xC7, 0xCF, 0);
/*&KyraEngine_v2::sub_C9A1*/
_inventoryButtons[0].buttonCallback = BUTTON_FUNCTOR(GUI_v2, _gui, &GUI_v2::optionsButton);
GUI_V2_BUTTON(_inventoryButtons[1], 0x2, 0x00, 0, 1, 1, 1, 0x4487, 0, 0x104, 0x90, 0x3C, 0x2C, 0xC7, 0xCF, 0xC7, 0xCF, 0xC7, 0xCF, 0);
_inventoryButtons[1].buttonCallback = BUTTON_FUNCTOR(KyraEngine_v2, this, &KyraEngine_v2::cauldronButton);
@ -1487,6 +1487,30 @@ void KyraEngine_v2::initInventoryButtonList() {
_buttonList = _gui->addButtonToList(_buttonList, &_inventoryButtons[i]);
}
void GUI_v2::initStaticData() {
GUI_V2_BUTTON(_scrollUpButton, 0x17, 0, 0, 1, 1, 1, 0x4487, 0, 0, 0, 0x18, 0x0F, 0xC7, 0xCF, 0xC7, 0xCF, 0xC7, 0xCF, 0);
GUI_V2_BUTTON(_scrollDownButton, 0x18, 0, 0, 1, 1, 1, 0x4487, 0, 0, 0, 0x18, 0x0F, 0xC7, 0xCF, 0xC7, 0xCF, 0xC7, 0xCF, 0);
for (uint i = 0; i < ARRAYSIZE(_menuButtons); ++i) {
GUI_V2_BUTTON(_menuButtons[i], 0x10+i, 0, 0, 1, 1, 1, 0x4487, 0, 0, 0, 0, 0, 0xC7, 0xCF, 0xC7, 0xCF, 0xC7, 0xCF, 0);
}
Button::Callback clickLoadSlotFunctor = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::clickLoadSlot);
memset(&_loadMenu, 0, sizeof(_loadMenu));
GUI_V2_MENU(_loadMenu, -1, -1, 0x120, 0xA0, 0xF8, 0xF9, 0xFA, 8, 0xFB, -1, 8, 0, 6, 0x84, 0x16, 0x84, 0x7C);
GUI_V2_MENU_ITEM(_loadMenu.item[0], 1, 0x29, -1, 0x27, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
GUI_V2_MENU_ITEM(_loadMenu.item[1], 1, 0x2A, -1, 0x38, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
GUI_V2_MENU_ITEM(_loadMenu.item[2], 1, 0x2B, -1, 0x49, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
GUI_V2_MENU_ITEM(_loadMenu.item[3], 1, 0x2C, -1, 0x5A, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
GUI_V2_MENU_ITEM(_loadMenu.item[4], 1, 0x2D, -1, 0x6B, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
for (int i = 0; i <= 4; ++i)
_loadMenu.item[i].callback = clickLoadSlotFunctor;
GUI_V2_MENU_ITEM(_loadMenu.item[5], 1, 0x0B, 0xB8, 0x86, 0x58, 0xF, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_loadMenu.item[6].enabled = false;
}
const uint16 KyraEngine_v2::_itemMagicTable[] = {
0x0D, 0x0A, 0x0B, 0,
0x0D, 0x0B, 0x0A, 0,