22 #ifndef SCUMM_HE_INTERN_HE_H 23 #define SCUMM_HE_INTERN_HE_H 25 #include "scumm/scumm_v6.h" 27 #include "scumm/he/floodfill_he.h" 28 #include "scumm/he/wiz_he.h" 30 #include "scumm/actor_he.h" 33 class SeekableReadStream;
34 class SeekableWriteStream;
51 SO_ACTOR_DEFAULT_CLIPPED = 30,
52 SO_BACKGROUND_ON = 218,
53 SO_BACKGROUND_OFF = 219,
54 SO_ROOM_COPY_PALETTE = 220,
55 SO_ROOM_SAVEGAME_BY_NAME = 221,
56 SO_SOUND_START_VOLUME = 222,
57 SO_SOUND_VOLUME_RAMP = 223,
58 SO_SOUND_FREQUENCY = 224,
60 SO_OBJECT_ORDER = 234,
61 SO_ROOM_PALETTE_IN_ROOM = 236,
72 uint32 _pauseStartTime = 0;
74 int getHETimer(
int timer);
75 void setHETimer(
int timer);
76 void pauseHETimers(
bool pause);
82 Common::Path generateFilename(
const int room)
const override;
84 void resetScumm()
override;
87 void setupOpcodes()
override;
91 void localizeArray(
int slot, byte scriptSlot);
92 void redimArray(
int arrayId,
int newX,
int newY,
int d);
93 int readFileToArray(
int slot, int32 size);
94 void writeFileFromArray(
int slot,
int resID);
96 int virtScreenSave(byte *dst,
int x1,
int y1,
int x2,
int y2);
97 void virtScreenLoad(
int resIdx,
int x1,
int y1,
int x2,
int y2);
99 void decodeParseString(
int a,
int b)
override;
100 void swapObjects(
int object1,
int object2);
110 void deleteSaveFile(
const byte *fileName);
111 void renameSaveFile(
const byte *from,
const byte *to);
112 void pauseEngineIntern(
bool pause)
override;
121 void o60_kernelSetFunctions();
122 void o60_kernelGetFunctions();
124 void o60_closeFile();
125 void o60_deleteFile();
128 void o60_writeFile();
130 void o60_isSoundRunning();
131 void o60_seekFilePos();
132 void o60_localizeArrayToScript();
133 void o60_redimArray();
134 void o60_readFilePos();
146 HE_SND_SOFT_SOUND = 4,
147 HE_SND_QUICK_START = 8,
150 HE_SND_FREQUENCY = 64,
158 SO_IMAGE_LOADED = 18,
160 SO_SOUND_VOLUME = 25,
162 SO_PRELOAD_SCRIPT = 120,
163 SO_PRELOAD_SOUND = 121,
164 SO_PRELOAD_COSTUME = 122,
165 SO_PRELOAD_ROOM = 123,
166 SO_UNLOCK_IMAGE = 159,
171 SO_PRELOAD_IMAGE = 203,
172 SO_ROOM_LOADED = 226,
173 SO_COSTUME_LOADED = 227,
174 SO_SOUND_LOADED = 228,
175 SO_SCRIPT_LOADED = 229,
176 SO_SOUND_CHANNEL = 230,
178 SO_SOUND_START = 232,
179 SO_LOCK_FLOBJECT = 233,
180 SO_UNLOCK_FLOBJECT = 235,
181 SO_PRELOAD_FLUSH = 239,
182 SO_PAUSE_MESSAGE = 240,
183 SO_PAUSE_TITLE = 241,
184 SO_PAUSE_OPTION = 242,
187 SO_SOUND_LOOPING = 245,
188 SO_START_SYSTEM = 250,
189 SO_START_SYSTEM_STRING = 251,
190 SO_RESTART_STRING = 252,
191 SO_RESTART_ARRAY = 253,
196 byte *_heV7DiskOffsets;
197 byte *_heV7RoomOffsets;
198 uint32 *_heV7RoomIntOffsets;
200 int32 _heSndSoundId, _heSndOffset, _heSndChannel, _heSndFlags,
201 _heSndFrequency, _heSndFrequencyShift, _heSndPan, _heSndVol;
202 bool _heSndStartNewSoundFlag;
204 int _numStoredFlObjects;
211 Common::Path generateFilename(
const int room)
const override;
213 void restoreBackgroundHE(
Common::Rect rect,
int dirtybit = 0);
216 void allocateArrays()
override;
217 int readResTypeList(
ResType type)
override;
218 uint32 getResourceRoomOffset(
ResType type, ResId idx)
override;
219 void setupOpcodes()
override;
221 void setupScummVars()
override;
222 void resetScummVars()
override;
226 void readRoomsOffsets()
override;
227 void readGlobalObjects()
override;
228 void readIndexBlock(uint32 blocktype, uint32 itemsize)
override;
230 void clearRoomObjects()
override;
231 void resetRoomObjects()
override;
233 int getActorFromPos(
int x,
int y)
override;
235 void loadFlObject(uint
object, uint room)
override;
236 void storeFlObject(
int slot);
237 void restoreFlObjects();
239 void setCursorFromImg(uint img, uint room, uint imgindex)
override;
240 void setDefaultCursor()
override;
244 void o70_pickupObject();
245 void o70_getActorRoom();
246 void o70_resourceRoutines();
247 void o70_systemOps();
248 void o70_getStringLen();
249 void o70_isResourceLoaded();
252 void o70_createDirectory();
253 void o70_setSystemMessage();
255 byte VAR_NUM_SOUND_CHANNELS;
270 friend class Moonbase;
274 SO_SET_POLYGON = 246,
275 SO_DELETE_POLYGON = 247,
276 SO_SET_POLYGON_LOCAL = 248,
279 bool _skipProcessActors;
283 ~ScummEngine_v71he()
override;
285 byte *heFindResourceData(uint32 tag, byte *ptr);
286 byte *heFindResource(uint32 tag, byte *ptr);
287 byte *findWrappedBlock(uint32 tag, byte *ptr,
int state,
bool flagError);
291 virtual int setupStringArray(
int size);
294 void setupOpcodes()
override;
298 void redrawBGAreas()
override;
300 void processActors()
override;
301 void preProcessAuxQueue();
302 void postProcessAuxQueue();
304 void clearDrawQueues()
override;
306 int getStringCharWidth(byte chr);
307 void appendSubstring(
int dst,
int src,
int len2,
int len);
311 void o71_kernelSetFunctions();
312 void o71_copyString();
313 void o71_getStringWidth();
314 void o71_appendString();
315 void o71_concatString();
316 void o71_compareString();
317 void o71_getStringLenForWidth();
318 void o71_getCharIndexInString();
320 void o71_polygonOps();
321 void o71_polygonHit();
327 uint16 _auxBlocksNum;
329 uint16 _auxEntriesNum;
331 void queueAuxBlock(
ActorHE *a);
332 void queueAuxEntry(
int actorNum,
int subIndex);
334 void remapHEPalette(
const uint8 *src, uint8 *dst);
337 class ScummEngine_v72he :
public ScummEngine_v71he {
351 SO_COSTUME_SIZE = 16,
354 SO_FLUSH_OBJECT_DRAW_QUE = 22,
355 SO_TALK_CONDITION = 24,
356 SO_UPDATE_SCREEN = 26,
360 SO_ACTOR_DEFAULT_CLIPPED = 64,
362 SO_COMPLEX_ARRAY_ASSIGNMENT = 126,
363 SO_COMPLEX_ARRAY_COPY_OPERATION = 127,
364 SO_RANGE_ARRAY_ASSIGNMENT = 128,
365 SO_COMPLEX_ARRAY_MATH_OPERATION = 138,
366 SO_FORMATTED_STRING = 194,
367 SO_UNDIM_ARRAY = 204,
370 #include "common/pack-start.h" 381 #include "common/pack-end.h" 383 int _stringLength = 1;
384 byte _stringBuffer[4096];
386 WizParameters _wizParams;
391 void resetScumm()
override;
393 byte *getStringAddress(ResId idx)
override;
394 int setupStringArray(
int size)
override;
395 virtual int setupStringArrayFromString(
const char *cStr);
396 virtual void getStringFromArray(
int arrayNumber,
char *buffer,
int maxLength);
399 void setupOpcodes()
override;
401 void setupScummVars()
override;
402 void resetScummVars()
override;
403 void readArrayFromIndexFile()
override;
405 void readMAXS(
int blockSize)
override;
407 void redrawBGAreas()
override;
408 void checkExecVerbs()
override;
410 byte *defineArray(
int array,
int type,
int dim2start,
int dim2end,
int dim1start,
int dim1end,
bool newArray =
false,
int *newid = NULL);
411 int readArray(
int array,
int idx2,
int idx1)
override;
412 void writeArray(
int array,
int idx2,
int idx1,
int value)
override;
413 void redimArray(
int arrayId,
int newDim2start,
int newDim2end,
414 int newDim1start,
int newDim1end,
int type);
415 void checkArrayLimits(
int array,
int dim2start,
int dim2end,
int dim1start,
int dim1end);
416 void copyArray(
int array1,
int a1_dim2start,
int a1_dim2end,
int a1_dim1start,
int a1_dim1end,
417 int array2,
int a2_dim2start,
int a2_dim2end,
int a2_dim1start,
int a2_dim1end);
418 void copyArrayHelper(
ArrayHeader *ah,
int idx2,
int idx1,
int len1, byte **data,
int *size,
int *num);
419 int readFileToArray(
int slot, int32 size);
420 void writeFileFromArray(
int slot, int32 resID);
422 void decodeParseString(
int a,
int b)
override;
423 void decodeScriptString(byte *dst,
bool scriptString =
false);
424 void copyScriptString(byte *dst,
int dstSize);
426 int findObject(
int x,
int y,
int num,
int *args);
427 int getSoundResourceSize(ResId idx);
429 bool handleNextCharsetCode(
Actor *a,
int *c)
override;
430 int convertMessageToString(
const byte *msg, byte *dst,
int dstSize)
override;
431 void fakeBidiString(byte *ltext,
bool ignoreVerb,
int ltextSize)
const override;
433 void debugInput(byte *
string);
436 void o72_pushDWord();
437 void o72_getScriptString();
439 void o72_resetCutscene();
440 void o72_findObjectWithClassOf();
441 void o72_getObjectImageX();
442 void o72_getObjectImageY();
443 void o72_captureWizImage();
446 void o72_getSoundPosition();
447 void o72_startScript();
448 void o72_startObject();
449 void o72_drawObject();
450 void o72_printWizImage();
451 void o72_getArrayDimSize();
452 void o72_getNumFreeArrays();
456 void o72_findObject();
458 void o72_systemOps();
459 void o72_talkActor();
462 void o72_dim2dimArray();
463 void o72_traceStatus();
464 void o72_debugInput();
465 void o72_drawWizImage();
466 void o72_kernelGetFunctions();
467 void o72_jumpToScript();
470 void o72_writeFile();
471 void o72_findAllObjects();
472 void o72_deleteFile();
475 void o72_pickVarRandom();
476 void o72_redimArray();
479 void o72_getResourceSize();
480 void o72_createDirectory();
481 void o72_setSystemMessage();
484 byte VAR_NUM_SCRIPTS;
486 byte VAR_NUM_COSTUMES;
488 byte VAR_NUM_CHARSETS;
490 byte VAR_SOUND_ENABLED;
492 byte VAR_POLYGONS_ONLY;
494 byte VAR_MOUSE_STATE;
498 class ScummEngine_v80he :
public ScummEngine_v72he {
500 int32 _heSndResId = 0;
503 SO_CURSOR_IMAGE = 19,
504 SO_CURSOR_COLOR_IMAGE = 20,
514 void setupOpcodes()
override;
516 void setupScummVars()
override;
517 void resetScummVars()
override;
521 void initCharset(
int charset)
override;
523 void clearDrawQueues()
override;
525 void drawLine(
int x1,
int y1,
int x,
int unk1,
int unk2,
int type,
int id);
526 void drawPixel(
int x,
int y,
int flags);
528 void setDefaultCursor()
override;
531 void o80_createSound();
532 void o80_getFileSize();
533 void o80_stringToInt();
534 void o80_getSoundVar();
535 void o80_localizeArrayToRoom();
536 void o80_sourceDebug();
537 void o80_readConfigFile();
538 void o80_writeConfigFile();
539 void o80_cursorCommand();
541 void o80_drawWizPolygon();
543 void o80_pickVarRandom();
545 byte VAR_PLATFORM_VERSION;
546 byte VAR_CURRENT_CHARSET;
548 byte VAR_COLOR_DEPTH;
551 class ScummEngine_v90he :
public ScummEngine_v80he {
552 friend class LogicHE;
559 friend class Moonbase;
560 friend class MoviePlayer;
564 FloodFillParameters _floodFillParams;
581 SO_GENERAL_CLIP_STATE = 46,
582 SO_GENERAL_CLIP_RECT = 47,
598 SO_POLY_POLYGON = 131,
600 SO_RENDER_RECTANGLE = 133,
601 SO_RENDER_LINE = 134,
602 SO_RENDER_PIXEL = 135,
603 SO_RENDER_FLOOD_FILL = 136,
604 SO_RENDER_INTO_IMAGE = 137,
605 SO_NEW_GENERAL_PROPERTY = 139,
608 SO_FONT_CREATE = 142,
609 SO_FONT_RENDER = 143,
611 SO_RENDER_ELLIPSE = 189,
615 struct VideoParameters {
623 VideoParameters _videoParams;
625 int32 _heObject, _heObjectNum;
628 int32 _curMaxSpriteId;
630 int32 _curSpriteGroupId;
633 MoviePlayer *_moviePlay;
646 ~ScummEngine_v90he()
override;
649 void allocateArrays()
override;
650 void setupOpcodes()
override;
652 void resetScumm()
override;
654 void setupScummVars()
override;
655 void resetScummVars()
override;
657 void scummLoop(
int delta)
override;
658 void scummLoop_handleDrawing()
override;
659 void runBootscript()
override;
661 void processInput()
override;
662 void clearClickedStatus()
override;
666 void readMAXS(
int blockSize)
override;
667 void setResourceOffHeap(
int typeId,
int resId,
int val);
669 void processActors()
override;
671 int computeWizHistogram(
int resnum,
int state,
int x,
int y,
int w,
int h);
672 void getArrayDim(
int array,
int *dim2start,
int *dim2end,
int *dim1start,
int *dim1end);
673 void sortArray(
int array,
int dim2start,
int dim2end,
int dim1start,
int dim1end,
int sortOrder);
676 int getGroupSpriteArray(
int spriteGroupId);
679 uint8 *getHEPaletteIndex(
int palSlot);
680 int getHEPaletteColor(
int palSlot,
int color);
681 int getHEPaletteSimilarColor(
int palSlot,
int red,
int green,
int start,
int end);
682 int getHEPalette16BitColorComponent(
int component,
int type);
683 int getHEPaletteColorComponent(
int palSlot,
int color,
int component);
684 void setHEPaletteColor(
int palSlot, uint8 color, uint8 r, uint8 g, uint8 b);
685 void setHEPaletteFromPtr(
int palSlot,
const uint8 *palData);
686 void setHEPaletteFromCostume(
int palSlot,
int resId);
687 void setHEPaletteFromImage(
int palSlot,
int resId,
int state);
688 void setHEPaletteFromRoom(
int palSlot,
int resId,
int state);
689 void restoreHEPalette(
int palSlot);
690 void copyHEPalette(
int dstPalSlot,
int srcPalSlot);
691 void copyHEPaletteColor(
int palSlot, uint8 dstColor, uint16 srcColor);
702 void o90_getSegmentAngle();
703 void o90_getActorData();
704 void o90_startScriptUnk();
705 void o90_jumpToScriptUnk();
707 void o90_getVideoData();
708 void o90_wizImageOps();
709 void o90_getDistanceBetweenPoints();
710 void o90_getSpriteInfo();
711 void o90_setSpriteInfo();
712 void o90_getSpriteGroupInfo();
713 void o90_setSpriteGroupInfo();
714 void o90_getWizData();
715 void o90_floodFill();
720 void o90_findAllObjectsWithClassOf();
721 void o90_getPolygonOverlap();
723 void o90_dim2dim2Array();
724 void o90_redim2dimArray();
725 void o90_getLinesIntersectionPoint();
726 void o90_sortArray();
727 void o90_getObjectData();
728 void o90_getPaletteData();
729 void o90_paletteOps();
731 void o90_getActorAnimProgress();
732 void o90_kernelGetFunctions();
733 void o90_kernelSetFunctions();
735 byte VAR_NUM_SPRITE_GROUPS;
736 byte VAR_NUM_SPRITES;
737 byte VAR_NUM_PALETTES;
740 byte VAR_U32_VERSION;
741 byte VAR_U32_ARRAY_UNK;
744 byte VAR_REMOTE_START_SCRIPT;
745 byte VAR_NETWORK_AVAILABLE;
746 byte VAR_NETWORK_RECEIVE_ARRAY_SCRIPT;
749 int networkSessionDialog();
753 class ScummEngine_v99he :
public ScummEngine_v90he {
757 void resetScumm()
override;
760 void resetScummVars()
override;
762 void readMAXS(
int blockSize)
override;
766 void copyPalColor(
int dst,
int src)
override;
767 void darkenPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor)
override;
768 void setPaletteFromPtr(
const byte *ptr,
int numcolor = -1)
override;
769 void setPalColor(
int index,
int r,
int g,
int b)
override;
770 void updatePalette()
override;
773 class ScummEngine_v100he :
public ScummEngine_v99he {
775 friend class Moonbase;
779 friend class ScummEngine_v71he;
780 friend class ScummEngine_v72he;
781 friend class ScummEngine_v90he;
782 friend class ScummEngine_v80he;
788 byte _debugInputBuffer[256];
795 SO_ANIMATION_SPEED = 4,
799 SO_BACKGROUND_OFF = 8,
800 SO_BACKGROUND_ON = 9,
805 SO_CHARSET_COLOR = 15,
817 SO_DELETE_POLYGON = 28,
824 SO_FORMATTED_STRING = 35,
825 SO_GENERAL_CLIP_RECT = 36,
826 SO_GENERAL_CLIP_STATE = 37,
842 SO_NEW_GENERAL_PROPERTY = 54,
846 SO_POLY_TO_POLY = 58,
851 SO_ROOM_PALETTE = 63,
857 SO_SET_POLYGON_LOCAL = 69,
874 SO_ALWAYS_ZCLIP = 87,
881 SO_ACTOR_DEFAULT_CLIPPED = 128,
883 SO_ACTOR_SOUNDS = 130,
884 SO_ACTOR_WIDTH = 131,
885 SO_ANIMATION_DEFAULT = 132,
887 SO_FOLLOW_BOXES = 134,
888 SO_IGNORE_BOXES = 135,
889 SO_ACTOR_IGNORE_TURNS_OFF = 136,
890 SO_ACTOR_IGNORE_TURNS_ON = 137,
891 SO_INIT_ANIMATION = 138,
892 SO_STAND_ANIMATION = 139,
893 SO_TALK_ANIMATION = 140,
895 SO_TALK_CONDITION = 142,
896 SO_TEXT_OFFSET = 143,
897 SO_WALK_ANIMATION = 144,
900 SO_ASSIGN_2DIM_LIST = 128,
901 SO_ASSIGN_INT_LIST = 129,
902 SO_COMPLEX_ARRAY_ASSIGNMENT = 130,
903 SO_COMPLEX_ARRAY_COPY_OPERATION = 131,
904 SO_COMPLEX_ARRAY_MATH_OPERATION = 132,
905 SO_RANGE_ARRAY_ASSIGNMENT = 133,
907 SO_UNDIM_ARRAY = 135,
911 SO_PRELOAD_FLUSH = 129,
920 SO_FONT_CREATE = 128,
922 SO_FONT_RENDER = 130,
925 SO_RENDER_ELLIPSE = 133,
926 SO_RENDER_FLOOD_FILL = 134,
927 SO_RENDER_INTO_IMAGE = 135,
928 SO_RENDER_LINE = 136,
929 SO_RENDER_PIXEL = 137,
930 SO_RENDER_RECTANGLE = 138,
933 SO_CURSOR_IMAGE = 128,
934 SO_CURSOR_COLOR_IMAGE = 129,
935 SO_CURSOR_COLOR_PAL_IMAGE = 130,
936 SO_CURSOR_HOTSPOT = 132,
939 SO_CURSOR_SOFT_ON = 136,
940 SO_CURSOR_SOFT_OFF = 137,
942 SO_USERPUT_OFF = 140,
943 SO_USERPUT_SOFT_ON = 141,
944 SO_USERPUT_SOFT_OFF = 142,
947 SO_OBJECT_ORDER = 129,
948 SO_ROOM_COPY_PALETTE = 130,
950 SO_ROOM_INTENSITY = 132,
951 SO_ROOM_INTENSITY_RGB = 133,
952 SO_ROOM_NEW_PALETTE = 134,
953 SO_ROOM_PALETTE_IN_ROOM = 135,
954 SO_ROOM_SAVEGAME = 136,
955 SO_ROOM_SAVEGAME_BY_NAME = 137,
956 SO_ROOM_SCREEN = 138,
957 SO_ROOM_SCROLL = 139,
960 SO_FLUSH_OBJECT_DRAW_QUEUE = 128,
961 SO_PAUSE_TITLE = 131,
964 SO_RESTART_STRING = 134,
965 SO_START_SYSTEM_STRING = 135,
966 SO_UPDATE_SCREEN = 136,
970 SO_SOUND_CHANNEL = 129,
971 SO_SOUND_FREQUENCY = 130,
972 SO_SOUND_LOOPING = 131,
973 SO_SOUND_MODIFY = 132,
975 SO_SOUND_START = 134,
977 SO_SOUND_VOLUME = 136,
980 SO_WAIT_FOR_ACTOR = 128,
981 SO_WAIT_FOR_CAMERA = 129,
982 SO_WAIT_FOR_MESSAGE = 130,
983 SO_WAIT_FOR_SENTENCE = 131,
991 ~ScummEngine_v100he()
override;
993 void resetScumm()
override;
995 void setupScummVars()
override;
996 void resetScummVars()
override;
999 void setupOpcodes()
override;
1003 void decodeParseString(
int a,
int b)
override;
1006 void o100_actorOps();
1007 void o100_arrayOps();
1008 void o100_dim2dimArray();
1009 void o100_redim2dimArray();
1010 void o100_dimArray();
1011 void o100_drawLine();
1012 void o100_drawObject();
1013 void o100_floodFill();
1014 void o100_setSpriteGroupInfo();
1015 void o100_resourceRoutines();
1016 void o100_wizImageOps();
1017 void o100_jumpToScript();
1018 void o100_createSound();
1019 void o100_dim2dim2Array();
1020 void o100_paletteOps();
1021 void o100_jumpToScriptUnk();
1022 void o100_startScriptUnk();
1023 void o100_redimArray();
1024 void o100_roomOps();
1025 void o100_setSystemMessage();
1026 void o100_soundOps();
1027 void o100_setSpriteInfo();
1028 void o100_startScript();
1029 void o100_systemOps();
1030 void o100_cursorCommand();
1031 void o100_videoOps();
1033 void o100_writeFile();
1034 void o100_debugInput();
1035 void o100_isResourceLoaded();
1036 void o100_getResourceSize();
1037 void o100_getSpriteGroupInfo();
1038 void o100_getPaletteData();
1039 void o100_readFile();
1040 void o100_getSpriteInfo();
1041 void o100_getWizData();
1042 void o100_getVideoData();
1045 byte VAR_U32_USER_VAR_A;
1046 byte VAR_U32_USER_VAR_B;
1047 byte VAR_U32_USER_VAR_C;
1048 byte VAR_U32_USER_VAR_D;
1049 byte VAR_U32_USER_VAR_E;
1050 byte VAR_U32_USER_VAR_F;
1052 byte VAR_REMOTE_START_SCRIPT;
1053 byte VAR_NETWORK_AVAILABLE;
1054 byte VAR_NETWORK_RECEIVE_ARRAY_SCRIPT;
1057 class ScummEngine_vCUPhe :
public Engine {
1059 CUP_Player *_cupPlayer;
1064 ~ScummEngine_vCUPhe()
override;
Definition: detection.h:264
Definition: net_main.h:33
Definition: sound_he.h:147
ResType
Definition: scumm.h:256
Definition: serializer.h:79
Definition: net_lobby.h:85
Definition: actor_he.h:47
Definition: intern_he.h:48
Definition: intern_he.h:137
Definition: actor_he.h:52
Definition: detection.h:191
Definition: algorithm.h:29
Definition: scumm_v6.h:29
Definition: actor_he.h:30
Definition: detection.h:278