1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
/* ScummVM - Scumm Interpreter
* Copyright (C) 2001 Ludvig Strigeus
* Copyright (C) 2001-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 BASE_COSTUME_H
#define BASE_COSTUME_H
class Scumm;
struct BaseCostumeRenderer {
public:
byte _dirty_id;
byte _shadow_mode;
byte *_shadow_table;
int _actorX, _actorY;
byte _zbuf;
byte _scaleX, _scaleY;
int _draw_top, _draw_bottom;
protected:
Scumm *_vm;
int32 _numStrips;
// current move offset
int _xmove, _ymove;
// whether to draw the actor mirrored
bool _mirror;
// width and height of cel to decode
int _width, _height;
public:
BaseCostumeRenderer(Scumm *scumm) {
_dirty_id = 0;
_shadow_mode = 0;
_shadow_table = 0;
_actorX = _actorY = 0;
_zbuf = 0;
_scaleX = _scaleY = 0;
_draw_top = _draw_bottom = 0;
_vm = scumm;
_numStrips = _vm->gdi._numStrips;
_xmove = _ymove = 0;
_mirror = false;
_width = _height = 0;
}
virtual void setPalette(byte *palette) = 0;
virtual void setFacing(Actor *a) = 0;
virtual void setCostume(int costume) = 0;
byte drawCostume(const CostumeData &cost) {
int i;
byte result = 0;
if (_vm->_features & GF_OLD_BUNDLE) {
_xmove = -72;
_ymove = -100;
} else {
_xmove = _ymove = 0;
}
for (i = 0; i < 16; i++)
result |= drawLimb(cost, i);
return result;
}
protected:
virtual byte drawLimb(const CostumeData &cost, int limb) = 0;
};
#endif
|