22 #if !defined(SCUMM_HE_SPRITE_HE_H) && defined(ENABLE_HE) 23 #define SCUMM_HE_SPRITE_HE_H 25 #include "common/serializer.h" 30 #define SPRDEF_SMART 1 31 #define SPRDEF_SIMPLE 2 34 kSFErase = 0x00000001,
35 kSFRender = 0x00000002,
36 kSFScaleSpecified = 0x00000010,
37 kSFAngleSpecified = 0x00000020,
38 kSFBackgroundRender = 0x00001000,
39 kSFVFlip = 0x00002000,
40 kSFHFlip = 0x00004000,
41 kSFActive = 0x00008000,
42 kSFUseImageRemap = 0x00080000,
43 kSFAutoAnimate = 0x00200000,
44 kSFSmartRender = 0x00400000,
45 kSFDontAnimImageList = 0x01000000,
46 kSFDontCombineErase = 0x02000000,
47 kSFIgnoreRender = 0x20000000,
48 kSFIgnoreErase = 0x40000000,
51 kSFDefaultFlagInactive = (kSFErase | kSFDontCombineErase),
52 kSFDefaultFlagActive = (kSFActive | kSFAutoAnimate | kSFSmartRender | kSFDontCombineErase)
55 enum SpriteGroupFlags {
56 kSGFUseClipRect = 0x00000001
59 enum SpritePropertySubOps {
63 SPRPROP_BACKGROUND_RENDER = 3,
64 SPRPROP_USE_IMAGE_REMAP_TABLE = 4,
67 enum SpriteGroupPropertySubOps {
74 enum SpriteGroupSubOps {
77 SPRGRPOP_NEW_GROUP = 3,
78 SPRGRPOP_UPDATE_TYPE = 4,
80 SPRGRPOP_ANIMATION_SPEED = 6,
81 SPRGRPOP_ANIMATION_TYPE = 7,
85 enum SpriteProperties {
86 SPRPROP_SPECIAL_RENDER_FLAGS = 123,
87 SPRPROP_SPECIAL_BLEND_FLAGS = 124,
88 SPRPROP_CONDITION_BITS = 125,
89 SPRPROP_ANIMATION_SUB_STATE = 126
92 enum PolygonOverlapSubOps {
93 OVERLAP_POINT_TO_RECT = 1,
94 OVERLAP_POINT_TO_CIRCLE = 2,
95 OVERLAP_RECT_TO_RECT = 3,
96 OVERLAP_CIRCLE_TO_CIRCLE = 4,
97 OVERLAP_POINT_N_SIDED_POLYGON = 5,
98 OVERLAP_SPRITE_TO_SPRITE = 6,
99 OVERLAP_SPRITE_TO_RECT = 7,
100 OVERLAP_DRAW_POS_SPRITE_TO_SPRITE = 8,
101 OVERLAP_DRAW_POS_SPRITE_TO_RECT = 9,
102 OVERLAP_SPRITE_TO_SPRITE_PIXEL_PERFECT = 10,
107 int32 combinedPriority;
131 int32 lastRenderFlags;
138 int32 specialRenderFlags;
143 combinedPriority = 0;
150 lastRect.top = lastRect.
left = lastRect.bottom = lastRect.
right = 0;
153 lastSpot.
x = lastSpot.
y = 0;
174 specialRenderFlags = 0;
179 struct SpriteImageList {
200 clipRect.top = clipRect.
left = clipRect.bottom = clipRect.
right = 0;
216 class ScummEngine_v90he;
220 Sprite(ScummEngine_v90he *vm);
223 SpriteInfo *_spriteTable;
224 SpriteGroup *_groupTable;
225 SpriteInfo **_activeSprites;
226 SpriteImageList *_imageLists;
227 int16 *_imageListStack;
229 int32 _imageListStackIndex = 0;
230 int32 _activeSpriteCount = 0;
231 int32 _maxSpriteGroups = 0;
232 int32 _maxSprites = 0;
233 int32 _maxImageLists = 0;
237 bool doesRectIntersectUpdateAreas(
const Common::Rect *rectPtr);
238 void checkForForcedRedraws(
bool checkOnlyPositivePriority);
239 void buildActiveSpriteList();
240 void renderSprites(
bool negativeOrPositiveRender);
241 void runSpriteEngines();
243 int spriteFromPoint(
int x,
int y,
int spriteGroupId,
int d,
int num,
int *args);
244 int getSpriteClass(
int spriteId,
int num);
245 int checkSpriteClassAgaintClassSet(
int sprite,
int classCount,
int *classCheckTable);
246 int getSpriteRenderToBackground(
int spriteId);
247 int getSpriteVertFlip(
int spriteId);
248 int getSpriteHorzFlip(
int spriteId);
249 int getSpriteActiveFlag(
int spriteId);
250 int getSpriteImageRemapFlag(
int spriteId);
251 int getSpriteAutoAnimFlag(
int spriteId);
252 int getSpriteUpdateType(
int spriteId);
253 int getSpriteEraseType(
int spriteId);
254 int getSpriteImage(
int spriteId);
255 int getSpriteImageState(
int spriteId);
256 int getSpriteGroup(
int spriteId);
257 int getSpritePalette(
int spriteId);
258 int getSpritePriority(
int spriteId);
259 int getSpriteDisplayX(
int spriteId);
260 int getSpriteDisplayY(
int spriteId);
261 int getUserValue(
int spriteId);
262 int getSpriteShadow(
int spriteId);
263 int getSpriteImageStateCount(
int spriteId);
264 int getSpriteScale(
int spriteId);
265 int getSpriteAnimSpeed(
int spriteId);
266 int getSourceImage(
int spriteId);
267 int getMaskImage(
int spriteId);
268 int getSpriteGeneralProperty(
int spriteId,
int type);
269 int getDestImageForSprite(
const SpriteInfo *spritePtr);
270 int getSpriteAnimSpeedState(
int sprite);
271 void getSpriteLogicalRect(
int sprite,
Common::Rect *rectPtr);
272 void getSpriteDrawRect(
int sprite,
Common::Rect *rectPtr);
273 void getSpriteImageDim(
int spriteId, int32 &w, int32 &h);
274 void getSpritePosition(
int spriteId, int32 &tx, int32 &ty);
275 void getSpriteRectPrim(
const SpriteInfo *spritePtr,
Common::Rect *rectPtr,
bool includeGroupTransform,
const Common::Point *spotPtr);
276 void getDelta(
int spriteId, int32 &dx, int32 &dy);
277 void calcSpriteSpot(
const SpriteInfo *spritePtr,
bool includeGroupTransform, int32 &x, int32 &y);
279 int getGroupPriority(
int spriteGroupId);
280 int getGroupImage(
int spriteGroupId);
281 int getGroupXMul(
int spriteGroupId);
282 int getGroupXDiv(
int spriteGroupId);
283 int getGroupYMul(
int spriteGroupId);
284 int getGroupYDiv(
int spriteGroupId);
285 void getGroupPoint(
int spriteGroupId, int32 &tx, int32 &ty);
286 int getGroupGeneralProperty(
int group,
int property);
288 void setSpritePalette(
int spriteId,
int value);
289 void setSourceImage(
int spriteId,
int value);
290 void setMaskImage(
int spriteId,
int value);
291 void newSprite(
int spriteId);
292 void setSpriteImageState(
int spriteId,
int value);
293 void setSpritePosition(
int spriteId,
int value1,
int value2);
294 void setSpriteGroup(
int spriteId,
int value);
295 void setDelta(
int spriteId,
int value1,
int value2);
296 void setSpriteShadow(
int spriteId,
int value);
297 void setUserValue(
int spriteId,
int value1,
int value2);
298 void setSpritePriority(
int spriteId,
int value);
299 void moveSprite(
int spriteId,
int value1,
int value2);
300 void setSpriteScale(
int spriteId,
int value);
301 void setSpriteAngle(
int spriteId,
int value);
302 void setSpriteRenderToBackground(
int spriteId,
int value);
303 void setSpriteVertFlip(
int spriteId,
int value);
304 void setSpriteHorzFlip(
int spriteId,
int value);
305 void setSpriteActiveFlag(
int spriteId,
int value);
306 void setSpriteImageRemapFlag(
int spriteId,
int value);
307 void setSpriteAutoAnimFlag(
int spriteId,
int value);
308 void setSpriteUpdateType(
int spriteId,
int value);
309 void setSpriteEraseType(
int spriteId,
int value);
310 void setSpriteAnimSpeed(
int spriteId,
int value);
311 void setSpriteClass(
int spriteId,
int classId,
int toggle);
312 void clearSpriteClasses(
int spriteId);
313 void setSpriteZBuffer(
int spriteId,
int value);
314 void setSpriteAnimSpeedState(
int spriteId,
int animState);
315 void setSpriteGeneralProperty(
int spriteId,
int type,
int value);
316 void setImageList(
int sprite,
int count,
const int *list);
318 void moveGroupMembers(
int spriteGroupId,
int value1,
int value2);
319 void orInGroupMembersFlags(
int spriteGroupId, int32 flags);
320 void setGroupMembersPriority(
int spriteGroupId,
int value);
321 void changeGroupMembersGroup(
int spriteGroupId,
int value);
322 void setGroupMembersUpdateType(
int spriteGroupId,
int value);
323 void performNewOnGroupMembers(
int spriteGroupId);
324 void setGroupMembersAnimationSpeed(
int spriteGroupId,
int value);
325 void setGroupMembersAutoAnimFlag(
int spriteGroupId,
int value);
326 void setGroupMembersShadow(
int spriteGroupId,
int value);
328 void moveGroup(
int spriteGroupId,
int value1,
int value2);
329 void setGroupClipRect(
int spriteGroupId,
int x1,
int y1,
int x2,
int y2);
330 void setGroupPriority(
int spriteGroupId,
int value);
331 void setGroupPoint(
int spriteGroupId,
int value1,
int value2);
332 void setGroupImage(
int spriteGroupId,
int value);
333 void setGroupScaling(
int spriteGroupId);
334 void setGroupXMul(
int spriteGroupId,
int value);
335 void setGroupXDiv(
int spriteGroupId,
int value);
336 void setGroupYMul(
int spriteGroupId,
int value);
337 void setGroupYDiv(
int spriteGroupId,
int value);
339 int pixelPerfectSpriteCollisionCheck(
int spriteA,
int deltaAX,
int deltaAY,
int spriteB,
int deltaBX,
int deltaBY);
341 void clearGroupClipRect(
int spriteGroupId);
342 void clearGroupScaleInfo(
int group);
344 void resetImageLists();
345 SpriteImageList *getImageListPtr(
int imageList);
346 int getFreeImageList(
int imageCount);
347 void releaseImageList(
int imageList);
349 void initializeStuff(
int numSprites,
int numGroups,
int numMaxSprites);
350 void newGroup(
int spriteGroupId);
351 void resetSpriteSystem(
bool refreshScreen);
353 void setSpriteImage(
int spriteId,
int imageNum);
355 ScummEngine_v90he *_vm;
int16 right
Definition: rect.h:146
Definition: serializer.h:79
Graphics::Surface * scale(const Graphics::Surface &srcImage, int xSize, int ySize)
int16 left
Definition: rect.h:145
Definition: serializer.h:308
int16 x
Definition: rect.h:46
int16 y
Definition: rect.h:47