2017-07-19 11:37:54 +00:00
|
|
|
/* 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 SLUDGE_GRAPHICS_H
|
|
|
|
#define SLUDGE_GRAPHICS_H
|
|
|
|
|
2017-07-20 17:08:53 +00:00
|
|
|
#include "common/stream.h"
|
|
|
|
|
2017-07-19 22:41:13 +00:00
|
|
|
#include "graphics/surface.h"
|
|
|
|
#include "graphics/transparent_surface.h"
|
|
|
|
|
2017-07-21 12:00:24 +00:00
|
|
|
#include "sludge/sprbanks.h"
|
|
|
|
|
2017-07-19 11:37:54 +00:00
|
|
|
namespace Sludge {
|
|
|
|
|
|
|
|
class Parallax;
|
2017-07-19 22:41:13 +00:00
|
|
|
class SludgeEngine;
|
|
|
|
class SpritePalette;
|
|
|
|
|
2017-07-20 08:39:24 +00:00
|
|
|
struct StackHandler;
|
2017-07-19 22:41:13 +00:00
|
|
|
struct FrozenStuffStruct;
|
2017-07-21 12:00:24 +00:00
|
|
|
struct LoadedSpriteBank;
|
2017-07-20 08:39:24 +00:00
|
|
|
struct OnScreenPerson;
|
2017-07-19 22:41:13 +00:00
|
|
|
struct SpriteBank;
|
|
|
|
struct Sprite;
|
|
|
|
struct SpriteLayers;
|
|
|
|
struct ZBufferData;
|
|
|
|
|
|
|
|
enum ELightMapMode {
|
|
|
|
LIGHTMAPMODE_NONE = -1,
|
|
|
|
LIGHTMAPMODE_HOTSPOT,
|
|
|
|
LIGHTMAPMODE_PIXEL,
|
|
|
|
LIGHTMAPMODE_NUM
|
|
|
|
};
|
2017-07-19 11:37:54 +00:00
|
|
|
|
|
|
|
class GraphicsManager {
|
|
|
|
public:
|
2017-07-19 22:41:13 +00:00
|
|
|
GraphicsManager(SludgeEngine *vm);
|
2017-07-19 11:37:54 +00:00
|
|
|
virtual ~GraphicsManager();
|
|
|
|
|
2017-07-19 22:41:13 +00:00
|
|
|
// graphics
|
|
|
|
void setWindowSize(uint winWidth, uint winHeight) { _winWidth = winWidth; _winHeight = winHeight; }
|
|
|
|
bool init();
|
|
|
|
void display();
|
2017-08-01 07:29:34 +00:00
|
|
|
void clear();
|
2017-07-19 22:41:13 +00:00
|
|
|
|
2017-07-19 11:37:54 +00:00
|
|
|
// Parallax
|
|
|
|
bool loadParallax(uint16 v, uint16 fracX, uint16 fracY);
|
|
|
|
void killParallax();
|
|
|
|
void saveParallax(Common::WriteStream *fp);
|
|
|
|
void drawParallax();
|
2017-07-19 22:41:13 +00:00
|
|
|
|
|
|
|
// Backdrop
|
|
|
|
void killAllBackDrop();
|
|
|
|
bool resizeBackdrop(int x, int y);
|
|
|
|
bool killResizeBackdrop(int x, int y);
|
|
|
|
void killBackDrop();
|
|
|
|
void loadBackDrop(int fileNum, int x, int y);
|
|
|
|
void mixBackDrop(int fileNum, int x, int y);
|
|
|
|
void drawBackDrop();
|
|
|
|
void blankScreen(int x1, int y1, int x2, int y2);
|
|
|
|
void blankAllScreen();
|
|
|
|
void darkScreen();
|
|
|
|
void saveHSI(Common::WriteStream *stream);
|
|
|
|
bool loadHSI(Common::SeekableReadStream *stream, int, int, bool);
|
|
|
|
bool mixHSI(Common::SeekableReadStream *stream, int x = 0, int y = 0);
|
|
|
|
void drawLine(uint, uint, uint, uint);
|
|
|
|
void drawHorizontalLine(uint, uint, uint);
|
|
|
|
void drawVerticalLine(uint, uint, uint);
|
|
|
|
void hardScroll(int distance);
|
2017-07-20 08:39:24 +00:00
|
|
|
bool getRGBIntoStack(uint x, uint y, StackHandler *sH);
|
2017-07-19 22:41:13 +00:00
|
|
|
|
|
|
|
// Lightmap
|
|
|
|
int _lightMapMode;
|
|
|
|
void killLightMap();
|
|
|
|
bool loadLightMap(int v);
|
|
|
|
void saveLightMap(Common::WriteStream *stream);
|
|
|
|
bool loadLightMap(int ssgVersion, Common::SeekableReadStream *stream);
|
|
|
|
|
|
|
|
// Snapshot
|
|
|
|
void nosnapshot();
|
|
|
|
bool snapshot();
|
|
|
|
void saveSnapshot(Common::WriteStream *stream);
|
|
|
|
bool restoreSnapshot(Common::SeekableReadStream *stream);
|
|
|
|
|
|
|
|
// Camera
|
|
|
|
int getCamX() { return _cameraX; }
|
|
|
|
int getCamY() { return _cameraY; }
|
|
|
|
float getCamZoom() { return _cameraZoom; }
|
|
|
|
void setCamera(int camerX, int camerY, float camerZ) {
|
|
|
|
_cameraX = camerX;
|
|
|
|
_cameraY = camerY;
|
|
|
|
_cameraZoom = camerZ;
|
|
|
|
}
|
|
|
|
void aimCamera(int cameraX, int cameraY);
|
|
|
|
void zoomCamera(int z);
|
|
|
|
|
|
|
|
// Screen
|
|
|
|
int getCenterX(int width) { return (_winWidth - width) >> 1; }
|
2017-07-19 23:55:21 +00:00
|
|
|
int checkSizeValide(int width, int height) { return ((width >= 0) && (height >= 0) && (width < (int)_winWidth) && (height < (int)_winHeight)); }
|
2017-07-19 22:41:13 +00:00
|
|
|
|
|
|
|
// Freeze
|
|
|
|
bool freeze();
|
|
|
|
void unfreeze(bool killImage = true);
|
|
|
|
int howFrozen();
|
|
|
|
bool isFrozen() { return (_frozenStuff != nullptr); }
|
|
|
|
|
|
|
|
// Sprites
|
|
|
|
void forgetSpriteBank(SpriteBank &forgetme);
|
|
|
|
bool loadSpriteBank(char *filename, SpriteBank &loadhere);
|
|
|
|
bool loadSpriteBank(int fileNum, SpriteBank &loadhere, bool isFont);
|
|
|
|
|
|
|
|
void fontSprite(int x1, int y1, Sprite &single, const SpritePalette &fontPal);
|
|
|
|
void flipFontSprite(int x1, int y1, Sprite &single, const SpritePalette &fontPal);
|
|
|
|
|
2017-07-20 08:39:24 +00:00
|
|
|
bool scaleSprite(Sprite &single, const SpritePalette &fontPal, OnScreenPerson *thisPerson, bool mirror);
|
2017-07-19 22:41:13 +00:00
|
|
|
void pasteSpriteToBackDrop(int x1, int y1, Sprite &single, const SpritePalette &fontPal);
|
|
|
|
bool reserveSpritePal(SpritePalette &sP, int n);
|
2017-07-20 08:39:24 +00:00
|
|
|
void fixScaleSprite(int x1, int y1, Sprite &single, const SpritePalette &fontPal, OnScreenPerson *thisPerson, const int camX, const int camY, bool);
|
2017-07-19 22:41:13 +00:00
|
|
|
void burnSpriteToBackDrop(int x1, int y1, Sprite &single, const SpritePalette &fontPal);
|
|
|
|
|
|
|
|
void resetSpriteLayers(ZBufferData *ptrZBuffer, int x, int y, bool upsidedown);
|
|
|
|
void addSpriteDepth(Graphics::Surface *ptr, int depth, int x, int y, Graphics::FLIP_FLAGS flip, int width = -1, int height = -1, uint32 color = TS_ARGB(255, 255, 255, 255));
|
|
|
|
void displaySpriteLayers();
|
|
|
|
void killSpriteLayers();
|
|
|
|
|
2017-07-21 12:00:24 +00:00
|
|
|
// Sprite Bank
|
|
|
|
LoadedSpriteBank *loadBankForAnim(int ID);
|
|
|
|
|
2017-07-19 22:41:13 +00:00
|
|
|
// ZBuffer
|
|
|
|
bool setZBuffer(int y);
|
|
|
|
void killZBuffer();
|
|
|
|
void drawZBuffer(int x, int y, bool upsidedown);
|
|
|
|
void saveZBuffer(Common::WriteStream *stream);
|
|
|
|
bool loadZBuffer(Common::SeekableReadStream *stream);
|
|
|
|
|
|
|
|
// Colors
|
|
|
|
void setBlankColor(int r, int g, int b) { _currentBlankColour = _renderSurface.format.RGBToColor(r & 255, g & 255, b & 255);};
|
|
|
|
void setBurnColor(int r, int g, int b) {
|
|
|
|
_currentBurnG = r;
|
|
|
|
_currentBurnG = g;
|
|
|
|
_currentBurnB = b;
|
|
|
|
}
|
|
|
|
void saveColors(Common::WriteStream *stream);
|
|
|
|
void loadColors(Common::SeekableReadStream *stream);
|
|
|
|
|
2017-08-08 11:36:30 +00:00
|
|
|
// Thumb nail
|
|
|
|
bool saveThumbnail(Common::WriteStream *stream);
|
|
|
|
bool skipThumbnail(Common::SeekableReadStream *stream);
|
|
|
|
void showThumbnail(const Common::String &filename, int x, int y);
|
|
|
|
|
2017-07-19 22:41:13 +00:00
|
|
|
private:
|
|
|
|
SludgeEngine *_vm;
|
|
|
|
|
|
|
|
uint _winWidth, _winHeight, _sceneWidth, _sceneHeight;
|
|
|
|
|
|
|
|
// renderSurface
|
|
|
|
Graphics::Surface _renderSurface;
|
|
|
|
|
|
|
|
// Snapshot
|
|
|
|
Graphics::Surface _snapshotSurface;
|
|
|
|
|
|
|
|
// LightMap
|
|
|
|
int _lightMapNumber;
|
|
|
|
Graphics::Surface _lightMap;
|
|
|
|
byte _curLight[3];
|
|
|
|
|
|
|
|
// Parallax
|
|
|
|
Parallax *_parallaxStuff;
|
|
|
|
|
|
|
|
// Camera
|
|
|
|
float _cameraZoom;
|
|
|
|
int _cameraX, _cameraY;
|
|
|
|
|
|
|
|
// Freeze
|
|
|
|
FrozenStuffStruct *_frozenStuff;
|
|
|
|
Graphics::Surface _freezeSurface;
|
|
|
|
void freezeGraphics();
|
|
|
|
|
|
|
|
// Back drop
|
|
|
|
Graphics::Surface _backdropSurface;
|
|
|
|
Graphics::Surface _origBackdropSurface;
|
|
|
|
bool _backdropExists;
|
|
|
|
bool reserveBackdrop();
|
|
|
|
|
|
|
|
// Sprites
|
|
|
|
SpriteLayers *_spriteLayers;
|
|
|
|
void fontSprite(bool flip, int x, int y, Sprite &single, const SpritePalette &fontPal);
|
2017-07-20 08:39:24 +00:00
|
|
|
uint32 getDrawColor(OnScreenPerson *thisPerson);
|
2017-07-19 22:41:13 +00:00
|
|
|
|
2017-07-21 12:00:24 +00:00
|
|
|
// Sprite banks
|
|
|
|
LoadedSpriteBanks _allLoadedBanks;
|
|
|
|
|
2017-07-19 22:41:13 +00:00
|
|
|
// ZBuffer
|
|
|
|
ZBufferData *_zBuffer;
|
|
|
|
void sortZPal(int *oldpal, int *newpal, int size);
|
|
|
|
|
|
|
|
// Colors
|
|
|
|
uint _currentBlankColour;
|
|
|
|
byte _currentBurnR, _currentBurnG, _currentBurnB;
|
2017-07-19 11:37:54 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
} // End of namespace Sludge
|
|
|
|
|
|
|
|
|
|
|
|
#endif // SLUDGE_GRAPHICS_H
|