ScummVM API documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
scumm_v8.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef SCUMM_SCRIPT_V8_H
23 #define SCUMM_SCRIPT_V8_H
24 
25 #ifdef ENABLE_SCUMM_7_8
26 
27 #include "scumm/scumm_v7.h"
28 
29 namespace Scumm {
30 
31 class ScummEngine_v8 : public ScummEngine_v7 {
32 protected:
33  enum SubOpType {
34  SO_INT_ARRAY = 10, // SO_ARRAY_SCUMMVAR
35  SO_STRING_ARRAY = 11, // SO_ARRAY_STRING
36  SO_UNDIM_ARRAY = 12, // SO_ARRAY_UNDIM
37 
38  SO_ASSIGN_STRING = 20,
39  SO_ASSIGN_INT_LIST = 21, // SO_ASSIGN_SCUMMVAR_LIST
40  SO_ASSIGN_2DIM_LIST = 22,
41 
42  SO_WAIT_FOR_ACTOR = 30,
43  SO_WAIT_FOR_MESSAGE = 31,
44  SO_WAIT_FOR_CAMERA = 32,
45  SO_WAIT_FOR_SENTENCE = 33,
46  SO_WAIT_FOR_ANIMATION = 34,
47  SO_WAIT_FOR_TURN = 35,
48 
49  SO_RESTART = 40, // SO_SYSTEM_RESTART
50  SO_QUIT = 41, // SO_SYSTEM_QUIT
51 
52  SO_CAMERA_PAUSE = 50,
53  SO_CAMERA_RESUME = 51,
54 
55  SO_HEAP_LOAD_CHARSET = 60,
56  SO_HEAP_LOAD_COSTUME = 61,
57  SO_HEAP_LOAD_OBJECT = 62,
58  SO_HEAP_LOAD_ROOM = 63,
59  SO_HEAP_LOAD_SCRIPT = 64,
60  SO_HEAP_LOAD_SOUND = 65,
61  SO_HEAP_LOCK_COSTUME = 66,
62  SO_HEAP_LOCK_ROOM = 67,
63  SO_HEAP_LOCK_SCRIPT = 68,
64  SO_HEAP_LOCK_SOUND = 69,
65  SO_HEAP_UNLOCK_COSTUME = 70,
66  SO_HEAP_UNLOCK_ROOM = 71,
67  SO_HEAP_UNLOCK_SCRIPT = 72,
68  SO_HEAP_UNLOCK_SOUND = 73,
69  SO_HEAP_NUKE_COSTUME = 74,
70  SO_HEAP_NUKE_ROOM = 75,
71  SO_HEAP_NUKE_SCRIPT = 76,
72  SO_HEAP_NUKE_SOUND = 77,
73 
74  SO_ROOM_PALETTE = 82,
75 
76  SO_ROOM_FADE = 87,
77  SO_ROOM_RGB_INTENSITY = 88,
78  SO_ROOM_TRANSFORM = 89,
79 
80  SO_ROOM_NEW_PALETTE = 92,
81  SO_ROOM_SAVE_GAME = 93,
82  SO_ROOM_LOAD_GAME = 94,
83  SO_ROOM_SATURATION = 95,
84 
85  SO_COSTUME = 100,
86  SO_STEP_DIST = 101,
87 
88  SO_ANIMATION_DEFAULT = 103, // SO_ACTOR_ANIMATION_DEFAULT
89  SO_INIT_ANIMATION = 104, // SO_ACTOR_ANIMATION_INIT
90  SO_TALK_ANIMATION = 105, // SO_ACTOR_ANIMATION_TALK
91  SO_WALK_ANIMATION = 106, // SO_ACTOR_ANIMATION_WALK
92  SO_STAND_ANIMATION = 107, // SO_ACTOR_ANIMATION_STAND
93  SO_ANIMATION_SPEED = 108, // SO_ACTOR_ANIMATION_SPEED
94  SO_DEFAULT = 109, // SO_ACTOR_DEFAULT
95  SO_ELEVATION = 110, // SO_ACTOR_ELEVATION
96  SO_PALETTE = 111, // SO_ACTOR_PALETTE
97  SO_TALK_COLOR = 112, // SO_ACTOR_TALK_COLOR
98  SO_ACTOR_NAME = 113,
99  SO_ACTOR_WIDTH = 114,
100  SO_SCALE = 115, // SO_ACTOR_SCALE
101  SO_NEVER_ZCLIP = 116, // SO_ACTOR_NEVER_ZCLIP
102  SO_ALWAYS_ZCLIP = 117, // SO_ACTOR_ALWAYS_ZCLIP
103  SO_IGNORE_BOXES = 118, // SO_ACTOR_IGNORE_BOXES
104  SO_FOLLOW_BOXES = 119, // SO_ACTOR_FOLLOW_BOXES
105  SO_SHADOW = 120, // SO_ACTOR_SPECIAL_DRAW
106  SO_TEXT_OFFSET = 121, // SO_ACTOR_TEXT_OFFSET
107  SO_ACTOR_INIT = 122,
108  SO_ACTOR_VARIABLE = 123,
109  SO_ACTOR_IGNORE_TURNS_ON = 124,
110  SO_ACTOR_IGNORE_TURNS_OFF = 125,
111  SO_NEW = 126, // SO_ACTOR_NEW
112  SO_ACTOR_DEPTH = 127,
113  SO_ACTOR_STOP = 128,
114  SO_ACTOR_FACE = 129,
115  SO_ACTOR_TURN = 130,
116  SO_ACTOR_WALK_SCRIPT = 131,
117  SO_ACTOR_TALK_SCRIPT = 132,
118  SO_ACTOR_WALK_PAUSE = 133,
119  SO_ACTOR_WALK_RESUME = 134,
120  SO_ACTOR_VOLUME = 135,
121  SO_ACTOR_FREQUENCY = 136,
122  SO_ACTOR_PAN = 137,
123 
124  SO_VERB_INIT = 150,
125  SO_VERB_NEW = 151,
126  SO_VERB_DELETE = 152,
127  SO_VERB_NAME = 153,
128  SO_VERB_AT = 154,
129  SO_VERB_ON = 155,
130  SO_VERB_OFF = 156,
131  SO_VERB_COLOR = 157,
132  SO_VERB_HICOLOR = 158,
133 
134  SO_VERB_DIMCOLOR = 160,
135  SO_VERB_DIM = 161,
136  SO_VERB_KEY = 162,
137  SO_VERB_IMAGE = 163,
138  SO_VERB_NAME_STR = 164,
139  SO_VERB_CENTER = 165,
140  SO_VERB_CHARSET = 166,
141  SO_VERB_LINE_SPACING = 167,
142 
143  SO_SAVE_VERBS = 180, // SO_VERBS_SAVE
144  SO_RESTORE_VERBS = 181, // SO_VERBS_RESTORE
145  SO_DELETE_VERBS = 182, // SO_VERBS_DELETE
146 
147  SO_BASEOP = 200, // SO_PRINT_BASEOP
148  SO_END = 201, // SO_PRINT_END
149  SO_AT = 202, // SO_PRINT_AT
150  SO_COLOR = 203, // SO_PRINT_COLOR
151  SO_CENTER = 204, // SO_PRINT_CENTER
152  SO_PRINT_CHARSET = 205,
153  SO_LEFT = 206, // SO_PRINT_LEFT
154  SO_OVERHEAD = 207, // SO_PRINT_OVERHEAD
155  SO_MUMBLE = 208, // SO_PRINT_MUMBLE
156  SO_PRINT_STRING = 209,
157  SO_PRINT_WRAP = 210,
158 
159  SO_CURSOR_ON = 220,
160  SO_CURSOR_OFF = 221,
161  SO_CURSOR_SOFT_ON = 222,
162  SO_CURSOR_SOFT_OFF = 223,
163  SO_USERPUT_ON = 224,
164  SO_USERPUT_OFF = 225,
165  SO_USERPUT_SOFT_ON = 226,
166  SO_USERPUT_SOFT_OFF = 227,
167  SO_CURSOR_IMAGE = 228,
168  SO_CURSOR_HOTSPOT = 229,
169  SO_CURSOR_TRANSPARENT = 230,
170  SO_CHARSET_SET = 231,
171  SO_CHARSET_COLOR = 232,
172  SO_CURSOR_PUT = 233,
173  };
174 
175  struct ObjectNameId {
176  char name[40];
177  int id;
178  };
179  int _objectIDMapSize = 0;
180  ObjectNameId *_objectIDMap = nullptr;
181 
182  struct StampShot {
183  int slot;
184  int boxX;
185  int boxY;
186  int boxWidth;
187  int boxHeight;
188  int brightness;
189  };
190 
191  int _savegameThumbnailV8Palette[256] = {};
192  byte _savegameThumbnailV8[160 * 120] = {}; // One fourth of the nominal 640x480 resolution
193  StampShot _stampShots[20] = {};
194  int _stampShotsInQueue = 0;
195 
196  int _keyScriptKey = 0, _keyScriptNo = 0;
197 
198 public:
199  ScummEngine_v8(OSystem *syst, const DetectorResult &dr);
200  ~ScummEngine_v8() override;
201 
202  void setKeyScriptVars(int _keyScriptKey, int _keyScriptNo);
203  void stampShotDequeue();
204 
205 protected:
206  void setupOpcodes() override;
207 
208  void printString(int m, const byte *msg) override;
209 
210  void scummLoop_handleSaveLoad() override;
211 
212  void setupScummVars() override;
213  void resetScummVars() override;
214  void decodeParseString(int m, int n) override;
215  void readArrayFromIndexFile() override;
216 
217  void readMAXS(int blockSize) override;
218  void readGlobalObjects() override;
219 
220  uint fetchScriptWord() override;
221  int fetchScriptWordSigned() override;
222 
223  int readVar(uint var) override;
224  void writeVar(uint var, int value) override;
225 
226  int getObjectIdFromOBIM(const byte *obim) override;
227 
228  void processKeyboard(Common::KeyState lastKeyHit) override;
229  void setDefaultCursor() override;
230  void desaturatePalette(int hueScale, int satScale, int lightScale, int startColor, int endColor);
231 
232  void stampShotEnqueue(int slot, int boxX, int boxY, int boxWidth, int boxHeight, int brightness);
233  void stampScreenShot(int slot, int boxX, int boxY, int boxWidth, int boxHeight, int brightness);
234  void saveLoadWithSerializer(Common::Serializer &s) override;
235  void createInternalSaveStateThumbnail();
236  bool fetchInternalSaveStateThumbnail(int slotId, bool isHeapSave);
237  uint32 *fetchScummVMSaveStateThumbnail(int slotId, bool isHeapSave, int brightness);
238 
239  const char *getGUIString(int stringId) override;
240 
241  /* Version 8 script opcodes */
242  void o8_mod();
243  void o8_wait();
244 
245  void o8_dimArray();
246  void o8_dim2dimArray();
247  void o8_arrayOps();
248  void o8_blastText();
249 
250  void o8_cursorCommand();
251  void o8_resourceRoutines();
252  void o8_roomOps();
253  void o8_actorOps();
254  void o8_cameraOps();
255  void o8_verbOps();
256 
257  void o8_systemOps();
258  void o8_startVideo();
259  void o8_kernelSetFunctions();
260  void o8_kernelGetFunctions();
261 
262  void o8_getActorChore();
263  void o8_getActorZPlane();
264 
265  void o8_drawObject();
266  void o8_getObjectImageX();
267  void o8_getObjectImageY();
268  void o8_getObjectImageWidth();
269  void o8_getObjectImageHeight();
270 
271  void o8_getStringWidth();
272 
273  byte VAR_LANGUAGE;
274 };
275 
276 } // End of namespace Scumm
277 
278 #endif // ENABLE_SCUMM_7_8
279 
280 #endif
Definition: serializer.h:79
Definition: keyboard.h:294
Definition: system.h:161
Definition: actor.h:30