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