diff options
-rw-r--r-- | engines/sci/gfx/gfx_resmgr.cpp | 17 | ||||
-rw-r--r-- | engines/sci/gui/gui_view.h | 1 |
2 files changed, 15 insertions, 3 deletions
diff --git a/engines/sci/gfx/gfx_resmgr.cpp b/engines/sci/gfx/gfx_resmgr.cpp index e0b6abdb23..87e232c052 100644 --- a/engines/sci/gfx/gfx_resmgr.cpp +++ b/engines/sci/gfx/gfx_resmgr.cpp @@ -500,6 +500,7 @@ gfxr_view_t *GfxResManager::getView(int nr, int *loop, int *cel, int palette) { IntResMap &resMap = _resourceMaps[GFX_RESOURCE_TYPE_VIEW]; gfx_resource_t *res = resMap.contains(nr) ? resMap[nr] : NULL; int hash = palette; + ViewType viewType = _resMan->getViewType(); gfxr_view_t *view = NULL; gfxr_loop_t *loop_data = NULL; @@ -515,8 +516,19 @@ gfxr_view_t *GfxResManager::getView(int nr, int *loop, int *cel, int palette) { SciGuiView *guiView = new SciGuiView(_resMan, _screen, _palette, nr); + // Translate view palette + view->palette = NULL; + + if (guiView->getPalette()) { + GuiPalette viewPalette = guiView->getPalette()->_sysPalette; + int colorCount = (viewType == kViewVga) ? 256 : 16; + view->palette = new Palette(colorCount); + + for (int c = 0; c < colorCount; c++) + view->palette->setColor(c, viewPalette.colors[c].r, viewPalette.colors[c].g, viewPalette.colors[c].b); + } + view->loops_nr = guiView->getLoopCount(); - view->palette = _staticPalette->getref(); // TODO: this only works in non-VGA games view->loops = (gfxr_loop_t*)malloc(sizeof(gfxr_loop_t) * ((view->loops_nr) ? view->loops_nr : 1)); /* Alloc 1 if no loop */ for (int i = 0; i < view->loops_nr; i++) { @@ -534,12 +546,12 @@ gfxr_view_t *GfxResManager::getView(int nr, int *loop, int *cel, int palette) { curCel->height = celInfo->height; curCel->index_width = celInfo->width; curCel->index_height = celInfo->height; - curCel->palette = _staticPalette->getref(); // TODO: this only works in non-VGA games curCel->palette_revision = 0; curCel->xoffset = celInfo->displaceX; curCel->yoffset = celInfo->displaceY; curCel->alpha_map = 0; // will be allocated by gfx_xlate_pixmap() curCel->data = 0; // will be allocated by gfx_xlate_pixmap() + curCel->palette = view->palette->getref(); } } @@ -552,7 +564,6 @@ gfxr_view_t *GfxResManager::getView(int nr, int *loop, int *cel, int palette) { return NULL; int resid = GFXR_RES_ID(GFX_RESOURCE_TYPE_VIEW, nr); - ViewType viewType = _resMan->getViewType(); if (viewType == kViewEga) { int pal = (getSciVersion() <= SCI_VERSION_01) ? -1 : palette; diff --git a/engines/sci/gui/gui_view.h b/engines/sci/gui/gui_view.h index 289edb268a..b52cf585d7 100644 --- a/engines/sci/gui/gui_view.h +++ b/engines/sci/gui/gui_view.h @@ -59,6 +59,7 @@ public: byte *getBitmap(GuiViewLoopNo loopNo, GuiViewCelNo celNo); void draw(Common::Rect rect, Common::Rect clipRect, Common::Rect clipRectTranslated, GuiViewLoopNo loopNo, GuiViewCelNo celNo, byte priority, uint16 paletteNo); uint16 getLoopCount() const { return _loopCount; } + SciGuiPalette *getPalette() const { return _palette; } private: void initData(GuiResourceId resourceId); |