1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11 
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16 
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  */
22 
23 #ifndef ASYLUM_SHARED_H
24 #define ASYLUM_SHARED_H
25 
26 namespace Asylum {
27 
28 //////////////////////////////////////////////////////////////////////////
29 // Global
30 //////////////////////////////////////////////////////////////////////////
31 enum GameFlag {
32 	kGameFlag0                    = 0,
33 
34 	kGameFlag4                    = 4,
35 	kGameFlag12                   = 12,
36 	kGameFlag52                   = 52,
37 	kGameFlag86                   = 86,
38 	kGameFlag87                   = 87,
39 	kGameFlag88                   = 88,
40 	kGameFlag114                  = 114,
41 	kGameFlag115                  = 115,
42 	kGameFlag128                  = 128,
43 	kGameFlag169                  = 169,
44 	kGameFlagScriptProcessing     = 183,
45 	kGameFlag186                  = 186,
46 	kGameFlagCommentLeavingCell   = 214,
47 	kGameFlag215                  = 215,
48 	kGameFlag219                  = 219,
49 	kGameFlagSolveVCRPuzzle       = 220,
50 	kGameFlag235                  = 235,
51 	kGameFlag238                  = 238,
52 	kGameFlag239                  = 239,
53 	kGameFlag243                  = 243,
54 	kGameFlag244                  = 244,
55 	kGameFlag245                  = 245,
56 	kGameFlag246                  = 246,
57 	kGameFlag247                  = 247,
58 	kGameFlag248                  = 248,
59 	kGameFlag249                  = 249,
60 	kGameFlag253                  = 253,
61 	kGameFlag254                  = 254,
62 	kGameFlag255                  = 255,
63 	kGameFlag256                  = 256,
64 	kGameFlag257                  = 257,
65 	kGameFlag258                  = 258,
66 	kGameFlag259                  = 259,
67 	kGameFlag260                  = 260,
68 	kGameFlag261                  = 261,
69 	kGameFlag262                  = 262,
70 	kGameFlag263                  = 263,
71 	kGameFlag264                  = 264,
72 	kGameFlag265                  = 265,
73 	kGameFlag266                  = 266,
74 	kGameFlag267                  = 267,
75 	kGameFlag268                  = 268,
76 	kGameFlag269                  = 269,
77 	kGameFlag270                  = 270,
78 	kGameFlag271                  = 271,
79 	kGameFlag272                  = 272,
80 	kGameFlag273                  = 273,
81 	kGameFlag274                  = 274,
82 	kGameFlag275                  = 275,
83 	kGameFlag276                  = 276,
84 	kGameFlag279                  = 279,
85 	kGameFlag281                  = 281,
86 	kGameFlag282                  = 282,
87 	kGameFlag283                  = 283,
88 	kGameFlag284                  = 284,
89 	kGameFlag289                  = 289,
90 	kGameFlag319                  = 319,
91 	kGameFlag320                  = 320,
92 	kGameFlag321                  = 321,
93 	kGameFlag322                  = 322,
94 	kGameFlag323                  = 323,
95 	kGameFlag353                  = 353,
96 	kGameFlag354                  = 354,
97 	kGameFlag355                  = 355,
98 	kGameFlag358                  = 358,
99 	kGameFlag368                  = 368,
100 	kGameFlag369                  = 369,
101 	kGameFlag370                  = 370,
102 	kGameFlag371                  = 371,
103 	kGameFlag384                  = 384,
104 	kGameFlag387                  = 387,
105 	kGameFlag391                  = 391,
106 	kGameFlag405                  = 405,
107 	kGameFlag423                  = 423,
108 	kGameFlag438                  = 438,
109 	kGameFlag439                  = 439,
110 	kGameFlag440                  = 440,
111 	kGameFlag441                  = 441,
112 	kGameFlag442                  = 442,
113 	kGameFlag447                  = 447,
114 	kGameFlag448                  = 448,
115 	kGameFlag450                  = 450,
116 	kGameFlag451                  = 451,
117 	kGameFlag452                  = 452,
118 	kGameFlag453                  = 453,
119 	kGameFlag454                  = 454,
120 	kGameFlag455                  = 455,
121 	kGameFlag470                  = 470,
122 	kGameFlag481                  = 481,
123 	kGameFlag511                  = 511,
124 	kGameFlag528                  = 528,
125 	kGameFlag543                  = 543,
126 	kGameFlag544                  = 544,
127 	kGameFlag545                  = 545,
128 	kGameFlag553                  = 553,
129 	kGameFlag556                  = 556,
130 	kGameFlag557                  = 557,
131 	kGameFlag558                  = 558,
132 	kGameFlag560                  = 560,
133 	kGameFlag561                  = 561,
134 	kGameFlag562                  = 562,
135 	kGameFlag563                  = 563,
136 	kGameFlag564                  = 564,
137 	kGameFlag565                  = 565,
138 	kGameFlag566                  = 566,
139 	kGameFlag567                  = 567,
140 	kGameFlag568                  = 568,
141 	kGameFlag569                  = 569,
142 	kGameFlag570                  = 570,
143 	kGameFlag572                  = 572,
144 	kGameFlag582                  = 582,
145 	kGameFlag583                  = 583,
146 	kGameFlag596                  = 596,
147 	kGameFlag597                  = 597,
148 	kGameFlag598                  = 598,
149 	kGameFlag599                  = 599,
150 	kGameFlag600                  = 600,
151 	kGameFlag608                  = 608,
152 	kGameFlag619                  = 619,
153 	kGameFlag635                  = 635,
154 	kGameFlag636                  = 636,
155 	kGameFlag637                  = 637,
156 	kGameFlagSolveHiveControl     = 640,
157 	kGameFlag684                  = 684,
158 	kGameFlag685                  = 685,
159 	kGameFlag686                  = 686,
160 	kGameFlag687                  = 687,
161 	kGameFlag688                  = 688,
162 	kGameFlag689                  = 689,
163 	kGameFlag690                  = 690,
164 	kGameFlag691                  = 691,
165 	kGameFlag692                  = 692,
166 	kGameFlag693                  = 693,
167 	kGameFlag694                  = 694,
168 	kGameFlag695                  = 695,
169 	kGameFlag696                  = 696,
170 	kGameFlag697                  = 697,
171 	kGameFlag698                  = 698,
172 	kGameFlag699                  = 699,
173 	kGameFlag700                  = 700,
174 	kGameFlag701                  = 701,
175 	kGameFlag702                  = 702,
176 	kGameFlag703                  = 703,
177 	kGameFlag704                  = 704,
178 	kGameFlag705                  = 705,
179 	kGameFlag706                  = 706,
180 	kGameFlag707                  = 707,
181 	kGameFlag708                  = 708,
182 	kGameFlag722                  = 722,
183 	kGameFlag723                  = 723,
184 	kGameFlag724                  = 724,
185 	kGameFlag725                  = 725,
186 	kGameFlag726                  = 726,
187 	kGameFlag727                  = 727,
188 	kGameFlag728                  = 728,
189 	kGameFlag729                  = 729,
190 	kGameFlag730                  = 730,
191 	kGameFlag759                  = 759,
192 	kGameFlag760                  = 760,
193 	kGameFlag761                  = 761,
194 	kGameFlag776                  = 776,
195 	kGameFlag790                  = 790,
196 	kGameFlag791                  = 791,
197 	kGameFlag792                  = 792,
198 	kGameFlag794                  = 794,
199 	kGameFlag795                  = 795,
200 	kGameFlag796                  = 796,
201 	kGameFlag797                  = 797,
202 	kGameFlag801                  = 801,
203 	kGameFlag802                  = 802,
204 	kGameFlag803                  = 803,
205 	kGameFlag804                  = 804,
206 	kGameFlag805                  = 805,
207 	kGameFlag806                  = 806,
208 	kGameFlag809                  = 809,
209 	kGameFlag810                  = 810,
210 	kGameFlag815                  = 815,
211 	kGameFlag816                  = 816,
212 	kGameFlag817                  = 817,
213 	kGameFlag818                  = 818,
214 	kGameFlag819                  = 819,
215 	kGameFlag820                  = 820,
216 	kGameFlag821                  = 821,
217 	kGameFlag822                  = 822,
218 	kGameFlag823                  = 823,
219 	kGameFlag824                  = 824,
220 	kGameFlag825                  = 825,
221 	kGameFlag826                  = 826,
222 	kGameFlag827                  = 827,
223 	kGameFlag828                  = 828,
224 	kGameFlag829                  = 829,
225 	kGameFlag830                  = 830,
226 	kGameFlagSolveHiveMachine     = 834,
227 	kGameFlag866                  = 866,
228 	kGameFlag875                  = 875,
229 	kGameFlag876                  = 876,
230 	kGameFlag877                  = 877,
231 	kGameFlag878                  = 878,
232 	kGameFlag879                  = 879,
233 	kGameFlag880                  = 880,
234 	kGameFlag881                  = 881,
235 	kGameFlag897                  = 897,
236 	kGameFlag899                  = 899,
237 	kGameFlagFinishGame           = 901,
238 	kGameFlag925                  = 925,
239 	kGameFlag937                  = 937,
240 	kGameFlag1009                 = 1009,
241 	kGameFlag1021                 = 1021,
242 	kGameFlag1022                 = 1022,
243 	kGameFlag1023                 = 1023,
244 	kGameFlag1054                 = 1054,
245 	kGameFlag1055                 = 1055,
246 	kGameFlag1056                 = 1056,
247 	kGameFlag1057                 = 1057,
248 	kGameFlag1058                 = 1058,
249 	kGameFlag1059                 = 1059,
250 	kGameFlag1060                 = 1060,
251 	kGameFlag1061                 = 1061,
252 	kGameFlag1062                 = 1062,
253 	kGameFlag1063                 = 1063,
254 	kGameFlag1064                 = 1064,
255 	kGameFlag1065                 = 1065,
256 	kGameFlag1066                 = 1066,
257 	kGameFlag1067                 = 1067,
258 	kGameFlag1099                 = 1099,
259 	kGameFlag1108                 = 1108,
260 	kGameFlag1121                 = 1121,
261 	kGameFlag1122                 = 1122,
262 	kGameFlag1131                 = 1131,
263 	kGameFlag1137                 = 1137,
264 	kGameFlag1144                 = 1144,
265 	kGameFlag3189                 = 3189,
266 	kGameFlag3351                 = 3351,
267 	kGameFlag3386                 = 3386,
268 	kGameFlag3387                 = 3387,
269 	kGameFlag3388                 = 3388,
270 	kGameFlag3389                 = 3389,
271 	kGameFlag3754                 = 3754,
272 	kGameFlag3755                 = 3755,
273 	kGameFlag3810                 = 3810,
274 	kGameFlag3823                 = 3823,
275 	kGameFlag3842                 = 3842,
276 	kGameFlag3843                 = 3843,
277 	kGameFlag3931                 = 3931
278 };
279 
280 enum ChapterIndex {
281 	kChapterInvalid = -1,
282 	kChapterNone    = 0,
283 	kChapter1,
284 	kChapter2,
285 	kChapter3,
286 	kChapter4,
287 	kChapter5,
288 	kChapter6,
289 	kChapter7,
290 	kChapter8,
291 	kChapter9,
292 	kChapter10,
293 	kChapter11,
294 	kChapter12,
295 	kChapter13
296 };
297 
298 //////////////////////////////////////////////////////////////////////////
299 // Resources
300 //////////////////////////////////////////////////////////////////////////
301 
302 enum ResourcePackId {
303 	kResourcePackText                  = 0,
304 	kResourcePackShared                = 1,
305 	kResourcePackMusic                 = 2,    // Special case: will load from mus* resources
306 	kResourcePackSpeech                = 3,
307 	kResourcePackSharedSound           = 4,
308 	kResourcePackTowerCells            = 5,
309 	kResourcePackInnocentAbandoned     = 6,
310 	kResourcePackCourtyardAndChapel    = 7,
311 	kResourcePackCircusOfFools         = 8,
312 	kResourcePackLaboratory            = 9,
313 	kResourcePackHive                  = 10,
314 	kResourcePackMorgueAndCemetery     = 11,
315 	kResourcePackLostVillage           = 12,
316 	kResourcePackGauntlet              = 13,
317 	kResourcePackMansion               = 14,
318 	kResourcePackCave                  = 15,
319 	kResourcePackMaze                  = 16,
320 	kResourcePackMorgansLastGame       = 17,
321 	kResourcePackSound                 = 18,
322 	kResourcePack104                   = 104,
323 	kResourcePack204                   = 204,
324 	kResourcePack304                   = 304,
325 
326 	kResourcePackInvalid               = 0xFFF
327 };
328 
329 #define MAKE_RESOURCE(pack, index) (ResourceId)((((pack) << 16) + 0x80000000) + (unsigned) (int32)(index))
330 
331 typedef int ResourceId;
332 
333 enum ResourcesId {
334 	kResourceInvalid = -1,
335 	kResourceNone    = 0
336 };
337 
338 #define kMusicStopped -666
339 
340 //////////////////////////////////////////////////////////////////////////
341 // Drawing
342 //////////////////////////////////////////////////////////////////////////
343 enum DrawFlags {
344 	kDrawFlagNone            = 0,
345 	kDrawFlagMirrorLeftRight = 2
346 };
347 
348 //////////////////////////////////////////////////////////////////////////
349 // Actions
350 //////////////////////////////////////////////////////////////////////////
351 enum ActionType {
352 	kActionTypeNone = 0,
353 	kActionTypeFind = 1,
354 	kActionTypeTalk = 2,
355 	kActionTypeGrab = 4,
356 	kActionType8    = 8,
357 	kActionType16   = 16
358 };
359 
360 //////////////////////////////////////////////////////////////////////////
361 // Script
362 //////////////////////////////////////////////////////////////////////////
363 enum OpcodeType {
364 	kOpcodeReturn = 0,
365 	kOpcodeSetGameFlag,
366 	kOpcodeClearGameFlag,
367 	kOpcodeToggleGameFlag,
368 	kOpcodeJumpIfGameFlag,
369 	kOpcodeHideCursor,                          // 5
370 	kOpcodeShowCursor,
371 	kOpcodePlayAnimation,
372 	kOpcodeMoveScenePosition,
373 	kOpcodeHideActor,
374 	kOpcodeShowActor,                           // 10
375 	kOpcodeSetActorPosition,
376 	kOpcodeSetSceneMotionStatus,
377 	kOpcodeDisableActor,
378 	kOpcodeEnableActor,
379 	kOpcodeEnableObjects,                       // 15
380 	kOpcodeReturn1,
381 	kOpcodeRemoveObject,
382 	kOpcodeJumpActorSpeech,
383 	kOpcodeJumpAndSetDirection,
384 	kOpcodeJumpIfActorCoordinates,              // 20
385 	kOpcodeNop,
386 	kOpcodeResetAnimation,
387 	kOpcodeDisableObject,
388 	kOpcodeJumpIfSoundPlayingAndPlaySound,
389 	kOpcodeJumpIfActionFind,                    // 25
390 	kOpcodeSetActionFind,
391 	kOpcodeClearActionFind,
392 	kOpcodeJumpIfActionGrab,
393 	kOpcodeSetActionGrab,
394 	kOpcodeClearActionGrab,                     // 30
395 	kOpcodeJumpIfActionTalk,
396 	kOpcodeSetActionTalk,
397 	kOpcodeClearActionTalk,
398 	kOpcodeAddToInventory,
399 	kOpcodeRemoveFromInventory,                 // 35
400 	kOpcodeJumpIfInventoryOmits,
401 	kOpcodeRunEncounter,
402 	kOpcodeJumpIfAction16,
403 	kOpcodeSetAction16,
404 	kOpcodeClearAction16,                       // 40
405 	kOpcodeSelectInventoryItem,
406 	kOpcodeJumpIfInventoryItemNotSelected,
407 	kOpcodeChangeScene,
408 	kOpcodeInteract,
409 	kOpcodePlayMovie,                           // 45
410 	kOpcodeStopAllObjectsSounds,
411 	kOpcodeStopProcessing,
412 	kOpcodeResumeProcessing,
413 	kOpcodeResetSceneRect,
414 	kOpcodeChangeMusicById,                     // 50
415 	kOpcodeStopMusic,
416 	kOpcodeIncrementParam1,
417 	kOpcodeSetVolume,
418 	kOpcodeJump,
419 	kOpcodeRunPuzzle,                           // 55
420 	kOpcodeJumpIfAction8,
421 	kOpcodeSetAction8,
422 	kOpcodeClearAction8,
423 	kOpcodeCreatePalette,
424 	kOpcodeIncrementParam2,                     // 60
425 	kOpcodeWaitUntilFramePlayed,
426 	kOpcodeUpdateWideScreen,
427 	kOpcodeJumpIfActor,
428 	kOpcodePlaySpeechScene,
429 	kOpcodePlaySpeech,                          // 65
430 	kOpcodePlaySpeechScene2,
431 	kOpcodeMoveScenePositionFromActor,
432 	kOpcodePaletteFade,
433 	kOpcodeStartPaletteFadeThread,
434 	kOpcodePlaySoundUpdateObject,               // 70
435 	kOpcodeActorFaceTarget,
436 	kOpcodeHidMatteBars,
437 	kOpcodeShowMatteBars,
438 	kOpcodeJumpIfSoundPlaying,
439 	kOpcodeChangePlayer,                         // 75
440 	kOpcodeChangeActorStatus,
441 	kOpcodeStopSound,
442 	kOpcodeJumpRandom,
443 	kOpcodeClearScreen,
444 	kOpcodeQuit,                                // 80
445 	kOpcodeJumpObjectFrame,
446 	kOpcodeDeleteGraphics,
447 	kOpcodeSetPlayerField944,
448 	kOpcodeSetScriptField1BB0,
449 	kOpcodeOnScriptField1BB0,                   // 85
450 	kOpcodeWalkToActor,
451 	kOpcodeSetResourcePalette,
452 	kOpcodeSetObjectFrameIndexAndFlags,
453 	kOpcodeSetObjectFlags,
454 	kOpcodeSetActorActionIndex2,                // 90
455 	kOpcodeUpdateTransparency,
456 	kOpcodeQueueScript,
457 	kOpcodeProcessActor,
458 	kOpcodeClearActorFields,
459 	kOpcodeSetObjectLastFrameIndex,             // 95
460 	kOpcodeSetActionAreaFlags,
461 	kOpcodeMorphActor,
462 	kOpcodeShowMenu,
463 	kOpcodeUpdateGlobalFlags
464 };
465 
466 //////////////////////////////////////////////////////////////////////////
467 // Actor
468 //////////////////////////////////////////////////////////////////////////
469 
470 typedef int ActorIndex;
471 
472 enum ActorIndexes {
473 	kActorInvalid = -1,
474 	// TODO: check if the names match the actor type
475 	kActorMax     = 0,
476 	kActorSarah   = 1,
477 	kActorCyclops = 2,
478 	kActorAztec   = 3
479 };
480 
481 enum ActorStatus {
482 	kActorStatusNone    = 0,
483 	kActorStatusWalking = 1,      // Walking
484 	kActorStatusWalkingTo,        // Auto-walking to target
485 	kActorStatusInteracting,
486 	kActorStatusEnabled,          // Standing Still
487 	kActorStatusDisabled,         // 5
488 	kActorStatusShowingInventory,
489 	kActorStatusStoppedInteracting,
490 	kActorStatus8,
491 	kActorStatusFidget,
492 	kActorStatus10,
493 	kActorStatus11,
494 	kActorStatusWalking2,
495 	kActorStatusWalkingTo2,
496 	kActorStatusEnabled2,
497 	kActorStatusAttacking,        // 15
498 	kActorStatusGettingHurt,
499 	kActorStatusRestarting,
500 	kActorStatus18,
501 	kActorStatusHittingPumpkin,
502 	kActorStatusStoppedHitting,
503 	kActorStatusMorphingInto
504 };
505 
506 enum ActorDirection {
507 	kDirectionInvalid = -1,
508 	kDirectionN       = 0,
509 	kDirectionNW      = 1,
510 	kDirectionW       = 2,
511 	kDirectionSW      = 3,
512 	kDirectionS       = 4,
513 	kDirectionSE      = 5,
514 	kDirectionE       = 6,
515 	kDirectionNE      = 7,
516 	kDirection8       = 8
517 };
518 
519 enum ActorFlags {
520 	kActorFlagVisible = 1,
521 	kActorFlagMasked  = 2
522 };
523 
524 enum DirectionFrom {
525 	kDirectionFromObject     = 0,
526 	kDirectionFromPolygons   = 1,
527 	kDirectionFromActor      = 2,
528 	kDirectionFromParameters = 3
529 };
530 
531 //////////////////////////////////////////////////////////////////////////
532 // Object
533 //////////////////////////////////////////////////////////////////////////
534 enum ObjectId {
535 	kObjectInvalid                 = -1,
536 	kObjectNone                    = 0,
537 	kObjectHeadBanger              = 101,
538 	kObjectAngelFlares             = 112,
539 	kObjectTicaTac01               = 391,
540 	kObjectGuyFalls                = 434,
541 	kObjectGuyWobbles              = 405,
542 	kObjectRocker                  = 441,
543 	kObjectOpeningGate             = 485,
544 	kObjectTableRecordRoom         = 659,
545 	kObject703                     = 703,
546 	kObjectTree8                   = 726,
547 	kObjectSlab                    = 743,
548 	kObjectPreacherBobAssistant    = 802,
549 	kObjectPreacherBob             = 803,
550 	kObjectNPC024Church            = 816,
551 	kObjectNPC024Fountain          = 825,
552 	kObjectNPC027Sit               = 838,
553 	kObjectNPC028Sit               = 839,
554 	kObjectNPC029Sit               = 840,
555 	kObjectNPC027Dancing           = 844,
556 	kObjectNPC028Dancing           = 845,
557 	kObjectNPC026OutOfWay          = 861,
558 	kObjectNPC026Talking           = 862,
559 	kObjectOrangeRecord            = 920,
560 	kObjectJessieStatusQuo         = 984,
561 	kObjectMarty02                 = 991,
562 	kObjectEileenOnBench           = 993,
563 	kObject994                     = 994,
564 	kObjectFishingBoy              = 1001,
565 	kObjectDennisStatusQuo         = 1011,
566 	kObjectSailorBoy               = 1013,
567 	kObjectEleenOnGround           = 1019,
568 	kObjectSailorStatusQuo         = 1021,
569 	kObjectNPC026TalkStatusQuo     = 1038,
570 	kObjectSuckerSittingStatusQuo  = 1084,
571 	kObjectBubbles                 = 1185,
572 	kObjectGlow                    = 1186,
573 	kObjectDome                    = 1187,
574 	kObjectRedLight                = 1188,
575 	kObjectRing                    = 1189,
576 	kObjectBallMovesUpright        = 1190,
577 	kObjectGearsLightUp            = 1191,
578 	kObjectMariaPointsLeft         = 1200,
579 	kObjectMariaPointsRight        = 1201,
580 	kObjectNPC032Sleeping          = 1250,
581 	kObjectNPC032StatusQuoOutside  = 1254,
582 	kObjectNPC032StatusQuoBigTop   = 1256,
583 	kObjectGlobe                   = 1261,
584 	kObjectDrawers3                = 1276,
585 	kObjectChalice                 = 1286,
586 	kObjectFreezerHallInterior     = 1337,
587 	kObjectNPC033StartEnc          = 1338,
588 	kObjectNPC033GetBook           = 1343,
589 	kObjectNPC033Reading           = 1344,
590 	kObjectOldMan3                 = 1377,
591 	kObjectTattooManStatusQuo      = 1391,   // NPC 34
592 	kObjectStrongmanStatusQuo      = 1402,   // NPC 35
593 	kObjectStrongmanStatusQuo2     = 1405,   // NPC 35
594 	kObjectInfernoStatusQuo        = 1408,   // NPC 36
595 	kObjectJugglerWithPin          = 1423,   // NPC 37
596 	kObjectJuggler                 = 1424,   // NPC 37
597 	kObjectClownStatusQuo          = 1428,   // NPC 38
598 	kObjectTrixieStatusQuo         = 1432,   // NPC 39
599 	kObjectSimonStatusQuo          = 1434,   // NPC 40
600 	kObjectBigTopBarrel            = 1436,
601 	kObjectFunTixStatusQuo         = 1437,   // NPC 44
602 	kObjectStandBehindJuggler      = 1438,
603 	kObjectFreakTixStatusQuoUp     = 1439,   // NPC 45
604 	kObjectFreakTixStatusQuoDown   = 1440,   // NPC 45
605 	kObjectFortTellerStatusQuo     = 1444,   // NPC 45
606 	kObjectStrongmanLeft           = 1449,   // NPC 35
607 	kObjectStrongmanRight          = 1450,   // NPC 35
608 	kObjectRingTossStatusQuo       = 1451,   // NPC 47
609 	kObjectKnockDownStatusQuo      = 1455,   // NPC 47
610 	kObjectPigShootStatusQuo       = 1456,   // NPC 47
611 	kObjectPretZoolStatusQuo       = 1461,   // NPC 48
612 	kObjectTimberStatusQuo         = 1462,   // NPC 49
613 	kObjectTwinsStatusQuo          = 1465,   // NPC 50
614 	kObjectSeanStatusQuo           = 1468,   // NPC 51
615 	kObjectMomAndPopStatusQuo      = 1470,   // NPCs 52-53
616 	kObjectCrow1FlysAway           = 1485,
617 	kObjectCrow1Pecks              = 1486,
618 	kObjectCrow2AmbientPecks       = 1495,
619 	kObjectCrow2FlysAway           = 1500,
620 	kObjectCrow3FlysAway           = 1502,
621 	kObjectCrow3Pecks              = 1503,
622 	kObjectCrow4FlysAway           = 1506,
623 	kObjectCrow4Pecks              = 1507,
624 	kObjectPumpkin1Loop            = 1523,
625 	kObjectPumpkin2Loop            = 1524,
626 	kObjectPumpkin3Loop            = 1525,
627 	kObjectPumpkin4Loop            = 1526,
628 	kObjectPumpkin5Loop            = 1527,
629 	kObjectPumpkin6Loop            = 1528,
630 	kObjectPumpkin7Loop            = 1529,
631 	kObjectPumpkin1Dies            = 1530,
632 	kObjectPumpkin2Dies            = 1531,
633 	kObjectPumpkin3Dies            = 1532,
634 	kObjectPumpkin4Dies            = 1533,
635 	kObjectPumpkin5Dies            = 1534,
636 	kObjectPumpkin6Dies            = 1535,
637 	kObjectPumpkin7Dies            = 1536,
638 	kObjectDennisStatus2           = 1580,
639 	kObjectPreAlphaNut             = 1582,
640 	kObjectPreAlphaNut2            = 1584,
641 	kObjectDeadMomFromOutside      = 1589,
642 	kObjectHeadOnTable             = 1595,
643 	kObjectCave                    = 1763,
644 	kObjectWitchDoctor             = 1778,
645 	kObjectStoneWifeStatuQuo       = 1782,
646 	kObjectFishermanWidowStatusQuo = 1786,
647 	kObjectABarrier                = 1899,
648 	kObjectMonsterUp               = 1956,
649 	kObjectMonsterStatus           = 1957,
650 	kObjectMonsterDeath            = 1958,
651 	kObjectMonsterAttack           = 1959,
652 	kObjectPuke1                   = 1960,
653 	kObjectPuke2                   = 1961,
654 	kObjectPuke3                   = 1962,
655 	kObjectMonsterHurt             = 1997,
656 	kObjectWheel1                  = 2113,
657 	kObjectWheel2                  = 2114,
658 	kObjectWheel3                  = 2115,
659 	kObjectWheel4                  = 2116,
660 	kObjectWheel5                  = 2117,
661 	kObjectWheel6                  = 2118,
662 	kObjectWheel7                  = 2119,
663 	kObjectStoneMasonStatusHitt    = 2123,
664 	kObjectFlamingHeadLeftSide     = 2129,
665 	kObjectHook1B                  = 2131,
666 	kObjectHook2B                  = 2132,
667 	kObjectHook3B                  = 2133,
668 	kObjectHook4B                  = 2134,
669 	kObjectHook5B                  = 2135,
670 	kObjectHook6B                  = 2136,
671 	kObjectHook0Down               = 2152,
672 	kObjectHook2Down               = 2154,
673 	kObjectHook3Down               = 2155,
674 	kObjectHook4Down               = 2156,
675 	kObjectHook5Down               = 2157,
676 	kObjectHook6Down               = 2158,
677 	kObject2230                    = 2230,
678 	kObjectGravinStatusQuoCyber    = 2324,
679 	kObjectGravinWorkMachine       = 2337,
680 	kObjectNPC062GritzaStatusQuo   = 2399,
681 	kObjectNPC063GrundleStatusQuo  = 2410,
682 	kObjectNPC064GrellaStatusQuo   = 2418,
683 	kObjectSparkPuzzleLeft         = 2427,
684 	kObjectSparkPuzzleMiddle       = 2429,
685 	kObjectLavaBridge              = 2445,
686 	kObjectSparkPuzzleRight        = 2451,
687 	kObjectNPC065StatusQuo         = 2469,
688 	kObjectFloorTrap1              = 2473,
689 	kObjectFloorTrap2              = 2474,
690 	kObjectFloorTrap3              = 2475,
691 	kObjectFloorTrap4              = 2476,
692 	kObjectFloorTrap5              = 2477,
693 	kObjectGlow4                   = 2478,
694 	kObjectBugOnTable              = 2480,
695 	kObjectFloorTrap6              = 2481,
696 	kObjectFloorTrap7              = 2482,
697 	kObjectFloorTrap8              = 2483,
698 	kObjectFloorTrap9              = 2484,
699 	kObjectWadeThroughLava         = 2500,
700 	kObjectNPC066StatusQuo         = 2504,
701 	kObject2507                    = 2507,
702 	kObjectBrokenPipe              = 2508,
703 	kObjectBodySlides1             = 2514,
704 	kObjectBodySlides2             = 2515,
705 	kObjectBodySlides3             = 2516,
706 	kObjectBodySlides4             = 2517,
707 	kObjectBodySlides5             = 2518,
708 	kObjectBodySlides6             = 2519,
709 	kObjectEmberPopsOut            = 2526,
710 	kObjectBugCarriesEmber         = 2527,
711 	kObjectGirlStatusQuo           = 2541,
712 	kObjectWitchWifeStirring       = 2543,
713 	kObjectFurnaceHole             = 2554,
714 	kObjectInsidePipeCyberPod      = 2555,
715 	kObjectTopOfFurnace            = 2566,
716 	kObjectElderBugLimb            = 2572,
717 	kObjectQuetzlcaotlStatusQuo    = 2578,
718 	kObjectGhost1                  = 2579,
719 	kObjectGhost2                  = 2580,
720 	kObjectGhost3                  = 2581,
721 	kObjectGhost4                  = 2582,
722 	kObjectGhost5                  = 2583,
723 	kObjectGhost6                  = 2584,
724 	kObjectDiscardedBugPincer      = 2587,
725 	kObjectGong1                   = 2590,
726 	kObjectGong2                   = 2591,
727 	kObjectGong3                   = 2592,
728 	kObjectGong4                   = 2593,
729 	kObjectGong5                   = 2594,
730 	kObjectGong6                   = 2596,
731 	kObjectGhost2b                 = 2634,
732 	kObjectRitualLoop              = 2674,
733 	kObjectLine                    = 2859,
734 	kObjectZapPattern1             = 2876,
735 	kObjectZapPattern2             = 2877,
736 	kObjectZapPattern3             = 2878,
737 	kObjectBlanklPixelForWarrior   = 2884,
738 	kObjectPixelForHutWarrior      = 2885,
739 	kObjectPixelForWaterfallGhost  = 2886,
740 	kObjectZapPattern4             = 2892,
741 	kObjectZapPattern5             = 2893,
742 	kObjectZapPattern6             = 2894,
743 	kObjectZapPattern7             = 2895,
744 	kObjectZapPattern8             = 2896,
745 	kObjectZapPattern9             = 2897,
746 	kObjectLitLimbScanner          = 3061,
747 	kObjectOfficeWallNew           = 3062,
748 	kObjectCyberTable              = 3065,
749 
750 	kObjectEnd
751 };
752 
753 enum ObjectFlag {
754 	kObjectFlagEnabled   = 0x1,
755 	kObjectFlag2         = 0x2,
756 	kObjectFlag4         = 0x4,
757 	kObjectFlag6         = 0x6,
758 	kObjectFlag8         = 0x8,
759 	kObjectFlag10        = 0x10,
760 	kObjectFlag20        = 0x20,
761 	kObjectFlag40        = 0x40,
762 	kObjectFlag80        = 0x80,
763 	kObjectFlagBF        = 0xBF,
764 	kObjectFlag1000      = 0x1000,
765 	kObjectFlagC000      = 0xC000,
766 	kObjectFlag10000     = 0x10000,
767 	kObjectFlag10E38     = 0x10E38,
768 	kObjectFlag20000     = 0x20000,
769 	kObjectFlag40000     = 0x40000
770 };
771 
772 //////////////////////////////////////////////////////////////////////////
773 // Puzzles
774 //////////////////////////////////////////////////////////////////////////
775 enum PuzzleId {
776 	kPuzzleVCR = 0,
777 	kPuzzlePipes,
778 	kPuzzleTicTacToe,
779 	kPuzzleLock,
780 	kPuzzle4,
781 	kPuzzleWheel,                 // 5
782 	kPuzzleBoardSalvation,
783 	kPuzzleBoardYouth,
784 	kPuzzleBoardKeyHidesTo,
785 	kPuzzleWritings,
786 	kPuzzle11,                    // 10
787 	kPuzzleMorgueDoor,
788 	kPuzzleClock,
789 	kPuzzleTimeMachine,
790 	kPuzzleFisherman,
791 	kPuzzleHiveMachine,           // 15
792 	kPuzzleHiveControl
793 };
794 
795 //////////////////////////////////////////////////////////////////////////
796 // Custom engine actions
797 //////////////////////////////////////////////////////////////////////////
798 enum AsylumAction {
799 	kAsylumActionShowVersion,
800 	kAsylumActionQuickLoad,
801 	kAsylumActionQuickSave,
802 	kAsylumActionSwitchToSarah,
803 	kAsylumActionSwitchToGrimwall,
804 	kAsylumActionSwitchToOlmec
805 };
806 
807 //////////////////////////////////////////////////////////////////////////
808 // Helpers
809 //////////////////////////////////////////////////////////////////////////
810 #define CLEAR_ARRAY(type, name) { \
811 	for (Common::Array<type *>::iterator it = name.begin(); it != name.end(); it++) {\
812 		delete *it; \
813 		*it = NULL; \
814 	} \
815 	name.clear(); \
816 }
817 
818 //////////////////////////////////////////////////////////////////////////
819 // Macros
820 //////////////////////////////////////////////////////////////////////////
821 
822 // Misc
823 #define rnd(val) _vm->getRandom(val)
824 
825 // Engine subclasses
826 #define getEncounter()   _vm->encounter()
827 #define getCursor()      _vm->cursor()
828 #define getMenu()        _vm->menu()
829 #define getPuzzles()     _vm->puzzles()
830 #define getReaction()    _vm->reaction()
831 #define getResource()    _vm->resource()
832 #define getSound()       _vm->sound()
833 #define getSaveLoad()    _vm->savegame()
834 #define getScene()       _vm->scene()
835 #define getScreen()      _vm->screen()
836 #define getScript()      _vm->script()
837 #define getSharedData()  _vm->data()
838 #define getSpecial()     _vm->special()
839 #define getSpeech()      _vm->speech()
840 #define getText()        _vm->text()
841 #define getVideo()       _vm->video()
842 #define getWorld()       _vm->scene()->worldstats()
843 
844 //////////////////////////////////////////////////////////////////////////
845 // Sub-integer partial access macros
846 //////////////////////////////////////////////////////////////////////////
847 #define LOBYTE(d)   (*((char *)&(d)))
848 #define BYTE1(d)    (*((char *)&(d) + 1))   // Same as HIBYTE()
849 #define BYTE2(d)    (*((char *)&(d) + 2))
850 #define LOWORD(x)   (*((int16 *)&(x)))
851 
852 //////////////////////////////////////////////////////////////////////////
853 // Resource ID macros
854 //////////////////////////////////////////////////////////////////////////
855 #define RESOURCE_PACK(id) (ResourcePackId)((((uint32)id) >> 16) & 0x7FFF)
856 #define RESOURCE_INDEX(id) (uint16)(id)
857 
858 } // End of namespace Asylum
859 
860 #endif // ASYLUM_SHARED_H
861