diff options
| author | Paul Gilbert | 2012-09-09 21:15:09 +1000 | 
|---|---|---|
| committer | Paul Gilbert | 2012-09-09 21:15:09 +1000 | 
| commit | 14cd54fc398c312566ea2dec3a91d775f2159f0f (patch) | |
| tree | 89074de365df9d96e8572310844d573dfaef6b32 | |
| parent | 56c454fcb5db788ccdb662bc19e1675a72d73f8d (diff) | |
| download | scummvm-rg350-14cd54fc398c312566ea2dec3a91d775f2159f0f.tar.gz scummvm-rg350-14cd54fc398c312566ea2dec3a91d775f2159f0f.tar.bz2 scummvm-rg350-14cd54fc398c312566ea2dec3a91d775f2159f0f.zip  | |
HOPKINS: Add temporary copy of VESA surface to screen, and other bugfixes
| -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;  | 
