diff options
-rw-r--r-- | engines/hopkins/graphics.cpp | 39 | ||||
-rw-r--r-- | engines/hopkins/graphics.h | 4 | ||||
-rw-r--r-- | engines/hopkins/hopkins.cpp | 7 |
3 files changed, 27 insertions, 23 deletions
diff --git a/engines/hopkins/graphics.cpp b/engines/hopkins/graphics.cpp index ebe01405e0..9b95b3f515 100644 --- a/engines/hopkins/graphics.cpp +++ b/engines/hopkins/graphics.cpp @@ -21,6 +21,7 @@ */ #include "common/system.h" +#include "graphics/palette.h" #include "common/file.h" #include "common/rect.h" #include "engines/util.h" @@ -109,10 +110,7 @@ void GraphicsManager::SET_MODE(int width, int height) { PAL_PIXELS = SD_PIXELS; nbrligne = width; - for (int idx = 0; idx < 256; ++idx) { - cmap[idx].r = cmap[idx].g = cmap[idx].b = 0; - } - + Common::fill(&cmap[0], &cmap[256 * 3], 0); SDL_MODEYES = true; } else { error("Called SET_MODE multiple times"); @@ -126,6 +124,7 @@ void GraphicsManager::DD_Lock() { void GraphicsManager::DD_Unlock() { assert(VideoPtr); g_system->unlockScreen(); + VideoPtr = NULL; } void GraphicsManager::Cls_Video() { @@ -141,14 +140,12 @@ void GraphicsManager::LOAD_IMAGE(const Common::String &file) { } void GraphicsManager::CHARGE_ECRAN(const Common::String &file) { - int v1; - byte *v4; - byte *v5; + bool flag; Common::File f; FileManager::DMESS1(); - v1 = 1; + flag = true; if (FileManager::RECHERCHE_CAT(file, 6)) { FileManager::CONSTRUIT_FICHIER(GLOBALS.HOPIMAGE, file); if (!f.open(GLOBALS.NFICHIER)) @@ -156,11 +153,11 @@ void GraphicsManager::CHARGE_ECRAN(const Common::String &file) { f.seek(0, SEEK_END); f.close(); - v1 = 0; + flag = false; } SCROLL_ECRAN(0); - A_PCXSCREEN_WIDTH_SCREEN_HEIGHT((byte *)VESA_SCREEN.pixels, file, Palette, v1); + A_PCXSCREEN_WIDTH_SCREEN_HEIGHT((byte *)VESA_SCREEN.pixels, file, Palette, flag); SCROLL = 0; OLD_SCROLL = 0; @@ -183,6 +180,8 @@ void GraphicsManager::CHARGE_ECRAN(const Common::String &file) { else m_scroll2A((byte *)VESA_SCREEN.pixels, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); } + + DD_Unlock(); } else { SCANLINE(0x500u); GLOBALS.max_x = SCREEN_WIDTH * 2; @@ -209,14 +208,7 @@ void GraphicsManager::CHARGE_ECRAN(const Common::String &file) { } } - v4 = (byte *)VESA_BUFFER.pixels; - v5 = (byte *)VESA_SCREEN.pixels; - memcpy(v4, v5, 614396); - - v5 = (byte *)v5 + 614396; - v4 = (byte *)v4 + 614396; - WRITE_LE_UINT16(v4, READ_LE_UINT16(v5)); - *((byte *)v4 + 2) = *((byte *)v5 + 2); + memcpy((byte *)VESA_BUFFER.pixels, (byte *)VESA_SCREEN.pixels, SCREEN_WIDTH * 2 * SCREEN_HEIGHT); } void GraphicsManager::INIT_TABLE(int a1, int a2, byte *a3) { @@ -447,10 +439,17 @@ void GraphicsManager::A_PCXSCREEN_WIDTH_SCREEN_HEIGHT(byte *surface, const Commo } void GraphicsManager::Cls_Pal() { - warning("TODO"); + if (Winbpp == 2) { + Common::fill(&cmap[0], &cmap[PALETTE_SIZE * 3], 0); + + // TODO: Figure out what this is for + //SD_PIXELS[2 * v0] = SDL_MapRGB(*(_DWORD *)(LinuxScr + 4), 0, 0, 0); + g_system->getPaletteManager()->setPalette(cmap, 0, 256); + } } + void GraphicsManager::souris_max() { - warning("TODO"); + // Original has no implementatoin } void GraphicsManager::SCANLINE(int width) { diff --git a/engines/hopkins/graphics.h b/engines/hopkins/graphics.h index e6d56575f5..a3257f3044 100644 --- a/engines/hopkins/graphics.h +++ b/engines/hopkins/graphics.h @@ -48,11 +48,11 @@ public: int YSCREEN; int WinScan; int Winbpp; - byte SD_PIXELS[514]; + byte SD_PIXELS[257 * 2]; byte *PAL_PIXELS; int nbrligne; byte TABLE_COUL[256]; - RGB8 cmap[256]; + byte cmap[PALETTE_SIZE * 3]; byte Palette[PALETTE_SIZE * 3]; bool Linear; Graphics::Surface *VideoPtr; diff --git a/engines/hopkins/hopkins.cpp b/engines/hopkins/hopkins.cpp index 2fc9a3b007..cae33551b8 100644 --- a/engines/hopkins/hopkins.cpp +++ b/engines/hopkins/hopkins.cpp @@ -469,12 +469,17 @@ LABEL_128: } } */ + // Copy vesa surface to screen + _graphicsManager.DD_Lock(); + memcpy((byte *)_graphicsManager.VideoPtr->pixels, (byte *)_graphicsManager.VESA_SCREEN.pixels, + SCREEN_WIDTH * 2 * SCREEN_HEIGHT); + _graphicsManager.DD_Unlock(); // Stub event loop Common::Event evt; while (!g_system->getEventManager()->shouldQuit()) { while (g_system->getEventManager()->pollEvent(evt)) - ; + g_system->updateScreen(); } return Common::kNoError; |