ScummVM API documentation
drascula.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 DRASCULA_DRASCULA_H
23 #define DRASCULA_DRASCULA_H
24 
25 #include "common/scummsys.h"
26 #include "common/archive.h"
27 #include "common/endian.h"
28 #include "common/events.h"
29 #include "common/file.h"
30 #include "common/hash-str.h"
31 #include "common/keyboard.h"
32 #include "common/ptr.h"
33 #include "common/random.h"
34 #include "common/savefile.h"
35 #include "common/system.h"
36 #include "common/util.h"
37 #include "common/text-to-speech.h"
38 
39 #include "engines/savestate.h"
40 
41 #include "drascula/console.h"
42 #include "drascula/detection.h"
43 
44 #include "audio/mixer.h"
45 
46 #include "engines/engine.h"
47 
56 namespace Drascula {
57 
58 #define DRASCULA_DAT_VER 7
59 #define DATAALIGNMENT 4
60 
61 enum DRASCULAActions {
62  kActionNone,
63  kActionSkip,
64  kActionLook,
65  kActionPick,
66  kActionOpen,
67  kActionClose,
68  kActionTalk,
69  kActionMove,
70  kActionLoadGame,
71  kActionVerbReset,
72  kActionVolumeControls,
73  kActionSaveGame,
74  kActionSubtitlesEnable,
75  kActionSubtitlesDisable,
76  kActionQuit,
77  kActionEasterEgg,
78  kActionPauseSpeech,
79  kActionConfirmQuit,
80 };
81 
82 enum Languages {
83  kEnglish = 0,
84  kSpanish = 1,
85  kGerman = 2,
86  kFrench = 3,
87  kItalian = 4,
88  kRussian = 5
89 };
90 
91 enum Verbs {
92  kVerbDefault = -1,
93  kVerbNone = 0,
94  kVerbLook = 1,
95  kVerbPick = 2,
96  kVerbOpen = 3,
97  kVerbClose = 4,
98  kVerbTalk = 5,
99  kVerbMove = 6
100 };
101 
102 // Items up to chapter 3
103 enum InventoryItems {
104  kItemMoney = 7,
105  kItemLeaves = 8,
106  kItemCross = 9,
107  kItemSpike = 10,
108  kItemEarplugs = 11,
109  kItemBook = 12,
110  kItemBubbleGum = 13,
111  kItemSickle = 14,
112  kItemTissues = 15,
113  kItemCigarettes = 16,
114  kItemCandle = 17,
115  kItemTwoCoins = 18,
116  kItemOneCoin = 19,
117  kItemReefer = 20,
118  kItemKey = 21,
119  kItemHandbag = 22,
120  kItemEarWithEarPlug = 23,
121  kItemPhone = 28
122 };
123 
124 // Items from chapter 4 onwards
125 enum InventoryItems2 {
126  kItemKey2 = 7,
127  kItemCross2 = 9,
128  kItemRope2 = 19,
129  kItemReefer2 = 20,
130  kItemOneCoin2 = 22,
131  kItemPhone2 = 28
132 };
133 
134 enum Colors {
135  kColorBrown = 1,
136  kColorDarkBlue = 2,
137  kColorLightGreen = 3,
138  kColorDarkGreen = 4,
139  kColorYellow = 5,
140  kColorOrange = 6,
141  kColorRed = 7,
142  kColorMaroon = 8,
143  kColorPurple = 9,
144  kColorWhite = 10,
145  kColorPink = 11
146 };
147 
148 enum SSNFrames {
149  kFrameInit = 0,
150  kFrameCmpRle = 1,
151  kFrameCmpOff = 2,
152  kFrameEndAnim = 3,
153  kFrameSetPal = 4,
154  kFrameMouseKey = 5, // unused
155  kFrameEmptyFrame = 6
156 };
157 
158 enum IgorTalkerTypes {
159  kIgorDch = 0,
160  kIgorFront = 1,
161  kIgorDoor = 2,
162  kIgorSeated = 3,
163  kIgorWig = 4
164 };
165 
166 enum VonBraunTalkerTypes {
167  kVonBraunNormal = 0,
168  kVonBraunDoor = 1
169 };
170 
171 enum AnimFrameTypes {
172  kFrameBlind = 0,
173  kFrameSnore = 1,
174  kFrameBat = 2,
175  kFrameVonBraun = 3,
176  kFramePianist = 4,
177  kFrameDrunk = 5,
178  kFrameCandles = 6,
179  kFramePendulum = 7
180 };
181 
182 enum DialogOptionStatus {
183  kDialogOptionUnselected = 1,
184  kDialogOptionSelected = 2,
185  kDialogOptionClicked = 3
186 };
187 
188 enum TalkSequenceCommands {
189  kPause = 0,
190  kSetFlag = 1,
191  kClearFlag = 2,
192  kPickObject = 3,
193  kAddObject = 4,
194  kBreakOut = 5,
195  kConverse = 6,
196  kPlaceVB = 7,
197  kUpdateRoom = 8,
198  kUpdateScreen = 9,
199  kTrackProtagonist = 10,
200  kPlaySound = 11,
201  kFinishSound = 12,
202  kTalkerGeneral = 13,
203  kTalkerDrunk = 14,
204  kTalkerPianist = 15,
205  kTalkerBJ = 16,
206  kTalkerVBNormal = 17,
207  kTalkerVBDoor = 18,
208  kTalkerIgorSeated = 19,
209  kTalkerWerewolf = 20,
210  kTalkerMus = 21,
211  kTalkerDrascula = 22,
212  kTalkerBartender0 = 23,
213  kTalkerBartender1 = 24
214 };
215 
216 enum CharacterDirections {
217  kDirectionUp = 0,
218  kDirectionDown = 1,
219  kDirectionLeft = 2,
220  kDirectionRight = 3
221 };
222 
223 enum MouseCursors {
224  kCursorCrosshair = 0,
225  kCursorCurrentItem = 1
226 };
227 
228 enum DoorActions {
229  kCloseDoor = 0,
230  kOpenDoor = 1
231 };
232 
234  int chapter;
235  int sequence;
236  int commandType;
237  int action;
238 };
239 
240 #define TEXTD_START 68
241 
243 
245  int room;
246  int chapter;
247  int action;
248  int objectID;
249  int speechID;
250 };
251 
252 struct RoomUpdate {
253  int roomNum;
254  int flag;
255  int flagValue;
256  int sourceX;
257  int sourceY;
258  int destX;
259  int destY;
260  int width;
261  int height;
262  int type; // 0 - background, 1 - rect
263 };
264 
265 struct ItemLocation {
266  int x;
267  int y;
268 };
269 
270 struct CharInfo {
271  byte inChar;
272  uint16 mappedChar;
273  byte charType; // 0 - letters, 1 - signs, 2 - accented
274 };
275 
277 public:
278  ArchiveMan();
279 
280  void enableFallback(bool val) { _fallBack = val; }
281 
282  void registerArchive(const Common::Path &filename, int priority);
283 
284  Common::SeekableReadStream *open(const Common::Path &filename);
285 
286 private:
287  bool _fallBack;
288 };
289 
292  int _maxLen;
293 
294  void getLine(char *buf);
295 
296 public:
297  TextResourceParser(Common::SeekableReadStream *stream, DisposeAfterUse::Flag dispose);
298 
299  void parseInt(int &result);
300  void parseString(char *result);
301 };
302 
303 
304 #define NUM_SAVES 10
305 #define NUM_FLAGS 50
306 #define DIF_MASK 55
307 #define OBJWIDTH 40
308 #define OBJHEIGHT 25
309 
310 #define DIF_MASK_HARE 72
311 #define DIF_MASK_ABC 22
312 #define CHAR_WIDTH 8
313 #define CHAR_HEIGHT 6
314 
315 #define TALK_HEIGHT 25
316 #define TALK_WIDTH 23
317 #define STEP_X 8
318 #define STEP_Y 3
319 #define CHARACTER_HEIGHT 70
320 #define CHARACTER_WIDTH 43
321 #define FEET_HEIGHT 12
322 
323 #define CHAR_WIDTH_OPC 6
324 #define CHAR_HEIGHT_OPC 5
325 #define NO_DOOR 99
326 
327 #define COMPLETE_PAL 256
328 #define HALF_PAL 128
329 
330 #define KEYBUFSIZE 16
331 #define ACTIONBUFSIZE 16
332 
333 static const int interf_x[] = { 1, 65, 129, 193, 1, 65, 129 };
334 static const int interf_y[] = { 51, 51, 51, 51, 83, 83, 83 };
335 
336 struct RoomHandlers;
337 
338 class DrasculaEngine : public Engine {
339 protected:
340  // Engine APIs
341  Common::Error run() override;
342 
343 public:
344  DrasculaEngine(OSystem *syst, const DrasculaGameDescription *gameDesc);
345  ~DrasculaEngine() override;
346  bool hasFeature(EngineFeature f) const override;
347 
348  void syncSoundSettings() override;
349 
350  Common::Error loadGameState(int slot) override;
351  bool canLoadGameStateCurrently(Common::U32String *msg = nullptr) override;
352  Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave = false) override;
353  bool canSaveGameStateCurrently(Common::U32String *msg = nullptr) override;
354 
355  Common::RandomSource *_rnd;
356  const DrasculaGameDescription *_gameDescription;
357  uint32 getFeatures() const;
358  Common::Language getLanguage() const;
359  void updateEvents();
360 
361  void loadArchives();
362 
363  Audio::SoundHandle _soundHandle;
364 
365  void allocMemory();
366  void freeMemory();
367  void endChapter();
368 
369  void loadPic(int roomNum, byte *targetSurface, int colorCount = 1) {
370  char rm[20];
371  Common::sprintf_s(rm, "%i.alg", roomNum);
372  loadPic(rm, targetSurface, colorCount);
373  }
374 
375  void loadPic(const char *NamePcc, byte *targetSurface, int colorCount = 1);
376 
377  typedef signed char DacPalette256[256][3];
378 
379  void setRGB(byte *pal, int plt);
380  void assignPalette(DacPalette256 pal);
381  void setDefaultPalette(DacPalette256 pal);
382  void setPalette(byte *PalBuf);
383  void copyBackground(int xorg, int yorg, int xdes, int ydes, int width,
384  int height, byte *src, byte *dest);
385 
386  void copyBackground() {
387  copyBackground(0, 0, 0, 0, 320, 200, bgSurface, screenSurface);
388  }
389 
390  void copyRect(int xorg, int yorg, int xdes, int ydes, int width,
391  int height, byte *src, byte *dest);
392  void updateScreen() {
393  updateScreen(0, 0, 0, 0, 320, 200, screenSurface);
394  }
395  void updateScreen(int xorg, int yorg, int xdes, int ydes, int width, int height, byte *buffer);
396  int checkWrapX(int x) {
397  if (x < 0) x += 320;
398  if (x > 319) x -= 320;
399  return x;
400  }
401  int checkWrapY(int y) {
402  if (y < 0) y += 200;
403  if (y > 199) y -= 200;
404  return y;
405  }
406 
407  DacPalette256 gamePalette;
408  DacPalette256 defaultPalette;
409  DacPalette256 brightPalette;
410  DacPalette256 darkPalette;
411 
412  byte *crosshairCursor;
413  byte *mouseCursor;
414 
415  // Graphics buffers/pointers
416  byte *bgSurface;
417  byte *backSurface;
418  byte *cursorSurface;
419  byte *drawSurface3;
420  byte *drawSurface2;
421  byte *tableSurface;
422  byte *extraSurface; // not sure about this one, was "dir_hare_dch"
423  byte *screenSurface;
424  byte *frontSurface;
425 
426  byte cPal[768];
427 
428  ArchiveMan _archives;
429 
430  int actorFrames[8];
431 
432  int previousMusic, roomMusic;
433  int _roomNumber;
434  char roomDisk[20];
435  char currentData[20];
436  int numRoomObjs;
437  char menuBackground[20];
438 
439  char objName[30][20];
440  char iconName[44][13];
441 
442  int objectNum[40], visible[40], isDoor[40];
443  int trackObj[40];
444  Common::Point _roomObject[40];
445  int inventoryObjects[43];
446  int _doorDestRoom[40];
447  Common::Point _doorDestPoint[40];
448  int trackCharacter_alkeva[40], _roomExitId[40];
449  Common::Rect _objectRect[40];
450  int takeObject, pickedObject;
451  bool _subtitlesDisabled;
452  bool _menuBar, _menuScreen, _hasName;
453  char textName[20];
454  int curExcuseLook;
455  int curExcuseAction;
456 
457  int flags[NUM_FLAGS];
458 
459  int frame_y;
460  int curX, curY, curDirection, trackProtagonist, _characterFrame;
461  bool _characterMoved, _characterVisible;
462  int roomX, roomY, checkFlags;
463  int doBreak;
464  int stepX, stepY;
465  int curHeight, curWidth, feetHeight;
466  Common::Rect _walkRect;
467  int lowerLimit, upperLimit;
468  int trackFinal;
469  bool _walkToObject;
470  int objExit;
471  int _startTime;
472  int hasAnswer;
473  int savedTime;
474  int breakOut;
475  int vonBraunX, trackVonBraun, vonBraunHasMoved;
476  float newHeight, newWidth;
477  int factor_red[202];
478  int color_solo;
479  int blinking;
480  int igorX, igorY, trackIgor;
481  int drasculaX, drasculaY, trackDrascula;
482  int term_int;
483  int currentChapter;
484  bool _loadedDifferentChapter;
485  int _currentSaveSlot;
486  bool _canSaveLoad;
487  int _color;
488  int musicStopped;
489  int _mouseX, _mouseY, _leftMouseButton, _rightMouseButton;
490  bool _leftMouseButtonHeld;
491 
492  Common::KeyState _keyBuffer[KEYBUFSIZE];
493  int _keyBufferHead;
494  int _keyBufferTail;
495 
496  Common::CustomEventType _actionBuffer[ACTIONBUFSIZE];
497  int _actionBufferHead;
498  int _actionBufferTail;
499 
500  bool loadDrasculaDat();
501 
502  bool runCurrentChapter();
503  void black();
504  void pickObject(int);
505  void walkUp();
506  void walkDown();
507  void moveVonBraun();
508  void placeVonBraun(int pointX);
509  void hipo_sin_nadie(int counter);
510  void toggleDoor(int nflag, int doorNum, int action);
511  void showMap();
512 
513  void enterRoom(int);
514  void clearRoom();
515  void walkToPoint(Common::Point pos);
516  void moveCursor();
517  void checkObjects();
518  void selectVerbFromBar();
519  bool verify1();
520  bool verify2();
521  Common::KeyCode getScan();
522  void addKeyToBuffer(Common::KeyState& key);
523  void flushKeyBuffer();
524  Common::CustomEventType getAction();
525  void addActionToBuffer(Common::CustomEventType& action);
526  void flushActionBuffer();
527  void selectVerb(int);
528  int updateVolume(int prevVolume, int prevVolumeY);
529  void volumeControls();
530 
531  bool saveLoadScreen();
532  bool scummVMSaveLoadDialog(bool isSave);
533  Common::String enterName(Common::String &selectedName);
534  void loadSaveNames();
535  void saveGame(int slot, const Common::String &desc);
536  bool loadGame(int slot);
537  void checkForOldSaveGames();
538  void convertSaveGame(int slot, const Common::String &desc);
539 
540  void print_abc(const char *, int, int);
541  void delay(int ms);
542  bool confirmExit();
543  void screenSaver();
544  void chooseObject(int object);
545  void addObject(int);
546  int removeObject(int osj);
547  void playFLI(const char *filefli, int vel);
548  void fadeFromBlack(int fadeSpeed);
549  void fadeToBlack(int fadeSpeed);
550  signed char adjustToVGA(signed char value);
551  void color_abc(int cl);
552  bool textFitsCentered(char *text, int x);
553  void centerText(const char *,int,int);
554  void playSound(int soundNum);
555  bool animate(const char *animation, int FPS);
556  void pause(int);
557  void placeIgor();
558  void placeDrascula();
559 
560  void talkInit(const char *filename);
561  bool isTalkFinished();
562  void talk_igor(int, int);
563  void talk_drascula(int index, int talkerType = 0);
564  void talk_solo(const char *, const char *);
565  void talk_bartender(int, int talkerType = 0);
566  void talk_pen(const char *, const char *, int);
567  void talk_bj_bed(int);
568  void talk_htel(int);
569  void talk_bj(int);
570  void talk_trunk(int);
571  void talk(int);
572  void talk(const char *, const char *);
573  void talk_sync(const char *, const char *, const char *);
574  void talk_drunk(int);
575  void talk_pianist(int);
576  void talk_werewolf(int);
577  void talk_mus(int);
578  void talk_drascula_big(int);
579  void talk_vonBraun(int, int);
580  void talk_blind(int);
581  void talk_hacker(int);
582  void talk_generic(const char* said, const char* filename, int* faces, int faceCount, int* coords, byte* surface);
583 
584  void hiccup(int);
585  void finishSound();
586  void stopSound();
587  void playMusic(int p);
588  void stopMusic();
589  void updateMusic();
590  int musicStatus();
591  void updateRoom();
592  void updateDoor(int);
593  void setPaletteBase(int darkness);
594  void updateVisible();
595  void startWalking();
596  void updateRefresh();
597  void updateRefresh_pre();
598  void moveCharacters();
599  void showMenu();
600  void clearMenu();
601  void removeObject();
602  bool exitRoom(int);
603  bool pickupObject();
604  bool checkAction(int);
605  void setCursor(int cursor);
606  void showCursor();
607  void hideCursor();
608  bool isCursorVisible();
609  bool soundIsActive();
610  void waitFrameSSN();
611  void mixVideo(byte *OldScreen, byte *NewScreen, uint16 oldPitch);
612  void decodeRLE(byte *BufferRLE, byte *MiVideoRLE, uint16 pitch = 320);
613  void decodeOffset(byte *BufferOFF, byte *MiVideoOFF, int length);
614  int playFrameSSN(Common::SeekableReadStream *stream);
615 
616  int FrameSSN;
617  int globalSpeed;
618  uint32 LastFrame;
619 
620  int flag_tv;
621 
622  void showFrame(Common::SeekableReadStream *stream, bool firstFrame = false);
623  int getTime();
624  void reduce_hare_chico(int, int, int, int, int, int, int, byte *, byte *);
625  void quadrant_1();
626  void quadrant_2();
627  void quadrant_3();
628  void quadrant_4();
629  void increaseFrameNum();
630  int whichObject();
631  bool checkMenuFlags();
632  void setupRoomsTable();
633  void freeRoomsTable();
634  bool roomParse(int, int);
635  void cleanupString(char *string);
636  void playTalkSequence(int sequence);
637  void doTalkSequenceCommand(TalkSequenceCommand cmd);
638  void converse(int);
639  int print_abc_opc(const char *, int, int);
640  void response(int);
641  void activatePendulum();
642 
643  void MusicFadeout();
644  void playFile(const char *fname);
645 
646  void grr();
647  void updateAnim(int y, int destX, int destY, int width, int height, int count, byte* src, int delayVal = 3, bool copyRectangle = false);
648 
649  bool room(int rN, int fl);
650  bool room_0(int);
651  bool room_1(int);
652  bool room_2(int);
653  bool room_3(int);
654  bool room_4(int);
655  bool room_5(int);
656  bool room_6(int);
657  bool room_7(int);
658  bool room_8(int);
659  bool room_9(int);
660  bool room_12(int);
661  bool room_13(int);
662  bool room_14(int);
663  bool room_15(int);
664  bool room_16(int);
665  bool room_17(int);
666  bool room_18(int);
667  bool room_21(int);
668  bool room_22(int);
669  bool room_23(int);
670  bool room_24(int);
671  bool room_26(int);
672  bool room_27(int);
673  bool room_29(int);
674  bool room_30(int);
675  bool room_31(int);
676  bool room_34(int);
677  bool room_35(int);
678  bool room_49(int);
679  bool room_53(int);
680  bool room_54(int);
681  bool room_55(int);
682  bool room_56(int);
683  bool room_58(int);
684  bool room_59(int);
685  bool room_60(int);
686  bool room_62(int);
687  bool room_102(int);
688 
689  void asco();
690 
691  void animation_1_1(); // Game introduction
692  void animation_2_1(); // John falls in love with BJ, who is then abducted by Drascula
693  void animation_3_1(); // John talks with the bartender to book a room
694  void animation_4_1(); // John talks with the pianist
695  //
696  void animation_2_2(); // John enters the chapel via the window
697  void animation_4_2(); // John talks with the blind man (closeup)
698  void animation_5_2(); // John breaks the chapel window with the pike
699  void animation_6_2(); // The blind man (closeup) thanks John for giving him money and hands him the sickle
700  void animation_7_2(); // John uses the sickle
701  void animation_11_2(); // The drunk man says "they're all dead, thanks *hic*"
702  void animation_12_2(); // Conversation screen - John talks to the pianist after BJ is abducted by Drascula
703  void animation_13_2(); // ???
704  void animation_14_2(); // The glass box falls from the ceiling
705  void animation_16_2(); // The drunk tells us about Von Braun
706  void animation_20_2(); // Von Braun tells John that he needs to have special skills to fight vampires
707  void animation_23_2(); // Von Braun tests John's reactions to scratching noises
708  void animation_24_2(); // Conversation screen - John talks with Von Braun
709  void animation_25_2(); // The glass box is lifted back to the ceiling
710  void animation_26_2(); // John gives the book to the pianist and gets his earplugs in return
711  void animation_27_2(); // Von Braun admits that John is ready to fight vampires and gives him his money back
712  void animation_29_2(); // Von Braun tells John what ingredients he needs for the brew
713  void animation_31_2(); // Von Braun obtains the items needed for the brew from John and creates it
714  void animation_34_2(); // John kicks an object
715  void animation_35_2(); // John jumps into the well
716  void animation_36_2(); // John asks the bartender about the pianist
717  //
718  void animation_2_3(); // John uses the cross with the Frankenstein-zombie ("yoda") and destroys him
719  void animation_6_3(); // Frankenstein is blocking John's path
720  //
721  void animation_castle(); // Chapter 4 start - Drascula's castle exterior, lightning strikes
722  void animation_1_4(); // Conversation screen - John talks with Igor
723  void animation_5_4(); // John enters Igor's room dressed as Drascula
724  void animation_6_4(); // Igor says that he's going for supper
725  void animation_7_4(); // John removes Drascula's disguise
726  void animation_8_4(); // Secret passage behind bookcase is revealed
727  //
728  void animation_1_5(); // John finds BJ
729  void animation_5_5(); // ???
730  void animation_12_5(); // Frankenstein comes to life
731  void animation_12_5_frankenstein();
732  void animation_14_5(); // John finds out that an object is empty
733  //
734  void animation_1_6(); // ???
735  void animation_5_6(); // John is tied to the table. Drascula and Igor lower the pendulum
736  void animation_6_6(); // John uses the pendulum to break free
737  void animation_9_6(); // Game ending - John uses the cross on Drascula and reads BJ's letter
738  void animation_19_6(); // Someone pops up from behind a door when trying to open it
739 
740  void update_1_pre();
741  void update_2();
742  void update_3();
743  void update_4();
744  void update_6_pre();
745  void update_9_pre();
746  void update_14_pre();
747  void update_13();
748  void update_16_pre();
749  void update_18_pre();
750  void update_23_pre();
751  void update_26_pre();
752  void update_26();
753  void update_35_pre();
754  void update_58();
755  void update_58_pre();
756  void update_59_pre();
757  void update_60_pre();
758  void update_60();
759  void update_62();
760  void update_62_pre();
761  void update_102();
762 
763  void sayText(const Common::String &text, Common::TextToSpeechManager::Action action);
764 
765 private:
766  int _lang;
767 
768  CharInfo *_charMap;
769  int _charMapSize;
770 
771  int _itemLocationsSize;
772  int _polXSize;
773  int _verbBarXSize;
774  int _x1dMenuSize;
775  int _frameXSize;
776  int _candleXSize;
777  int _pianistXSize;
778  int _drunkXSize;
779  int _roomPreUpdatesSize;
780  int _roomUpdatesSize;
781  int _roomActionsSize;
782  int _talkSequencesSize;
783  int _numLangs;
784 
785  char **_text;
786  char **_textd;
787  char **_textb;
788  char **_textbj;
789  char **_texte;
790  char **_texti;
791  char **_textl;
792  char **_textp;
793  char **_textt;
794  char **_textvb;
795  char **_textsys;
796  char **_texthis;
797  char **_textverbs;
798  char **_textmisc;
799  char **_textd1;
800  ItemLocation *_itemLocations;
801  int *_polX, *_polY;
802  int *_verbBarX;
803  int *_x1d_menu, *_y1d_menu;
804  int *_frameX;
805  int *_candleX, *_candleY;
806  int *_pianistX, *_drunkX;
807  RoomUpdate *_roomPreUpdates, *_roomUpdates;
808  RoomTalkAction *_roomActions;
809  TalkSequenceCommand *_talkSequences;
810  Common::String _saveNames[10];
811  Common::String _previousSaid;
812  Common::CodePage _ttsTextEncoding;
813 
814  char **loadTexts(Common::File &in);
815  void freeTexts(char **ptr);
816 
817 protected:
818  RoomHandlers *_roomHandlers;
819 };
820 
821 
822 } // End of namespace Drascula
823 
824 #endif /* DRASCULA_DRASCULA_H */
Definition: console.h:27
Definition: drascula.h:244
Definition: str.h:59
EngineFeature
Definition: engine.h:260
Definition: drascula.h:233
Definition: error.h:81
Definition: random.h:44
Definition: drascula.h:252
Definition: rect.h:524
Definition: path.h:52
uint32 CustomEventType
Definition: events.h:204
Definition: stream.h:745
Definition: drascula.h:290
int sprintf_s(char *dst, size_t size, MSVC_PRINTF const char *format,...) GCC_PRINTF(3
Definition: drascula.h:338
Definition: mixer.h:49
Definition: ustr.h:57
Definition: file.h:47
Definition: archive.h:330
Definition: rect.h:144
Definition: drascula.h:265
Definition: keyboard.h:294
Definition: detection.h:33
Definition: system.h:163
Definition: drascula.h:270
Definition: drascula.h:276
Definition: engine.h:146
Language
Definition: language.h:45