scummvm/engines/cge/vga13h.h
Tomasz Długosz eaab877d66 JANITORIAL: fix the name of original author of cge and cge2
The first name is Janusz, not Janus.
The correct name was used in AUTHORS and credits.
In case of doubts, see his personal webpage: https://www.jbw.pl/ - name is in the page footer
2020-04-18 20:59:57 +02:00

245 lines
5.3 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.
*
*/
/*
* This code is based on original Soltys source code
* Copyright (c) 1994-1995 Janusz B. Wisniewski and L.K. Avalon
*/
#ifndef CGE_VGA13H_H
#define CGE_VGA13H_H
#include "common/serializer.h"
#include "common/events.h"
#include "graphics/surface.h"
#include "cge/general.h"
#include "cge/bitmap.h"
#include "cge/snail.h"
#include "cge/cge.h"
namespace CGE {
#define kFadeStep 2
#define kVgaColDark 207
#define kVgaColDarkGray 225 /*219*/
#define kVgaColGray 231
#define kVgaColLightGray 237
#define kPixelTransp 0xFE
#define kNoSeq (-1)
#define kNoPtr ((uint8)-1)
#define kSprExt ".SPR"
#define kPalCount 256
#define kPalSize (kPalCount * 3)
struct Seq {
uint8 _now;
uint8 _next;
int8 _dx;
int8 _dy;
int _dly;
};
class SprExt {
public:
int _x0;
int _y0;
int _x1;
int _y1;
BitmapPtr _b0;
BitmapPtr _b1;
BitmapPtr *_shpList;
Seq *_seq;
char *_name;
CommandHandler::Command *_near;
CommandHandler::Command *_take;
SprExt() :
_x0(0), _y0(0),
_x1(0), _y1(0),
_b0(NULL), _b1(NULL),
_shpList(NULL), _seq(NULL),
_name(NULL), _near(NULL), _take(NULL)
{}
};
class Sprite {
protected:
SprExt *_ext;
public:
int _ref;
signed char _scene;
struct Flags {
bool _hide; // general visibility switch
bool _near; // Near action lock
bool _drag; // sprite is moveable
bool _hold; // sprite is held with mouse
bool _dummy; // interrupt driven animation
bool _slav; // slave object
bool _syst; // system object
bool _kill; // dispose memory after remove
bool _xlat; // 2nd way display: xlat table
bool _port; // portable
bool _kept; // kept in pocket
bool _east; // talk to east (in opposite to west)
bool _shad; // shadow
bool _back; // 'send to background' request
bool _bDel; // delete bitmaps in ~SPRITE
bool _tran; // transparent (untouchable)
} _flags;
int _x;
int _y;
signed char _z;
uint16 _w;
uint16 _h;
uint16 _time;
uint8 _nearPtr;
uint8 _takePtr;
int _seqPtr;
int _shpCnt;
char _file[kMaxFile];
Sprite *_prev;
Sprite *_next;
bool works(Sprite *spr);
bool seqTest(int n);
inline bool active() {
return _ext != NULL;
}
Sprite(CGEEngine *vm, BitmapPtr *shp);
virtual ~Sprite();
BitmapPtr shp();
BitmapPtr *setShapeList(BitmapPtr *shp);
Sprite *expand();
Sprite *contract();
Sprite *backShow(bool fast = false);
void setName(char *newName);
inline char *name() {
return (_ext) ? _ext->_name : NULL;
}
void gotoxy(int x, int y);
void center();
void show();
void hide();
BitmapPtr ghost();
void show(uint16 pg);
void makeXlat(uint8 *x);
void killXlat();
void step(int nr = -1);
Seq *setSeq(Seq *seq);
CommandHandler::Command *snList(SnList type);
virtual void touch(uint16 mask, int x, int y, Common::KeyCode keyCode);
virtual void tick();
void sync(Common::Serializer &s);
private:
CGEEngine *_vm;
};
class Queue {
Sprite *_head;
Sprite *_tail;
public:
Queue(bool show);
~Queue();
bool _show;
void append(Sprite *spr);
void insert(Sprite *spr, Sprite *nxt);
void insert(Sprite *spr);
Sprite *remove(Sprite *spr);
Sprite *first() {
return _head;
}
Sprite *last() {
return _tail;
}
Sprite *locate(int ref);
void clear();
};
class Vga {
CGEEngine *_vm;
bool _setPal;
Dac *_oldColors;
Dac *_newColors;
const char *_msg;
const char *_name;
void updateColors();
void setColors();
void waitVR();
uint8 closest(Dac *pal, const uint8 colR, const uint8 colG, const uint8 colB);
public:
uint32 _frmCnt;
Queue *_showQ;
Queue *_spareQ;
int _mono;
Graphics::Surface *_page[4];
Dac *_sysPal;
Vga(CGEEngine *vm);
~Vga();
uint8 *glass(Dac *pal, const uint8 colR, const uint8 colG, const uint8 colB);
void getColors(Dac *tab);
void setColors(Dac *tab, int lum);
void clear(uint8 color);
void copyPage(uint16 d, uint16 s);
void sunrise(Dac *tab);
void sunset();
void show();
void update();
void palToDac(const byte *palData, Dac *tab);
void dacToPal(const Dac *tab, byte *palData);
};
class HorizLine: public Sprite {
CGEEngine *_vm;
public:
HorizLine(CGEEngine *vm);
};
class SceneLight: public Sprite {
CGEEngine *_vm;
public:
SceneLight(CGEEngine *vm);
};
class Speaker: public Sprite {
CGEEngine *_vm;
public:
Speaker(CGEEngine *vm);
};
class PocLight: public Sprite {
CGEEngine *_vm;
public:
PocLight(CGEEngine *vm);
};
} // End of namespace CGE
#endif