Files
scummvm/engines/sci/graphics/transitions.h
T
sluicebox c3e199309e SCI: Fix transposed pic transitions
Fixes two pic transitions which were backwards. The oldTransitionIDs
table masked this bug in several games. These are the transitions that
go to and from the edge of the screen and the center from all sides.

Examples of both transitions:
KQ6 entering oracle room 380
ECO2 restarting from any room

Example with the two-part blackout effect:
KQ4 looking through keyhole in room 51
2020-08-02 22:02:35 -07:00

110 lines
3.7 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef SCI_GRAPHICS_TRANSITIONS_H
#define SCI_GRAPHICS_TRANSITIONS_H
#include "sci/graphics/helpers.h"
namespace Sci {
struct GfxTransitionTranslateEntry {
int16 orgId;
int16 newId;
bool blackoutFlag;
};
enum {
SCI_TRANSITIONS_VERTICALROLL_FROMCENTER = 0,
SCI_TRANSITIONS_HORIZONTALROLL_FROMCENTER = 1,
SCI_TRANSITIONS_STRAIGHT_FROM_RIGHT = 2,
SCI_TRANSITIONS_STRAIGHT_FROM_LEFT = 3,
SCI_TRANSITIONS_STRAIGHT_FROM_BOTTOM = 4,
SCI_TRANSITIONS_STRAIGHT_FROM_TOP = 5,
SCI_TRANSITIONS_DIAGONALROLL_TOCENTER = 6,
SCI_TRANSITIONS_DIAGONALROLL_FROMCENTER = 7,
SCI_TRANSITIONS_BLOCKS = 8,
SCI_TRANSITIONS_PIXELATION = 9,
SCI_TRANSITIONS_FADEPALETTE = 10,
SCI_TRANSITIONS_SCROLL_RIGHT = 11,
SCI_TRANSITIONS_SCROLL_LEFT = 12,
SCI_TRANSITIONS_SCROLL_UP = 13,
SCI_TRANSITIONS_SCROLL_DOWN = 14,
SCI_TRANSITIONS_NONE_LONGBOW = 15,
SCI_TRANSITIONS_NONE = 100,
// here are transitions that are used by the old tableset, but are not included anymore in the new tableset
SCI_TRANSITIONS_VERTICALROLL_TOCENTER = 300,
SCI_TRANSITIONS_HORIZONTALROLL_TOCENTER = 301
};
class Screen;
/**
* Transitions class, handles doing transitions for SCI0->SCI1.1 games like fade out/fade in, mosaic effect, etc.
*/
class GfxTransitions {
public:
GfxTransitions(GfxScreen *screen, GfxPalette *palette);
~GfxTransitions();
void setup(int16 number, bool blackoutFlag);
void doit(Common::Rect picRect);
private:
void init();
const GfxTransitionTranslateEntry *translateNumber(int16 number, const GfxTransitionTranslateEntry *tablePtr);
void doTransition(int16 number, bool blackout);
void setNewPalette(bool blackoutFlag);
void setNewScreen(bool blackoutFlag);
void copyRectToScreen(const Common::Rect rect, bool blackoutFlag);
void fadeOut();
void fadeIn();
void pixelation(bool blackoutFlag);
void blocks(bool blackoutFlag);
void straight(int16 number, bool blackoutFlag);
void scrollCopyOldToScreen(Common::Rect screenRect, int16 x, int16 y);
void scroll(int16 number);
void verticalRollFromCenter(bool blackoutFlag);
void verticalRollToCenter(bool blackoutFlag);
void horizontalRollFromCenter(bool blackoutFlag);
void horizontalRollToCenter(bool blackoutFlag);
void diagonalRollFromCenter(bool blackoutFlag);
void diagonalRollToCenter(bool blackoutFlag);
bool doCreateFrame(uint32 shouldBeAtMsec);
void updateScreen();
void updateScreenAndWait(uint32 shouldBeAtMsec);
GfxScreen *_screen;
GfxPalette *_palette;
const GfxTransitionTranslateEntry *_translationTable;
int16 _number;
bool _blackoutFlag;
Common::Rect _picRect;
byte *_oldScreen; // buffer for saving current active screen data to, has dimenions of _screen->_displayScreen
uint32 _transitionStartTime; // when the current transition started in milliseconds
};
} // End of namespace Sci
#endif