aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/saga/displayinfo.h29
-rw-r--r--engines/saga/interface.cpp53
2 files changed, 62 insertions, 20 deletions
diff --git a/engines/saga/displayinfo.h b/engines/saga/displayinfo.h
index 40792adc37..3e1845abba 100644
--- a/engines/saga/displayinfo.h
+++ b/engines/saga/displayinfo.h
@@ -323,6 +323,7 @@ static PanelButton IHNM_ConversePanelButtons[] = {
};
static PanelButton IHNM_OptionPanelButtons[] = {
+ {kPanelButtonOptionSlider, 421,16, 16,138, 0,'-',0, 0,0,0}, //slider-scroller
{kPanelButtonOptionText,28,36, 0,0, kTextReadingSpeed,'-',0, 0,0,0}, // text: read speed
{kPanelButtonOptionText,60,61, 0,0, kTextMusic,'-',0, 0,0,0}, // text: music
{kPanelButtonOptionText,60,86, 0,0, kTextSound,'-',0, 0,0,0}, // text: noise
@@ -333,7 +334,7 @@ static PanelButton IHNM_OptionPanelButtons[] = {
{kPanelButtonOption, 153,104,79,23, kTextVoices,'v',0, 0,0,0}, //voices
{kPanelButtonOption, 19,149, 200,25, kTextQuitGame,'q',0, 0,0,0}, //quit
{kPanelButtonOption, 19,177, 200,25, kTextContinuePlaying,'c',0, 0,0,0}, //continue
- // TODO: Implement load/save
+ {kPanelButtonOptionSaveFiles, 244,18, 170,138, 0,'-',0, 0,0,0}, //savefiles
{kPanelButtonOption, 242,162, 79,23, kTextLoad,'l',0, 0,0,0}, //load
{kPanelButtonOption, 333,162, 79,23, kTextSave,'s',0, 0,0,0}, //save
};
@@ -345,15 +346,21 @@ static PanelButton IHNM_QuitPanelButtons[] = {
};
static PanelButton IHNM_LoadPanelButtons[] = {
- {kPanelButtonArrow, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
+ // TODO
+ {kPanelButtonLoad, 101,19, 60,16, kTextOK,'o',0, 0,0,0},
+ {kPanelButtonLoadText, -1,5, 0,0, kTextLoadSuccessful,'-',0, 0,0,0},
};
static PanelButton IHNM_SavePanelButtons[] = {
- {kPanelButtonArrow, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
+ // TODO
+ {kPanelButtonSave, 25,79, 80,25, kTextSave,'s',0, 0,0,0},
+ {kPanelButtonSave, 155,79, 80,25, kTextCancel,'c',0, 0,0,0},
+ {kPanelButtonSaveEdit, 26,57, 209,17, 0,'-',0, 0,0,0},
+ {kPanelButtonSaveText, 75,30, 0,0, kTextEnterSaveGameName,'-',0, 0,0,0},
};
-static const GameDisplayInfo IHNM_DisplayInfo = { //TODO: fill it all
+static const GameDisplayInfo IHNM_DisplayInfo = {
640, 480, // logical width&height
0, // scene path y offset
@@ -388,8 +395,8 @@ static const GameDisplayInfo IHNM_DisplayInfo = { //TODO: fill it all
ARRAYSIZE(IHNM_ConversePanelButtons),
IHNM_ConversePanelButtons,
- -1, -1, // save file index
- 0, // optionSaveFileVisible
+ 11, 0, // save file index
+ 15, // optionSaveFileVisible
92, 46, // option panel offsets
ARRAYSIZE(IHNM_OptionPanelButtons),
IHNM_OptionPanelButtons,
@@ -399,14 +406,14 @@ static const GameDisplayInfo IHNM_DisplayInfo = { //TODO: fill it all
ARRAYSIZE(IHNM_QuitPanelButtons),
IHNM_QuitPanelButtons,
- 0, 0, // load panel offsets
- 0, 0, // load panel width & height
+ 190, 94, // load panel offsets
+ 260, 115, // load panel width & height
ARRAYSIZE(IHNM_LoadPanelButtons),
IHNM_LoadPanelButtons,
- -1, // save edit index
- 0, 0, // save panel offsets
- 0, 0, // save panel width & height
+ 2, // save edit index
+ 190, 94, // save panel offsets
+ 260, 115, // save panel width & height
ARRAYSIZE(IHNM_SavePanelButtons),
IHNM_SavePanelButtons,
diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp
index 8194f14b05..03fc0beb7a 100644
--- a/engines/saga/interface.cpp
+++ b/engines/saga/interface.cpp
@@ -203,6 +203,28 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
free(resource);
}
+ // Save panel
+ if (_vm->getGameType() == GType_IHNM) {
+ _savePanel.buttons = _vm->getDisplayInfo().savePanelButtons;
+ _savePanel.buttonsCount = _vm->getDisplayInfo().savePanelButtonsCount;
+
+ _vm->_resource->loadResource(_interfaceContext, _vm->getResourceDescription()->warningPanelResourceId, resource, resourceLength);
+ _vm->decodeBGImage(resource, resourceLength, &_savePanel.image,
+ &_savePanel.imageLength, &_savePanel.imageWidth, &_savePanel.imageHeight);
+ free(resource);
+ }
+
+ // Load panel
+ if (_vm->getGameType() == GType_IHNM) {
+ _loadPanel.buttons = _vm->getDisplayInfo().loadPanelButtons;
+ _loadPanel.buttonsCount = _vm->getDisplayInfo().loadPanelButtonsCount;
+
+ _vm->_resource->loadResource(_interfaceContext, _vm->getResourceDescription()->warningPanelResourceId, resource, resourceLength);
+ _vm->decodeBGImage(resource, resourceLength, &_loadPanel.image,
+ &_loadPanel.imageLength, &_loadPanel.imageWidth, &_loadPanel.imageHeight);
+ free(resource);
+ }
+
// Main panel sprites
_vm->_sprite->loadList(_vm->getResourceDescription()->mainPanelSpritesResourceId, _mainPanel.sprites);
// Option panel sprites
@@ -750,7 +772,6 @@ void Interface::draw() {
void Interface::calcOptionSaveSlider() {
int totalFiles = _vm->getSaveFilesCount();
int visibleFiles = _vm->getDisplayInfo().optionSaveFileVisible;
- if (_optionSaveFileSlider == NULL) return; //TODO:REMOVE
int height = _optionSaveFileSlider->height;
int sliderHeight;
int pos;
@@ -870,10 +891,6 @@ void Interface::drawOption() {
backBuffer->drawRect(_optionSaveRectTop, kITEColorDarkGrey);
}
- // FIXME: The _optionSaveFileSlider checks exist for IHNM, where
- // _optionSaveFileSlider is not initialized correctly yet
- if (_optionSaveFileSlider == NULL) return; //TODO:REMOVE
-
drawButtonBox(backBuffer, _optionSaveRectSlider, kSlider, _optionSaveFileSlider->state > 0);
if (_optionSaveRectBottom.height() > 0) {
@@ -899,7 +916,10 @@ void Interface::drawOption() {
text = _vm->getSaveFile(idx)->name;
textPoint.x = rect.left + 1;
textPoint.y = rect2.top;
- _vm->_font->textDraw(kKnownFontSmall, backBuffer, text, textPoint, fgColor, 0, kFontNormal);
+ if (_vm->getGameType() == GType_ITE)
+ _vm->_font->textDraw(kKnownFontSmall, backBuffer, text, textPoint, fgColor, 0, kFontNormal);
+ else
+ _vm->_font->textDraw(kKnownFontVerb, backBuffer, text, textPoint, fgColor, 0, kFontNormal);
}
}
@@ -978,7 +998,11 @@ void Interface::drawLoad() {
backBuffer = _vm->_gfx->getBackBuffer();
_loadPanel.getRect(rect);
- drawButtonBox(backBuffer, rect, kButton, false);
+ if (_vm->getGameType() == GType_ITE)
+ drawButtonBox(backBuffer, rect, kButton, false);
+ else
+ backBuffer->blit(rect, _loadPanel.image);
+
for (i = 0; i < _loadPanel.buttonsCount; i++) {
panelButton = &_loadPanel.buttons[i];
if (panelButton->type == kPanelButtonLoad) {
@@ -1178,7 +1202,11 @@ void Interface::drawSave() {
backBuffer = _vm->_gfx->getBackBuffer();
_savePanel.getRect(rect);
- drawButtonBox(backBuffer, rect, kButton, false);
+ if (_vm->getGameType() == GType_ITE)
+ drawButtonBox(backBuffer, rect, kButton, false);
+ else
+ backBuffer->blit(rect, _savePanel.image);
+
for (i = 0; i < _savePanel.buttonsCount; i++) {
panelButton = &_savePanel.buttons[i];
if (panelButton->type == kPanelButtonSave) {
@@ -1291,7 +1319,6 @@ void Interface::handleOptionUpdate(const Point& mousePoint) {
bool releasedButton;
if (_vm->mouseButtonPressed()) {
- if (_optionSaveFileSlider != NULL) //TODO:REMOVE
if (_optionSaveFileSlider->state > 0) {
_optionPanel.calcPanelButtonRect(_optionSaveFileSlider, rect);
@@ -2117,6 +2144,14 @@ void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelBut
texturePoint.x = _quitPanel.x + panelButton->xOffset;
texturePoint.y = _quitPanel.y + panelButton->yOffset;
_vm->_sprite->draw(ds, _vm->getDisplayClip(), _optionPanel.sprites, 14 + litButton, texturePoint, 256);
+ } else if (panel == &_savePanel) {
+ texturePoint.x = _savePanel.x + panelButton->xOffset;
+ texturePoint.y = _savePanel.y + panelButton->yOffset;
+ _vm->_sprite->draw(ds, _vm->getDisplayClip(), _optionPanel.sprites, 14 + litButton, texturePoint, 256);
+ } else if (panel == &_loadPanel) {
+ texturePoint.x = _loadPanel.x + panelButton->xOffset;
+ texturePoint.y = _loadPanel.y + panelButton->yOffset;
+ _vm->_sprite->draw(ds, _vm->getDisplayClip(), _optionPanel.sprites, 14 + litButton, texturePoint, 256);
} else {
// revert to default behavior
drawButtonBox(ds, rect, kButton, panelButton->state > 0);