22 #ifndef KYRA_EOBCOMMON_H 23 #define KYRA_EOBCOMMON_H 25 #if defined(ENABLE_EOB) || defined(ENABLE_LOL) 26 #include "kyra/engine/kyra_rpg.h" 27 #endif // (ENABLE_EOB || ENABLE_LOL) 37 #define releaseShpArr(shapes, num) \ 39 for (int iii = 0; iii < num; iii++) { \ 41 delete[] shapes[iii]; \ 47 struct DarkMoonShapeDef {
52 struct CreatePartyModButton {
71 struct EoBChargenButtonDef {
79 struct EoBGuiButtonDef {
104 int8 constitutionCur;
105 int8 constitutionMax;
118 uint32 experience[3];
119 const uint8 *faceShape;
120 const uint8 *nameShape;
123 int8 clericSpells[80];
124 uint32 mageSpellsAvailableFlags;
129 uint8 effectsRemainder[4];
134 int8 gfxUpdateCountdown;
164 uint16 extraProperties;
167 struct SpriteDecoration {
173 struct EoBMonsterProperty {
180 uint8 attacksPerRound;
186 uint16 immunityFlags;
194 uint8 numRemoteAttacks;
195 uint8 remoteWeaponChangeMode;
196 uint8 numRemoteWeapons;
198 int8 remoteWeapons[5];
201 uint8 dmgModifierEvade;
203 uint8 decorations[3];
206 struct EoBMonsterInPlay {
219 int8 spellStatusLeft;
227 uint8 curRemoteWeapon;
228 uint8 numRemoteAttacks;
230 uint8 directionChanged;
231 uint8 stepsTillRemoteAttack;
244 uint8 firstButtonStrId;
249 struct EoBMenuButtonDef {
259 class EoBInfProcessor;
261 class EoBCoreEngine :
public KyraRpgEngine {
262 friend class TextDisplayer_rpg;
263 friend class GUI_EoB;
264 friend class Debugger_EoB;
265 friend class EoBInfProcessor;
266 friend class DarkmoonSequenceHelper;
267 friend class CharacterGenerator;
268 friend class TransferPartyWiz;
270 EoBCoreEngine(
OSystem *system,
const GameFlags &flags);
271 ~EoBCoreEngine()
override;
275 Screen *screen()
override {
return _screen; }
276 GUI *gui()
const override {
return _gui; }
285 virtual int mainMenu() = 0;
286 virtual void seq_xdeath() {}
287 virtual void seq_playFinale() = 0;
291 virtual void loadItemsAndDecorationsShapes();
292 void releaseItemsAndDecorationsShapes();
294 void initButtonData();
296 void initStaticResource();
297 virtual void initSpells();
299 void registerDefaultSettings()
override;
300 void readSettings()
override;
301 void writeSettings()
override;
303 const uint8 **_largeItemShapes;
304 const uint8 **_smallItemShapes;
305 const uint8 **_thrownItemShapes;
306 const uint8 **_largeItemShapesScl[3];
307 const uint8 **_smallItemShapesScl[3];
308 const uint8 **_thrownItemShapesScl[3];
309 const uint8 **_blueItemIconShapes;
310 const uint8 **_xtraItemIconShapes;
311 const int _numLargeItemShapes;
312 const int _numSmallItemShapes;
313 const int _numThrownItemShapes;
314 const int _numItemIconShapes;
316 const uint8 **_spellShapes;
317 const uint8 **_firebeamShapes;
318 const uint8 *_redSplatShape;
319 const uint8 *_greenSplatShape;
320 const uint8 **_wallOfForceShapes;
321 const uint8 **_teleporterShapes;
322 const uint8 **_sparkShapes;
323 const uint8 *_deadCharShape;
324 const uint8 *_disabledCharGrid;
325 const uint8 *_blackBoxSmallGrid;
326 const uint8 *_weaponSlotGrid;
327 const uint8 *_blackBoxWideGrid;
328 const uint8 *_lightningColumnShape;
330 uint8 *_redSplatBG[6];
331 uint8 *_itemsOverlay;
332 static const uint8 _itemsOverlayCGA[];
334 static const uint8 _teleporterShapeDefs[];
335 static const uint8 _wallOfForceShapeDefs[];
337 const char *
const *_mainMenuStrings;
340 virtual void startupNew();
341 virtual void startupLoad() = 0;
342 virtual void startupReset() {}
344 void update()
override { screen()->updateScreen(); }
345 bool checkPartyStatus(
bool handleDeath);
346 void updateAnimations();
351 bool startCharacterGeneration(
bool defaultParty);
352 bool startPartyTransfer();
354 const uint8 **_faceShapes;
355 const uint8 *_wndBackgrnd;
357 static const int8 _characterClassType[];
358 static const uint8 _hpIncrPerLevel[];
359 static const uint8 _numLevelsPerClass[];
360 static const int16 _hpConstModifiers[];
361 static const uint8 _charClassModifier[];
363 const uint8 *_classModifierFlags;
366 void setupTimers()
override;
367 void enableSysTimer(
int sysTimer)
override;
368 void disableSysTimer(
int sysTimer)
override;
369 void setCharEventTimer(
int charIndex, uint32 countdown,
int evnt,
int updateExistingTimer);
370 void deleteCharEventTimer(
int charIndex,
int evnt);
371 void setupCharacterTimers();
372 void advanceTimers(uint32 millis);
374 void timerProcessMonsters(
int timerNum);
375 void timerSpecialCharacterUpdate(
int timerNum);
376 void timerProcessFlyingObjects(
int timerNum);
377 void timerProcessCharacterExchange(
int timerNum);
378 void timerUpdateTeleporters(
int timerNum);
379 void timerUpdateFoodStatus(
int timerNum);
380 void timerUpdateMonsterIdleAnim(
int timerNum);
382 uint8 getClock2Timer(
int index)
override {
return index < _numClock2Timers ? _clock2Timers[index] : 0; }
383 uint8 getNumClock2Timers()
override {
return _numClock2Timers; }
385 static const uint8 _clock2Timers[];
386 static const uint8 _numClock2Timers;
388 uint32 _disableElapsedTime;
389 uint32 _restPartyElapsedTime;
391 uint32 _lastVIntTick;
392 uint32 _totalEnemiesKilled;
396 void setHandItem(Item itemIndex)
override;
399 int getDexterityArmorClassModifier(
int dexterity);
400 int generateCharacterHitpointsByLevel(
int charIndex,
int levelIndex);
401 int getClassAndConstHitpointsModifier(
int cclass,
int constitution);
402 int getCharacterClassType(
int cclass,
int levelIndex);
403 int getModifiedHpLimits(
int hpModifier,
int constModifier,
int level,
bool mode);
404 Common::String getCharStrength(
int str,
int strExt,
bool twoDigitsPadding =
false);
405 int testCharacter(int16 index,
int flags);
406 int getNextValidCharIndex(
int curCharIndex,
int searchStep);
408 void recalcArmorClass(
int index);
409 int validateWeaponSlotItem(
int index,
int slot);
411 int getClericPaladinLevel(
int index);
412 int getMageLevel(
int index);
413 int getCharacterLevelIndex(
int type,
int cClass);
415 int countCharactersWithSpecificItems(int16 itemType, int16 itemValue);
416 int checkInventoryForItem(
int character, int16 itemType, int16 itemValue);
417 void modifyCharacterHitpoints(
int character, int16 points);
418 void neutralizePoison(
int character);
420 void npcSequence(
int npcIndex);
421 virtual void drawNpcScene(
int npcIndex) = 0;
422 virtual void runNpcDialogue(
int npcIndex) = 0;
423 void initNpc(
int npcIndex);
424 int npcJoinDialogue(
int npcIndex,
int queryJoinTextId,
int confirmJoinTextId,
int noJoinTextId);
425 int prepareForNewPartyMember(int16 itemType, int16 itemValue);
426 void dropCharacter(
int charIndex);
427 void removeCharacterFromParty(
int charIndex);
428 void exchangeCharacters(
int charIndex1,
int charIndex2);
430 void increasePartyExperience(int16 points);
431 void increaseCharacterExperience(
int charIndex, int32 points);
432 uint32 getRequiredExperience(
int cClass,
int levelIndex,
int level);
433 void increaseCharacterLevel(
int charIndex,
int levelIndex);
435 void setWeaponSlotStatus(
int charIndex,
int mode,
int slot);
437 EoBCharacter *_characters;
440 int _exchangeCharacterId;
442 const char *
const *_levelGainStrings;
443 const uint32 *_expRequirementTables[6];
445 const uint8 *_saveThrowTables[6];
446 const uint8 *_saveThrowLevelIndex;
447 const uint8 *_saveThrowModDiv;
448 const uint8 *_saveThrowModExt;
450 const EoBCharacter *_npcPreset;
451 const char *
const *_npcPresetNames;
459 Item duplicateItem(Item itemIndex);
460 void setItemPosition(Item *itemQueue,
int block, Item item,
int pos);
461 Item createItemOnCurrentBlock(Item itemIndex);
462 void createInventoryItem(EoBCharacter *c, Item itemIndex, int16 itemValue,
int preferedInventorySlot);
463 int deleteInventoryItem(
int charIndex,
int slot);
464 void deleteBlockItem(uint16 block,
int type);
465 int validateInventorySlotForItem(Item item,
int charIndex,
int slot);
466 int stripPartyItems(int16 itemType, int16 itemValue,
int handleValueMode,
int numItems);
467 bool deletePartyItems(int16 itemType, int16 itemValue);
468 virtual void updateUsedCharacterHandItem(
int charIndex,
int slot) = 0;
469 int itemUsableByCharacter(
int charIndex, Item item)
const;
470 int countQueuedItems(Item itemQueue, int16
id, int16 type,
int count,
int includeFlyingItems)
const;
471 int getQueuedItem(Item *items,
int pos,
int id);
472 void printFullItemName(Item item);
473 void identifyQueuedItems(Item itemQueue);
474 void drawItemIconShape(
int pageNum, Item itemId,
int x,
int y);
475 bool isMagicEffectItem(Item itemIndex);
476 bool checkInventoryForRings(
int charIndex,
int itemValue);
477 void eatItemInHand(
int charIndex);
479 bool launchObject(
int charIndex, Item item, uint16 startBlock,
int startPos,
int dir,
int type);
480 void launchMagicObject(
int charIndex,
int type, uint16 startBlock,
int startPos,
int dir);
481 bool updateObjectFlight(EoBFlyingObject *fo,
int block,
int pos);
482 bool updateFlyingObjectHitTest(EoBFlyingObject *fo,
int block,
int pos);
483 void explodeObject(EoBFlyingObject *fo,
int block, Item item);
484 void endObjectFlight(EoBFlyingObject *fo);
485 void checkFlyingObjects();
487 void reloadWeaponSlot(
int charIndex,
int slotIndex,
int itemType,
int arrowOrDagger);
491 EoBItemType *_itemTypes;
493 uint16 _numItemNames;
494 int _numItemNamesStatic;
495 const char *
const *_itemNamesStatic;
496 uint32 _partyEffectFlags;
499 const uint16 *_slotValidationFlags;
500 const int8 *_projectileWeaponAmmoTypes;
501 const uint8 *_wandTypes;
503 EoBFlyingObject *_flyingObjects;
504 const uint8 *_drawObjPosIndex;
505 const uint8 *_flightObjFlipIndex;
506 const int8 *_flightObjShpMap;
507 const int8 *_flightObjSclIndex;
509 const uint8 *_expObjectTlMode;
510 const uint8 *_expObjectTblIndex;
511 const uint8 *_expObjectShpStart;
512 const uint8 *_expObjectAnimTbl1;
513 int _expObjectAnimTbl1Size;
514 const uint8 *_expObjectAnimTbl2;
515 int _expObjectAnimTbl2Size;
516 const uint8 *_expObjectAnimTbl3;
517 int _expObjectAnimTbl3Size;
519 const char *
const *_ascii2SjisTables;
520 const char *
const *_ascii2SjisTables2;
523 virtual void loadMonsterShapes(
const char *filename,
int monsterIndex,
bool hasDecorations,
int encodeTableIndex);
524 void releaseMonsterShapes(
int first,
int num);
525 virtual void generateMonsterPalettes(
const char *file, int16 monsterIndex) {}
527 virtual const uint8 *loadMonsterProperties(
const uint8 *data) {
return 0; }
528 const uint8 *loadActiveMonsterData(
const uint8 *data,
int level);
529 void initMonster(
int index,
int unit, uint16 block,
int pos,
int dir,
int type,
int shpIndex,
int mode,
int i,
int randItem,
int fixedItem);
530 void placeMonster(EoBMonsterInPlay *m, uint16 block,
int dir);
531 virtual void replaceMonster(
int b, uint16 block,
int pos,
int dir,
int type,
int shpIndex,
int mode,
int h2,
int randItem,
int fixedItem) = 0;
532 void killMonster(EoBMonsterInPlay *m,
bool giveExperience);
533 virtual bool killMonsterExtra(EoBMonsterInPlay *m) = 0;
534 int countSpecificMonsters(
int type);
535 void updateAttackingMonsterFlags();
537 const int8 *getMonstersOnBlockPositions(uint16 block);
538 int getClosestMonster(
int charIndex,
int block);
540 bool blockHasMonsters(uint16 block);
541 bool isMonsterOnPos(EoBMonsterInPlay *m, uint16 block,
int pos,
int checkPos4);
542 const int16 *findBlockMonsters(uint16 block,
int pos,
int dir,
int blockDamage,
int singleTargetCheckAdjacent);
544 void drawBlockObject(
int flipped,
int page,
const uint8 *shape,
int x,
int y,
int sd, uint8 *ovl = 0);
545 void drawMonsterShape(
const uint8 *shape,
int x,
int y,
int flipped,
int flags,
int palIndex);
546 void flashMonsterShape(EoBMonsterInPlay *m);
547 void updateAllMonsterShapes();
548 void drawBlockItems(
int index);
549 void drawDoor(
int index);
550 virtual void drawDoorIntern(
int type,
int index,
int x,
int y,
int w,
int wall,
int mDim, int16 y1, int16 y2) = 0;
551 void drawMonsters(
int index);
552 void drawWallOfForce(
int index);
553 void drawFlyingObjects(
int index);
554 void drawTeleporter(
int index);
556 void updateMonsters(
int unit);
557 void updateMonsterDest(EoBMonsterInPlay *m);
558 void updateMonsterAttackMode(EoBMonsterInPlay *m);
559 void updateAllMonsterDests();
560 void turnFriendlyMonstersHostile();
561 int getNextMonsterDirection(
int curBlock,
int destBlock);
562 int getNextMonsterPos(EoBMonsterInPlay *m,
int block);
563 int findFreeMonsterPos(
int block,
int size);
564 void updateMoveMonster(EoBMonsterInPlay *m);
565 bool updateMonsterTryDistanceAttack(EoBMonsterInPlay *m);
566 bool updateMonsterTryCloseAttack(EoBMonsterInPlay *m,
int block);
567 void walkMonster(EoBMonsterInPlay *m,
int destBlock);
568 bool walkMonsterNextStep(EoBMonsterInPlay *m,
int destBlock,
int direction);
569 void updateMonsterFollowPath(EoBMonsterInPlay *m,
int turnSteps);
570 void updateMonstersStraying(EoBMonsterInPlay *m,
int a);
571 void updateMonstersSpellStatus(EoBMonsterInPlay *m);
572 void setBlockMonsterDirection(
int block,
int dir);
574 uint8 *_monsterFlashOverlay;
575 uint8 *_monsterStoneOverlay;
576 int16 _shapeShakeOffsetX;
577 int16 _shapeShakeOffsetY;
579 SpriteDecoration *_monsterDecorations;
580 EoBMonsterProperty *_monsterProps;
582 EoBMonsterInPlay *_monsters;
584 const int8 *_monsterStepTable0;
585 const int8 *_monsterStepTable1;
586 const int8 *_monsterStepTable2;
587 const int8 *_monsterStepTable3;
588 const uint8 *_monsterCloseAttPosTable1;
589 const uint8 *_monsterCloseAttPosTable2;
590 const int8 *_monsterCloseAttUnkTable;
591 const uint8 *_monsterCloseAttChkTable1;
592 const uint8 *_monsterCloseAttChkTable2;
593 const uint8 *_monsterCloseAttDstTable1;
594 const uint8 *_monsterCloseAttDstTable2;
596 const uint8 *_monsterProximityTable;
597 const uint8 *_findBlockMonstersTable;
598 const char *
const *_monsterDustStrings;
600 const uint8 *_enemyMageSpellList;
601 const uint8 *_enemyMageSfx;
602 const uint8 *_beholderSpellList;
603 const uint8 *_beholderSfx;
604 const char *
const *_monsterSpecAttStrings;
606 const int8 *_monsterFrmOffsTable1;
607 const int8 *_monsterFrmOffsTable2;
609 const uint16 *_encodeMonsterShpTable;
610 const uint8 _teleporterWallId;
612 const int16 *_wallOfForceDsX;
613 const uint8 *_wallOfForceDsY;
614 const uint8 *_wallOfForceDsNumW;
615 const uint8 *_wallOfForceDsNumH;
616 const uint8 *_wallOfForceShpId;
618 const int8 *_monsterDirChangeTable;
621 void loadLevel(
int level,
int sub);
622 virtual void readLevelFileData(
int level);
624 void addLevelItems()
override;
625 virtual void loadVcnData(
const char *file,
const uint8 *cgaMapping);
627 void loadBlockProperties(
const char *mazFile)
override;
628 const uint8 *getBlockFileData(
int levelIndex)
override;
629 const uint8 *getBlockFileData(
const char *mazFile);
631 void loadDecorations(
const char *cpsFile,
const char *decFile);
633 virtual void loadDecShapesToPage3(
const char *shpFile);
634 void assignWallsAndDecorations(
int wallIndex,
int vmpIndex,
int decDataIndex,
int specialType,
int flags);
635 void releaseDecorations();
636 void releaseDoorShapes();
637 void resetWallData();
638 void toggleWallState(
int wall,
int flags);
639 virtual void loadDoorShapes(
int doorType1,
int shapeId1,
int doorType2,
int shapeId2) = 0;
640 virtual const uint8 *loadDoorShapes(
const char *filename,
int doorIndex,
const uint8 *shapeDefs) = 0;
641 virtual void setLevelPalettes(
int level) {}
643 void drawScene(
int refresh);
644 void drawSceneShapes(
int start = 0,
int end = 18,
int drawFlags = 0xFF);
645 void drawDecorations(
int index);
647 int calcNewBlockPositionAndTestPassability(uint16 curBlock, uint16 direction);
648 void notifyBlockNotPassable();
649 void increaseStepsCounter();
650 void moveParty(uint16 block);
652 int clickedDoorSwitch(uint16 block, uint16 direction)
override;
653 int clickedDoorPry(uint16 block, uint16 direction);
654 int clickedDoorNoPry(uint16 block, uint16 direction);
655 int clickedNiche(uint16 block, uint16 direction)
override;
657 int specialWallAction(
int block,
int direction);
659 void openDoor(
int block);
660 void closeDoor(
int block);
662 void addLevelMap(
int level);
663 bool hasLevelMap(
int level)
const;
664 uint32 countMaps()
const;
665 uint32 countArrows()
const;
668 int16 _noDoorSwitch[2];
670 EoBRect8 *_levelDecorationRects;
671 SpriteDecoration *_doorSwitches;
672 const uint8 *_dcrShpDataPos;
680 uint32 _drawSceneTimer;
681 uint32 _flashShapeTimer;
682 uint32 _flashShapeTimerIntv0;
683 uint32 _flashShapeTimerIntv1;
684 uint32 _flashShapeTimerIntv2;
685 uint32 _envAudioTimer;
686 uint16 _teleporterPulse;
689 const int16 *_dscShapeCoords;
691 const uint8 *_dscItemPosIndex;
692 const int16 *_dscItemShpX;
693 const uint8 *_dscItemScaleIndex;
694 const uint8 *_dscItemTileIndex;
695 const uint8 *_dscItemShapeMap;
697 const uint8 *_dscDoorScaleMult1;
698 const uint8 *_dscDoorScaleMult2;
699 const uint8 *_dscDoorScaleMult3;
700 const uint8 *_dscDoorY1;
701 const uint8 *_dscDoorXE;
703 uint8 *_greenFadingTable;
704 uint8 *_blueFadingTable;
705 uint8 *_lightBlueFadingTable;
706 uint8 *_blackFadingTable;
707 uint8 *_greyFadingTable;
709 const uint8 *_wllFlagPreset;
710 int _wllFlagPresetSize;
711 const uint8 *_teleporterShapeCoords;
712 const int8 *_portalSeq;
717 void runLevelScript(
int block,
int flags)
override;
718 void setScriptFlags(uint32 flags);
719 void clearScriptFlags(uint32 flags);
720 bool checkScriptFlags(uint32 flags);
722 const uint8 *initScriptTimers(
const uint8 *pos);
723 void updateScriptTimers();
724 virtual void updateScriptTimersExtra() {}
726 EoBInfProcessor *_inf;
728 int _stepsUntilScriptCall;
729 ScriptTimer _scriptTimers[5];
730 int _scriptTimersCount;
731 uint8 _scriptTimersMode;
734 virtual void gui_drawPlayField(
bool refresh);
735 virtual void gui_setupPlayFieldHelperPages(
bool keepText =
false);
736 void gui_restorePlayField();
737 void gui_drawAllCharPortraitsWithStats();
738 void gui_drawCharPortraitWithStats(
int index,
bool screenUpdt =
true);
739 void gui_drawFaceShape(
int index);
740 void gui_drawWeaponSlot(
int charIndex,
int slot);
741 virtual void gui_drawWeaponSlotStatus(
int x,
int y,
int status);
742 virtual void gui_printInventoryDigits(
int x,
int y,
int val) {}
743 virtual void gui_playStrikeAnimation(uint8 pos, Item itm) {}
744 void gui_drawHitpoints(
int index);
745 void gui_drawFoodStatusGraph(
int index);
746 void gui_drawHorizontalBarGraph(
int x,
int y,
int w,
int h, int32 curVal, int32 maxVal,
int col1,
int col2)
override;
747 void gui_drawCharPortraitStatusFrame(
int index);
748 void gui_drawInventoryItem(
int slot,
int redraw,
int pageNum);
749 virtual void gui_drawCharacterStatsPage();
750 virtual void gui_displayMap() {}
751 void gui_drawCompass(
bool force);
752 void gui_drawDialogueBox();
753 virtual void gui_drawSpellbook();
754 void gui_drawSpellbookScrollArrow(
int x,
int y,
int direction);
755 void gui_updateSlotAfterScrollUse();
756 void gui_updateControls();
757 void gui_toggleButtons();
758 void gui_setPlayFieldButtons();
759 void gui_setInventoryButtons();
760 void gui_setStatsListButtons();
761 void gui_setSwapCharacterButtons();
762 void gui_setCastOnWhomButtons();
763 void gui_initButton(
int index,
int x = -1,
int y = -1,
int val = -1)
override;
766 int clickedInventoryNextPage(
Button *button);
767 int clickedPortraitRestore(
Button *button);
768 int clickedCharPortraitDefault(
Button *button);
769 virtual int clickedCamp(
Button *button);
770 int clickedSceneDropPickupItem(
Button *button);
771 int clickedCharPortrait2(
Button *button);
772 int clickedWeaponSlot(
Button *button);
773 int clickedCharNameLabelRight(
Button *button);
774 int clickedInventorySlot(
Button *button);
775 int clickedEatItem(
Button *button);
776 int clickedInventoryPrevChar(
Button *button);
777 int clickedInventoryNextChar(
Button *button);
778 int clickedSpellbookTab(
Button *button);
779 int clickedSpellbookList(
Button *button);
780 int clickedCastSpellOnCharacter(
Button *button);
781 int clickedUpArrow(
Button *button);
782 int clickedDownArrow(
Button *button);
783 int clickedLeftArrow(
Button *button);
784 int clickedRightArrow(
Button *button);
785 int clickedTurnLeftArrow(
Button *button);
786 int clickedTurnRightArrow(
Button *button);
787 int clickedAbortCharSwitch(
Button *button);
788 int clickedSceneThrowItem(
Button *button);
789 int clickedSceneSpecial(
Button *button);
790 int clickedSpellbookAbort(
Button *button);
791 int clickedSpellbookScroll(
Button *button);
792 int clickedButtonReturnIndex(
Button *button);
794 void gui_processCharPortraitClick(
int index);
795 void gui_processWeaponSlotClickLeft(
int charIndex,
int slotIndex);
796 void gui_processWeaponSlotClickRight(
int charIndex,
int slotIndex);
797 void gui_processInventorySlotClick(
int slot);
799 virtual void gui_updateAnimations() {}
801 static const uint8 _buttonList1[];
802 int _buttonList1Size;
803 static const uint8 _buttonList2[];
804 int _buttonList2Size;
805 static const uint8 _buttonList3[];
806 int _buttonList3Size;
807 static const uint8 _buttonList4[];
808 int _buttonList4Size;
809 static const uint8 _buttonList5[];
810 int _buttonList5Size;
811 static const uint8 _buttonList6[];
812 int _buttonList6Size;
813 static const uint8 _buttonList7[];
814 int _buttonList7Size;
815 static const uint8 _buttonList8[];
816 int _buttonList8Size;
818 EoBGuiButtonDef *_buttonDefs;
820 const char *
const *_characterGuiStringsHp;
821 const char *
const *_characterGuiStringsWp;
822 const char *
const *_characterGuiStringsWr;
823 const char *
const *_characterGuiStringsSt;
824 const char *
const *_characterGuiStringsIn;
826 const char *
const *_characterStatusStrings7;
827 const char *
const *_characterStatusStrings8;
828 const char *
const *_characterStatusStrings9;
829 const char *
const *_characterStatusStrings12;
830 const char *
const *_characterStatusStrings13;
832 const uint16 *_inventorySlotsX;
833 const uint8 *_inventorySlotsY;
834 Screen::FontId _invFont1;
835 Screen::FontId _invFont2;
836 Screen::FontId _invFont3;
837 Screen::FontId _invFont4;
838 Screen::FontId _invFont5;
839 Screen::FontId _invFont6;
840 Screen::FontId _conFont;
841 Screen::FontId _titleFont;
842 Screen::FontId _bookFont;
843 Screen::FontId _hpStatFont;
844 const uint8 **_compassShapes;
845 uint8 _charExchangeSwap;
847 bool _configHpBarGraphs;
848 bool _configMouseBtSwap;
853 void setupDialogueButtons(
int presetfirst,
int numStr, va_list &args);
854 void initDialogueSequence();
855 void restoreAfterDialogueSequence();
856 void drawSequenceBitmap(
const char *file,
int destRect,
int x1,
int y1,
int flags);
857 int runDialogue(
int dialogueTextId,
int numStr,
int loopButtonId, ...);
862 const char *
const *_chargenStatStrings;
863 const char *
const *_chargenRaceSexStrings;
864 const char *
const *_chargenClassStrings;
865 const char *
const *_chargenAlignmentStrings;
867 const char *
const *_pryDoorStrings;
868 const char *
const *_warningStrings;
870 const char *
const *_ripItemStrings;
871 const char *
const *_cursedString;
872 const char *
const *_enchantedString;
873 const char *
const *_magicObjectStrings;
874 const char *
const *_magicObjectString5;
875 const char *
const *_patternSuffix;
876 const char *
const *_patternGrFix1;
877 const char *
const *_patternGrFix2;
878 const char *
const *_validateArmorString;
879 const char *
const *_validateCursedString;
880 const char *
const *_validateNoDropString;
881 const char *
const *_potionStrings;
882 const char *
const *_wandStrings;
883 const char *
const *_itemMisuseStrings;
885 const char *
const *_suffixStringsRings;
886 const char *
const *_suffixStringsPotions;
887 const char *
const *_suffixStringsWands;
889 const char *
const *_takenStrings;
890 const char *
const *_potionEffectStrings;
892 const char *
const *_yesNoStrings;
893 const char *
const *_npcMaxStrings;
894 const char *
const *_okStrings;
895 const char *
const *_npcJoinStrings;
896 const char *
const *_cancelStrings;
897 const char *
const *_abortStrings;
900 void restParty_displayWarning(
const char *str);
901 bool restParty_updateMonsters();
902 int restParty_getCharacterWithLowestHp();
903 bool restParty_checkHealSpells(
int charIndex);
904 bool restParty_checkSpellsToLearn();
905 virtual void restParty_npc() {}
906 virtual bool restParty_extraAbortCondition();
909 void delay(uint32 millis,
bool doUpdate =
false,
bool isMainLoop =
false)
override;
910 void pauseEngineIntern(
bool pause)
override;
912 virtual void displayParchment(
int id);
913 int countResurrectionCandidates();
916 virtual const uint8 **makePortalShapes();
918 virtual void seq_segaPausePlayer(
bool pause) {}
919 bool checkPassword();
923 virtual int resurrectionSelectDialogue() = 0;
924 virtual void useHorn(
int charIndex,
int weaponSlot) {}
925 virtual bool checkPartyStatusExtra() = 0;
926 virtual void drawLightningColumn() {}
927 virtual int charSelectDialogue() {
return -1; }
928 virtual void characterLevelGain(
int charIndex) {}
930 const uint8 *_cgaMappingDefault;
931 const uint8 *_cgaMappingAlt;
932 const uint8 *_cgaMappingInv;
933 const uint8 *_cgaMappingItemsL;
934 const uint8 *_cgaMappingItemsS;
935 const uint8 *_cgaMappingThrown;
936 const uint8 *_cgaMappingIcons;
937 const uint8 *_cgaMappingDeco;
938 const uint8 *_cgaMappingLevel[5];
939 const uint8 *_cgaLevelMappingIndex;
942 const uint8 *_palette16c[10];
944 bool _enableHiResDithering;
948 virtual void makeNameShapes(
int charId = -1) {}
949 virtual void makeFaceShapes(
int charId = -1);
953 bool saveAsOriginalSaveFile(
int slot = -1);
955 void *generateMonsterTempData(LevelTempData *tmp)
override;
956 void restoreMonsterTempData(LevelTempData *tmp)
override;
957 void releaseMonsterTempData(LevelTempData *tmp)
override;
958 void *generateWallOfForceTempData(LevelTempData *tmp)
override;
959 void restoreWallOfForceTempData(LevelTempData *tmp)
override;
960 void releaseWallOfForceTempData(LevelTempData *tmp)
override;
962 const char *
const *_saveLoadStrings;
965 const char *
const *_mnWord;
966 const char *
const *_mnPrompt;
970 const char *_rrNames[10];
976 bool _closeSpellbookAfterUse;
982 void useSlotWeapon(
int charIndex,
int slotIndex, Item item);
983 int closeDistanceAttack(
int charIndex, Item item);
984 int thrownAttack(
int charIndex,
int slotIndex, Item item);
985 int projectileWeaponAttack(
int charIndex, Item item);
986 virtual void playStrikeAnimation(uint8 pos, Item itm) {}
988 void inflictMonsterDamage(EoBMonsterInPlay *m,
int damage,
bool giveExperience);
989 void calcAndInflictMonsterDamage(EoBMonsterInPlay *m,
int times,
int pips,
int offs,
int flags,
int savingThrowType,
int savingThrowEffect);
990 void calcAndInflictCharacterDamage(
int charIndex,
int times,
int itemOrPips,
int useStrModifierOrBase,
int flags,
int savingThrowType,
int savingThrowEffect);
991 int calcCharacterDamage(
int charIndex,
int times,
int itemOrPips,
int useStrModifierOrBase,
int flags,
int savingThrowType,
int damageType);
992 void inflictCharacterDamage(
int charIndex,
int damage);
994 bool characterAttackHitTest(
int charIndex,
int monsterIndex,
int item,
int attackType);
995 bool monsterAttackHitTest(EoBMonsterInPlay *m,
int charIndex);
996 bool flyingObjectMonsterHit(EoBFlyingObject *fo,
int monsterIndex);
997 bool flyingObjectPartyHit(EoBFlyingObject *fo);
999 void monsterCloseAttack(EoBMonsterInPlay *m);
1000 void monsterSpellCast(EoBMonsterInPlay *m,
int type);
1001 void statusAttack(
int charIndex,
int attackStatusFlags,
const char *attackStatusString,
int savingThrowType, uint32 effectDuration,
int restoreEvent,
int noRefresh);
1003 int calcMonsterDamage(EoBMonsterInPlay *m,
int times,
int pips,
int offs,
int flags,
int savingThrowType,
int savingThrowEffect);
1004 int calcDamageModifers(
int charIndex, EoBMonsterInPlay *m,
int item,
int itemType,
int useStrModifier);
1005 bool trySavingThrow(
void *target,
int hpModifier,
int level,
int type,
int race);
1006 bool specialAttackSavingThrow(
int charIndex,
int type);
1007 int getSaveThrowModifier(
int hpModifier,
int level,
int type);
1008 bool calcDamageCheckItemType(
int itemType);
1009 int savingThrowReduceDamage(
int savingThrowEffect,
int damage);
1010 bool tryMonsterAttackEvasion(EoBMonsterInPlay *m);
1011 int getStrHitChanceModifier(
int charIndex);
1012 int getStrDamageModifier(
int charIndex);
1013 int getDexHitChanceModifier(
int charIndex);
1014 int getMonsterAcHitChanceModifier(
int charIndex,
int monsterAc);
1015 void explodeMonster(EoBMonsterInPlay *m);
1017 int _dstMonsterIndex;
1018 bool _preventMonsterFlash;
1019 int8 _sceneShakeCountdown;
1020 int16 _foundMonstersArray[5];
1021 int8 _monsterBlockPosArray[6];
1022 const uint8 *_monsterAcHitChanceTable1;
1023 const uint8 *_monsterAcHitChanceTable2;
1026 void useMagicBookOrSymbol(
int charIndex,
int type);
1027 void useMagicScroll(
int charIndex,
int type,
int weaponSlot);
1028 void usePotion(
int charIndex,
int weaponSlot);
1029 void useWand(
int charIndex,
int weaponSlot);
1031 virtual void turnUndeadAuto() {}
1032 virtual void turnUndeadAutoHit() = 0;
1034 void castSpell(
int spell,
int weaponSlot);
1035 void removeCharacterEffect(
int spell,
int charIndex,
int showWarning);
1036 void removeAllCharacterEffects(
int charIndex);
1037 void castOnWhomDialogue();
1038 void startSpell(
int spell);
1040 void sparkEffectDefensive(
int charIndex);
1041 void sparkEffectOffensive();
1042 void setSpellEventTimer(
int spell,
int timerBaseFactor,
int timerLength,
int timerLevelFactor,
int updateExistingTimer);
1043 void sortCharacterSpellList(
int charIndex);
1045 bool magicObjectDamageHit(EoBFlyingObject *fo,
int dcTimes,
int dcPips,
int dcOffs,
int level);
1046 bool magicObjectStatusHit(EoBMonsterInPlay *m,
int type,
bool tryEvade,
int mod);
1047 bool turnUndeadHit(EoBMonsterInPlay *m,
int hitChance,
int casterLevel);
1048 void causeWounds(
int dcTimes,
int dcPips,
int dcOffs);
1050 int getMagicWeaponSlot(
int charIndex);
1051 int createMagicWeaponType(
int invFlags,
int handFlags,
int armorClass,
int allowedClasses,
int dmgNum,
int dmgPips,
int dmgInc,
int extraProps);
1052 Item createMagicWeaponItem(
int flags,
int icon,
int value,
int type);
1053 void removeMagicWeaponItem(Item item);
1055 void updateWallOfForceTimers();
1056 void destroyWallOfForce(
int index);
1058 int findSingleSpellTarget(
int dist);
1060 int findFirstCharacterSpellTarget();
1061 int findNextCharacterSpellTarget(
int curCharIndex);
1062 int charDeathSavingThrow(
int charIndex,
int div);
1064 void printWarning(
const char *str);
1065 void printNoEffectWarning();
1067 void spellCallback_start_empty() {}
1068 bool spellCallback_end_empty(
void *) {
return true; }
1069 void spellCallback_start_armor();
1070 void spellCallback_start_burningHands();
1071 void spellCallback_start_detectMagic();
1072 bool spellCallback_end_detectMagic(
void *);
1073 void spellCallback_start_magicMissile();
1074 bool spellCallback_end_magicMissile(
void *obj);
1075 void spellCallback_start_shockingGrasp();
1076 bool spellCallback_end_shockingGraspFlameBlade(
void *obj);
1077 void spellCallback_start_improvedIdentify();
1078 void spellCallback_start_melfsAcidArrow();
1079 bool spellCallback_end_melfsAcidArrow(
void *obj);
1080 void spellCallback_start_dispelMagic();
1081 void spellCallback_start_fireball();
1082 bool spellCallback_end_fireball(
void *obj);
1083 void spellCallback_start_flameArrow();
1084 bool spellCallback_end_flameArrow(
void *obj);
1085 void spellCallback_start_holdPerson();
1086 bool spellCallback_end_holdPerson(
void *obj);
1087 void spellCallback_start_lightningBolt();
1088 bool spellCallback_end_lightningBolt(
void *obj);
1089 void spellCallback_start_vampiricTouch();
1090 bool spellCallback_end_vampiricTouch(
void *obj);
1091 void spellCallback_start_fear();
1092 void spellCallback_start_iceStorm();
1093 bool spellCallback_end_iceStorm(
void *obj);
1094 void spellCallback_start_stoneSkin();
1095 void spellCallback_start_removeCurse();
1096 void spellCallback_start_coneOfCold();
1097 void spellCallback_start_holdMonster();
1098 bool spellCallback_end_holdMonster(
void *obj);
1099 void spellCallback_start_wallOfForce();
1100 void spellCallback_start_disintegrate();
1101 void spellCallback_start_fleshToStone();
1102 void spellCallback_start_stoneToFlesh();
1103 void spellCallback_start_trueSeeing();
1104 bool spellCallback_end_trueSeeing(
void *);
1105 void spellCallback_start_slayLiving();
1106 void spellCallback_start_powerWordStun();
1107 void spellCallback_start_causeLightWounds();
1108 void spellCallback_start_cureLightWounds();
1109 void spellCallback_start_aid();
1110 bool spellCallback_end_aid(
void *obj);
1111 void spellCallback_start_flameBlade();
1112 void spellCallback_start_slowPoison();
1113 bool spellCallback_end_slowPoison(
void *obj);
1114 void spellCallback_start_createFood();
1115 void spellCallback_start_removeParalysis();
1116 void spellCallback_start_causeSeriousWounds();
1117 void spellCallback_start_cureSeriousWounds();
1118 void spellCallback_start_neutralizePoison();
1119 void spellCallback_start_causeCriticalWounds();
1120 void spellCallback_start_cureCriticalWounds();
1121 void spellCallback_start_flameStrike();
1122 bool spellCallback_end_flameStrike(
void *obj);
1123 void spellCallback_start_raiseDead();
1124 void spellCallback_start_harm();
1125 void spellCallback_start_heal();
1126 void spellCallback_start_layOnHands();
1127 void spellCallback_start_turnUndead();
1128 bool spellCallback_end_monster_lightningBolt(
void *obj);
1129 bool spellCallback_end_monster_fireball1(
void *obj);
1130 bool spellCallback_end_monster_fireball2(
void *obj);
1131 bool spellCallback_end_monster_deathSpell(
void *obj);
1132 bool spellCallback_end_monster_disintegrate(
void *obj);
1133 bool spellCallback_end_monster_causeCriticalWounds(
void *obj);
1134 bool spellCallback_end_monster_fleshToStone(
void *obj);
1136 int8 _openBookSpellLevel;
1137 int8 _openBookSpellSelectedItem;
1138 int8 _openBookSpellListOffset;
1139 uint8 _openBookChar;
1140 uint8 _openBookType;
1141 uint8 _openBookCharBackup;
1142 uint8 _openBookTypeBackup;
1143 uint8 _openBookCasterLevel;
1144 const char *
const *_openBookSpellList;
1145 int8 *_openBookAvailableSpells;
1146 uint8 _activeSpellCharId;
1147 uint8 _activeSpellCharacterPos;
1149 int _characterSpellTarget;
1150 bool _returnAfterSpellCallback;
1152 typedef void (EoBCoreEngine::*SpellStartCallback)();
1153 typedef bool (EoBCoreEngine::*SpellEndCallback)(
void *obj);
1157 SpellStartCallback startCallback;
1159 const uint16 *timingPara;
1160 SpellEndCallback endCallback;
1169 struct WallOfForce {
1174 WallOfForce *_wallsOfForce;
1176 const char *
const *_bookNumbers;
1177 const char *
const *_mageSpellList;
1178 int _mageSpellListSize;
1179 int _clericSpellOffset;
1180 const char *
const *_clericSpellList;
1181 const char *
const *_spellNames;
1182 const char *
const *_mageSpellList2;
1183 const char *
const *_clericSpellList2;
1184 const char *
const *_magicStrings1;
1185 const char *
const *_magicStrings2;
1186 const char *
const *_magicStrings3;
1187 const char *
const *_magicStrings4;
1188 const char *
const *_magicStrings6;
1189 const char *
const *_magicStrings7;
1190 const char *
const *_magicStrings8;
1191 const char *
const *_magicStrings9;
1193 uint8 *_spellAnimBuffer;
1195 const uint8 *_sparkEffectDefSteps;
1196 const uint8 *_sparkEffectDefSubSteps;
1197 const uint8 *_sparkEffectDefShift;
1198 const uint8 *_sparkEffectDefAdd;
1199 const uint8 *_sparkEffectDefX;
1200 const uint8 *_sparkEffectDefY;
1201 const uint32 *_sparkEffectOfFlags1;
1202 const uint32 *_sparkEffectOfFlags2;
1203 const uint8 *_sparkEffectOfShift;
1204 const uint8 *_sparkEffectOfX;
1205 const uint8 *_sparkEffectOfY;
1207 const uint8 *_magicFlightObjectProperties;
1208 const uint8 *_turnUndeadEffect;
1209 const uint8 *_burningHandsDest;
1210 const int8 *_coneOfColdDest1;
1211 const int8 *_coneOfColdDest2;
1212 const int8 *_coneOfColdDest3;
1213 const int8 *_coneOfColdDest4;
1214 const uint8 *_coneOfColdGfxTbl;
1215 int _coneOfColdGfxTblSize;
1218 EoBMenuDef *_menuDefs;
1219 const EoBMenuButtonDef *_menuButtonDefs;
1221 int _prefMenuPlatformOffset;
1228 const char *
const *_menuStringsMain;
1229 const char *
const *_menuStringsSaveLoad;
1230 const char *
const *_menuStringsOnOff;
1231 const char *
const *_menuStringsSpells;
1232 const char *
const *_menuStringsRest;
1233 const char *
const *_menuStringsDrop;
1234 const char *
const *_menuStringsExit;
1235 const char *
const *_menuStringsStarve;
1236 const char *
const *_menuStringsScribe;
1237 const char *
const *_menuStringsDrop2;
1238 const char *
const *_menuStringsHead;
1239 const char *
const *_menuStringsPoison;
1240 const char *
const *_menuStringsMgc;
1241 const char *
const *_menuStringsPrefs;
1242 const char *
const *_menuStringsRest2;
1243 const char *
const *_menuStringsRest3;
1244 const char *
const *_menuStringsRest4;
1245 const char *
const *_menuStringsDefeat;
1246 const char *_errorSlotEmptyString;
1247 const char *_errorSlotNoNameString;
1248 const char *_menuOkString;
1249 const char *
const *_2431Strings;
1250 const char *
const *_textInputCharacterLines;
1251 int _textInputCharacterLinesSize;
1252 const char *
const *_textInputSelectStrings;
1253 const char *
const *_menuStringsTransfer;
1254 const char *
const *_transferStringsScummVM;
1255 const char *
const *_menuStringsSpec;
1256 const char *
const *_menuStringsSpellNo;
1257 const char *
const *_menuYesNoStrings;
1258 const char *
const *_saveNamePatterns;
1260 const uint8 *_spellLevelsMage;
1261 int _spellLevelsMageSize;
1262 const uint8 *_spellLevelsCleric;
1263 int _spellLevelsClericSize;
1264 const uint8 *_numSpellsCleric;
1265 const uint8 *_numSpellsWisAdj;
1266 const uint8 *_numSpellsPal;
1267 const uint8 *_numSpellsMage;
1270 void snd_playSong(
int id,
bool loop =
true);
1271 virtual void snd_playLevelScore() = 0;
1272 void snd_playSoundEffect(
int id,
int volume = 0xFF)
override;
1273 void snd_stopSound();
1274 void snd_fadeOut(
int del = 160);
1275 virtual void snd_loadAmigaSounds(
int level,
int sub) = 0;
1276 virtual void snd_updateLevelScore() = 0;
1278 const char **_amigaSoundMap;
1279 const char *
const *_amigaLevelSoundList1;
1280 const char *
const *_amigaLevelSoundList2;
1282 int _amigaCurSoundFile;
1285 static const char *
const kKeymapName;
1288 void printStringIntern_statsPage(
const char *str,
int x,
int y,
int col);
1289 void printStringIntern_spellBook(
const char *str,
int x,
int y,
int col1,
int col2);
1294 #endif // ENABLE_EOB
Definition: default_display_client.h:78
Definition: algorithm.h:29
Definition: detection.h:27