22 #ifndef ASYLUM_RESOURCES_SCRIPT_H 23 #define ASYLUM_RESOURCES_SCRIPT_H 25 #include "common/array.h" 26 #include "common/func.h" 27 #include "common/serializer.h" 28 #include "common/stack.h" 29 #include "common/stream.h" 31 #include "asylum/shared.h" 35 #define MAX_ACTION_COMMANDS 161 37 #define DECLARE_OPCODE(name) \ 38 void Op##name(ScriptEntry *cmd) 40 #define IMPLEMENT_OPCODE(name) \ 41 void ScriptManager::Op##name(ScriptEntry *cmd) { \ 42 if (!_currentScript) error("[" #name "] No current script set"); \ 43 if (!_currentQueueEntry) error("[" #name "] Invalid current queue entry"); \ 44 if (!cmd) error("[" #name "] Invalid command parameter"); 49 #define ADD_OPCODE(name) { \ 50 Opcode *func = new Opcode(#name, new Common::Functor1Mem<ScriptEntry *, void, ScriptManager>(this, &ScriptManager::Op##name)); \ 51 _opcodes.push_back(func); \ 72 ResourceId walkingSounds[4];
73 ResourceId paletteResourceId;
78 memset(&name, 0,
sizeof(name));
88 memset(&flagNums, 0,
sizeof(flagNums));
91 memset(&walkingSounds, 0,
sizeof(walkingSounds));
92 paletteResourceId = kResourceNone;
93 memset(&paths, 0,
sizeof(paths));
103 output +=
Common::String::format(
" flags=%d scriptIndex=%d scriptIndex2=%d type=%d\n", flags, scriptIndex, scriptIndex2, actionType);
104 output +=
Common::String::format(
" sound=%d polygon=%d palette=%d volume=%d\n", walkingSounds[2], polygonIndex, paletteResourceId, volume);
105 output +=
Common::String::format(
" field01=%d field02=%d field40=%d field44=%d\n", field01, field02, field_40, field_44);
106 output +=
Common::String::format(
" field7C=%d field84=%d field88=%d field90=%d\n", field_7C, walkingSounds[0], walkingSounds[1], walkingSounds[3]);
140 void reset(uint32 count = 0);
146 void queueScript(int32 scriptIndex, ActorIndex actorIndex);
155 bool isInQueue(int32 scriptIndex)
const;
160 void removeFromQueue(uint32 entryIndex);
172 enum ObjectTransparency {
175 kObjectTransparencyOpaque
184 ActorIndex actorIndex;
201 s.syncAsSint32LE(scriptIndex);
202 s.syncAsSint32LE(currentLine);
203 s.syncAsUint32LE(actorIndex);
204 s.syncAsUint32LE(next);
205 s.syncAsUint32LE(prev);
210 ScriptQueueEntry entries[10];
219 for (uint32 i = 0; i <
ARRAYSIZE(entries); i++)
227 for (uint32 i = 0; i <
ARRAYSIZE(entries); i++)
228 entries[i].saveLoadWithSerializer(s);
230 s.syncAsUint32LE(first);
231 s.syncAsUint32LE(last);
253 opcode = kOpcodeReturn;
266 s.syncAsSint32LE(numLines);
267 s.syncAsSint32LE(opcode);
268 s.syncAsSint32LE(param1);
269 s.syncAsSint32LE(param2);
270 s.syncAsSint32LE(param3);
271 s.syncAsSint32LE(param4);
272 s.syncAsSint32LE(param5);
273 s.syncAsSint32LE(param6);
274 s.syncAsSint32LE(param7);
275 s.syncAsSint32LE(param8);
276 s.syncAsSint32LE(param9);
281 ScriptEntry commands[MAX_ACTION_COMMANDS];
293 for (int32 i = 0; i <
ARRAYSIZE(commands); i++)
294 commands[i].saveLoadWithSerializer(s);
296 s.syncAsSint32LE(field_1BAC);
297 s.syncAsSint32LE(field_1BB0);
298 s.syncAsSint32LE(counter);
311 Opcode(
const char *opcodeName, OpcodeFunctor *functor) {
331 bool _processNextEntry;
332 ScriptEntry *_lastProcessedCmd;
333 Script *_currentScript;
334 ScriptQueueEntry *_currentQueueEntry;
336 void patchScriptData();
339 void enableObject(ScriptEntry *cmd, ObjectTransparency type);
340 void setActionFlag(ScriptEntry *cmd, ActionType flag);
341 void clearActionFlag(ScriptEntry *cmd, ActionType flag);
342 void jumpIfActionFlag(ScriptEntry *cmd, ActionType flag);
343 void setNextLine(int32 line);
347 DECLARE_OPCODE(Return);
348 DECLARE_OPCODE(SetGameFlag);
349 DECLARE_OPCODE(ClearGameFlag);
350 DECLARE_OPCODE(ToggleGameFlag);
351 DECLARE_OPCODE(JumpIfGameFlag);
352 DECLARE_OPCODE(HideCursor);
353 DECLARE_OPCODE(ShowCursor);
354 DECLARE_OPCODE(PlayAnimation);
355 DECLARE_OPCODE(MoveScenePosition);
356 DECLARE_OPCODE(HideActor);
357 DECLARE_OPCODE(ShowActor);
358 DECLARE_OPCODE(SetActorPosition);
359 DECLARE_OPCODE(SetSceneMotionStatus);
360 DECLARE_OPCODE(DisableActor);
361 DECLARE_OPCODE(EnableActor);
362 DECLARE_OPCODE(EnableObjects);
363 DECLARE_OPCODE(RemoveObject);
364 DECLARE_OPCODE(JumpActorSpeech);
365 DECLARE_OPCODE(JumpAndSetDirection);
366 DECLARE_OPCODE(JumpIfActorCoordinates);
368 DECLARE_OPCODE(ResetAnimation);
369 DECLARE_OPCODE(DisableObject);
370 DECLARE_OPCODE(JumpIfSoundPlayingAndPlaySound);
371 DECLARE_OPCODE(JumpIfActionFind);
372 DECLARE_OPCODE(SetActionFind);
373 DECLARE_OPCODE(ClearActionFind);
374 DECLARE_OPCODE(JumpIfActionGrab);
375 DECLARE_OPCODE(SetActionGrab);
376 DECLARE_OPCODE(ClearActionGrab);
377 DECLARE_OPCODE(JumpIfActionTalk);
378 DECLARE_OPCODE(SetActionTalk);
379 DECLARE_OPCODE(ClearActionTalk);
380 DECLARE_OPCODE(AddToInventory);
381 DECLARE_OPCODE(RemoveFromInventory);
382 DECLARE_OPCODE(JumpIfInventoryOmits);
383 DECLARE_OPCODE(RunEncounter);
384 DECLARE_OPCODE(JumpIfAction16);
385 DECLARE_OPCODE(SetAction16);
386 DECLARE_OPCODE(ClearAction16);
387 DECLARE_OPCODE(SelectInventoryItem);
388 DECLARE_OPCODE(JumpIfInventoryItemNotSelected);
389 DECLARE_OPCODE(ChangeScene);
390 DECLARE_OPCODE(Interact);
391 DECLARE_OPCODE(PlayMovie);
392 DECLARE_OPCODE(StopAllObjectsSounds);
393 DECLARE_OPCODE(StopProcessing);
394 DECLARE_OPCODE(ResumeProcessing);
395 DECLARE_OPCODE(ResetSceneRect);
396 DECLARE_OPCODE(ChangeMusicById);
397 DECLARE_OPCODE(StopMusic);
398 DECLARE_OPCODE(IncrementParam1);
399 DECLARE_OPCODE(SetVolume);
400 DECLARE_OPCODE(Jump);
401 DECLARE_OPCODE(RunPuzzle);
402 DECLARE_OPCODE(JumpIfAction8);
403 DECLARE_OPCODE(SetAction8);
404 DECLARE_OPCODE(ClearAction8);
405 DECLARE_OPCODE(CreatePalette);
406 DECLARE_OPCODE(IncrementParam2);
407 DECLARE_OPCODE(WaitUntilFramePlayed);
408 DECLARE_OPCODE(UpdateWideScreen);
409 DECLARE_OPCODE(JumpIfActor);
410 DECLARE_OPCODE(PlaySpeechScene);
411 DECLARE_OPCODE(PlaySpeech);
412 DECLARE_OPCODE(PlaySpeechScene2);
413 DECLARE_OPCODE(MoveScenePositionFromActor);
414 DECLARE_OPCODE(PaletteFade);
415 DECLARE_OPCODE(QueuePaletteFade);
416 DECLARE_OPCODE(PlaySoundUpdateObject);
417 DECLARE_OPCODE(ActorFaceTarget);
418 DECLARE_OPCODE(HideMatteBars);
419 DECLARE_OPCODE(ShowMatteBars);
420 DECLARE_OPCODE(JumpIfSoundPlaying);
421 DECLARE_OPCODE(ChangePlayer);
422 DECLARE_OPCODE(ChangeActorStatus);
423 DECLARE_OPCODE(StopSound);
424 DECLARE_OPCODE(JumpRandom);
425 DECLARE_OPCODE(ClearScreen);
426 DECLARE_OPCODE(Quit);
427 DECLARE_OPCODE(JumpObjectFrame);
428 DECLARE_OPCODE(DeleteGraphics);
429 DECLARE_OPCODE(SetActorField944);
430 DECLARE_OPCODE(SetScriptField1BB0);
431 DECLARE_OPCODE(OnScriptField1BB0);
432 DECLARE_OPCODE(WalkToActor);
433 DECLARE_OPCODE(SetResourcePalette);
434 DECLARE_OPCODE(SetObjectFrameIndexAndFlags);
435 DECLARE_OPCODE(SetObjectFlags);
436 DECLARE_OPCODE(SetActorActionIndex2);
437 DECLARE_OPCODE(UpdateTransparency);
438 DECLARE_OPCODE(QueueScript);
439 DECLARE_OPCODE(ProcessActor);
440 DECLARE_OPCODE(ClearActorFields);
441 DECLARE_OPCODE(SetObjectLastFrameIndex);
442 DECLARE_OPCODE(SetActionAreaFlags);
443 DECLARE_OPCODE(MorphActor);
444 DECLARE_OPCODE(ShowMenu);
445 DECLARE_OPCODE(UpdateGlobalFlags);
452 #endif // ASYLUM_RESOURCES_SCRIPT_H #define ARRAYSIZE(x)
Definition: util.h:114
static String format(MSVC_PRINTF const char *fmt,...) GCC_PRINTF(1
Definition: serializer.h:80
int32 actionType
flag (see ActionType enumeration)
Definition: script.h:68
Definition: serializer.h:352