MACVENTURE: Complete text decoding

This commit is contained in:
Borja Lorente 2016-06-25 17:38:15 +02:00
parent 499ebc0b54
commit 8dd52b6cce
10 changed files with 167 additions and 74 deletions

View file

@ -174,6 +174,7 @@ void Gui::setWindowTitle(WindowReference winID, Common::String string) {
void Gui::updateWindowInfo(WindowReference ref, ObjID objID, const Common::Array<ObjID> &children) {
WindowData &data = findWindowData(ref);
data.children.clear();
data.objRef = objID;
uint32 originx = 0x7fff;
uint32 originy = 0x7fff;
for (uint i = 0; i < children.size(); i++) {
@ -224,6 +225,8 @@ void Gui::initGUI() {
initWindows();
assignObjReferences();
if (!loadControls())
error("Could not load controls");
@ -238,51 +241,55 @@ void Gui::initWindows() {
_controlsWindow->setDimensions(getWindowData(kCommandsWindow).bounds);
_controlsWindow->setActive(false);
_controlsWindow->setCallback(commandsWindowCallback, this);
loadBorder(_controlsWindow, "border_command.bmp", false);
loadBorder(_controlsWindow, "border_command.bmp", true);
//loadBorder(_controlsWindow, "border_command.bmp", false);
//loadBorder(_controlsWindow, "border_command.bmp", true);
// Main Game Window
_mainGameWindow = _wm.addWindow(false, false, false);
_mainGameWindow->setDimensions(getWindowData(kMainGameWindow).bounds);
_mainGameWindow->setActive(false);
_mainGameWindow->setCallback(mainGameWindowCallback, this);
loadBorder(_mainGameWindow, "border_no_scroll_inac.bmp", false);
loadBorder(_mainGameWindow, "border_no_scroll_act.bmp", true);
findWindowData(kMainGameWindow).objRef = 3;
//loadBorder(_mainGameWindow, "border_no_scroll_inac.bmp", false);
//loadBorder(_mainGameWindow, "border_no_scroll_act.bmp", true);
// In-game Output Console
_outConsoleWindow = _wm.addWindow(false, true, true);
_outConsoleWindow->setDimensions(Common::Rect(20, 20, 120, 120));
_outConsoleWindow->setActive(false);
_outConsoleWindow->setCallback(outConsoleWindowCallback, this);
loadBorder(_outConsoleWindow, "border_left_scroll_inac.bmp", false);
loadBorder(_outConsoleWindow, "border_left_scroll_inac.bmp", true);
//loadBorder(_outConsoleWindow, "border_left_scroll_inac.bmp", false);
//loadBorder(_outConsoleWindow, "border_left_scroll_inac.bmp", true);
// Self Window
_selfWindow = _wm.addWindow(false, true, true);
_selfWindow->setDimensions(getWindowData(kSelfWindow).bounds);
_selfWindow->setActive(false);
_selfWindow->setCallback(selfWindowCallback, this);
loadBorder(_selfWindow, "border_no_scroll_inac.bmp", false);
loadBorder(_selfWindow, "border_no_scroll_inac.bmp", true);
findWindowData(kMainGameWindow).objRef = 0;
//loadBorder(_selfWindow, "border_no_scroll_inac.bmp", false);
//loadBorder(_selfWindow, "border_no_scroll_inac.bmp", true);
// Exits Window
_exitsWindow = _wm.addWindow(false, true, true);
_exitsWindow->setDimensions(getWindowData(kExitsWindow).bounds);
_exitsWindow->setActive(false);
_exitsWindow->setCallback(exitsWindowCallback, this);
loadBorder(_exitsWindow, "border_no_scroll_inac.bmp", false);
loadBorder(_exitsWindow, "border_no_scroll_act.bmp", true);
//loadBorder(_exitsWindow, "border_no_scroll_inac.bmp", false);
//loadBorder(_exitsWindow, "border_no_scroll_act.bmp", true);
}
void Gui::assignObjReferences() {
findWindowData(kSelfWindow).objRef = 0;
}
WindowReference Gui::createInventoryWindow(ObjID objRef) {
Graphics::MacWindow *newWindow = _wm.addWindow(true, true, true);
WindowData newData;
GlobalSettings settings = _engine->getGlobalSettings();
newData.refcon = (WindowReference)ABS(_inventoryWindows.size()); // This is a hack
newData.refcon = (WindowReference)ABS(_inventoryWindows.size()); // This is a HACK
if (_windowData->back().refcon < 0x80) { // There is already another inventory window
newData.bounds = _windowData->back().bounds; // Inventory windows are always last
@ -303,8 +310,8 @@ WindowReference Gui::createInventoryWindow(ObjID objRef) {
newWindow->setDimensions(newData.bounds);
newWindow->setCallback(inventoryWindowCallback, this);
loadBorder(newWindow, "border_no_scroll_inac.bmp", false);
loadBorder(newWindow, "border_no_scroll_act.bmp", true);
//loadBorder(newWindow, "border_no_scroll_inac.bmp", false);
//loadBorder(newWindow, "border_no_scroll_act.bmp", true);
_inventoryWindows.push_back(newWindow);
debug("Create new inventory window. Reference: %d", newData.refcon);
@ -587,7 +594,7 @@ void Gui::drawExitsWindow() {
srf->w + border.rightOffset,
srf->h + border.bottomOffset), kColorWhite);
drawObjectsInWindow(kExitsWindow, _exitsWindow->getSurface());
drawObjectsInWindow(kMainGameWindow, _exitsWindow->getSurface());
}
void Gui::drawObjectsInWindow(WindowReference target, Graphics::ManagedSurface * surface) {
@ -792,12 +799,6 @@ void Gui::updateWindow(WindowReference winID, bool containerOpen) {
it->unselect();
}
}
if (winID == kMainGameWindow) {
drawMainGameWindow();
} else {
Graphics::MacWindow *winRef = findWindow(winID);
winRef->getSurface()->fillRect(data.bounds, kColorGray);
}
Common::Array<DrawableObject> &children = data.children;
for (uint i = 0; i < children.size(); i++) {
uint flag = 0;
@ -812,8 +813,17 @@ void Gui::updateWindow(WindowReference winID, bool containerOpen) {
mode = kBlitOR;
}
children[i] = DrawableObject(child, mode);
} else {
children[i] = DrawableObject(child, kBlitXOR);
}
}
if (winID == kMainGameWindow) {
drawMainGameWindow();
}
else {
Graphics::MacWindow *winRef = findWindow(winID);
winRef->getSurface()->fillRect(data.bounds, kColorGray);
}
if (data.type == kZoomDoc && data.updateScroll) {
warning("Unimplemented: update scroll");
}