2003-09-29 22:27:08 +00:00
/* ScummVM - Scumm Interpreter
* Copyright ( C ) 2003 The ScummVM project
*
* 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 . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
*
* $ Header $
*
*/
# ifndef QUEENGRAPHICS_H
# define QUEENGRAPHICS_H
# include "queen/queen.h"
2003-10-07 09:04:25 +00:00
# include "queen/defs.h"
2003-10-04 11:39:53 +00:00
# include "queen/structs.h"
2003-09-29 22:27:08 +00:00
2003-10-03 19:47:41 +00:00
namespace Queen {
2003-09-29 22:27:08 +00:00
2003-10-07 09:04:25 +00:00
2003-09-29 22:27:08 +00:00
# define MAX_BANK_SIZE 110
# define MAX_FRAMES_NUMBER 256
# define MAX_BANKS_NUMBER 18
2003-10-01 20:23:29 +00:00
# define MAX_BOBS_NUMBER 64
2003-09-29 22:27:08 +00:00
2003-10-02 07:54:01 +00:00
2003-09-29 22:27:08 +00:00
2003-10-01 20:23:29 +00:00
struct BobFrame {
uint16 width , height ;
uint16 xhotspot , yhotspot ;
uint8 * data ;
} ;
struct BobSlot {
2003-10-07 09:04:25 +00:00
bool active ;
//! current position
uint16 x , y ;
//! bounding box
Box box ;
2003-10-02 07:54:01 +00:00
bool xflip ;
2003-10-07 09:04:25 +00:00
//! shrinking percentage
uint16 scale ;
//! associated BobFrame
uint16 frameNum ;
//! 'direction' for the next frame (-1, 1)
uint8 frameDir ;
2003-10-01 20:23:29 +00:00
//! animation stuff
bool animating ;
struct {
uint16 speed , speedBak ;
//! string based animation
struct {
2003-10-13 14:21:17 +00:00
uint16 * buffer ;
uint16 * curPos ;
2003-10-01 20:23:29 +00:00
} string ;
//! normal moving animation
struct {
bool rebound ;
uint16 firstFrame , lastFrame ;
} normal ;
} anim ;
bool moving ;
2003-10-07 09:04:25 +00:00
//! moving speed
uint16 speed ;
//! move along x axis instead of y
bool xmajor ;
//! moving direction
int8 xdir , ydir ;
//! destination point
uint16 endx , endy ;
2003-10-01 20:23:29 +00:00
uint16 dx , dy ;
uint16 total ;
void moveOneStep ( ) ;
void animOneStep ( ) ;
} ;
2003-10-07 14:05:56 +00:00
struct TextSlot {
uint16 x ;
uint8 color ;
2003-10-10 20:03:34 +00:00
Common : : String text ;
2003-10-07 14:05:56 +00:00
bool outlined ;
} ;
2003-10-13 16:49:53 +00:00
struct Dynalum {
uint8 msk [ 50 * 160 ] ; // mask
int8 lum [ 8 * 3 ] ; // rgb
int8 oldColMask ;
Dynalum ( ) : oldColMask ( - 1 ) { }
} ;
2003-10-07 09:04:25 +00:00
//class Display;
2003-10-05 16:07:07 +00:00
class Graphics {
2003-09-29 22:27:08 +00:00
public :
2003-10-05 16:07:07 +00:00
Graphics ( Resource * resource ) ;
~ Graphics ( ) ;
2003-09-29 22:27:08 +00:00
2003-10-01 20:23:29 +00:00
void bankLoad ( const char * bankname , uint32 bankslot ) ; // loadbank()
void bankUnpack ( uint32 srcframe , uint32 dstframe , uint32 bankslot ) ; // unpackbank()
void bankOverpack ( uint32 srcframe , uint32 dstframe , uint32 bankslot ) ; // overpackbank()
void bankErase ( uint32 bankslot ) ; // erase()
2003-10-09 09:09:40 +00:00
void bobSetupControl ( ) ;
2003-10-13 14:21:17 +00:00
void bobAnimString ( uint32 bobnum , uint16 * animBuf ) ; // stringanim()
2003-10-01 20:23:29 +00:00
void bobAnimNormal ( uint32 bobnum , uint16 firstFrame , uint16 lastFrame , uint16 speed , bool rebound , bool xflip ) ; // makeanim()
void bobMove ( uint32 bobnum , uint16 endx , uint16 endy , int16 speed ) ; // movebob()
void bobDraw ( uint32 bobnum , uint16 x , uint16 y , uint16 scale , bool xflip , const Box & box ) ; // bob()
void bobDrawInventoryItem ( uint32 bobnum , uint16 x , uint16 y ) ; // invbob()
void bobPaste ( uint32 bobnum , uint16 x , uint16 y ) ; // bobpaste()
void bobShrink ( const BobFrame * pbf , uint16 percentage ) ; // shrinkbob()
void bobClear ( uint32 bobnum ) ; // clearbob()
void bobSortAll ( ) ; // sortbobs()
void bobDrawAll ( ) ; // drawbobs()
void bobClearAll ( ) ; // clearallbobs()
2003-10-02 19:31:43 +00:00
BobSlot * bob ( int index ) ;
2003-10-07 14:05:56 +00:00
void textCurrentColor ( uint8 color ) ; // ink()
void textSet ( uint16 x , uint16 y , const char * text , bool outlined = true ) ; // text()
void textDrawAll ( ) ; // drawtext()
void textClear ( uint16 y1 , uint16 y2 ) ; // blanktexts()
2003-10-10 20:03:34 +00:00
uint16 textWidth ( const char * text ) const ; // textlen()
2003-10-07 14:05:56 +00:00
2003-10-01 20:23:29 +00:00
void frameErase ( uint32 fslot ) ;
2003-10-07 09:04:25 +00:00
void frameEraseAll ( bool joe ) ; // freeframes, freeallframes
2003-10-09 09:09:40 +00:00
void backdropLoad ( const char * name , uint16 room ) ; // loadbackdrop
void backdropDraw ( ) ;
2003-10-07 14:05:56 +00:00
void panelLoad ( ) ; // loadpanel
2003-10-09 09:09:40 +00:00
void panelDraw ( ) ;
2003-10-10 20:03:34 +00:00
void panelClear ( ) ;
2003-10-09 09:09:40 +00:00
void boxDraw ( const Box & b , uint8 color ) ;
2003-10-07 09:04:25 +00:00
void useJournal ( ) ;
void journalBobSetup ( uint32 bobnum , uint16 x , uint16 y , uint16 frame ) ;
void journalBobPreDraw ( ) ;
2003-10-07 14:05:56 +00:00
void update ( ) ;
2003-10-09 09:09:40 +00:00
2003-10-07 14:05:56 +00:00
void displayText ( const TextSlot * pts , uint16 y ) ; // FIXME: move to Display class
2003-10-09 09:09:40 +00:00
void displayChar ( uint16 x , uint16 y , uint8 color , const uint8 * chr ) ; // FIXME: move to Display class
2003-10-07 14:05:56 +00:00
static void displayBlit ( uint8 * dst_buf , uint16 dst_x , uint16 dst_y , uint16 dst_pitch , const uint8 * src_buf , uint16 src_w , uint16 src_h , uint16 src_pitch , bool xflip , bool masked ) ; // FIXME: move to Display class
2003-10-09 09:09:40 +00:00
void displayScreen ( ) ;
2003-10-01 20:23:29 +00:00
2003-10-11 10:09:23 +00:00
void setScreenMode ( int comPanel , bool inCutaway ) ;
2003-10-13 16:49:53 +00:00
void setRoomPal ( const uint8 * pal , int start , int end ) ;
void dynalumInit ( const char * roomPrefix , uint16 room ) ;
void dynalumUpdate ( uint16 x , uint16 y ) ; // dynalum()
2003-10-11 10:09:23 +00:00
2003-09-29 22:27:08 +00:00
private :
2003-10-07 09:04:25 +00:00
enum {
BACKDROP_W = 640 ,
BACKDROP_H = 200 ,
2003-10-09 09:09:40 +00:00
SCREEN_W = 320 ,
SCREEN_H = 200 ,
2003-10-07 09:04:25 +00:00
PANEL_W = 320 ,
PANEL_H = 50 ,
BOB_SHRINK_BUF_SIZE = 60000
} ;
2003-09-29 22:27:08 +00:00
struct PackedBank {
uint32 indexes [ MAX_BANK_SIZE ] ;
uint8 * data ;
} ;
2003-10-10 09:24:21 +00:00
2003-10-07 14:05:56 +00:00
//! unbanked bob frames
BobFrame _frames [ MAX_FRAMES_NUMBER ] ;
//! banked bob frames
PackedBank _banks [ MAX_BANKS_NUMBER ] ;
2003-10-01 20:23:29 +00:00
BobSlot _bobs [ MAX_BOBS_NUMBER ] ;
2003-10-07 14:05:56 +00:00
//! bobs to display
BobSlot * _sortedBobs [ MAX_BOBS_NUMBER ] ;
2003-10-13 16:49:53 +00:00
//! number of bobs to display
2003-10-07 09:04:25 +00:00
uint16 _sortedBobsCount ;
2003-10-07 14:05:56 +00:00
//! used to scale a BobFrame
BobFrame _shrinkBuffer ;
TextSlot _texts [ GAME_SCREEN_HEIGHT ] ;
uint8 _curTextColor ;
2003-10-07 09:04:25 +00:00
uint16 _cameraBob ; // cambob
2003-10-07 14:05:56 +00:00
//! current room dimensions
uint16 _backdropWidth , _backdropHeight ; // BDxres, BDyres
//! current room bitmap
uint8 * _backdrop ;
2003-10-09 09:09:40 +00:00
uint8 * _screen ;
bool _fullscreen ;
2003-10-11 10:09:23 +00:00
bool _panelFlag ;
2003-10-09 09:09:40 +00:00
uint16 _horizontalScroll ;
2003-10-13 16:49:53 +00:00
uint8 * _paletteRoom ; // palette
uint8 * _paletteScreen ; // tpal
2003-10-09 09:09:40 +00:00
2003-10-07 14:05:56 +00:00
//! panel storage area
uint8 * _panel ;
2003-09-29 22:27:08 +00:00
2003-10-05 16:07:07 +00:00
Resource * _resource ;
2003-10-07 09:04:25 +00:00
// Display *_display;
2003-10-13 16:49:53 +00:00
Dynalum _dynalum ;
2003-10-07 14:05:56 +00:00
//! font used to render the text
static const uint8 FONT [ ] ; // FIXME: move to Display class
//! font justification values
static const uint8 FONT_SIZES [ ] ; // FIXME: move to Display class
2003-10-07 09:04:25 +00:00
void readPCX ( const uint8 * src , uint8 * dst , uint16 dstPitch , uint16 w , uint16 h ) ;
2003-09-29 22:27:08 +00:00
} ;
2003-10-03 19:47:41 +00:00
} // End of namespace Queen
2003-09-29 23:03:54 +00:00
2003-10-03 19:47:41 +00:00
# endif