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;
291 bool isSimon2MacAmiga()
const;
294 const char *getFileName(
int type)
const;
298 uint16 _vcGetOutOfCode;
301 uint32 *_gameOffsetsPtr;
303 uint8 _numMusic, _numSFX;
307 uint8 _numBitArray1, _numBitArray2, _numBitArray3, _numItemStore;
310 uint8 _vgaBaseDelay, _vgaPeriod;
312 uint16 _musicIndexBase;
313 uint16 _soundIndexBase;
314 uint16 _tableIndexBase;
315 uint16 _textIndexBase;
318 uint32 _tableMemSize;
329 byte *_strippedTxtMem;
332 uint32 _stringTabNum, _stringTabPos, _stringTabSize;
333 byte **_stringTabPtr;
335 Item **_itemArrayPtr;
336 uint32 _itemArraySize;
337 uint32 _itemArrayInited;
343 const byte *_codePtr;
345 byte **_localStringtable;
346 uint16 _stringIdLocalMin, _stringIdLocalMax;
349 uint16 _numRoomStates;
356 byte *_xtablesHeapPtrOrg;
357 uint32 _xtablesHeapCurPosOrg;
361 byte *_tablesHeapPtr, *_tablesHeapPtrOrg, *_tablesheapPtrNew;
362 uint32 _tablesHeapSize, _tablesHeapCurPos, _tablesHeapCurPosOrg;
363 uint32 _tablesHeapCurPosNew;
368 uint8 _recursionDepth;
376 bool _runScriptReturn1;
377 bool _runScriptCondition[40];
378 int16 _runScriptReturn[40];
380 bool _noParentNotify;
393 bool _useSimon2LanguageOverlay;
395 bool _copyProtection;
400 int16 _chanceModifier;
401 bool _restoreWindow6;
402 int16 _scrollX, _scrollXMax;
403 int16 _scrollY, _scrollYMax;
404 int16 _scrollCount, _scrollFlag;
405 uint16 _scrollWidth, _scrollHeight;
406 const byte *_scrollImage;
411 int16 _classMask, _classMode1, _classMode2;
418 uint16 _currentRoom, _superRoomNumber;
421 uint16 _hyperLink, _newLines;
422 uint16 _oracleMaxScrollY, _noOracleScroll;
425 int16 _scriptVerb, _scriptNoun1, _scriptNoun2;
426 int16 _scriptAdj1, _scriptAdj2;
431 Item *_subjectItem, *_objectItem;
432 Item *_currentPlayer;
434 Item *_hitAreaObjectItem;
438 Item *_hitAreaSubjectItem;
439 HitArea *_currentBox, *_currentVerbBox, *_lastVerbOn;
440 uint16 _currentBoxNum;
441 uint16 _needHitAreaRecalc;
456 int16 _printCharCurPos, _printCharMaxPos, _printCharPixelCount;
457 uint16 _numLettersToPrint;
461 uint32 getTime()
const;
465 uint32 _clockStopped, _gameStoppedClock;
468 TimeEvent *_firstTimeStruct, *_pendingDeleteTimeEvent;
475 bool _animatePointer;
476 byte _maxCursorWidth, _maxCursorHeight;
477 byte _mouseAnim, _mouseAnimMax, _mouseCursor;
478 byte _currentMouseAnim, _currentMouseCursor;
479 byte _oldMouseAnimMax, _oldMouseCursor;
480 uint16 _mouseHideCount;
483 bool _leftButtonDown, _rightButtonDown;
484 byte _leftButton, _leftButtonCount, _leftButtonOld;
487 bool _leftClick, _rightClick;
494 volatile uint16 _videoLockOut;
495 uint16 _scrollUpHitArea;
496 uint16 _scrollDownHitArea;
498 bool _fastFadeOutFlag;
501 uint16 _fastFadeCount;
502 volatile uint16 _fastFadeInFlag;
505 uint16 _screenWidth, _screenHeight;
506 uint16 _internalWidth, _internalHeight;
511 bool _exitCutscene, _picture8600;
514 int16 _lastMusicPlayed;
515 int16 _nextMusicToPlay;
516 bool _showPreposition;
517 bool _showMessageFlag;
521 uint16 _copyScnFlag, _vgaSpriteChanged;
523 byte *_block, *_blockEnd;
524 byte *_vgaMemPtr, *_vgaMemEnd, *_vgaMemBase;
525 byte *_vgaFrozenBase, *_vgaRealBase;
536 uint16 _vgaWaitFor, _lastVgaWaitFor;
537 uint16 _vgaCurSpriteId, _vgaCurZoneNum;
542 int16 _scaleX, _scaleY, _scaleWidth, _scaleHeight;
548 uint16 width, height;
553 kPnAmigaTextStartX = 2,
554 kPnAmigaLowresWidth = 320,
555 kPnAmigaMainTextTop = 136,
556 kPnAmigaInputTop = 224,
557 kPnAmigaTextPlaneWidth = 552
560 uint8 _opcode177Var1, _opcode177Var2;
561 uint8 _opcode178Var1, _opcode178Var2;
563 Item *_objectArray[50];
564 Item *_itemStore[50];
566 uint16 _shortText[40];
567 uint16 _shortTextX[40];
568 uint16 _shortTextY[40];
569 uint16 _longText[40];
570 uint16 _longSound[40];
572 uint16 _bitArray[128];
573 uint16 _bitArrayTwo[16];
574 uint16 _bitArrayThree[16];
575 int16 *_variableArray;
576 int16 *_variableArray2;
577 int16 *_variableArrayPtr;
582 bool _pnAmigaUiVisible;
589 TextLocation _textLocation1, _textLocation2, _textLocation3, _textLocation4;
591 byte _awaitTwoByteToken;
593 byte *_byteTokenStrings;
594 byte *_twoByteTokens;
595 byte *_twoByteTokenStrings;
596 byte *_secondTwoByteTokenStrings;
597 byte *_thirdTwoByteTokenStrings;
598 byte _textBuffer[180];
603 byte _stringReturnBuffer[2][180];
615 const uint16 *_pathFindArray[100];
617 uint8 _pathValues[400];
621 uint8 _pathValues1[400];
625 uint8 _currentPalette[768];
626 uint8 _displayPalette[768];
627 uint8 _simon2LanguageFlagTimer;
628 bool _simon2LanguageFlagClearPending;
630 uint16 _pnPaletteBanks[2][16];
631 uint16 _pnFadeCurrent[16];
632 uint16 _pnDayNightControllerSelectorMask;
633 uint8 _pnDayNightControllerLastStage;
634 int16 _pnLastClockMinutes;
635 bool _pnHavePaletteBank[2];
636 uint16 _pnDayNightControllerTickCounter;
638 byte _videoBuf1[32000];
639 uint16 _videoWindows[128];
640 const byte *_pak98Buf;
641 byte _paletteModNext;
647 uint16 _moveXMin, _moveYMin;
648 uint16 _moveXMax, _moveYMax;
654 byte _lettersToPrintBuf[80];
676 uint16 _effectsVolume;
678 bool _pendingWaitCommandDelay;
679 bool _pendingPNWaitScreenDelay;
681 uint8 _saveGameNameLen;
682 uint16 _saveLoadRowCurPos;
683 uint16 _numSaveGameRows;
684 bool _saveDialogFlag;
688 byte _saveLoadType, _saveLoadSlot;
689 char _saveLoadName[108];
700 const byte *_vc10BasePtrOld;
701 byte _hebrewCharWidths[32];
708 uint32 _curSfxFileSize;
709 uint16 _sampleEnd, _sampleWait;
712 virtual uint16 to16Wrapper(uint value);
713 virtual uint16 readUint16Wrapper(
const void *src);
714 virtual uint32 readUint32Wrapper(
const void *src);
722 void allocateStringTable(
int num);
723 void setupStringTable(byte *mem,
int num);
724 void setupLocalStringTable(byte *mem,
int num);
728 virtual void loadGamePcFile();
730 void decompressData(
const char *srcName, byte *dst, uint32 offset, uint32 srcSize, uint32 dstSize);
732 void drawPnSqueezedChar(
WindowBlock *window, uint x, uint y, byte chr);
733 bool isPnAmiga()
const;
734 bool isPnAmigaMainTextWindow(
const WindowBlock *window)
const;
735 bool isPnAmigaInputWindow(
const WindowBlock *window)
const;
736 bool isPnAmigaTextWindow(
const WindowBlock *window)
const;
738 uint16 getPnAmigaWindowInteriorHeight(
const WindowBlock *window)
const;
739 uint16 getPnAmigaTextPlaneWidth(
const WindowBlock *window)
const;
740 uint16 getPnAmigaTextLineStep()
const;
741 uint16 getPnAmigaGlyphAdvance(byte chr)
const;
742 uint16 getPnAmigaGlyphRenderWidth(byte chr)
const;
743 uint16 getPnAmigaGlyphHeight()
const;
744 bool usePnAmigaDoubleHeightTopaz()
const;
745 void ensurePnAmigaTextPlanes();
749 void compositePnAmigaTextPlane(
WindowBlock *window);
751 void drawPnAmigaTopazChar(
WindowBlock *window, byte chr);
752 void drawPnAmigaTextWindowBorders();
754 void loadOffsets(
const char *filename,
int number, uint32 &file, uint32 &offset, uint32 &compressedSize, uint32 &size);
755 void loadSound(uint16 sound, int16 pan, int16 vol, uint16 type);
756 void playSfx(uint16 sound, uint16 freq, uint16 flags,
bool digitalOnly =
false,
bool midiOnly =
false);
757 void loadSound(uint16 sound, uint16 freq, uint16 flags);
759 virtual void playMidiSfx(uint16 sound);
760 void loadVoice(uint speechId);
763 void loadSoundFile(
const char *filename);
765 int getUserFlag(
Item *item,
int a);
766 int getUserFlag1(
Item *item,
int a);
767 int getUserItem(
Item *item,
int n);
768 void setUserFlag(
Item *item,
int a,
int b);
769 void setUserItem(
Item *item,
int n,
int m);
771 void paletteFadeOut(byte *palPtr, uint num, uint size);
773 void *allocateItem(uint size);
774 void *allocateTable(uint size);
775 void alignTableMem();
777 Child *findChildOfType(
Item *i, uint child);
778 Child *allocateChildBlock(
Item *i, uint type, uint size);
780 void allocItemHeap();
781 void allocTablesHeap();
790 Subroutine *getSubroutineByID(uint subroutineId);
793 void dumpAllSubroutines();
794 void dumpAllVgaImageFiles();
795 void dumpAllVgaScriptFiles();
796 void dumpSubroutines();
799 const byte *dumpOpcode(
const byte *p);
807 virtual void executeOpcode(
int opcode) = 0;
812 uint getNextVarContents();
813 uint getVarWrapper();
816 uint readVariable(uint16 variable);
817 void writeNextVarContents(uint16 contents);
818 void writeVariable(uint16 variable, uint16 contents);
820 Item *derefItem(uint item);
821 Item *getNextItemPtr();
822 uint getNextItemID();
823 uint getItem1ID() {
return 1;}
824 uint itemPtrToID(
Item *
id);
828 void uncompressText(byte *ptr);
829 byte *uncompressToken(byte a, byte *ptr);
831 void showMessageFormat(MSVC_PRINTF
const char *s, ...)
GCC_PRINTF(2, 3);
832 const byte *getStringPtrByID(uint16 stringId,
bool upperCase =
false);
833 void loadSimon2LanguageOverlay();
834 bool hasSimon2LanguageFiles()
const;
836 void cycleSimon2LanguageOverlay();
838 const byte *getLocalStringByID(uint16 stringId);
839 uint getNextStringID();
841 void addTimeEvent(int32 timeout, uint16 subroutineId);
844 Item *findInByClass(
Item *i, int16 m);
845 Item *nextInByClass(
Item *i, int16 m);
846 Item *findMaster(int16 a, int16 n);
847 Item *nextMaster(
Item *item, int16 a, int16 n);
848 int wordMatch(
Item *item, int16 a, int16 n);
850 bool isRoom(
Item *item);
851 bool isObject(
Item *item);
852 bool isPlayer(
Item *item);
854 void itemChildrenChanged(
Item *item);
855 void unlinkItem(
Item *item);
856 void linkItem(
Item *item,
Item *parent);
858 void setItemParent(
Item *item,
Item *parent);
859 void setItemState(
Item *item,
int value);
861 void stopAnimate(uint16 a);
862 void stopAnimateSimon2(uint16 a, uint16 b);
864 void enableBox(uint hitarea);
865 void disableBox(uint hitarea);
866 void moveBox(uint hitarea,
int x,
int y);
867 bool isBoxDead(uint hitarea);
868 void undefineBox(uint hitarea);
869 void defineBox(
int id,
int x,
int y,
int width,
int height,
int flags,
int verb,
Item *itemPtr);
870 void defineBox(uint16
id, uint16 x, uint16 y, uint16 width, uint16 height, uint16 msg1, uint16 msg2, uint16 flags);
874 virtual void resetVerbs();
875 virtual void setVerb(
HitArea * ha);
876 virtual void hitarea_leave(
HitArea * ha,
bool state =
false);
877 void leaveHitAreaById(uint hitarea_id);
879 void sendSync(uint a);
880 void waitForSync(uint a);
882 uint getOffsetOfChild2Param(
SubObject *child, uint prop);
883 void scriptMouseOff();
885 void unfreezeBottom();
891 void setup_cond_c_helper();
893 uint16 getBackExit(
int n);
894 uint16 getDoorState(
Item *item, uint16 d);
895 uint16 getExitOf(
Item *item, uint16 d);
896 void changeDoorState(
SubRoom *r, uint16 d, uint16 n);
897 void setDoorState(
Item *i, uint16 d, uint16 n);
900 Item *getDoorOf(
Item *item, uint16 d);
901 Item *getExitOf_e1(
Item *item, uint16 d);
902 virtual void moveDirn(
Item *i, uint x);
904 virtual int canPlace(
Item *x,
Item *y);
906 int sizeContents(
Item *x);
907 virtual int sizeOfRec(
Item *o,
int d);
908 int sizeRec(
Item *x,
int d);
909 int weighUp(
Item *x);
910 int weightRec(
Item *x,
int d);
911 virtual int weightOf(
Item *x);
915 void drawMenuStrip(uint windowNum, uint menuNum);
916 void lightMenuStrip(
int a);
917 void unlightMenuStrip();
918 void lightMenuBox(uint hitarea);
920 uint menuFor_e2(
Item *item);
921 uint menuFor_ww(
Item *item, uint
id);
922 void clearMenuStrip();
923 void doMenuStrip(uint menuNum);
928 bool loadRoomItems(uint16 item);
930 virtual bool loadTablesIntoMem(uint16 subrId);
931 bool loadXTablesIntoMem(uint16 subrId);
932 void loadTextIntoMem(uint16 stringId);
934 uint loadTextFile(
const char *filename, byte *dst);
938 uint loadTextFile_simon1(
const char *filename, byte *dst);
944 uint loadTextFile_gme(
const char *filename, byte *dst);
948 bool kickoffTimeEvents();
949 void killAllTimers();
952 virtual void runSubroutine101();
953 bool isSimon2LanguageToggleKeyPressed()
const;
954 void refreshSimon2LanguageText();
955 uint8 mapRGBToPaletteIndex(uint8 r, uint8 g, uint8 b)
const;
956 void fillSimon2LanguageFlagRect(
int x1,
int y1,
int x2,
int y2, uint8 color);
957 void restoreSimon2LanguageFlagArea();
958 void drawSimon2LanguageFlag();
963 WindowBlock *openWindow(uint x, uint y, uint w, uint h, uint flags, uint fillColor, uint textColor);
966 void changeWindow(uint a);
967 void closeWindow(uint a);
968 void setTextColor(uint color);
969 virtual void windowPutChar(
WindowBlock *window, byte c, byte b = 0);
972 HitArea *findBox(uint hitarea_id);
973 virtual void boxController(uint x, uint y, uint mode);
974 void handleVerbClicked(uint verb);
975 virtual void clearName();
976 void displayName(
HitArea * ha);
977 void resetNameWindow();
978 void displayBoxStars();
979 void invertBox(
HitArea * ha, byte a, byte b, byte c, byte d);
981 virtual void handleMouseWheelUp();
982 virtual void handleMouseWheelDown();
984 virtual void initMouse();
985 virtual void handleMouseMoved();
986 virtual void drawMousePointer();
988 void drawArrow(uint16 x, uint16 y, int8 dir);
989 virtual void addArrows(
WindowBlock *window, uint8 num);
990 virtual void removeArrows(
WindowBlock *window, uint num);
992 virtual void drawIcon(
WindowBlock *window, uint icon, uint x, uint y);
993 virtual bool hasIcon(
Item *item);
994 virtual uint itemGetIconNumber(
Item *item);
995 virtual uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr);
997 virtual void drawIconArray(uint i,
Item *itemPtr,
int line,
int classMask);
998 void removeIconArray(uint num);
1000 void loadIconData();
1001 void loadIconFile();
1002 void loadMenuFile();
1004 virtual bool processSpecialKeys();
1005 void hitarea_stuff_helper();
1009 uint getFeebleFontSize(byte chr);
1010 void justifyStart();
1011 void justifyOutPut(byte chr);
1013 void loadZone(uint16 zoneNum,
bool useError =
true);
1015 void animate(uint16 windowNum, uint16 zoneNum, uint16 vgaSpriteId, int16 x, int16 y, uint16 palette,
bool vgaScript =
false);
1016 void setImage(uint16 vgaSpriteId,
bool vgaScript =
false);
1017 void setWindowImage(uint16 mode, uint16 vgaSpriteId,
bool specialCase =
false);
1018 virtual void setWindowImageEx(uint16 mode, uint16 vgaSpriteId);
1023 const char *getPixelLength(
const char *
string, uint16 maxWidth, uint16 &pixels);
1024 bool printNameOf(
Item *item, uint x, uint y);
1025 bool printTextOf(uint a, uint x, uint y);
1026 void printVerbOf(uint hitarea_id);
1027 void showActionString(
const byte *
string);
1029 virtual void printScreenText(uint vgaSpriteId, uint color,
const char *stringPtr, int16 x, int16 y, int16 width);
1031 void renderStringAmiga(uint vgaSpriteId, uint color, uint width, uint height,
const char *txt);
1032 void renderString(uint vgaSpriteId, uint color, uint width, uint height,
const char *txt);
1034 void writeChar(
WindowBlock *window,
int x,
int y,
int offs,
int val);
1036 byte *allocBlock(uint32 size);
1037 void checkNoOverWrite();
1038 void checkRunningAnims();
1039 void checkAnims(uint a);
1040 void checkZonePtrs();
1041 void setZoneBuffers();
1043 void runVgaScript();
1046 bool getBitFlag(uint bit);
1047 void setBitFlag(uint bit,
bool value);
1052 virtual void vc3_loadSprite();
1055 void vc6_ifObjectHere();
1056 void vc7_ifObjectNotHere();
1057 void vc8_ifObjectIsAt();
1058 void vc9_ifObjectStateIs();
1061 void vc13_addToSpriteX();
1062 void vc14_addToSpriteY();
1064 void vc16_waitSync();
1067 void vc20_setRepeat();
1068 void vc21_endRepeat();
1069 virtual void vc22_setPalette();
1070 void vc23_setPriority();
1071 void vc24_setSpriteXY();
1072 void vc25_halt_sprite();
1073 void vc26_setSubWindow();
1074 void vc27_resetSprite();
1075 void vc28_playSFX();
1076 void vc29_stopAllSounds();
1077 void vc30_setFrameRate();
1078 void vc31_setWindow();
1079 void vc33_setMouseOn();
1080 void vc34_setMouseOff();
1081 void vc35_clearWindow();
1082 virtual void vc36_setWindowImage();
1083 void vc38_ifVarNotZero();
1085 void vc40_scrollRight();
1086 void vc41_scrollLeft();
1087 void vc42_delayIfNotEQ();
1093 void vc44_enableBox();
1094 void vc45_disableBox();
1096 void vc48_specialEffect();
1098 void vc55_scanFlag();
1101 void vc17_waitEnd();
1102 void vc32_saveScreen();
1103 void vc37_pokePalette();
1106 void vc43_ifBitSet();
1107 void vc44_ifBitClear();
1108 void vc45_setWindowPalette();
1109 void vc46_setPaletteSlot1();
1110 void vc47_setPaletteSlot2();
1111 void vc48_setPaletteSlot3();
1113 void vc50_clearBit();
1114 void vc51_enableBox();
1115 void vc52_playSound();
1116 void vc53_dissolveIn();
1117 void vc54_dissolveOut();
1118 void vc55_moveBox();
1119 void vc56_fullScreen();
1120 void vc57_blackPalette();
1121 void vc58_checkCodeWheel();
1122 void vc58_changePriority();
1126 void vc60_stopAnimation();
1128 void vc62_fastFadeOut();
1129 virtual void vc63_fastFadeIn();
1132 void vc11_clearPathFinder();
1133 void vc17_setPathfinderItem();
1134 void vc32_copyVar();
1135 void vc37_addToSpriteY();
1136 void vc45_setSpriteX();
1137 void vc46_setSpriteY();
1138 void vc47_addToVar();
1139 virtual void vc48_setPathFinder();
1140 void vc59_ifSpeech();
1141 void vc61_setMaskImage();
1144 void vc56_delayLong();
1145 void vc59_stopAnimations();
1146 void vc64_ifSpeech();
1147 void vc65_slowFadeIn();
1148 void vc66_ifEqual();
1151 void vc69_playSeq();
1152 void vc70_joinSeq();
1153 void vc71_ifSeqWaiting();
1155 void vc73_setMark();
1156 void vc74_clearMark();
1159 void vc75_setScale();
1160 void vc76_setScaleXOffs();
1161 void vc77_setScaleYOffs();
1162 void vc78_computeXY();
1163 void vc79_computePosNum();
1164 void vc80_setOverlayImage();
1165 void vc81_setRandom();
1166 void vc82_getPathValue();
1167 void vc83_playSoundLoop();
1168 void vc84_stopSoundLoop();
1170 void setScriptCondition(
bool cond);
1171 bool getScriptCondition();
1172 void setScriptReturn(
int ret);
1173 int getScriptReturn();
1180 void o_notCarried();
1233 void o_haltAnimation();
1234 void o_restartAnimation();
1237 void o_getChildren();
1240 void o_killAnimate();
1244 void o_closeWindow();
1248 void o_disableBox();
1253 void o_unsetClass();
1258 void o_doClassIcons();
1260 void o_setAdjNoun();
1261 void o_saveUserGame();
1262 void o_loadUserGame();
1264 void o_restoreIcons();
1265 void o_freezeZones();
1266 void o_placeNoIcons();
1267 void o_clearTimers();
1271 int16 moreText(
Item *i);
1272 void lobjFunc(
Item *i,
const char *f);
1273 uint confirmYesOrNo(uint16 x, uint16 y);
1274 uint continueOrQuit();
1276 virtual void printStats();
1277 void synchChain(
Item *i);
1282 void drawImage_init(int16 image, uint16 palette, int16 x, int16 y, uint16 flags);
1287 void drawVertImageCompressed(
VC10_state *state);
1288 void drawVertImageUncompressed(
VC10_state *state);
1290 void setMoveRect(uint16 x, uint16 y, uint16 width, uint16 height);
1296 void updateBackendSurface(
Common::Rect *area = 0)
const;
1297 virtual void clearHiResTextLayer() {}
1299 int vcReadVarOrWord();
1300 uint vcReadNextWord(
bool forceLERead =
false);
1301 uint vcReadNextByte();
1302 uint vcReadVar(uint var);
1303 void vcWriteVar(uint var, int16 value);
1304 void vcSkipNextInstruction();
1306 int getScale(int16 y, int16 x);
1307 void checkScrollX(int16 x, int16 xpos);
1308 void checkScrollY(int16 y, int16 ypos);
1309 void centerScroll();
1311 virtual void clearVideoWindow(uint16 windowNum, uint16 color);
1312 void clearVideoBackGround(uint16 windowNum, uint16 color);
1314 void setPaletteSlot(uint16 srcOffs, uint8 dstOffs);
1315 bool isPNDayNightPaletteMode()
const;
1316 uint8 getPNDesiredPaletteBank()
const;
1317 void notePNClockValueChange();
1318 void resetPNRoomPaletteState();
1319 void buildPNPaletteTarget(uint16 selectorMask, uint16 *target)
const;
1320 uint16 blendPNPaletteColor(uint16 source, uint16 target, uint8 steps)
const;
1321 uint8 getPNDayNightControllerStage()
const;
1322 void startPNDayNightController(uint16 selectorMask);
1323 void updatePNDayNightController(uint16 selectorMask);
1324 void applyPNDayNightPalette(
const uint16 *palette);
1325 void checkOnStopTable();
1326 void checkWaitEndTable();
1328 virtual bool ifObjectHere(uint16 val);
1329 virtual bool ifObjectAt(uint16 a, uint16 b);
1330 virtual bool ifObjectState(uint16 a, int16 b);
1332 bool isVgaQueueEmpty();
1333 void haltAnimation();
1334 void restartAnimation();
1335 void addVgaEvent(uint16 num, uint8 type,
const byte *codePtr, uint16 curSprite, uint16 curZoneNum);
1337 void processVgaEvents();
1338 void schedulePNFadeEvent();
1339 void removePNFadeEvent();
1340 void animateEvent(
const byte *codePtr, uint16 curZoneNum, uint16 curSprite);
1342 void drawStuff(
const byte *src, uint offs);
1348 bool isSpriteLoaded(uint16
id, uint16 zoneNum);
1351 void freeBox(uint index);
1353 void sendWindow(uint a);
1356 void colorBlock(
WindowBlock *window, uint16 x, uint16 y, uint16 w, uint16 h);
1359 void restoreBlock(uint16 left, uint16 top, uint16 right, uint16 bottom);
1362 byte *getBackGround();
1363 byte *getScaleBuf();
1365 byte *convertAmigaImage(
VC10_state *state,
bool compressed);
1367 bool decrunchFile(byte *src, byte *dst, uint32 size);
1368 void loadVGABeardFile(uint16
id);
1369 void loadVGAVideoFile(uint16
id, uint8 type,
bool useError =
true);
1370 bool loadVGASoundFile(uint16
id, uint8 type);
1372 void openGameFile();
1373 void readGameFile(
void *dst, uint32 offs, uint32 size);
1375 virtual void timerProc();
1377 virtual void animateSprites();
1380 void dirtyClipCheck(int16 x, int16 y, int16 w, int16 h);
1381 void dirtyBackGround();
1382 void restoreBackGround();
1385 void clearSurfaces();
1386 void displayScreen();
1388 void dumpVideoScript(
const byte *src,
bool singeOpcode);
1389 virtual void dumpVgaFile(
const byte *vga);
1390 void dumpVgaScript(
const byte *ptr, uint16 res, uint16
id);
1391 void dumpVgaScriptAlways(
const byte *ptr, uint16 res, uint16
id);
1393 void dumpVgaBitmaps(uint16 zoneNum);
1395 void dumpSingleBitmap(
int file,
int image,
const byte *offs,
int w,
int h, byte base);
1396 void dumpBitmap(
const char *filename,
const byte *offs, uint16 w, uint16 h,
int flags,
const byte *palette, byte base);
1397 void palLoad(byte *pal,
const byte *vga1,
int a,
int b);
1399 void fillBackFromBackGround(uint16 height, uint16 width);
1400 void fillBackFromFront();
1401 void fillBackGroundFromBack();
1402 void fillBackGroundFromFront();
1404 virtual void doOutput(
const byte *src, uint len);
1407 virtual void quickLoadOrSave();
1409 byte *vc10_uncompressFlip(
const byte *src, uint16 w, uint16 h);
1410 byte *vc10_flip(
const byte *src, uint16 w, uint16 h);
1412 Item *getNextItemPtrStrange();
1414 virtual bool loadGame(
const Common::String &filename,
bool restartMode =
false);
1415 virtual bool saveGame(uint slot,
const char *caption);
1417 void openTextWindow();
1418 void tidyIconArray(uint i);
1422 virtual void windowDrawChar(
WindowBlock *window, uint x, uint y, byte chr);
1429 void loadMusic(uint16 track,
bool forceSimon2GmData =
false,
bool useSimon2Remapping =
false);
1430 void playModule(uint16 music);
1431 virtual void playMusic(uint16 music, uint16 track);
1434 void delay(uint delay);
1437 void waitForMark(uint i);
1438 void scrollScreen();
1440 void decodeColumn(byte *dst,
const byte *src, uint16 height, uint16 pitch);
1441 void decodeRow(byte *dst,
const byte *src, uint16 width, uint16 pitch);
1442 void hitarea_stuff_helper_2();
1447 virtual void vcStopAnimation(uint16 zone, uint16 sprite);
1449 virtual bool confirmOverWrite(
WindowBlock *window);
1450 int16 matchSaveGame(
const char *name, uint16 max);
1451 void disableFileBoxes();
1452 virtual void userGame(
bool load);
1453 void userGameBackSpace(
WindowBlock *window,
int x, byte b = 0);
1454 void fileError(
WindowBlock *window,
bool saveError);
1456 int countSaveGames();
1459 void enterSaveLoadScreen(
bool entering);
1473 void setupGame()
override;
1474 void setupOpcodes()
override;
1475 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
1476 void windowDrawChar(
WindowBlock *window, uint x, uint y, byte chr)
override;
1477 void saveInventoryPalette();
1478 void applyInventoryPalette();
1479 void restoreInventoryPalette();
1481 void executeOpcode(
int opcode)
override;
1483 int actCallD(
int n);
1485 void opn_opcode00();
1490 void opn_opcode05();
1491 void opn_opcode06();
1492 void opn_opcode07();
1493 void opn_opcode08();
1494 void opn_opcode09();
1495 void opn_opcode10();
1496 void opn_opcode11();
1497 void opn_opcode12();
1498 void opn_opcode13();
1499 void opn_opcode14();
1500 void opn_opcode15();
1501 void opn_opcode16();
1506 void opn_opcode21();
1507 void opn_opcode22();
1508 void opn_opcode23();
1509 void opn_opcode24();
1510 void opn_opcode25();
1511 void opn_opcode26();
1512 void opn_opcode27();
1513 void opn_opcode28();
1514 void opn_opcode29();
1515 void opn_opcode30();
1516 void opn_opcode31();
1517 void opn_opcode32();
1518 void opn_opcode33();
1519 void opn_opcode34();
1520 void opn_opcode35();
1521 void opn_opcode36();
1522 void opn_opcode37();
1523 void opn_opcode38();
1524 void opn_opcode39();
1525 void opn_opcode40();
1526 void opn_opcode41();
1527 void opn_opcode42();
1528 void opn_opcode43();
1529 void opn_opcode44();
1530 void opn_opcode45();
1531 void opn_opcode46();
1532 void opn_opcode47();
1533 void opn_opcode48();
1534 void opn_opcode49();
1535 void opn_opcode50();
1536 void opn_opcode51();
1537 void opn_opcode52();
1538 void opn_opcode53();
1539 void opn_opcode54();
1540 void opn_opcode55();
1541 void opn_opcode56();
1542 void opn_opcode57();
1543 void opn_opcode62();
1544 void opn_opcode63();
1558 StackFrame() { memset(
this, 0,
sizeof(*
this)); }
1565 int _dolineReturnVal;
1567 byte *_dataBase, *_textBase;
1568 uint32 _dataBaseSize, _textBaseSize;
1573 char _inputline[61];
1578 const char *_mouseString, *_mouseString1;
1579 char _objectName1[15], _objectName2[15];
1580 char _inMessage[20];
1581 char _placeMessage[15];
1584 uint16 _intputCounter, _inputMax;
1585 uint16 _mousePrintFG;
1589 uint32 _quickptr[16];
1590 uint16 _quickshort[12];
1593 char _keyboardBuffer[61];
1596 int16 _objectCountS;
1612 bool _keymapEnabled;
1614 uint16 getptr(uint32 pos);
1615 uint32 getlong(uint32 pos);
1617 void loadGamePcFile()
override;
1619 int bitextract(uint32 ptr,
int offs);
1621 int doline(
int needsave);
1622 int setposition(
int process,
int line);
1625 char *getMessage(
char *msg, uint16 num);
1626 void getResponse(uint16 charNum, uint16 objNum, uint16 &msgNum1, uint16 &msgNum2);
1627 void getObjectName(
char *v, uint16 x);
1630 void setbitf(uint32 ptr,
int offs,
int val);
1632 void writeval(uint8 *ptr,
int val);
1634 void addstack(
int type);
1636 void popstack(
int type);
1637 void funccpy(
int *store);
1638 void funcentry(
int *storestore,
int procn);
1642 int gvwrd(uint8 *wptr,
int mask);
1643 int wrdmatch(uint8 *word1,
int mask1, uint8 *word2,
int mask2);
1645 bool testContainer(uint16 a);
1646 bool testObvious(uint16 a);
1647 bool testSeen(uint16 a);
1649 bool ifObjectInInv(uint16 a);
1650 int inventoryOn(
int val);
1653 void execMouseHit(
HitArea *ha);
1665 void drawIconHitBar();
1667 void printIcon(
HitArea *ha, uint8 i, uint8 r);
1668 void windowPutChar(
WindowBlock *window, byte c, byte b = 0)
override;
1670 bool badload(int8 errorNum);
1677 uint32 ftext(uint32 base,
int n);
1678 char *unctok(
char *c,
int n);
1679 void uncomstr(
char *c, uint32 x);
1682 void pcl(
const char *s);
1684 void plocd(
int n,
int m);
1685 void pobjd(
int n,
int m);
1686 void ptext(uint32 tptr);
1688 void clearVideoWindow(uint16 windowNum, uint16 color)
override;
1689 void setWindowImageEx(uint16 mode, uint16 vga_res)
override;
1691 bool ifObjectHere(uint16 val)
override;
1692 bool ifObjectAt(uint16 a, uint16 b)
override;
1693 bool ifObjectState(uint16 a, int16 b)
override;
1695 void boxController(uint x, uint y, uint mode)
override;
1696 void timerProc()
override;
1698 void addChar(uint8 chr);
1700 void clearInputLine();
1701 bool tryHandleDebugTimeCommand();
1702 bool tryParseDebugTimeCommand(
const char *typed, uint16 &hour, uint16 &minute)
const;
1703 void setDebugTime(uint16 hour, uint16 minute);
1704 void handleKeyboard();
1705 void handleMouseMoved()
override;
1706 void interact(
char *buffer, uint8 size);
1708 bool processSpecialKeys()
override;
1725 void setupGame()
override;
1726 void setupOpcodes()
override;
1727 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
1729 void executeOpcode(
int opcode)
override;
1732 void oe1_notPresent();
1735 void oe1_notCarried();
1738 void oe1_notSibling();
1741 void oe1_isPlayer();
1749 void oe1_moveDirn();
1756 void oe1_isCalled();
1759 void oe1_setUserItem();
1760 void oe1_getUserItem();
1762 void oe1_doorExit();
1763 void oe1_loadGame();
1764 void oe1_clearUserItem();
1765 void oe1_findMaster();
1766 void oe1_nextMaster();
1768 void oe1_stopAnimate();
1771 void oe1_enableInput();
1774 void oe1_playTune();
1775 void oe1_bitClear();
1778 void oe1_zoneDisk();
1779 void oe1_printStats();
1780 void oe1_stopTune();
1781 void oe1_printPlayerDamage();
1782 void oe1_printMonsterDamage();
1783 void oe1_pauseGame();
1784 void oe1_printPlayerHit();
1785 void oe1_printMonsterHit();
1790 OpcodeProcElvira1 proc;
1796 void drawIcon(
WindowBlock *window, uint icon, uint x, uint y)
override;
1797 void windowDrawChar(
WindowBlock *window, uint x, uint y, byte chr)
override;
1799 void clearHiResTextLayer()
override;
1803 Graphics::FontSJIS *_sjisFont;
1805 uint16 _sjisCurChar;
1813 void setupGame()
override;
1814 void setupOpcodes()
override;
1815 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
1817 void executeOpcode(
int opcode)
override;
1819 void oe2_moveDirn();
1822 void oe2_isCalled();
1824 void oe2_drawItem();
1826 void oe2_pauseGame();
1827 void oe2_setDoorOpen();
1828 void oe2_setDoorClosed();
1829 void oe2_setDoorLocked();
1830 void oe2_ifDoorOpen();
1831 void oe2_ifDoorClosed();
1832 void oe2_ifDoorLocked();
1833 void oe2_storeItem();
1838 void oe2_bNotZero();
1839 void oe2_getOValue();
1840 void oe2_setOValue();
1842 void oe2_printStats();
1843 void oe2_setSuperRoom();
1844 void oe2_getSuperRoom();
1845 void oe2_setExitOpen();
1846 void oe2_setExitClosed();
1847 void oe2_setExitLocked();
1848 void oe2_ifExitOpen();
1849 void oe2_ifExitClosed();
1850 void oe2_ifExitLocked();
1851 void oe2_playEffect();
1852 void oe2_getDollar2();
1853 void oe2_setSRExit();
1854 void oe2_printPlayerDamage();
1855 void oe2_printMonsterDamage();
1856 void oe2_isAdjNoun();
1860 void oe2_b2NotZero();
1862 void printStats()
override;
1866 OpcodeProcElvira2 proc;
1874 bool loadGame(
const Common::String &filename,
bool restartMode =
false)
override;
1875 bool saveGame(uint slot,
const char *caption)
override;
1877 void addArrows(
WindowBlock *window, uint8 num)
override;
1878 void removeArrows(
WindowBlock *window, uint num)
override;
1880 void drawIcon(
WindowBlock *window, uint icon, uint x, uint y)
override;
1881 bool hasIcon(
Item *item)
override;
1882 uint itemGetIconNumber(
Item *item)
override;
1883 uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr)
override;
1885 void moveDirn(
Item *i, uint x)
override;
1886 int canPlace(
Item *x,
Item *y)
override;
1887 int sizeOfRec(
Item *o,
int d)
override;
1888 int weightOf(
Item *x)
override;
1890 int changeExitStates(
SubSuperRoom *sr,
int n,
int d, uint16 s);
1891 uint16 getExitState(
Item *item, uint16 x, uint16 d);
1892 void setExitState(
Item *i, uint16 n, uint16 d, uint16 s);
1893 void setSRExit(
Item *i,
int n,
int d, uint16 s);
1895 void handleMouseWheelUp()
override;
1896 void handleMouseWheelDown()
override;
1898 virtual void listSaveGames();
1899 bool confirmOverWrite(
WindowBlock *window)
override;
1900 void userGame(
bool load)
override;
1901 virtual int userGameGetKey(
bool *b, uint maxChar);
1911 void setupGame()
override;
1912 void setupOpcodes()
override;
1913 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
1915 void executeOpcode(
int opcode)
override;
1917 void boxTextMessage(
const char *x);
1918 void boxTextMsg(
const char *x);
1920 uint16 getBoxSize();
1921 uint16 checkFit(
char *Ptr,
int width,
int lines);
1924 void oww_addTextBox();
1925 void oww_setShortText();
1926 void oww_setLongText();
1927 void oww_printLongText();
1929 void oww_textMenu();
1930 void oww_pauseGame();
1931 void oww_boxMessage();
1933 void oww_boxLongText();
1934 void oww_printBox();
1936 void oww_lockZones();
1937 void oww_unlockZones();
1942 OpcodeProcWaxworks proc;
1949 char _boxBuffer[310];
1950 char *_boxBufferPtr;
1955 void drawIcon(
WindowBlock *window, uint icon, uint x, uint y)
override;
1957 void boxController(uint x, uint y, uint mode)
override;
1959 void addArrows(
WindowBlock *window, uint8 num)
override;
1960 void removeArrows(
WindowBlock *window, uint num)
override;
1962 uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr)
override;
1964 bool loadTablesIntoMem(uint16 subrId)
override;
1966 void moveDirn(
Item *i, uint x)
override;
1968 bool confirmOverWrite(
WindowBlock *window)
override;
1976 static const int SIMON1_GMF_SIZE[];
1982 void setupGame()
override;
1983 void setupOpcodes()
override;
1984 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
1986 void executeOpcode(
int opcode)
override;
1988 void vc22_setPalette()
override;
1992 void os1_pauseGame();
1993 void os1_screenTextBox();
1994 void os1_screenTextMsg();
1995 void os1_playEffect();
1996 void os1_screenTextPObj();
1997 void os1_getPathPosn();
1998 void os1_scnTxtLongText();
2000 void os1_mouseOff();
2001 void os1_loadBeard();
2002 void os1_unloadBeard();
2003 void os1_unloadZone();
2004 void os1_loadStrings();
2005 void os1_unfreezeZones();
2006 void os1_specialFade();
2011 OpcodeProcSimon1 proc;
2021 void dumpVgaFile(
const byte *vga)
override;
2024 bool _simonAcornFloppyDemoPaletteLoaded =
false;
2025 void patchSimonAcornFloppyDemoPalettes();
2027 void clearName()
override;
2029 void handleMouseWheelUp()
override;
2030 void handleMouseWheelDown()
override;
2032 void drawIcon(
WindowBlock *window, uint icon, uint x, uint y)
override;
2034 void initMouse()
override;
2035 void handleMouseMoved()
override;
2037 void addArrows(
WindowBlock *window, uint8 num)
override;
2038 void removeArrows(
WindowBlock *window, uint num)
override;
2040 uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr)
override;
2042 virtual void playSpeech(uint16 speechId, uint16 vgaSpriteId);
2044 void listSaveGames()
override;
2045 void userGame(
bool load)
override;
2046 int userGameGetKey(
bool *b, uint maxChar)
override;
2048 void playMusic(uint16 music, uint16 track)
override;
2049 void playMidiSfx(uint16 sound)
override;
2051 void vcStopAnimation(uint16 zone, uint16 sprite)
override;
2061 void setupGame()
override;
2062 void setupOpcodes()
override;
2063 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
2065 void executeOpcode(
int opcode)
override;
2067 void os2_printLongText();
2070 void os2_stopAnimate();
2071 void os2_playTune();
2072 void os2_screenTextPObj();
2074 void os2_mouseOff();
2075 void os2_isShortText();
2076 void os2_clearMarks();
2077 void os2_waitMark();
2082 OpcodeProcSimon2 proc;
2088 void clearName()
override;
2090 void drawIcon(
WindowBlock *window, uint icon, uint x, uint y)
override;
2092 void addArrows(
WindowBlock *window, uint8 num)
override;
2093 uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr)
override;
2095 void clearVideoWindow(uint16 windowNum, uint16 color)
override;
2097 void playSpeech(uint16 speechId, uint16 vgaSpriteId)
override;
2101 void playMusic(uint16 music, uint16 track)
override;
2110 ~AGOSEngine_Feeble()
override;
2112 void setupGame()
override;
2113 void setupOpcodes()
override;
2114 void setupVideoOpcodes(VgaOpcodeProc *op)
override;
2116 void executeOpcode(
int opcode)
override;
2118 void vc36_setWindowImage()
override;
2119 void vc48_setPathFinder()
override;
2123 void off_addTextBox();
2124 void off_printLongText();
2126 void off_oracleTextDown();
2127 void off_oracleTextUp();
2130 void off_saveUserGame();
2131 void off_loadUserGame();
2132 void off_listSaveGames();
2134 void off_screenTextBox();
2136 void off_isAdjNoun();
2137 void off_hyperLinkOn();
2138 void off_hyperLinkOff();
2139 void off_checkPaths();
2140 void off_screenTextPObj();
2142 void off_mouseOff();
2143 void off_loadVideo();
2144 void off_playVideo();
2145 void off_centerScroll();
2146 void off_resetPVCount();
2147 void off_setPathValues();
2148 void off_stopClock();
2149 void off_restartClock();
2150 void off_setColor();
2154 void off_b3NotZero();
2157 friend class MoviePlayer;
2158 friend class MoviePlayerDXA;
2159 friend class MoviePlayerSMK;
2161 typedef void (AGOSEngine_Feeble::*OpcodeProcFeeble) ();
2162 struct OpcodeEntryFeeble {
2163 OpcodeProcFeeble proc;
2167 const OpcodeEntryFeeble *_opcodesFeeble;
2169 MoviePlayer *_moviePlayer;
2171 uint8 _interactiveVideo;
2172 uint16 _vgaCurSpritePriority;
2174 uint16 to16Wrapper(uint value)
override;
2175 uint16 readUint16Wrapper(
const void *src)
override;
2176 uint32 readUint32Wrapper(
const void *src)
override;
2178 void setLoyaltyRating(byte rating);
2180 void playVideo(
const char *filename,
bool lastSceneUsed =
false);
2181 void stopInteractiveVideo();
2184 void scaleClip(int16 h, int16 w, int16 y, int16 x, int16 scrollY);
2186 void handleMouseWheelUp()
override;
2187 void handleMouseWheelDown()
override;
2189 void drawMousePart(
int image, byte x, byte y);
2190 void initMouse()
override;
2191 void drawMousePointer()
override;
2193 void animateSprites()
override;
2194 void animateSpritesByY();
2197 void swapCharacterLogo();
2198 void timerProc()
override;
2200 void addArrows(
WindowBlock *window, uint8 num)
override;
2201 uint setupIconHitArea(
WindowBlock *window, uint num, uint x, uint y,
Item *itemPtr)
override;
2203 void resetVerbs()
override;
2204 void setVerb(
HitArea * ha)
override;
2205 void hitarea_leave(
HitArea * ha,
bool state =
false)
override;
2206 void invertBox(
HitArea *ha,
bool state);
2209 void windowDrawChar(
WindowBlock *window, uint x, uint y, byte chr)
override;
2211 void clearName()
override;
2213 void drawIconArray(uint i,
Item *itemPtr,
int line,
int classMask)
override;
2217 void dumpVgaFile(
const byte *vga)
override;
2219 void doOutput(
const byte *src, uint len)
override;
2221 void printScreenText(uint vgaSpriteId, uint color,
const char *stringPtr, int16 x, int16 y, int16 width)
override;
2223 void printInteractText(uint16 num,
const char *
string);
2224 void sendInteractText(uint16 num, MSVC_PRINTF
const char *fmt, ...)
GCC_PRINTF(3, 4);
2226 void checkLinkBox();
2227 void hyperLinkOn(uint16 x);
2228 void hyperLinkOff();
2232 void runSubroutine101()
override;
2239 void oracleTextUp();
2240 void oracleTextDown();
2241 void scrollOracle();
2242 void scrollOracleUp();
2243 void scrollOracleDown();
2245 void listSaveGamesFeeble();
2246 void saveUserGame(
int slot);
2250 void quickLoadOrSave()
override;
2253 class AGOSEngine_FeebleDemo :
public AGOSEngine_Feeble {
2262 void initMouse()
override;
2263 void drawMousePointer()
override;
2268 void handleWobble();
2270 void startInteractiveVideo(
const char *filename);
2271 void waitForSpace();
2274 class AGOSEngine_PuzzlePack :
public AGOSEngine_Feeble {
2279 void setupGame()
override;
2280 void setupOpcodes()
override;
2282 void executeOpcode(
int opcode)
override;
2284 void vc3_loadSprite()
override;
2285 void vc63_fastFadeIn()
override;
2287 void opp_iconifyWindow();
2288 void opp_restoreOopsPosition();
2289 void opp_loadMouseImage();
2291 void opp_setShortText();
2292 void opp_loadHiScores();
2293 void opp_checkHiScores();
2295 void opp_saveUserGame();
2296 void opp_loadUserGame();
2297 void opp_playTune();
2298 void opp_saveOopsPosition();
2299 void opp_resetGameTime();
2300 void opp_resetPVCount();
2301 void opp_setPathValues();
2302 void opp_pauseClock();
2305 typedef void (AGOSEngine_PuzzlePack::*OpcodeProcPuzzlePack) ();
2306 struct OpcodeEntryPuzzlePack {
2307 OpcodeProcPuzzlePack proc;
2311 const OpcodeEntryPuzzlePack *_opcodesPuzzlePack;
2316 void initMouse()
override;
2317 void handleMouseMoved()
override;
2318 void drawMousePointer()
override;
2320 void resetVerbs()
override;
2322 void loadMouseImage();
2324 void startOverlayAnims();
2325 void startAnOverlayAnim();
2327 void printInfoText(
const char *itemText);
2333 class AGOSEngine_DIMP :
public AGOSEngine_PuzzlePack {
2338 void setupOpcodes()
override;
2340 void executeOpcode(
int opcode)
override;
2343 typedef void (AGOSEngine_DIMP::*OpcodeProcDIMP) ();
2344 struct OpcodeEntryDIMP {
2345 OpcodeProcDIMP proc;
2349 const OpcodeEntryDIMP *_opcodesDIMP;
2351 int16 _iconToggleCount, _voiceCount;
2352 uint32 _lastTickCount;
2353 uint32 _startSecondCount, _tSecondCount;
2355 void odp_saveUserGame();
2356 void odp_loadUserGame();
2359 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:1557
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:1564
Common::Error run() override
Definition: agos.h:256
Language
Definition: language.h:45