25 #include "engines/engine.h" 27 #include "common/array.h" 28 #include "common/error.h" 29 #include "common/hashmap.h" 30 #include "common/keyboard.h" 31 #include "common/random.h" 32 #include "common/rect.h" 33 #include "common/stack.h" 34 #include "common/util.h" 35 #include "audio/mixer.h" 37 #include "backends/keymapper/action.h" 38 #include "backends/keymapper/keymapper.h" 41 #include "agos/detection.h" 59 class SeekableReadStream;
69 class SeekableAudioStream;
74 class ElviraAtariSTPlayer;
94 kActionToggleFastMode,
95 kActionToggleSwitchCharacter,
96 kActionToggleSubtitle,
98 kActionToggleHitboxName,
99 kActionToggleSoundEffects,
100 kActionToggleBackgroundSound,
101 kActionToggleFightMode,
103 kActionTextSpeedFast,
104 kActionTextSpeedMedium,
105 kActionTextSpeedSlow,
106 kActionSpeed_GTYPEPP,
114 #define CHECK_BOUNDS(x, y) assert((uint)(x) < ARRAYSIZE(y)) 132 struct SubroutineLine;
142 uint16 width, height;
153 HitArea() { memset(
this, 0,
sizeof(*
this)); }
215 AnimTable() { memset(
this, 0,
sizeof(*
this)); }
219 ANIMATE_INT = 1 << 1,
220 ANIMATE_EVENT = 1 << 2,
221 SCROLL_EVENT = 1 << 3,
222 PLAYER_DAMAGE_EVENT = 1 << 4,
223 MONSTER_DAMAGE_EVENT = 1 << 5,
224 PN_FADE_EVENT = 1 << 6
234 #ifndef REDUCE_MEMORY_USAGE 235 # define _OPCODE(ver, x) { &ver::x, #x } 237 # define _OPCODE(ver, x) { &ver::x, "" } 243 static const byte SIMON1_RHYTHM_SFX[];
246 static const uint16 MUSIC_INDEX_BASE_SIMON2_GM = 1128 / 4;
248 static const uint16 MUSIC_INDEX_BASE_SIMON2_MT32 = (1128 + 612) / 4;
265 void syncSoundSettings()
override;
268 void syncSoundSettingsIntern();
269 void pauseEngineIntern(
bool pause)
override;
271 virtual void setupOpcodes();
272 uint16 _numOpcodes, _opcode;
276 void setupVgaOpcodes();
277 VgaOpcodeProc _vga_opcode_table[100];
278 uint8 _numVideoOpcodes;
280 virtual void setupVideoOpcodes(VgaOpcodeProc *op);
285 virtual void setupGame();
287 int getGameId()
const;
288 int getGameType()
const;
289 uint32 getFeatures()
const;
290 const char *getExtra()
const;
293 const char *getFileName(
int type)
const;
297 uint16 _vcGetOutOfCode;
300 uint32 *_gameOffsetsPtr;
302 uint8 _numMusic, _numSFX;
306 uint8 _numBitArray1, _numBitArray2, _numBitArray3, _numItemStore;
309 uint8 _vgaBaseDelay, _vgaPeriod;
311 uint16 _musicIndexBase;
312 uint16 _soundIndexBase;
313 uint16 _tableIndexBase;
314 uint16 _textIndexBase;
317 uint32 _tableMemSize;
328 byte *_strippedTxtMem;
331 uint32 _stringTabNum, _stringTabPos, _stringTabSize;
332 byte **_stringTabPtr;
334 Item **_itemArrayPtr;
335 uint32 _itemArraySize;
336 uint32 _itemArrayInited;
342 const byte *_codePtr;
344 byte **_localStringtable;
345 uint16 _stringIdLocalMin, _stringIdLocalMax;
348 uint16 _numRoomStates;
355 byte *_xtablesHeapPtrOrg;
356 uint32 _xtablesHeapCurPosOrg;
360 byte *_tablesHeapPtr, *_tablesHeapPtrOrg, *_tablesheapPtrNew;
361 uint32 _tablesHeapSize, _tablesHeapCurPos, _tablesHeapCurPosOrg;
362 uint32 _tablesHeapCurPosNew;
367 uint8 _recursionDepth;
375 bool _runScriptReturn1;
376 bool _runScriptCondition[40];
377 int16 _runScriptReturn[40];
379 bool _noParentNotify;
392 bool _useSimon2LanguageOverlay;
394 bool _copyProtection;
399 int16 _chanceModifier;
400 bool _restoreWindow6;
401 int16 _scrollX, _scrollXMax;
402 int16 _scrollY, _scrollYMax;
403 int16 _scrollCount, _scrollFlag;
404 uint16 _scrollWidth, _scrollHeight;
405 const byte *_scrollImage;
410 int16 _classMask, _classMode1, _classMode2;
417 uint16 _currentRoom, _superRoomNumber;
420 uint16 _hyperLink, _newLines;
421 uint16 _oracleMaxScrollY, _noOracleScroll;
424 int16 _scriptVerb, _scriptNoun1, _scriptNoun2;
425 int16 _scriptAdj1, _scriptAdj2;
430 Item *_subjectItem, *_objectItem;
431 Item *_currentPlayer;
433 Item *_hitAreaObjectItem;
437 Item *_hitAreaSubjectItem;
438 HitArea *_currentBox, *_currentVerbBox, *_lastVerbOn;
439 uint16 _currentBoxNum;
440 uint16 _needHitAreaRecalc;
455 int16 _printCharCurPos, _printCharMaxPos, _printCharPixelCount;
456 uint16 _numLettersToPrint;
460 uint32 getTime()
const;
464 uint32 _clockStopped, _gameStoppedClock;
467 TimeEvent *_firstTimeStruct, *_pendingDeleteTimeEvent;
474 bool _animatePointer;
475 byte _maxCursorWidth, _maxCursorHeight;
476 byte _mouseAnim, _mouseAnimMax, _mouseCursor;
477 byte _currentMouseAnim, _currentMouseCursor;
478 byte _oldMouseAnimMax, _oldMouseCursor;
479 uint16 _mouseHideCount;
482 bool _leftButtonDown, _rightButtonDown;
483 byte _leftButton, _leftButtonCount, _leftButtonOld;
486 bool _leftClick, _rightClick;
493 volatile uint16 _videoLockOut;
494 uint16 _scrollUpHitArea;
495 uint16 _scrollDownHitArea;
497 bool _fastFadeOutFlag;
500 uint16 _fastFadeCount;
501 volatile uint16 _fastFadeInFlag;
504 uint16 _screenWidth, _screenHeight;
505 uint16 _internalWidth, _internalHeight;
510 bool _exitCutscene, _picture8600;
513 int16 _lastMusicPlayed;
514 int16 _nextMusicToPlay;
515 bool _showPreposition;
516 bool _showMessageFlag;
520 uint16 _copyScnFlag, _vgaSpriteChanged;
522 byte *_block, *_blockEnd;
523 byte *_vgaMemPtr, *_vgaMemEnd, *_vgaMemBase;
524 byte *_vgaFrozenBase, *_vgaRealBase;
535 uint16 _vgaWaitFor, _lastVgaWaitFor;
536 uint16 _vgaCurSpriteId, _vgaCurZoneNum;
541 int16 _scaleX, _scaleY, _scaleWidth, _scaleHeight;
547 uint16 width, height;
552 kPnAmigaTextStartX = 2,
553 kPnAmigaLowresWidth = 320,
554 kPnAmigaMainTextTop = 136,
555 kPnAmigaInputTop = 224,
556 kPnAmigaTextPlaneWidth = 552
559 uint8 _opcode177Var1, _opcode177Var2;
560 uint8 _opcode178Var1, _opcode178Var2;
562 Item *_objectArray[50];
563 Item *_itemStore[50];
565 uint16 _shortText[40];
566 uint16 _shortTextX[40];
567 uint16 _shortTextY[40];
568 uint16 _longText[40];
569 uint16 _longSound[40];
571 uint16 _bitArray[128];
572 uint16 _bitArrayTwo[16];
573 uint16 _bitArrayThree[16];
574 int16 *_variableArray;
575 int16 *_variableArray2;
576 int16 *_variableArrayPtr;
581 bool _pnAmigaUiVisible;
588 TextLocation _textLocation1, _textLocation2, _textLocation3, _textLocation4;
590 byte _awaitTwoByteToken;
592 byte *_byteTokenStrings;
593 byte *_twoByteTokens;
594 byte *_twoByteTokenStrings;
595 byte *_secondTwoByteTokenStrings;
596 byte *_thirdTwoByteTokenStrings;
597 byte _textBuffer[180];
602 byte _stringReturnBuffer[2][180];
614 const uint16 *_pathFindArray[100];
616 uint8 _pathValues[400];
620 uint8 _pathValues1[400];
624 uint8 _currentPalette[768];
625 uint8 _displayPalette[768];
626 uint8 _simon2LanguageFlagTimer;
627 bool _simon2LanguageFlagClearPending;
629 uint16 _pnPaletteBanks[2][16];
630 uint16 _pnFadeCurrent[16];
631 uint16 _pnDayNightControllerSelectorMask;
632 uint8 _pnDayNightControllerLastStage;
633 int16 _pnLastClockMinutes;
634 bool _pnHavePaletteBank[2];
635 uint16 _pnDayNightControllerTickCounter;
637 byte _videoBuf1[32000];
638 uint16 _videoWindows[128];
639 const byte *_pak98Buf;
640 byte _paletteModNext;
646 uint16 _moveXMin, _moveYMin;
647 uint16 _moveXMax, _moveYMax;
653 byte _lettersToPrintBuf[80];
675 uint16 _effectsVolume;
677 bool _pendingWaitCommandDelay;
678 bool _pendingPNWaitScreenDelay;
680 uint8 _saveGameNameLen;
681 uint16 _saveLoadRowCurPos;
682 uint16 _numSaveGameRows;
683 bool _saveDialogFlag;
687 byte _saveLoadType, _saveLoadSlot;
688 char _saveLoadName[108];
699 const byte *_vc10BasePtrOld;
700 byte _hebrewCharWidths[32];
707 uint32 _curSfxFileSize;
708 uint16 _sampleEnd, _sampleWait;
711 virtual uint16 to16Wrapper(uint value);
712 virtual uint16 readUint16Wrapper(
const void *src);
713 virtual uint32 readUint32Wrapper(
const void *src);
721 void allocateStringTable(
int num);
722 void setupStringTable(byte *mem,
int num);
723 void setupLocalStringTable(byte *mem,
int num);
727 virtual void loadGamePcFile();
729 void decompressData(
const char *srcName, byte *dst, uint32 offset, uint32 srcSize, uint32 dstSize);
731 void drawPnSqueezedChar(
WindowBlock *window, uint x, uint y, byte chr);
732 bool isPnAmiga()
const;
733 bool isPnAmigaMainTextWindow(
const WindowBlock *window)
const;
734 bool isPnAmigaInputWindow(
const WindowBlock *window)
const;
735 bool isPnAmigaTextWindow(
const WindowBlock *window)
const;
737 uint16 getPnAmigaWindowInteriorHeight(
const WindowBlock *window)
const;
738 uint16 getPnAmigaTextPlaneWidth(
const WindowBlock *window)
const;
739 uint16 getPnAmigaTextLineStep()
const;
740 uint16 getPnAmigaGlyphAdvance(byte chr)
const;
741 uint16 getPnAmigaGlyphRenderWidth(byte chr)
const;
742 uint16 getPnAmigaGlyphHeight()
const;
743 bool usePnAmigaDoubleHeightTopaz()
const;
744 void ensurePnAmigaTextPlanes();
748 void compositePnAmigaTextPlane(
WindowBlock *window);
750 void drawPnAmigaTopazChar(
WindowBlock *window, byte chr);
751 void drawPnAmigaTextWindowBorders();
753 void loadOffsets(
const char *filename,
int number, uint32 &file, uint32 &offset, uint32 &compressedSize, uint32 &size);
754 void loadSound(uint16 sound, int16 pan, int16 vol, uint16 type);
755 void playSfx(uint16 sound, uint16 freq, uint16 flags,
bool digitalOnly =
false,
bool midiOnly =
false);
756 void loadSound(uint16 sound, uint16 freq, uint16 flags);
758 virtual void playMidiSfx(uint16 sound);
759 void loadVoice(uint speechId);
762 void loadSoundFile(
const char *filename);
764 int getUserFlag(
Item *item,
int a);
765 int getUserFlag1(
Item *item,
int a);
766 int getUserItem(
Item *item,
int n);
767 void setUserFlag(
Item *item,
int a,
int b);
768 void setUserItem(
Item *item,
int n,
int m);
770 void paletteFadeOut(byte *palPtr, uint num, uint size);
772 void *allocateItem(uint size);
773 void *allocateTable(uint size);
774 void alignTableMem();
776 Child *findChildOfType(
Item *i, uint child);
777 Child *allocateChildBlock(
Item *i, uint type, uint size);
779 void allocItemHeap();
780 void allocTablesHeap();
789 Subroutine *getSubroutineByID(uint subroutineId);
792 void dumpAllSubroutines();
793 void dumpAllVgaImageFiles();
794 void dumpAllVgaScriptFiles();
795 void dumpSubroutines();
798 const byte *dumpOpcode(
const byte *p);
806 virtual void executeOpcode(
int opcode) = 0;
811 uint getNextVarContents();
812 uint getVarWrapper();
815 uint readVariable(uint16 variable);
816 void writeNextVarContents(uint16 contents);
817 void writeVariable(uint16 variable, uint16 contents);
819 Item *derefItem(uint item);
820 Item *getNextItemPtr();
821 uint getNextItemID();
822 uint getItem1ID() {
return 1;}
823 uint itemPtrToID(
Item *
id);
827 void uncompressText(byte *ptr);
828 byte *uncompressToken(byte a, byte *ptr);
830 void showMessageFormat(MSVC_PRINTF
const char *s, ...)
GCC_PRINTF(2, 3);
831 const byte *getStringPtrByID(uint16 stringId,
bool upperCase =
false);
832 void loadSimon2LanguageOverlay();
833 bool hasSimon2LanguageFiles()
const;
835 void cycleSimon2LanguageOverlay();
837 const byte *getLocalStringByID(uint16 stringId);
838 uint getNextStringID();
840 void addTimeEvent(int32 timeout, uint16 subroutineId);
843 Item *findInByClass(
Item *i, int16 m);
844 Item *nextInByClass(
Item *i, int16 m);
845 Item *findMaster(int16 a, int16 n);
846 Item *nextMaster(
Item *item, int16 a, int16 n);
847 int wordMatch(
Item *item, int16 a, int16 n);
849 bool isRoom(
Item *item);
850 bool isObject(
Item *item);
851 bool isPlayer(
Item *item);
853 void itemChildrenChanged(
Item *item);
854 void unlinkItem(
Item *item);
855 void linkItem(
Item *item,
Item *parent);
857 void setItemParent(
Item *item,
Item *parent);
858 void setItemState(
Item *item,
int value);
860 void stopAnimate(uint16 a);
861 void stopAnimateSimon2(uint16 a, uint16 b);
863 void enableBox(uint hitarea);
864 void disableBox(uint hitarea);
865 void moveBox(uint hitarea,
int x,
int y);
866 bool isBoxDead(uint hitarea);
867 void undefineBox(uint hitarea);
868 void defineBox(
int id,
int x,
int y,
int width,
int height,
int flags,
int verb,
Item *itemPtr);
869 void defineBox(uint16
id, uint16 x, uint16 y, uint16 width, uint16 height, uint16 msg1, uint16 msg2, uint16 flags);
873 virtual void resetVerbs();
874 virtual void setVerb(
HitArea * ha);
875 virtual void hitarea_leave(
HitArea * ha,
bool state =
false);
876 void leaveHitAreaById(uint hitarea_id);
878 void sendSync(uint a);
879 void waitForSync(uint a);
881 uint getOffsetOfChild2Param(
SubObject *child, uint prop);
882 void scriptMouseOff();
884 void unfreezeBottom();
890 void setup_cond_c_helper();
892 uint16 getBackExit(
int n);
893 uint16 getDoorState(
Item *item, uint16 d);
894 uint16 getExitOf(
Item *item, uint16 d);
895 void changeDoorState(
SubRoom *r, uint16 d, uint16 n);
896 void setDoorState(
Item *i, uint16 d, uint16 n);
899 Item *getDoorOf(
Item *item, uint16 d);
900 Item *getExitOf_e1(
Item *item, uint16 d);
901 virtual void moveDirn(
Item *i, uint x);
903 virtual int canPlace(
Item *x,
Item *y);
905 int sizeContents(
Item *x);
906 virtual int sizeOfRec(
Item *o,
int d);
907 int sizeRec(
Item *x,
int d);
908 int weighUp(
Item *x);
909 int weightRec(
Item *x,
int d);
910 virtual int weightOf(
Item *x);
914 void drawMenuStrip(uint windowNum, uint menuNum);
915 void lightMenuStrip(
int a);
916 void unlightMenuStrip();
917 void lightMenuBox(uint hitarea);
919 uint menuFor_e2(
Item *item);
920 uint menuFor_ww(
Item *item, uint
id);
921 void clearMenuStrip();
922 void doMenuStrip(uint menuNum);
927 bool loadRoomItems(uint16 item);
929 virtual bool loadTablesIntoMem(uint16 subrId);
930 bool loadXTablesIntoMem(uint16 subrId);
931 void loadTextIntoMem(uint16 stringId);
933 uint loadTextFile(
const char *filename, byte *dst);
937 uint loadTextFile_simon1(
const char *filename, byte *dst);
943 uint loadTextFile_gme(
const char *filename, byte *dst);
947 bool kickoffTimeEvents();
948 void killAllTimers();
951 virtual void runSubroutine101();
952 bool isSimon2LanguageToggleKeyPressed()
const;
953 void refreshSimon2LanguageText();
954 uint8 mapRGBToPaletteIndex(uint8 r, uint8 g, uint8 b)
const;
955 void fillSimon2LanguageFlagRect(
int x1,
int y1,
int x2,
int y2, uint8 color);
956 void restoreSimon2LanguageFlagArea();
957 void drawSimon2LanguageFlag();
962 WindowBlock *openWindow(uint x, uint y, uint w, uint h, uint flags, uint fillColor, uint textColor);
965 void changeWindow(uint a);
966 void closeWindow(uint a);
967 void setTextColor(uint color);
968 virtual void windowPutChar(
WindowBlock *window, byte c, byte b = 0);
971 HitArea *findBox(uint hitarea_id);
972 virtual void boxController(uint x, uint y, uint mode);
973 void handleVerbClicked(uint verb);
974 virtual void clearName();
975 void displayName(
HitArea * ha);
976 void resetNameWindow();
977 void displayBoxStars();
978 void invertBox(
HitArea * ha, byte a, byte b, byte c, byte d);
980 virtual void handleMouseWheelUp();
981 virtual void handleMouseWheelDown();
983 virtual void initMouse();
984 virtual void handleMouseMoved();
985 virtual void drawMousePointer();
987 void drawArrow(uint16 x, uint16 y, int8 dir);
988 virtual void addArrows(
WindowBlock *window, uint8 num);
989 virtual void removeArrows(
WindowBlock *window, uint num);
991 virtual void drawIcon(
WindowBlock *window, uint icon, uint x, uint y);
992 virtual bool hasIcon(
Item *item);
993 virtual uint itemGetIconNumber(
Item *item);
994 virtual uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr);
996 virtual void drawIconArray(uint i,
Item *itemPtr,
int line,
int classMask);
997 void removeIconArray(uint num);
1000 void loadIconFile();
1001 void loadMenuFile();
1003 virtual bool processSpecialKeys();
1004 void hitarea_stuff_helper();
1008 uint getFeebleFontSize(byte chr);
1009 void justifyStart();
1010 void justifyOutPut(byte chr);
1012 void loadZone(uint16 zoneNum,
bool useError =
true);
1014 void animate(uint16 windowNum, uint16 zoneNum, uint16 vgaSpriteId, int16 x, int16 y, uint16 palette,
bool vgaScript =
false);
1015 void setImage(uint16 vgaSpriteId,
bool vgaScript =
false);
1016 void setWindowImage(uint16 mode, uint16 vgaSpriteId,
bool specialCase =
false);
1017 virtual void setWindowImageEx(uint16 mode, uint16 vgaSpriteId);
1022 const char *getPixelLength(
const char *
string, uint16 maxWidth, uint16 &pixels);
1023 bool printNameOf(
Item *item, uint x, uint y);
1024 bool printTextOf(uint a, uint x, uint y);
1025 void printVerbOf(uint hitarea_id);
1026 void showActionString(
const byte *
string);
1028 virtual void printScreenText(uint vgaSpriteId, uint color,
const char *stringPtr, int16 x, int16 y, int16 width);
1030 void renderStringAmiga(uint vgaSpriteId, uint color, uint width, uint height,
const char *txt);
1031 void renderString(uint vgaSpriteId, uint color, uint width, uint height,
const char *txt);
1033 void writeChar(
WindowBlock *window,
int x,
int y,
int offs,
int val);
1035 byte *allocBlock(uint32 size);
1036 void checkNoOverWrite();
1037 void checkRunningAnims();
1038 void checkAnims(uint a);
1039 void checkZonePtrs();
1040 void setZoneBuffers();
1042 void runVgaScript();
1045 bool getBitFlag(uint bit);
1046 void setBitFlag(uint bit,
bool value);
1051 virtual void vc3_loadSprite();
1054 void vc6_ifObjectHere();
1055 void vc7_ifObjectNotHere();
1056 void vc8_ifObjectIsAt();
1057 void vc9_ifObjectStateIs();
1060 void vc13_addToSpriteX();
1061 void vc14_addToSpriteY();
1063 void vc16_waitSync();
1066 void vc20_setRepeat();
1067 void vc21_endRepeat();
1068 virtual void vc22_setPalette();
1069 void vc23_setPriority();
1070 void vc24_setSpriteXY();
1071 void vc25_halt_sprite();
1072 void vc26_setSubWindow();
1073 void vc27_resetSprite();
1074 void vc28_playSFX();
1075 void vc29_stopAllSounds();
1076 void vc30_setFrameRate();
1077 void vc31_setWindow();
1078 void vc33_setMouseOn();
1079 void vc34_setMouseOff();
1080 void vc35_clearWindow();
1081 virtual void vc36_setWindowImage();
1082 void vc38_ifVarNotZero();
1084 void vc40_scrollRight();
1085 void vc41_scrollLeft();
1086 void vc42_delayIfNotEQ();
1092 void vc44_enableBox();
1093 void vc45_disableBox();
1095 void vc48_specialEffect();
1097 void vc55_scanFlag();
1100 void vc17_waitEnd();
1101 void vc32_saveScreen();
1102 void vc37_pokePalette();
1105 void vc43_ifBitSet();
1106 void vc44_ifBitClear();
1107 void vc45_setWindowPalette();
1108 void vc46_setPaletteSlot1();
1109 void vc47_setPaletteSlot2();
1110 void vc48_setPaletteSlot3();
1112 void vc50_clearBit();
1113 void vc51_enableBox();
1114 void vc52_playSound();
1115 void vc53_dissolveIn();
1116 void vc54_dissolveOut();
1117 void vc55_moveBox();
1118 void vc56_fullScreen();
1119 void vc57_blackPalette();
1120 void vc58_checkCodeWheel();
1121 void vc58_changePriority();
1125 void vc60_stopAnimation();
1127 void vc62_fastFadeOut();
1128 virtual void vc63_fastFadeIn();
1131 void vc11_clearPathFinder();
1132 void vc17_setPathfinderItem();
1133 void vc32_copyVar();
1134 void vc37_addToSpriteY();
1135 void vc45_setSpriteX();
1136 void vc46_setSpriteY();
1137 void vc47_addToVar();
1138 virtual void vc48_setPathFinder();
1139 void vc59_ifSpeech();
1140 void vc61_setMaskImage();
1143 void vc56_delayLong();
1144 void vc59_stopAnimations();
1145 void vc64_ifSpeech();
1146 void vc65_slowFadeIn();
1147 void vc66_ifEqual();
1150 void vc69_playSeq();
1151 void vc70_joinSeq();
1152 void vc71_ifSeqWaiting();
1154 void vc73_setMark();
1155 void vc74_clearMark();
1158 void vc75_setScale();
1159 void vc76_setScaleXOffs();
1160 void vc77_setScaleYOffs();
1161 void vc78_computeXY();
1162 void vc79_computePosNum();
1163 void vc80_setOverlayImage();
1164 void vc81_setRandom();
1165 void vc82_getPathValue();
1166 void vc83_playSoundLoop();
1167 void vc84_stopSoundLoop();
1169 void setScriptCondition(
bool cond);
1170 bool getScriptCondition();
1171 void setScriptReturn(
int ret);
1172 int getScriptReturn();
1179 void o_notCarried();
1232 void o_haltAnimation();
1233 void o_restartAnimation();
1236 void o_getChildren();
1239 void o_killAnimate();
1243 void o_closeWindow();
1247 void o_disableBox();
1252 void o_unsetClass();
1257 void o_doClassIcons();
1259 void o_setAdjNoun();
1260 void o_saveUserGame();
1261 void o_loadUserGame();
1263 void o_restoreIcons();
1264 void o_freezeZones();
1265 void o_placeNoIcons();
1266 void o_clearTimers();
1270 int16 moreText(
Item *i);
1271 void lobjFunc(
Item *i,
const char *f);
1272 uint confirmYesOrNo(uint16 x, uint16 y);
1273 uint continueOrQuit();
1275 virtual void printStats();
1276 void synchChain(
Item *i);
1281 void drawImage_init(int16 image, uint16 palette, int16 x, int16 y, uint16 flags);
1286 void drawVertImageCompressed(
VC10_state *state);
1287 void drawVertImageUncompressed(
VC10_state *state);
1289 void setMoveRect(uint16 x, uint16 y, uint16 width, uint16 height);
1295 void updateBackendSurface(
Common::Rect *area = 0)
const;
1296 virtual void clearHiResTextLayer() {}
1298 int vcReadVarOrWord();
1299 uint vcReadNextWord(
bool forceLERead =
false);
1300 uint vcReadNextByte();
1301 uint vcReadVar(uint var);
1302 void vcWriteVar(uint var, int16 value);
1303 void vcSkipNextInstruction();
1305 int getScale(int16 y, int16 x);
1306 void checkScrollX(int16 x, int16 xpos);
1307 void checkScrollY(int16 y, int16 ypos);
1308 void centerScroll();
1310 virtual void clearVideoWindow(uint16 windowNum, uint16 color);
1311 void clearVideoBackGround(uint16 windowNum, uint16 color);
1313 void setPaletteSlot(uint16 srcOffs, uint8 dstOffs);
1314 bool isPNDayNightPaletteMode()
const;
1315 uint8 getPNDesiredPaletteBank()
const;
1316 void notePNClockValueChange();
1317 void resetPNRoomPaletteState();
1318 void buildPNPaletteTarget(uint16 selectorMask, uint16 *target)
const;
1319 uint16 blendPNPaletteColor(uint16 source, uint16 target, uint8 steps)
const;
1320 uint8 getPNDayNightControllerStage()
const;
1321 void startPNDayNightController(uint16 selectorMask);
1322 void updatePNDayNightController(uint16 selectorMask);
1323 void applyPNDayNightPalette(
const uint16 *palette);
1324 void checkOnStopTable();
1325 void checkWaitEndTable();
1327 virtual bool ifObjectHere(uint16 val);
1328 virtual bool ifObjectAt(uint16 a, uint16 b);
1329 virtual bool ifObjectState(uint16 a, int16 b);
1331 bool isVgaQueueEmpty();
1332 void haltAnimation();
1333 void restartAnimation();
1334 void addVgaEvent(uint16 num, uint8 type,
const byte *codePtr, uint16 curSprite, uint16 curZoneNum);
1336 void processVgaEvents();
1337 void schedulePNFadeEvent();
1338 void removePNFadeEvent();
1339 void animateEvent(
const byte *codePtr, uint16 curZoneNum, uint16 curSprite);
1341 void drawStuff(
const byte *src, uint offs);
1347 bool isSpriteLoaded(uint16
id, uint16 zoneNum);
1350 void freeBox(uint index);
1352 void sendWindow(uint a);
1355 void colorBlock(
WindowBlock *window, uint16 x, uint16 y, uint16 w, uint16 h);
1358 void restoreBlock(uint16 left, uint16 top, uint16 right, uint16 bottom);
1361 byte *getBackGround();
1362 byte *getScaleBuf();
1364 byte *convertAmigaImage(
VC10_state *state,
bool compressed);
1366 bool decrunchFile(byte *src, byte *dst, uint32 size);
1367 void loadVGABeardFile(uint16
id);
1368 void loadVGAVideoFile(uint16
id, uint8 type,
bool useError =
true);
1369 bool loadVGASoundFile(uint16
id, uint8 type);
1371 void openGameFile();
1372 void readGameFile(
void *dst, uint32 offs, uint32 size);
1374 virtual void timerProc();
1376 virtual void animateSprites();
1379 void dirtyClipCheck(int16 x, int16 y, int16 w, int16 h);
1380 void dirtyBackGround();
1381 void restoreBackGround();
1384 void clearSurfaces();
1385 void displayScreen();
1387 void dumpVideoScript(
const byte *src,
bool singeOpcode);
1388 virtual void dumpVgaFile(
const byte *vga);
1389 void dumpVgaScript(
const byte *ptr, uint16 res, uint16
id);
1390 void dumpVgaScriptAlways(
const byte *ptr, uint16 res, uint16
id);
1392 void dumpVgaBitmaps(uint16 zoneNum);
1394 void dumpSingleBitmap(
int file,
int image,
const byte *offs,
int w,
int h, byte base);
1395 void dumpBitmap(
const char *filename,
const byte *offs, uint16 w, uint16 h,
int flags,
const byte *palette, byte base);
1396 void palLoad(byte *pal,
const byte *vga1,
int a,
int b);
1398 void fillBackFromBackGround(uint16 height, uint16 width);
1399 void fillBackFromFront();
1400 void fillBackGroundFromBack();
1401 void fillBackGroundFromFront();
1403 virtual void doOutput(
const byte *src, uint len);
1406 virtual void quickLoadOrSave();
1408 byte *vc10_uncompressFlip(
const byte *src, uint16 w, uint16 h);
1409 byte *vc10_flip(
const byte *src, uint16 w, uint16 h);
1411 Item *getNextItemPtrStrange();
1413 virtual bool loadGame(
const Common::String &filename,
bool restartMode =
false);
1414 virtual bool saveGame(uint slot,
const char *caption);
1416 void openTextWindow();
1417 void tidyIconArray(uint i);
1421 virtual void windowDrawChar(
WindowBlock *window, uint x, uint y, byte chr);
1428 void loadMusic(uint16 track,
bool forceSimon2GmData =
false,
bool useSimon2Remapping =
false);
1429 void playModule(uint16 music);
1430 virtual void playMusic(uint16 music, uint16 track);
1433 void delay(uint delay);
1436 void waitForMark(uint i);
1437 void scrollScreen();
1439 void decodeColumn(byte *dst,
const byte *src, uint16 height, uint16 pitch);
1440 void decodeRow(byte *dst,
const byte *src, uint16 width, uint16 pitch);
1441 void hitarea_stuff_helper_2();
1446 virtual void vcStopAnimation(uint16 zone, uint16 sprite);
1448 virtual bool confirmOverWrite(
WindowBlock *window);
1449 int16 matchSaveGame(
const char *name, uint16 max);
1450 void disableFileBoxes();
1451 virtual void userGame(
bool load);
1452 void userGameBackSpace(
WindowBlock *window,
int x, byte b = 0);
1453 void fileError(
WindowBlock *window,
bool saveError);
1455 int countSaveGames();
1458 void enterSaveLoadScreen(
bool entering);
1472 void setupGame()
override;
1473 void setupOpcodes()
override;
1474 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
1475 void windowDrawChar(
WindowBlock *window, uint x, uint y, byte chr)
override;
1476 void saveInventoryPalette();
1477 void applyInventoryPalette();
1478 void restoreInventoryPalette();
1480 void executeOpcode(
int opcode)
override;
1482 int actCallD(
int n);
1484 void opn_opcode00();
1489 void opn_opcode05();
1490 void opn_opcode06();
1491 void opn_opcode07();
1492 void opn_opcode08();
1493 void opn_opcode09();
1494 void opn_opcode10();
1495 void opn_opcode11();
1496 void opn_opcode12();
1497 void opn_opcode13();
1498 void opn_opcode14();
1499 void opn_opcode15();
1500 void opn_opcode16();
1505 void opn_opcode21();
1506 void opn_opcode22();
1507 void opn_opcode23();
1508 void opn_opcode24();
1509 void opn_opcode25();
1510 void opn_opcode26();
1511 void opn_opcode27();
1512 void opn_opcode28();
1513 void opn_opcode29();
1514 void opn_opcode30();
1515 void opn_opcode31();
1516 void opn_opcode32();
1517 void opn_opcode33();
1518 void opn_opcode34();
1519 void opn_opcode35();
1520 void opn_opcode36();
1521 void opn_opcode37();
1522 void opn_opcode38();
1523 void opn_opcode39();
1524 void opn_opcode40();
1525 void opn_opcode41();
1526 void opn_opcode42();
1527 void opn_opcode43();
1528 void opn_opcode44();
1529 void opn_opcode45();
1530 void opn_opcode46();
1531 void opn_opcode47();
1532 void opn_opcode48();
1533 void opn_opcode49();
1534 void opn_opcode50();
1535 void opn_opcode51();
1536 void opn_opcode52();
1537 void opn_opcode53();
1538 void opn_opcode54();
1539 void opn_opcode55();
1540 void opn_opcode56();
1541 void opn_opcode57();
1542 void opn_opcode62();
1543 void opn_opcode63();
1557 StackFrame() { memset(
this, 0,
sizeof(*
this)); }
1564 int _dolineReturnVal;
1566 byte *_dataBase, *_textBase;
1567 uint32 _dataBaseSize, _textBaseSize;
1572 char _inputline[61];
1577 const char *_mouseString, *_mouseString1;
1578 char _objectName1[15], _objectName2[15];
1579 char _inMessage[20];
1580 char _placeMessage[15];
1583 uint16 _intputCounter, _inputMax;
1584 uint16 _mousePrintFG;
1588 uint32 _quickptr[16];
1589 uint16 _quickshort[12];
1592 char _keyboardBuffer[61];
1595 int16 _objectCountS;
1611 bool _keymapEnabled;
1613 uint16 getptr(uint32 pos);
1614 uint32 getlong(uint32 pos);
1616 void loadGamePcFile()
override;
1618 int bitextract(uint32 ptr,
int offs);
1620 int doline(
int needsave);
1621 int setposition(
int process,
int line);
1624 char *getMessage(
char *msg, uint16 num);
1625 void getResponse(uint16 charNum, uint16 objNum, uint16 &msgNum1, uint16 &msgNum2);
1626 void getObjectName(
char *v, uint16 x);
1629 void setbitf(uint32 ptr,
int offs,
int val);
1631 void writeval(uint8 *ptr,
int val);
1633 void addstack(
int type);
1635 void popstack(
int type);
1636 void funccpy(
int *store);
1637 void funcentry(
int *storestore,
int procn);
1641 int gvwrd(uint8 *wptr,
int mask);
1642 int wrdmatch(uint8 *word1,
int mask1, uint8 *word2,
int mask2);
1644 bool testContainer(uint16 a);
1645 bool testObvious(uint16 a);
1646 bool testSeen(uint16 a);
1648 bool ifObjectInInv(uint16 a);
1649 int inventoryOn(
int val);
1652 void execMouseHit(
HitArea *ha);
1664 void drawIconHitBar();
1666 void printIcon(
HitArea *ha, uint8 i, uint8 r);
1667 void windowPutChar(
WindowBlock *window, byte c, byte b = 0)
override;
1669 bool badload(int8 errorNum);
1676 uint32 ftext(uint32 base,
int n);
1677 char *unctok(
char *c,
int n);
1678 void uncomstr(
char *c, uint32 x);
1681 void pcl(
const char *s);
1683 void plocd(
int n,
int m);
1684 void pobjd(
int n,
int m);
1685 void ptext(uint32 tptr);
1687 void clearVideoWindow(uint16 windowNum, uint16 color)
override;
1688 void setWindowImageEx(uint16 mode, uint16 vga_res)
override;
1690 bool ifObjectHere(uint16 val)
override;
1691 bool ifObjectAt(uint16 a, uint16 b)
override;
1692 bool ifObjectState(uint16 a, int16 b)
override;
1694 void boxController(uint x, uint y, uint mode)
override;
1695 void timerProc()
override;
1697 void addChar(uint8 chr);
1699 void clearInputLine();
1700 bool tryHandleDebugTimeCommand();
1701 bool tryParseDebugTimeCommand(
const char *typed, uint16 &hour, uint16 &minute)
const;
1702 void setDebugTime(uint16 hour, uint16 minute);
1703 void handleKeyboard();
1704 void handleMouseMoved()
override;
1705 void interact(
char *buffer, uint8 size);
1707 bool processSpecialKeys()
override;
1724 void setupGame()
override;
1725 void setupOpcodes()
override;
1726 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
1728 void executeOpcode(
int opcode)
override;
1731 void oe1_notPresent();
1734 void oe1_notCarried();
1737 void oe1_notSibling();
1740 void oe1_isPlayer();
1748 void oe1_moveDirn();
1755 void oe1_isCalled();
1758 void oe1_setUserItem();
1759 void oe1_getUserItem();
1761 void oe1_doorExit();
1762 void oe1_loadGame();
1763 void oe1_clearUserItem();
1764 void oe1_findMaster();
1765 void oe1_nextMaster();
1767 void oe1_stopAnimate();
1770 void oe1_enableInput();
1773 void oe1_playTune();
1774 void oe1_bitClear();
1777 void oe1_zoneDisk();
1778 void oe1_printStats();
1779 void oe1_stopTune();
1780 void oe1_printPlayerDamage();
1781 void oe1_printMonsterDamage();
1782 void oe1_pauseGame();
1783 void oe1_printPlayerHit();
1784 void oe1_printMonsterHit();
1789 OpcodeProcElvira1 proc;
1795 void drawIcon(
WindowBlock *window, uint icon, uint x, uint y)
override;
1796 void windowDrawChar(
WindowBlock *window, uint x, uint y, byte chr)
override;
1798 void clearHiResTextLayer()
override;
1802 Graphics::FontSJIS *_sjisFont;
1804 uint16 _sjisCurChar;
1812 void setupGame()
override;
1813 void setupOpcodes()
override;
1814 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
1816 void executeOpcode(
int opcode)
override;
1818 void oe2_moveDirn();
1821 void oe2_isCalled();
1823 void oe2_drawItem();
1825 void oe2_pauseGame();
1826 void oe2_setDoorOpen();
1827 void oe2_setDoorClosed();
1828 void oe2_setDoorLocked();
1829 void oe2_ifDoorOpen();
1830 void oe2_ifDoorClosed();
1831 void oe2_ifDoorLocked();
1832 void oe2_storeItem();
1837 void oe2_bNotZero();
1838 void oe2_getOValue();
1839 void oe2_setOValue();
1841 void oe2_printStats();
1842 void oe2_setSuperRoom();
1843 void oe2_getSuperRoom();
1844 void oe2_setExitOpen();
1845 void oe2_setExitClosed();
1846 void oe2_setExitLocked();
1847 void oe2_ifExitOpen();
1848 void oe2_ifExitClosed();
1849 void oe2_ifExitLocked();
1850 void oe2_playEffect();
1851 void oe2_getDollar2();
1852 void oe2_setSRExit();
1853 void oe2_printPlayerDamage();
1854 void oe2_printMonsterDamage();
1855 void oe2_isAdjNoun();
1859 void oe2_b2NotZero();
1861 void printStats()
override;
1865 OpcodeProcElvira2 proc;
1873 bool loadGame(
const Common::String &filename,
bool restartMode =
false)
override;
1874 bool saveGame(uint slot,
const char *caption)
override;
1876 void addArrows(
WindowBlock *window, uint8 num)
override;
1877 void removeArrows(
WindowBlock *window, uint num)
override;
1879 void drawIcon(
WindowBlock *window, uint icon, uint x, uint y)
override;
1880 bool hasIcon(
Item *item)
override;
1881 uint itemGetIconNumber(
Item *item)
override;
1882 uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr)
override;
1884 void moveDirn(
Item *i, uint x)
override;
1885 int canPlace(
Item *x,
Item *y)
override;
1886 int sizeOfRec(
Item *o,
int d)
override;
1887 int weightOf(
Item *x)
override;
1889 int changeExitStates(
SubSuperRoom *sr,
int n,
int d, uint16 s);
1890 uint16 getExitState(
Item *item, uint16 x, uint16 d);
1891 void setExitState(
Item *i, uint16 n, uint16 d, uint16 s);
1892 void setSRExit(
Item *i,
int n,
int d, uint16 s);
1894 void handleMouseWheelUp()
override;
1895 void handleMouseWheelDown()
override;
1897 virtual void listSaveGames();
1898 bool confirmOverWrite(
WindowBlock *window)
override;
1899 void userGame(
bool load)
override;
1900 virtual int userGameGetKey(
bool *b, uint maxChar);
1910 void setupGame()
override;
1911 void setupOpcodes()
override;
1912 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
1914 void executeOpcode(
int opcode)
override;
1916 void boxTextMessage(
const char *x);
1917 void boxTextMsg(
const char *x);
1919 uint16 getBoxSize();
1920 uint16 checkFit(
char *Ptr,
int width,
int lines);
1923 void oww_addTextBox();
1924 void oww_setShortText();
1925 void oww_setLongText();
1926 void oww_printLongText();
1928 void oww_textMenu();
1929 void oww_pauseGame();
1930 void oww_boxMessage();
1932 void oww_boxLongText();
1933 void oww_printBox();
1935 void oww_lockZones();
1936 void oww_unlockZones();
1941 OpcodeProcWaxworks proc;
1948 char _boxBuffer[310];
1949 char *_boxBufferPtr;
1954 void drawIcon(
WindowBlock *window, uint icon, uint x, uint y)
override;
1956 void boxController(uint x, uint y, uint mode)
override;
1958 void addArrows(
WindowBlock *window, uint8 num)
override;
1959 void removeArrows(
WindowBlock *window, uint num)
override;
1961 uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr)
override;
1963 bool loadTablesIntoMem(uint16 subrId)
override;
1965 void moveDirn(
Item *i, uint x)
override;
1967 bool confirmOverWrite(
WindowBlock *window)
override;
1975 static const int SIMON1_GMF_SIZE[];
1981 void setupGame()
override;
1982 void setupOpcodes()
override;
1983 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
1985 void executeOpcode(
int opcode)
override;
1987 void vc22_setPalette()
override;
1991 void os1_pauseGame();
1992 void os1_screenTextBox();
1993 void os1_screenTextMsg();
1994 void os1_playEffect();
1995 void os1_screenTextPObj();
1996 void os1_getPathPosn();
1997 void os1_scnTxtLongText();
1999 void os1_mouseOff();
2000 void os1_loadBeard();
2001 void os1_unloadBeard();
2002 void os1_unloadZone();
2003 void os1_loadStrings();
2004 void os1_unfreezeZones();
2005 void os1_specialFade();
2010 OpcodeProcSimon1 proc;
2020 void dumpVgaFile(
const byte *vga)
override;
2023 bool _simonAcornFloppyDemoPaletteLoaded =
false;
2024 void patchSimonAcornFloppyDemoPalettes();
2026 void clearName()
override;
2028 void handleMouseWheelUp()
override;
2029 void handleMouseWheelDown()
override;
2031 void drawIcon(
WindowBlock *window, uint icon, uint x, uint y)
override;
2033 void initMouse()
override;
2034 void handleMouseMoved()
override;
2036 void addArrows(
WindowBlock *window, uint8 num)
override;
2037 void removeArrows(
WindowBlock *window, uint num)
override;
2039 uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr)
override;
2041 virtual void playSpeech(uint16 speechId, uint16 vgaSpriteId);
2043 void listSaveGames()
override;
2044 void userGame(
bool load)
override;
2045 int userGameGetKey(
bool *b, uint maxChar)
override;
2047 void playMusic(uint16 music, uint16 track)
override;
2048 void playMidiSfx(uint16 sound)
override;
2050 void vcStopAnimation(uint16 zone, uint16 sprite)
override;
2060 void setupGame()
override;
2061 void setupOpcodes()
override;
2062 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
2064 void executeOpcode(
int opcode)
override;
2066 void os2_printLongText();
2069 void os2_stopAnimate();
2070 void os2_playTune();
2071 void os2_screenTextPObj();
2073 void os2_mouseOff();
2074 void os2_isShortText();
2075 void os2_clearMarks();
2076 void os2_waitMark();
2081 OpcodeProcSimon2 proc;
2087 void clearName()
override;
2089 void drawIcon(
WindowBlock *window, uint icon, uint x, uint y)
override;
2091 void addArrows(
WindowBlock *window, uint8 num)
override;
2092 uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr)
override;
2094 void clearVideoWindow(uint16 windowNum, uint16 color)
override;
2096 void playSpeech(uint16 speechId, uint16 vgaSpriteId)
override;
2100 void playMusic(uint16 music, uint16 track)
override;
2109 ~AGOSEngine_Feeble()
override;
2111 void setupGame()
override;
2112 void setupOpcodes()
override;
2113 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
2115 void executeOpcode(
int opcode)
override;
2117 void vc36_setWindowImage()
override;
2118 void vc48_setPathFinder()
override;
2122 void off_addTextBox();
2123 void off_printLongText();
2125 void off_oracleTextDown();
2126 void off_oracleTextUp();
2129 void off_saveUserGame();
2130 void off_loadUserGame();
2131 void off_listSaveGames();
2133 void off_screenTextBox();
2135 void off_isAdjNoun();
2136 void off_hyperLinkOn();
2137 void off_hyperLinkOff();
2138 void off_checkPaths();
2139 void off_screenTextPObj();
2141 void off_mouseOff();
2142 void off_loadVideo();
2143 void off_playVideo();
2144 void off_centerScroll();
2145 void off_resetPVCount();
2146 void off_setPathValues();
2147 void off_stopClock();
2148 void off_restartClock();
2149 void off_setColor();
2153 void off_b3NotZero();
2156 friend class MoviePlayer;
2157 friend class MoviePlayerDXA;
2158 friend class MoviePlayerSMK;
2160 typedef void (AGOSEngine_Feeble::*OpcodeProcFeeble) ();
2161 struct OpcodeEntryFeeble {
2162 OpcodeProcFeeble proc;
2166 const OpcodeEntryFeeble *_opcodesFeeble;
2168 MoviePlayer *_moviePlayer;
2170 uint8 _interactiveVideo;
2171 uint16 _vgaCurSpritePriority;
2173 uint16 to16Wrapper(uint value)
override;
2174 uint16 readUint16Wrapper(
const void *src)
override;
2175 uint32 readUint32Wrapper(
const void *src)
override;
2177 void setLoyaltyRating(byte rating);
2179 void playVideo(
const char *filename,
bool lastSceneUsed =
false);
2180 void stopInteractiveVideo();
2183 void scaleClip(int16 h, int16 w, int16 y, int16 x, int16 scrollY);
2185 void handleMouseWheelUp()
override;
2186 void handleMouseWheelDown()
override;
2188 void drawMousePart(
int image, byte x, byte y);
2189 void initMouse()
override;
2190 void drawMousePointer()
override;
2192 void animateSprites()
override;
2193 void animateSpritesByY();
2196 void swapCharacterLogo();
2197 void timerProc()
override;
2199 void addArrows(
WindowBlock *window, uint8 num)
override;
2200 uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr)
override;
2202 void resetVerbs()
override;
2203 void setVerb(
HitArea * ha)
override;
2204 void hitarea_leave(
HitArea * ha,
bool state =
false)
override;
2205 void invertBox(
HitArea *ha,
bool state);
2208 void windowDrawChar(
WindowBlock *window, uint x, uint y, byte chr)
override;
2210 void clearName()
override;
2212 void drawIconArray(uint i,
Item *itemPtr,
int line,
int classMask)
override;
2216 void dumpVgaFile(
const byte *vga)
override;
2218 void doOutput(
const byte *src, uint len)
override;
2220 void printScreenText(uint vgaSpriteId, uint color,
const char *stringPtr, int16 x, int16 y, int16 width)
override;
2222 void printInteractText(uint16 num,
const char *
string);
2223 void sendInteractText(uint16 num, MSVC_PRINTF
const char *fmt, ...)
GCC_PRINTF(3, 4);
2225 void checkLinkBox();
2226 void hyperLinkOn(uint16 x);
2227 void hyperLinkOff();
2231 void runSubroutine101()
override;
2238 void oracleTextUp();
2239 void oracleTextDown();
2240 void scrollOracle();
2241 void scrollOracleUp();
2242 void scrollOracleDown();
2244 void listSaveGamesFeeble();
2245 void saveUserGame(
int slot);
2249 void quickLoadOrSave()
override;
2252 class AGOSEngine_FeebleDemo :
public AGOSEngine_Feeble {
2261 void initMouse()
override;
2262 void drawMousePointer()
override;
2267 void handleWobble();
2269 void startInteractiveVideo(
const char *filename);
2270 void waitForSpace();
2273 class AGOSEngine_PuzzlePack :
public AGOSEngine_Feeble {
2278 void setupGame()
override;
2279 void setupOpcodes()
override;
2281 void executeOpcode(
int opcode)
override;
2283 void vc3_loadSprite()
override;
2284 void vc63_fastFadeIn()
override;
2286 void opp_iconifyWindow();
2287 void opp_restoreOopsPosition();
2288 void opp_loadMouseImage();
2290 void opp_setShortText();
2291 void opp_loadHiScores();
2292 void opp_checkHiScores();
2294 void opp_saveUserGame();
2295 void opp_loadUserGame();
2296 void opp_playTune();
2297 void opp_saveOopsPosition();
2298 void opp_resetGameTime();
2299 void opp_resetPVCount();
2300 void opp_setPathValues();
2301 void opp_pauseClock();
2304 typedef void (AGOSEngine_PuzzlePack::*OpcodeProcPuzzlePack) ();
2305 struct OpcodeEntryPuzzlePack {
2306 OpcodeProcPuzzlePack proc;
2310 const OpcodeEntryPuzzlePack *_opcodesPuzzlePack;
2315 void initMouse()
override;
2316 void handleMouseMoved()
override;
2317 void drawMousePointer()
override;
2319 void resetVerbs()
override;
2321 void loadMouseImage();
2323 void startOverlayAnims();
2324 void startAnOverlayAnim();
2326 void printInfoText(
const char *itemText);
2332 class AGOSEngine_DIMP :
public AGOSEngine_PuzzlePack {
2337 void setupOpcodes()
override;
2339 void executeOpcode(
int opcode)
override;
2342 typedef void (AGOSEngine_DIMP::*OpcodeProcDIMP) ();
2343 struct OpcodeEntryDIMP {
2344 OpcodeProcDIMP proc;
2348 const OpcodeEntryDIMP *_opcodesDIMP;
2350 int16 _iconToggleCount, _voiceCount;
2351 uint32 _lastTickCount;
2352 uint32 _startSecondCount, _tSecondCount;
2354 void odp_saveUserGame();
2355 void odp_loadUserGame();
2358 void timerProc()
override;
Definition: elvira_atarist.h:37
EngineFeature
Definition: engine.h:258
ErrorCode getCode() const
Definition: error.h:112
No error occurred.
Definition: error.h:48
int tagOfParentDoline
tag of the doline "instance" to which this StackFrame belongs
Definition: agos.h:1556
Definition: audiostream.h:212
int FORCEINLINE GCC_PRINTF(2, 0) int vsprintf_s(T(&dst)[N]
Definition: algorithm.h:29
Definition: formatinfo.h:28
Definition: amigafont.h:33
Definition: detection.h:40
Definition: keyboard.h:294
Definition: debugger.h:31
int _tagOfActiveDoline
tag of the active doline "instance"
Definition: agos.h:1563
Common::Error run() override
Definition: agos.h:256
Language
Definition: language.h:45