ScummVM API documentation
efh.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 EFH_H
23 #define EFH_H
24 
25 #include "audio/softsynth/pcspk.h"
26 #include "audio/mixer.h"
27 #include "common/file.h"
28 #include "common/rect.h"
29 #include "common/events.h"
30 #include "common/serializer.h"
31 
32 #include "engines/advancedDetector.h"
33 #include "engines/engine.h"
34 #include "graphics/surface.h"
35 
36 #include "efh/constants.h"
37 
38 namespace Common {
39 class RandomSource;
40 }
41 
56 namespace Efh {
57 
58 static const uint8 kSavegameVersion = 1;
59 #define EFH_SAVE_HEADER MKTAG('E', 'F', 'H', 'S')
60 
61 enum EfhDebugChannels {
62  kDebugEngine = 1 << 0,
63  kDebugUtils = 1 << 1,
64  kDebugGraphics = 1 << 2,
65  kDebugScript = 1 << 3,
66  kDebugFight = 1 << 4
67 };
68 
70 public:
72  EfhGraphicsStruct(int8 **lineBuf, int16 x, int16 y, int16 width, int16 height);
73 
74  int8 **_vgaLineBuffer;
75  uint16 _shiftValue;
76  uint16 _width;
77  uint16 _height;
78  Common::Rect _area;
79 
80  void copy(EfhGraphicsStruct *src);
81 };
82 
83 struct InvObject {
84  int16 _ref;
85  uint8 _stat1; // abbb bbbb - a: equipped b: uses left
86  uint8 _curHitPoints;
87 
88  void init();
89  bool isEquipped();
90  int8 getUsesLeft();
91 };
92 
94  uint8 _placeId;
95  uint8 _posX;
96  uint8 _posY;
97  uint8 _triggerType; // 0xFD = Check inventory 0xFE = Check Character in team 0xFF Display description <= 0x77 = check score (all values in this case in data are <= 0xF)
98  uint8 _triggerValue;
99  uint16 _field5_textId;
100  uint16 _field7_textId;
101 
102  void init();
103 };
104 
105 struct FrameList {
106  int8 _subFileId[4];
107 
108  void init();
109 };
110 struct AnimInfo {
111  uint16 _posX[10];
112  uint8 _posY[10];
113  FrameList _frameList[15];
114 
115  void init();
116 };
117 
118 struct ItemStruct {
119  char _name[15];
120  uint8 _damage;
121  uint8 _defense;
122  uint8 _attacks;
123  uint8 _uses;
124  int8 _agilityModifier; // data contains values from -8 to +8
125  uint8 _range;
126  uint8 _attackType;
127  uint8 _specialEffect;
128  uint8 _defenseType;
129  uint8 _exclusiveType;
130  uint8 _field19_mapPosX_or_maxDeltaPoints;
131  uint8 _mapPosY;
132 
133  void init();
134 };
135 
136 struct NPCStruct {
137  char _name[11];
138  uint8 fieldB_textId;
139  uint8 field_C;
140  uint8 field_D;
141  uint8 fieldE_textId;
142  uint8 field_F;
143  uint8 field_10;
144  uint8 field11_NpcId;
145  uint16 field12_textId;
146  uint16 field14_textId;
147  uint32 _xp;
148  uint8 _activeScore[15];
149  uint8 _passiveScore[11];
150  uint8 _infoScore[11];
151  uint8 field_3F;
152  uint8 field_40;
153  InvObject _inventory[10];
154  uint8 _possessivePronounSHL6;
155  uint8 _speed;
156  uint8 field_6B;
157  uint8 field_6C;
158  uint8 field_6D;
159  uint8 _defaultDefenseItemId;
160  uint8 field_6F;
161  uint8 field_70;
162  uint8 field_71;
163  uint8 field_72;
164  uint8 field_73;
165  int16 _hitPoints;
166  int16 _maxHP;
167  uint8 field_78;
168  uint16 field_79;
169  uint16 field_7B;
170  uint8 field_7D;
171  uint8 field_7E;
172  uint8 field_7F;
173  uint8 field_80;
174  uint8 field_81;
175  uint8 field_82;
176  uint8 field_83;
177  uint8 field_84;
178  uint8 field_85;
179 
180  void init();
181  uint8 getPronoun();
182  void synchronize(Common::Serializer &s);
183 };
184 
185 struct FontDescr {
186  const uint8 *_widthArray;
187  const uint8 *_extraLines;
188  const Font *_fontData;
189  uint8 _charHeight;
190  uint8 _extraVerticalSpace;
191  uint8 _extraHorizontalSpace;
192 };
193 
194 struct BufferBM {
195  uint8 *_dataPtr;
196  uint16 _width;
197  uint16 _startX;
198  uint16 _startY;
199  uint16 _height;
200  uint16 _lineDataSize;
201  uint8 _paletteTransformation;
202  uint16 _fieldD;
203 };
204 
205 struct CharStatus {
206  int16 _type;
207  int16 _duration;
208 };
209 
210 struct MapMonster {
211  uint8 _possessivePronounSHL6; // aabb bbbb aa:Possessive Pronoun, bb bbbb: unknown
212  uint8 _npcId;
213  uint8 _fullPlaceId; // unsigned? Magic values are 0xFF and 0xFE
214  uint8 _posX;
215  uint8 _posY;
216  uint8 _weaponItemId;
217  uint8 _maxDamageAbsorption;
218  uint8 _monsterRef;
219  uint8 _additionalInfo; // abbb cddd a: special move flag, bbb: Pct modifier for random move, c aggressiveness, ddd move type
220  uint8 _talkTextId;
221  uint8 _groupSize;
222  int16 _hitPoints[9];
223 
224  uint8 getPronoun();
225 };
226 
228  int16 _id;
229  int16 _initiative;
230 
231  void init();
232 };
233 
235  uint8 _status;
236  uint8 _tileId;
237 
238  void init();
239 };
240 
241 struct TeamChar {
242  int16 _id;
243  CharStatus _status;
244  int16 _pctVisible;
245  int16 _pctDodgeMiss;
246  int16 _nextAttack;
247  int16 _lastInventoryUsed;
248  int16 _lastAction;
249 
250  void init();
251 };
252 
253 struct TeamMonster {
254  int16 _id;
255  CharStatus _mobsterStatus[9];
256 
257  void init();
258 };
259 
260 class EfhEngine : public Engine {
261 public:
262  EfhEngine(OSystem *syst, const ADGameDescription *gd);
263  ~EfhEngine() override;
264 
265  Graphics::Surface *_mainSurface;
266  Common::RandomSource *_rnd;
267 
268  const ADGameDescription *_gameDescription;
269 
270  // metaengine.cpp
271  void initGame(const ADGameDescription *gd);
272  uint32 getFeatures() const;
273  const char *getGameId() const;
274  Common::Platform getPlatform() const;
275  bool hasFeature(EngineFeature f) const override;
276  const char *getCopyrightString() const;
277 
278  // savegames.cpp
279  Common::String getSavegameFilename(int slot);
280  bool canLoadGameStateCurrently(Common::U32String *msg = nullptr) override;
281  bool canSaveGameStateCurrently(Common::U32String *msg = nullptr) override;
282  Common::Error loadGameState(int slot) override;
283  Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave = false) override;
284 
285  bool _shouldQuit;
286  bool shouldQuitGame() const { return _shouldQuit || shouldQuit(); }
287 
288 protected:
289  int _lastTime;
290  // Engine APIs
291  Common::Error run() override;
292 
293 private:
294  Common::Platform _platform;
295  int _loadSaveSlot;
296  bool _saveAuthorized;
297 
298  void initialize();
299  void playIntro();
300  void initEngine();
301  void initMapMonsters();
302  void loadMapArrays(int idx);
303  void saveAnimImageSetId();
304  int16 getEquipmentDefense(int16 charId);
305  uint16 getEquippedExclusiveType(int16 charId, int16 exclusiveType, bool flag);
306  void displayLowStatusScreen(bool flag);
307  void loadImageSetToTileBank(int16 bankId, int16 setId);
308  void restoreAnimImageSetId();
309  void checkProtection();
310  void loadEfhGame();
311  void copyCurrentPlaceToBuffer(int16 id);
312  uint8 getMapTileInfo(int16 mapPosX, int16 mapPosY);
313  void writeTechAndMapFiles();
314  uint16 getStringWidth(const Common::String &str) const;
315  void setTextPos(int16 textPosX, int16 textPosY);
316  void drawGameScreenAndTempText(bool flag);
317  void drawMap(bool largeMapFl, int16 mapPosX, int16 mapPosY, int16 mapSize, bool drawHeroFl, bool drawMonstersFl);
318  void displaySmallMap(int16 posX, int16 posY);
319  void displayLargeMap(int16 posX, int16 posY);
320  void drawScreen();
321  void removeObject(int16 charId, int16 objectId);
322  void totalPartyKill();
323  void removeCharacterFromTeam(int16 teamMemberId);
324  void refreshTeamSize();
325  bool isNpcATeamMember(int16 id);
326  void handleWinSequence();
327  bool giveItemTo(int16 charId, int16 objectId, int16 fromCharId);
328  int16 chooseCharacterToReplace();
329  int16 handleCharacterJoining();
330  void drawText(uint8 *srcPtr, int16 posX, int16 posY, int16 maxX, int16 maxY, bool flag);
331  void displayMiddleLeftTempText(uint8 *impArray, bool flag);
332  void transitionMap(int16 centerX, int16 centerY);
333  void setSpecialTechZone(int16 unkId, int16 centerX, int16 centerY);
334  int16 findMapSpecialTileIndex(int16 posX, int16 posY);
335  bool isPosOutOfMap(int16 mapPosX, int16 mapPosY);
336  void goSouth();
337  void goNorth();
338  void goEast();
339  void goWest();
340  void goNorthEast();
341  void goSouthEast();
342  void goNorthWest();
343  void goSouthWest();
344  void handleNewRoundEffects();
345  void resetGame();
346  void computeMapAnimation();
347  void handleAnimations();
348  int8 checkMonsterMoveCollisionAndTileTexture(int16 monsterId);
349  bool moveMonsterAwayFromTeam(int16 monsterId);
350  bool moveMonsterTowardsTeam(int16 monsterId);
351  bool moveMonsterGroupOther(int16 monsterId, int16 direction);
352  bool moveMonsterGroupRandom(int16 monsterId);
353  int16 computeMonsterGroupDistance(int16 monsterId);
354  bool checkWeaponRange(int16 monsterId, int16 weaponId);
355  bool checkMonsterMovementType(int16 id, bool teamFlag);
356  bool checkTeamWeaponRange(int16 monsterId);
357  bool checkIfMonsterOnSameLargeMapPlace(int16 monsterId);
358  bool checkMonsterWeaponRange(int16 monsterId);
359  void handleMapMonsterMoves();
360  bool checkMapMonsterAvailability(int16 monsterId);
361  void displayMonsterAnim(int16 monsterId);
362  int16 countAliveMonsters(int16 id);
363  bool checkMonsterGroupDistance1OrLess(int16 monsterId);
364  bool handleTalk(int16 monsterId, int16 arg2, int16 itemId);
365  void startTalkMenu(int16 monsterId);
366  void displayImp1Text(int16 textId);
367  bool handleInteractionText(int16 mapPosX, int16 mapPosY, int16 charId, int16 itemId, int16 arg8, int16 imageSetId);
368  int8 checkTileStatus(int16 mapPosX, int16 mapPosY, bool teamFl);
369  void computeInitiatives();
370  void redrawScreenForced();
371  int16 countMonsterGroupMembers(int16 monsterGroup);
372  uint16 getXPLevel(uint32 xp);
373  bool isItemCursed(int16 itemId);
374  bool hasObjectEquipped(int16 charId, int16 objectId);
375  void setMapMonsterAggressivenessAndMovementType(int16 id, uint8 mask);
376  bool isMonsterActive(int16 groupId, int16 id);
377  int16 getTileFactId(int16 mapPosX, int16 mapPosY);
378  void setCharacterObjectToBroken(int16 charId, int16 objectId);
379  int16 selectOtherCharFromTeam();
380  bool checkMonsterCollision();
381 
382  // Fight
383  bool handleFight(int16 monsterId);
384  void handleFight_checkEndEffect(int16 charId);
385  void handleFight_lastAction_A(int16 teamCharId);
386  void handleFight_lastAction_D(int16 teamCharId);
387  void handleFight_lastAction_H(int16 teamCharId);
388  bool handleFight_lastAction_U(int16 teamCharId);
389  void handleFight_MobstersAttack(int groupId);
390  bool isTPK();
391  bool isMonsterAlreadyFighting(int16 monsterId, int16 teamMonsterId);
392  void createOpponentList(int16 monsterTeamId);
393  void resetTeamMonsterEffects();
394  void initFight(int16 monsterId);
395  void resetTeamMonsterIdArray();
396  bool isTeamMemberStatusNormal(int16 id);
397  void getDeathTypeDescription(int16 victimId, int16 attackerId);
398  int16 determineTeamTarget(int16 charId, int16 unkFied18Val, bool checkDistanceFl);
399  bool getTeamAttackRoundPlans();
400  void drawCombatScreen(int16 charId, bool whiteFl, bool drawFl);
401  void getXPAndSearchCorpse(int16 charId, Common::String namePt1, Common::String namePt2, int16 monsterId);
402  bool characterSearchesMonsterCorpse(int16 charId, int16 monsterId);
403  void addReactionText(int16 id);
404  void displayEncounterInfo(bool WhiteFl);
405  int16 getWeakestMobster(int16 groupNumber);
406  int16 getCharacterScore(int16 charId, int16 itemId);
407  bool checkSpecialItemsOnCurrentPlace(int16 itemId);
408  bool hasAdequateDefense(int16 monsterId, uint8 attackType);
409  bool hasAdequateDefenseNPC(int16 charId, uint8 attackType);
410  void addNewOpponents(int16 monsterId);
411  int16 getTeamMonsterAnimId();
412  int16 selectMonsterGroup();
413  void redrawCombatScreenWithTempText(int16 charId);
414  void handleDamageOnArmor(int16 charId, int16 damage);
415 
416  // Files
417  int32 readFileToBuffer(const Common::Path &filename, uint8 *destBuffer);
418  void readAnimInfo();
419  void findMapFile(int16 mapId);
420  void rImageFile(const Common::Path &filename, uint8 *targetBuffer, uint8 **subFilesArray, uint8 *packedBuffer);
421  void readItems();
422  void readImpFile(int16 id, bool techMapFl);
423  void loadNewPortrait();
424  void loadAnimImageSet();
425  void loadHistory();
426  void loadTechMapImp(int16 fileId);
427  void loadPlacesFile(uint16 fullPlaceId, bool forceReloadFl);
428  void readTileFact();
429  void loadNPCS();
430  void preLoadMaps();
431 
432  // Graphics
433  void initPalette();
434  void drawLeftCenterBox();
435  void displayNextAnimFrame();
436  void displayAnimFrame();
437  void displayAnimFrames(int16 animId, bool displayMenuBoxFl);
438  void displayFctFullScreen();
439  void copyDirtyRect(int16 minX, int16 minY, int16 maxX, int16 maxY);
440  void copyGraphicBufferFromTo(EfhGraphicsStruct *efh_graphics_struct, EfhGraphicsStruct *efh_graphics_struct1, const Common::Rect &rect, int16 min_x, int16 min_y);
441  void displayBufferBmAtPos(BufferBM *bufferBM, int16 posX, int16 posY);
442  void drawRect(int16 minX, int16 minY, int16 maxX, int16 maxY);
443  void drawColoredRect(int16 minX, int16 minY, int16 maxX, int16 maxY, int16 color);
444  void clearScreen(int16 color);
445  void displayRawDataAtPos(uint8 *imagePtr, int16 posX, int16 posY);
446  void drawString(const Common::String &str, int16 startX, int16 startY, uint16 textColor);
447  void displayCenteredString(const Common::String &str, int16 minX, int16 maxX, int16 posY);
448  void displayMenuAnswerString(const Common::String &str, int16 minX, int16 maxX, int16 posY);
449  void drawMapWindow();
450  void displayGameScreen();
451  void drawUpperLeftBorders();
452  void drawUpperRightBorders();
453  void drawBottomBorders();
454  void drawChar(uint8 curChar, int16 posX, int16 posY);
455  void setTextColorWhite();
456  void setTextColorRed();
457  void setTextColorGrey();
458  void displayStringAtTextPos(const Common::String &message);
459  void clearBottomTextZone(int16 color);
460  void clearBottomTextZone_2(int16 color);
461  void setNextCharacterPos();
462  void displayCharAtTextPos(char character);
463  void displayWindow(uint8 *buffer, int16 posX, int16 posY, uint8 *dest);
464  void displayColoredMenuBox(int16 minX, int16 minY, int16 maxX, int16 maxY, int16 color);
465 
466  // Menu
467  int16 displayBoxWithText(const Common::String &str, int16 menuType, int16 displayOption, bool displayTeamWindowFl);
468  bool handleDeathMenu();
469  void displayCombatMenu(int16 charId);
470  void displayMenuItemString(int16 menuBoxId, int16 thisBoxId, int16 minX, int16 maxX, int16 minY, const char *str);
471  void displayStatusMenu(int16 windowId);
472  void prepareStatusRightWindowIndexes(int16 menuId, int16 charId);
473  void displayCharacterSummary(int16 curMenuLine, int16 npcId);
474  void displayCharacterInformationOrSkills(int16 curMenuLine, int16 npcId);
475  void displayStatusMenuActions(int16 menuId, int16 curMenuLine, int16 npcId);
476  void prepareStatusMenu(int16 windowId, int16 menuId, int16 curMenuLine, int16 charId, bool refreshFl);
477  void displayWindowAndStatusMenu(int16 charId, int16 windowId, int16 menuId, int16 curMenuLine);
478  int16 displayStringInSmallWindowWithBorder(const Common::String &str, bool delayFl, int16 charId, int16 windowId, int16 menuId, int16 curMenuLine);
479  int16 handleStatusMenu(int16 gameMode, int16 charId);
480  void unequipItem(int16 charId, int16 objectId, int16 windowId, int16 menuId, int16 curMenuLine);
481  void tryToggleEquipped(int16 charId, int16 objectId, int16 windowId, int16 menuId, int16 curMenuLine);
482  int16 useObject(int16 charId, int16 objectId, int16 teamMonsterId, int16 menuId, int16 curMenuLine, int16 gameMode);
483 
484  // Savegames
485  void synchronize(Common::Serializer &s);
486 
487  // Script
488  const uint8 *script_readNumberArray(const uint8 *buffer, int16 destArraySize, int16 *destArray);
489  const uint8 *script_getNumber(const uint8 *srcBuffer, int16 *retBuf);
490  int16 script_parse(Common::String str, int16 posX, int16 posY, int16 maxX, int16 maxY, bool scriptExecuteFlag);
491 
492  // Sound
493  void songDelay(int delay);
494  void playNote(int frequencyIndex, int totalDelay);
495  Common::KeyCode playSong(uint8 *buffer);
496  void generateSound1(int lowFreq, int highFreq, int duration);
497  void generateSound2(int startFreq, int endFreq, int speed);
498  void generateSound3();
499  void generateSound4(int repeat);
500  void generateSound5(int repeat);
501  void generateSound(int16 soundType);
502  void genericGenerateSound(int16 soundType, int16 repeatCount);
503 
504  // Utils
505  void setDefaultNoteDuration();
506  void decryptImpFile(bool techMapFl);
507  void loadImageSet(int16 imageSetId, uint8 *buffer, uint8 **subFilesArray, uint8 *destBuffer);
508  uint32 uncompressBuffer(uint8 *compressedBuf, uint8 *destBuf);
509  int16 getRandom(int16 maxVal);
510  Common::KeyCode getLastCharAfterAnimCount(int16 delay);
511  Common::KeyCode getInput(int16 delay);
512  Common::KeyCode getKeyCode(const Common::Event & event);
513  Common::KeyCode waitForKey();
514  Common::KeyCode mapInputCode(Common::KeyCode input);
515  Common::KeyCode handleAndMapInput(bool animFl);
516  Common::KeyCode getInputBlocking();
517  void setNumLock();
518  bool getValidationFromUser();
519  uint32 ROR(uint32 val, uint8 shiftVal);
520  Common::String getArticle(int pronoun);
521 
522  uint8 _videoMode;
523  uint8 _bufferCharBM[128];
524  int8 *_vgaLineBuffer[200];
525  EfhGraphicsStruct *_vgaGraphicsStruct1;
526  EfhGraphicsStruct *_vgaGraphicsStruct2;
527  EfhGraphicsStruct *_graphicsStruct;
528  uint8 _tileBank[3][12000];
529  uint8 _circleImageBuf[40100];
530  uint8 _portraitBuf[25000];
531  uint8 _decompBuf[40100];
532  uint8 _menuBuf[12500];
533  uint8 _windowWithBorderBuf[1500];
534  uint8 _mapArr[19][7000];
535  uint8 _places[12000];
536  uint8 _curPlace[24][24];
537  NPCStruct _npcBuf[100];
538  uint8 _imp1[13000];
539  uint8 _imp2[10000];
540  uint8 _titleSong[1024];
541  ItemStruct _items[300];
542  TileFactStruct _tileFact[432];
543  AnimInfo _animInfo[100];
544  uint8 _history[256];
545  uint8 _techDataArr[19][4100];
546  Common::String _enemyNamePt1;
547  Common::String _enemyNamePt2;
548  Common::String _characterNamePt1;
549  Common::String _characterNamePt2;
550  Common::String _nameBuffer;
551  Common::String _attackBuffer;
552  Common::String _messageToBePrinted;
553 
554  struct BitmapRef {
555  int8 _setId1;
556  int8 _setId2;
557  };
558 
559  BitmapRef _mapBitmapRefArr[19];
560 
561  MapSpecialTileStruct _mapSpecialTiles[19][100];
562  MapMonster _mapMonsters[19][64];
563  uint8 _mapGameMaps[19][64][64];
564 
565  uint8 _defaultBoxColor;
566  FontDescr _fontDescr;
567 
568  bool _introDoneFl;
569  uint16 _textColor;
570 
571  int16 _oldAnimImageSetId;
572  int16 _animImageSetId;
573  uint8 _paletteTransformationConstant;
574  uint8 *_circleImageSubFileArray[12];
575  uint8 *_tileBankSubFilesArray[216];
576  BufferBM _imageDataPtr;
577  int16 _currentTileBankImageSetId[3];
578  int16 _unkRelatedToAnimImageSetId;
579  int16 _techId;
580  int16 _currentAnimImageSetId;
581  uint8 *_portraitSubFilesArray[20];
582  int16 _unkAnimRelatedIndex;
583  uint8 *_imp1PtrArray[100];
584  uint8 *_imp2PtrArray[432];
585  uint16 _fullPlaceId;
586  int16 _guessAnimationAmount;
587  uint16 _largeMapFlag; // CHECKME: bool?
588  int16 _textPosX;
589  int16 _textPosY;
590 
591  Common::Rect _initRect;
592  bool _engineInitPending;
593  bool _protectionPassed;
594 
595  int16 _alertDelay;
596  int16 _teamSize;
597  int16 _word2C872;
598  bool _checkTileDisabledByScriptFl;
599  bool _redrawNeededFl;
600  bool _drawHeroOnMapFl;
601  bool _drawMonstersOnMapFl;
602  bool _textBoxDisabledByScriptFl;
603 
604  int16 _imageSetSubFilesIdx;
605  int16 _oldImageSetSubFilesIdx;
606 
607  int16 _mapPosX, _mapPosY;
608  int16 _oldMapPosX, _oldMapPosY;
609  int16 _techDataId_MapPosX, _techDataId_MapPosY;
610  uint16 _lastMainPlaceId;
611 
612  uint16 _tempTextDelay;
613  uint8 *_tempTextPtr;
614 
615  bool _ongoingFightFl;
616  bool _statusMenuActive;
617  int16 _menuStatItemArr[15];
618  int16 _menuDepth;
619  int16 _menuItemCounter;
620 
621  TeamChar _teamChar[3];
622  TeamMonster _teamMonster[5];
623 
624  InitiativeStruct _initiatives[8];
625 
626  int16 _regenCounter;
627 
628  Audio::PCSpeaker *_speakerStream;
629  Audio::SoundHandle _speakerHandle;
630 };
631 
632 } // End of namespace Efh
633 
634 #endif
Definition: str.h:59
Definition: efh.h:260
Definition: surface.h:67
EngineFeature
Definition: engine.h:253
Definition: error.h:84
Definition: efh.h:241
Definition: advancedDetector.h:163
Definition: random.h:44
Definition: constants.h:27
Definition: efh.h:185
Definition: rect.h:144
Definition: path.h:52
Definition: efh.h:105
Definition: efh.h:136
Definition: serializer.h:79
Definition: efh.h:69
Definition: efh.h:253
Out copy(In first, In last, Out dst)
Definition: algorithm.h:52
Definition: mixer.h:49
Definition: ustr.h:57
Definition: efh.h:118
Definition: efh.h:205
Definition: efh.h:234
Definition: efh.h:83
Definition: constants.h:57
Definition: events.h:199
Definition: algorithm.h:29
Definition: efh.h:110
Definition: efh.h:227
Definition: system.h:161
Definition: efh.h:93
Definition: efh.h:210
Definition: engine.h:144
Definition: pcspk.h:31
Definition: efh.h:194
Platform
Definition: platform.h:46