diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/hopkins/events.cpp | 18 | ||||
-rw-r--r-- | engines/hopkins/globals.cpp | 5 | ||||
-rw-r--r-- | engines/hopkins/globals.h | 12 | ||||
-rw-r--r-- | engines/hopkins/graphics.cpp | 91 | ||||
-rw-r--r-- | engines/hopkins/graphics.h | 153 | ||||
-rw-r--r-- | engines/hopkins/hopkins.cpp | 2 | ||||
-rw-r--r-- | engines/hopkins/script.cpp | 2 |
7 files changed, 122 insertions, 161 deletions
diff --git a/engines/hopkins/events.cpp b/engines/hopkins/events.cpp index ead8ff0a33..a52371368e 100644 --- a/engines/hopkins/events.cpp +++ b/engines/hopkins/events.cpp @@ -313,8 +313,8 @@ int EventsManager::waitKeyPress() { } void EventsManager::VBL() { - signed int v11 = 0; - signed int v12 = 0; + int bottom = 0; + int right = 0; int height = 0; int width = 0; int xp = 0; @@ -355,12 +355,12 @@ void EventsManager::VBL() { if (yp + _mouseSizeY >= mouseHeight + _vm->_graphicsManager._maxY) height = _vm->_graphicsManager._maxY - mouseHeight - yp; } - v12 = width + xp; - v11 = yp + height; + right = xp + width; + bottom = yp + height; } } - if (!_vm->_globals.PUBEXIT) + if (!_vm->_globals._linuxEndDemoFl) _vm->_objectsManager.displaySprite(); if (!_mouseFl) { updateCursor(); @@ -376,7 +376,7 @@ void EventsManager::VBL() { } } else if (yp < _vm->_graphicsManager._maxY && xp < _vm->_graphicsManager._maxX && width > 1 && height > 1) { _vm->_eventsManager.updateCursor(); - _vm->_graphicsManager.addVesaSegment(xp, yp, v12, v11); + _vm->_graphicsManager.addVesaSegment(xp, yp, right, bottom); } _vm->_globals._speed = 2; @@ -432,12 +432,8 @@ void EventsManager::VBL() { _vm->_graphicsManager.unlockScreen(); _vm->_graphicsManager.dstrect[0] = Common::Rect(0, 20, SCREEN_WIDTH, 460); - for (int i = 1; i < _vm->_globals.NBBLOC + 1; i++) { - if (_vm->_globals.BLOC[i]._activeFl) - _vm->_globals.BLOC[i]._activeFl = false; - } + _vm->_graphicsManager.RESET_SEGMENT_VESA(); - _vm->_globals.NBBLOC = 0; _startPos.x = _vm->_graphicsManager._scrollPosX; _vm->_graphicsManager._scrollOffset = _vm->_graphicsManager._scrollPosX; _vm->_graphicsManager._scrollPosX = _vm->_graphicsManager._scrollPosX; diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp index 2c2cfac80e..e9229c4d59 100644 --- a/engines/hopkins/globals.cpp +++ b/engines/hopkins/globals.cpp @@ -86,8 +86,6 @@ Globals::Globals() { } for (int i = 0; i < 300; ++i) Common::fill((byte *)&ObjetW[i], (byte *)&ObjetW[i] + sizeof(ObjetWItem), 0); - for (int i = 0; i < 250; ++i) - Common::fill((byte *)&BLOC[i], (byte *)&BLOC[i] + sizeof(BlocItem), 0); for (int i = 0; i < 25; ++i) Common::fill((byte *)&Cache[i], (byte *)&Cache[i] + sizeof(CacheItem), 0); @@ -108,7 +106,7 @@ Globals::Globals() { // Initialize fields _language = LANG_EN; - PUBEXIT = false; + _linuxEndDemoFl = false; _speed = 1; _oldFrameIndex = 0; _oldDirection = 0; @@ -131,7 +129,6 @@ Globals::Globals() { _screenId = 0; _prevScreenId = 0; _characterMaxPosY = 0; - NBBLOC = 0; _menuScrollType = 0; _menuScrollSpeed = 0; _menuSpeed = 0; diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h index 4cc2f245be..033d40f935 100644 --- a/engines/hopkins/globals.h +++ b/engines/hopkins/globals.h @@ -127,14 +127,6 @@ struct ObjetWItem { byte field7; }; -struct BlocItem { - uint16 _activeFl; - int _x1; - int _y1; - int _x2; - int _y2; -}; - /** * Mode for SortItem records */ @@ -289,7 +281,6 @@ public: LockAnimItem _lockedAnims[30]; VBobItem VBob[30]; ObjetWItem ObjetW[300]; - BlocItem BLOC[250]; CacheItem Cache[25]; int BOBZONE[105]; bool BOBZONE_FLAG[105]; @@ -298,7 +289,7 @@ public: int _inventory[36]; SortItem _sortedDisplay[51]; Language _language; - bool PUBEXIT; + bool _linuxEndDemoFl; int PERSO_TYPE; uint _speed; Common::String FICH_ZONE; @@ -338,7 +329,6 @@ public: int _characterMaxPosY; bool _disableInventFl; bool NOMARCHE; - int NBBLOC; byte *_optionDialogSpr; bool _optionDialogFl; int _menuDisplayType; diff --git a/engines/hopkins/graphics.cpp b/engines/hopkins/graphics.cpp index 63bcbf20c8..03d79e376e 100644 --- a/engines/hopkins/graphics.cpp +++ b/engines/hopkins/graphics.cpp @@ -45,6 +45,7 @@ GraphicsManager::GraphicsManager() { _scrollPosX = 0; _largeScreenFl = false; _oldScrollPosX = 0; + NBBLOC = 0; _lineNbr2 = 0; Agr_x = Agr_y = 0; @@ -63,12 +64,16 @@ GraphicsManager::GraphicsManager() { Red_x = Red_y = 0; Red = 0; _width = 0; - spec_largeur = 0; + _specialWidth = 0; Common::fill(&SD_PIXELS[0], &SD_PIXELS[PALETTE_SIZE * 2], 0); Common::fill(&_colorTable[0], &_colorTable[PALETTE_EXT_BLOCK_SIZE], 0); Common::fill(&_palette[0], &_palette[PALETTE_EXT_BLOCK_SIZE], 0); Common::fill(&_oldPalette[0], &_oldPalette[PALETTE_EXT_BLOCK_SIZE], 0); + + for (int i = 0; i < 250; ++i) + Common::fill((byte *)&BLOC[i], (byte *)&BLOC[i] + sizeof(BlocItem), 0); + } GraphicsManager::~GraphicsManager() { @@ -923,6 +928,14 @@ void GraphicsManager::Capture_Mem(const byte *srcSurface, byte *destSurface, int } while (rowCount2 != 1); } +/** + * Draws a sprite onto the screen + * @param surface Destination surface + * @param spriteData The raw data for a sprite set + * @param xp X co-ordinate. For some reason, starts from 300 = first column + * @param yp Y co-ordinate. FOr some reason, starts from 300 = top row + * @param spriteIndex Index of the sprite to draw + */ void GraphicsManager::Sprite_Vesa(byte *surface, const byte *spriteData, int xp, int yp, int spriteIndex) { // Get a pointer to the start of the desired sprite const byte *spriteP = spriteData + 3; @@ -1080,12 +1093,10 @@ void GraphicsManager::VISU_ALL() { } void GraphicsManager::RESET_SEGMENT_VESA() { - if (_vm->_globals.NBBLOC > 0) { - for (int idx = 0; idx != _vm->_globals.NBBLOC; idx++) - _vm->_globals.BLOC[idx]._activeFl = false; + for (int idx = 0; idx <= NBBLOC; idx++) + BLOC[idx]._activeFl = false; - _vm->_globals.NBBLOC = 0; - } + NBBLOC = 0; } // Add VESA Segment @@ -1104,19 +1115,15 @@ void GraphicsManager::addVesaSegment(int x1, int y1, int x2, int y2) { if (y1 < _minY) y1 = _minY; - if (_vm->_globals.NBBLOC > 1) { - int16 blocIndex = 0; - do { - BlocItem &bloc = _vm->_globals.BLOC[blocIndex]; - if (bloc._activeFl && tempX >= bloc._x1 && x2 <= bloc._x2 && y1 >= bloc._y1 && y2 <= bloc._y2) - addFlag = false; - ++blocIndex; - } while (_vm->_globals.NBBLOC + 1 != blocIndex); - } + for (int blocIndex = 0; blocIndex <= NBBLOC; blocIndex++) { + BlocItem &bloc = BLOC[blocIndex]; + if (bloc._activeFl && tempX >= bloc._x1 && x2 <= bloc._x2 && y1 >= bloc._y1 && y2 <= bloc._y2) + addFlag = false; + }; if (addFlag) { - assert(_vm->_globals.NBBLOC < 250); - BlocItem &bloc = _vm->_globals.BLOC[++_vm->_globals.NBBLOC]; + assert(NBBLOC < 250); + BlocItem &bloc = BLOC[++NBBLOC]; bloc._activeFl = true; bloc._x1 = tempX; @@ -1128,13 +1135,13 @@ void GraphicsManager::addVesaSegment(int x1, int y1, int x2, int y2) { // Display VESA Segment void GraphicsManager::displayVesaSegment() { - if (_vm->_globals.NBBLOC == 0) + if (NBBLOC == 0) return; lockScreen(); - for (int idx = 1; idx <= _vm->_globals.NBBLOC; ++idx) { - BlocItem &bloc = _vm->_globals.BLOC[idx]; + for (int idx = 1; idx <= NBBLOC; ++idx) { + BlocItem &bloc = BLOC[idx]; Common::Rect &dstRect = dstrect[idx - 1]; if (!bloc._activeFl) continue; @@ -1163,10 +1170,10 @@ void GraphicsManager::displayVesaSegment() { unlockScreen(); } - _vm->_globals.BLOC[idx]._activeFl = false; + BLOC[idx]._activeFl = false; } - _vm->_globals.NBBLOC = 0; + NBBLOC = 0; unlockScreen(); } @@ -1516,7 +1523,7 @@ void GraphicsManager::Affiche_Perfect(byte *surface, const byte *srcData, int xp _width = spriteWidth; if (flipFl) { byte *dest2P = spriteWidth + dest1P; - spec_largeur = spriteWidth; + _specialWidth = spriteWidth; if (_posYClipped) { if (_posYClipped >= spriteHeight1 || spriteHeight1 < 0) return; @@ -1548,12 +1555,12 @@ void GraphicsManager::Affiche_Perfect(byte *surface, const byte *srcData, int xp ++spritePixelsP; --dest2P; } - spritePixelsP = spec_largeur + spritePixelsCopy2P; + spritePixelsP = _specialWidth + spritePixelsCopy2P; dest2P = _lineNbr2 + destCopy2P; spriteHeight1 = yCtr2 - 1; } while (yCtr2 != 1); } else { - spec_largeur = spriteWidth; + _specialWidth = spriteWidth; if (_posYClipped) { if (_posYClipped >= spriteHeight1 || spriteHeight1 < 0) return; @@ -1583,7 +1590,7 @@ void GraphicsManager::Affiche_Perfect(byte *surface, const byte *srcData, int xp ++dest1P; ++spritePixelsP; } - spritePixelsP = spec_largeur + spritePixelsCopyP; + spritePixelsP = _specialWidth + spritePixelsCopyP; dest1P = _lineNbr2 + dest1CopyP; spriteHeight1 = yCtr1 - 1; } while (yCtr1 != 1); @@ -1805,38 +1812,6 @@ void GraphicsManager::Copy_WinScan_Vbe(const byte *src, byte *dest) { } } -void GraphicsManager::Copy_Video_Vbe(const byte *src) { - assert(_videoPtr); - int destOffset = 0; - const byte *srcP = src; - for (;;) { - byte byteVal = *srcP; - if (*srcP < kByteStop) - break; - else { - if (byteVal == kByteStop) - return; - if (byteVal == k8bVal) { - destOffset += srcP[1]; - byteVal = srcP[2]; - srcP += 2; - } else if (byteVal == k16bVal) { - destOffset += READ_LE_UINT16(srcP + 1); - byteVal = srcP[3]; - srcP += 3; - } else { - destOffset += READ_LE_UINT32(srcP + 1); - byteVal = srcP[5]; - srcP += 5; - } - } - - *((byte *)_videoPtr->pixels + destOffset) = byteVal; - ++srcP; - ++destOffset; - } -} - // Reduce Screen void GraphicsManager::Reduc_Ecran(const byte *srcSurface, byte *destSurface, int xp, int yp, int width, int height, int zoom) { const byte *srcP = xp + _lineNbr2 * yp + srcSurface; diff --git a/engines/hopkins/graphics.h b/engines/hopkins/graphics.h index e5feaddad5..af06e8ce88 100644 --- a/engines/hopkins/graphics.h +++ b/engines/hopkins/graphics.h @@ -45,131 +45,134 @@ struct RGB8 { byte b; }; +struct BlocItem { + uint16 _activeFl; + int _x1; + int _y1; + int _x2; + int _y2; +}; + class HopkinsEngine; class GraphicsManager { private: HopkinsEngine *_vm; - void loadScreen(const Common::String &file); -public: int _lockCounter; bool _initGraphicsFl; int _screenWidth; int _screenHeight; - int WinScan; + Graphics::Surface *_videoPtr; + int _width; + int _posXClipped, _posYClipped; + bool _clipFl; + int _specialWidth; + byte SD_PIXELS[PALETTE_SIZE * 2]; - byte *PAL_PIXELS; + int Agr_x, Agr_y; + bool Agr_Flag_x, Agr_Flag_y; + int clip_x1, clip_y1; + int Red_x, Red_y; + int Red; + + void loadScreen(const Common::String &file); + void loadPCX640(byte *surface, const Common::String &file, byte *palette, bool typeFlag); + void loadPCX320(byte *surface, const Common::String &file, byte *palette); + void fadeIn(const byte *palette, int step, const byte *surface); + void fadeOut(const byte *palette, int step, const byte *surface); + void changePalette(const byte *palette); + uint16 mapRGB(byte r, byte g, byte b); + + void Trans_bloc(byte *destP, const byte *srcP, int count, int minThreshold, int maxThreshold); + void Copy_Vga16(const byte *surface, int xp, int yp, int width, int height, int destX, int destY); + void copy16bFromSurfaceScaleX2(const byte *surface); +public: int _lineNbr; byte _colorTable[PALETTE_EXT_BLOCK_SIZE]; byte _palette[PALETTE_EXT_BLOCK_SIZE]; byte _oldPalette[PALETTE_EXT_BLOCK_SIZE]; - Graphics::Surface *_videoPtr; byte *_vesaScreen; byte *_vesaBuffer; int _scrollOffset; int _scrollPosX; bool _largeScreenFl; int _oldScrollPosX; - bool MANU_SCROLL; int _scrollSpeed; int _lineNbr2; - int Agr_x, Agr_y; - bool Agr_Flag_x, Agr_Flag_y; - int _fadeDefaultSpeed; - int FADE_LINUX; - bool _skipVideoLockFl; - int _scrollStatus; - Common::Rect dstrect[50]; int _minX, _minY; int _maxX, _maxY; - int _posXClipped, _posYClipped; - int clip_x1, clip_y1; - bool _clipFl; - int Red_x, Red_y; - int Red; - int _width; - int spec_largeur; bool _noFadingFl; + Common::Rect dstrect[50]; + int _scrollStatus; + bool _skipVideoLockFl; + int _fadeDefaultSpeed; + + int NBBLOC; + BlocItem BLOC[250]; + int WinScan; + byte *PAL_PIXELS; + bool MANU_SCROLL; + int FADE_LINUX; public: GraphicsManager(); ~GraphicsManager(); - void setParent(HopkinsEngine *vm); - void setGraphicalMode(int width, int height); + void setParent(HopkinsEngine *vm); void lockScreen(); void unlockScreen(); + void clearPalette(); void clearScreen(); void loadImage(const Common::String &file); void loadVgaImage(const Common::String &file); - void initColorTable(int minIndex, int maxIndex, byte *palette); - void scrollScreen(int amount); - void Trans_bloc(byte *destP, const byte *srcP, int count, int minThreshold, int maxThreshold); - void Trans_bloc2(byte *surface, byte *col, int size); - void loadPCX640(byte *surface, const Common::String &file, byte *palette, bool typeFlag); - void loadPCX320(byte *surface, const Common::String &file, byte *palette); - void clearPalette(); - void SCANLINE(int pitch); - void m_scroll16(const byte *surface, int xs, int ys, int width, int height, int destX, int destY); - void m_scroll16A(const byte *surface, int xs, int ys, int width, int height, int destX, int destY); - void Copy_Vga16(const byte *surface, int xp, int yp, int width, int height, int destX, int destY); - void fadeIn(const byte *palette, int step, const byte *surface); - void fadeOut(const byte *palette, int step, const byte *surface); - void fadeInShort(); - void fadeOutShort(); void fadeInLong(); - void fadeOutLong(); - void fadeOutDefaultLength(const byte *surface); - void fadeInDefaultLength(const byte *surface); void fadeInBreakout(); + void fadeInDefaultLength(const byte *surface); + void fadeInShort(); + void fadeOutDefaultLength(const byte *surface); void fateOutBreakout(); + void fadeOutLong(); + void fadeOutShort(); + void fastDisplay(const byte *spriteData, int xp, int yp, int spriteIndex, bool addSegment = true); + void displayVesaSegment(); + void displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int colour); + void drawHorizontalLine(byte *surface, int xp, int yp, uint16 width, byte col); + void drawVerticalLine(byte *surface, int xp, int yp, int height, byte col); + void initColorTable(int minIndex, int maxIndex, byte *palette); + void setGraphicalMode(int width, int height); void setPaletteVGA256(const byte *palette); void setPaletteVGA256WithRefresh(const byte *palette, const byte *surface); + void scrollScreen(int amount); + int zoomIn(int v, int percentage); + int zoomOut(int v, int percentage); + + void Restore_Mem(byte *destSurface, const byte *src, int xp, int yp, int width, int height); + void addVesaSegment(int x1, int y1, int x2, int y2); + void copySurface(const byte *surface, int x1, int y1, int width, int height, byte *destSurface, int destX, int destY); void SETCOLOR3(int palIndex, int r, int g, int b); void SETCOLOR4(int palIndex, int r, int g, int b); - void changePalette(const byte *palette); - uint16 mapRGB(byte r, byte g, byte b); + void AFFICHE_SPEEDVGA(const byte *objectData, int xp, int yp, int idx, bool addSegment = true); + void RESET_SEGMENT_VESA(); void DD_VBL(); - void Copy_WinScan_Vbe3(const byte *srcData, byte *destSurface); - void Copy_Video_Vbe16(const byte *srcData); - void Copy_Video_Vbe16a(const byte *srcData); void Capture_Mem(const byte *srcSurface, byte *destSurface, int xs, int ys, int width, int height); - - /** - * Draws a sprite onto the screen - * @param surface Destination surface - * @param spriteData The raw data for a sprite set - * @param xp X co-ordinate. For some reason, starts from 300 = first column - * @param yp Y co-ordinate. FOr some reason, starts from 300 = top row - * @param spriteIndex Index of the sprite to draw - */ - void Sprite_Vesa(byte *surface, const byte *spriteData, int xp, int yp, int spriteIndex); - - void FIN_VISU(); - void VISU_ALL(); - void RESET_SEGMENT_VESA(); - void addVesaSegment(int x1, int y1, int x2, int y2); - void displayVesaSegment(); - void AFFICHE_SPEEDVGA(const byte *objectData, int xp, int yp, int idx, bool addSegment = true); - void CopyAsm(const byte *surface); - void copy16bFromSurfaceScaleX2(const byte *surface); - void Restore_Mem(byte *destSurface, const byte *src, int xp, int yp, int width, int height); - int zoomIn(int v, int percentage); - int zoomOut(int v, int percentage); void Affiche_Perfect(byte *surface, const byte *srcData, int xp300, int yp300, int frameIndex, int zoom1, int zoom2, bool flipFl); - void fastDisplay(const byte *spriteData, int xp, int yp, int spriteIndex, bool addSegment = true); - void copySurface(const byte *surface, int x1, int y1, int width, int height, byte *destSurface, int destX, int destY); void Copy_Mem(const byte *srcSurface, int x1, int y1, uint16 width, int height, byte *destSurface, int destX, int destY); - void displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int colour); + void SCANLINE(int pitch); + void Sprite_Vesa(byte *surface, const byte *spriteData, int xp, int yp, int spriteIndex); + void m_scroll16(const byte *surface, int xs, int ys, int width, int height, int destX, int destY); + void m_scroll16A(const byte *surface, int xs, int ys, int width, int height, int destX, int destY); + void Trans_bloc2(byte *surface, byte *col, int size); + void VISU_ALL(); + void FIN_VISU(); void INI_ECRAN(const Common::String &file, bool initializeScreen); void INI_ECRAN2(const Common::String &file, bool initializeScreen); - void OPTI_INI(const Common::String &file, int mode, bool initializeScreen); void NB_SCREEN(bool initPalette); - void Copy_WinScan_Vbe(const byte *srcP, byte *destP); - void Copy_Video_Vbe(const byte *src); void Reduc_Ecran(const byte *srcSruface, byte *destSurface, int xp, int yp, int width, int height, int zoom); - void drawHorizontalLine(byte *surface, int xp, int yp, uint16 width, byte col); - void drawVerticalLine(byte *surface, int xp, int yp, int height, byte col); + void OPTI_INI(const Common::String &file, int mode, bool initializeScreen); + void Copy_WinScan_Vbe3(const byte *srcData, byte *destSurface); + void Copy_WinScan_Vbe(const byte *srcP, byte *destP); + void Copy_Video_Vbe16(const byte *srcData); + void Copy_Video_Vbe16a(const byte *srcData); }; } // End of namespace Hopkins diff --git a/engines/hopkins/hopkins.cpp b/engines/hopkins/hopkins.cpp index 4e0698a4c4..1b8187a5cf 100644 --- a/engines/hopkins/hopkins.cpp +++ b/engines/hopkins/hopkins.cpp @@ -1954,7 +1954,7 @@ void HopkinsEngine::restoreSystem() { } void HopkinsEngine::endLinuxDemo() { - _globals.PUBEXIT = true; + _globals._linuxEndDemoFl = true; _graphicsManager.RESET_SEGMENT_VESA(); _globals._forestFl = false; _eventsManager._breakoutFl = false; diff --git a/engines/hopkins/script.cpp b/engines/hopkins/script.cpp index cf4f296fff..c25aacc414 100644 --- a/engines/hopkins/script.cpp +++ b/engines/hopkins/script.cpp @@ -2328,7 +2328,7 @@ int ScriptManager::handleOpcode(byte *dataP) { memcpy(_vm->_graphicsManager._oldPalette, _vm->_graphicsManager._palette, 769); _vm->_animationManager.playAnim2("PLAN.ANM", 50, 10, 800); } - _vm->_globals.NBBLOC = 0; + _vm->_graphicsManager.NBBLOC = 0; break; case 608: |