aboutsummaryrefslogtreecommitdiff
path: root/script_v1.cpp
diff options
context:
space:
mode:
authorJames Brown2002-04-11 17:19:16 +0000
committerJames Brown2002-04-11 17:19:16 +0000
commit7696081c54a6cac8152a227bd9d0bcc41999f261 (patch)
tree70859cf2d6be5ad77d7e7c41ed01c20837a0b2d0 /script_v1.cpp
parent34747b792a42e8129af60371541e9b7321d4d55f (diff)
downloadscummvm-rg350-7696081c54a6cac8152a227bd9d0bcc41999f261.tar.gz
scummvm-rg350-7696081c54a6cac8152a227bd9d0bcc41999f261.tar.bz2
scummvm-rg350-7696081c54a6cac8152a227bd9d0bcc41999f261.zip
Large pointless reindentation of all the code. Also fixed a few mistakes
in the object flags code cleanup. Flags used: indent *.cpp -br -bap -nbc -lp -ce -cdw -brs -nbad -nbc -npsl -nip -ts2 -ncs -nbs -npcs -nbap -Tbyte -Tuint32 -Tuint8 -Tuint16 -TArrayHeader -TMemBlkHeader -TVerbSlot -TObjectData -Tvoid -TImageHeader -TRoomHeader -TCodeHeader -TResHdr -TBompHeader -TMidiChannelAdl -TGui -TScumm -TSoundEngine -TPart -TPlayer svn-id: r3908
Diffstat (limited to 'script_v1.cpp')
-rw-r--r--script_v1.cpp2598
1 files changed, 1375 insertions, 1223 deletions
diff --git a/script_v1.cpp b/script_v1.cpp
index 5e7d8c7547..286f55e947 100644
--- a/script_v1.cpp
+++ b/script_v1.cpp
@@ -25,651 +25,652 @@
#include "scumm.h"
#include "cdmusic.h"
-void Scumm::setupOpcodes() {
+void Scumm::setupOpcodes()
+{
static const OpcodeProc opcode_list[] = {
- /* 00 */
- &Scumm::o5_stopObjectCode,
- &Scumm::o5_putActor,
- &Scumm::o5_startMusic,
- &Scumm::o5_getActorRoom,
- /* 04 */
- &Scumm::o5_isGreaterEqual,
- &Scumm::o5_drawObject,
- &Scumm::o5_getActorElevation,
- &Scumm::o5_setState,
- /* 08 */
- &Scumm::o5_isNotEqual,
- &Scumm::o5_faceActor,
- &Scumm::o5_startScript,
- &Scumm::o5_getVerbEntrypoint,
- /* 0C */
- &Scumm::o5_resourceRoutines,
- &Scumm::o5_walkActorToActor,
- &Scumm::o5_putActorAtObject,
- &Scumm::o5_getObjectState,
- /* 10 */
- &Scumm::o5_getObjectOwner,
- &Scumm::o5_animateActor,
- &Scumm::o5_panCameraTo,
- &Scumm::o5_actorSet,
- /* 14 */
- &Scumm::o5_print,
- &Scumm::o5_actorFromPos,
- &Scumm::o5_getRandomNr,
- &Scumm::o5_and,
- /* 18 */
- &Scumm::o5_jumpRelative,
- &Scumm::o5_doSentence,
- &Scumm::o5_move,
- &Scumm::o5_multiply,
- /* 1C */
- &Scumm::o5_startSound,
- &Scumm::o5_ifClassOfIs,
- &Scumm::o5_walkActorTo,
- &Scumm::o5_isActorInBox,
- /* 20 */
- &Scumm::o5_stopMusic,
- &Scumm::o5_putActor,
- &Scumm::o5_getAnimCounter,
- &Scumm::o5_getActorY,
- /* 24 */
- &Scumm::o5_loadRoomWithEgo,
- &Scumm::o5_pickupObject,
- &Scumm::o5_setVarRange,
- &Scumm::o5_stringOps,
- /* 28 */
- &Scumm::o5_equalZero,
- &Scumm::o5_setOwnerOf,
- &Scumm::o5_startScript,
- &Scumm::o5_delayVariable,
- /* 2C */
- &Scumm::o5_cursorCommand,
- &Scumm::o5_putActorInRoom,
- &Scumm::o5_delay,
- &Scumm::o5_getObjectState,
- /* 30 */
- &Scumm::o5_matrixOps,
- &Scumm::o5_getInventoryCount,
- &Scumm::o5_setCameraAt,
- &Scumm::o5_roomOps,
- /* 34 */
- &Scumm::o5_getDist,
- &Scumm::o5_findObject,
- &Scumm::o5_walkActorToObject,
- &Scumm::o5_startObject,
- /* 38 */
- &Scumm::o5_lessOrEqual,
- &Scumm::o5_doSentence,
- &Scumm::o5_subtract,
- &Scumm::o5_getActorScale,
- /* 3C */
- &Scumm::o5_stopSound,
- &Scumm::o5_findInventory,
- &Scumm::o5_walkActorTo,
- &Scumm::o5_drawBox,
- /* 40 */
- &Scumm::o5_cutscene,
- &Scumm::o5_putActor,
- &Scumm::o5_chainScript,
- &Scumm::o5_getActorX,
- /* 44 */
- &Scumm::o5_isLess,
- &Scumm::o5_drawObject,
- &Scumm::o5_increment,
- &Scumm::o5_setState,
- /* 48 */
- &Scumm::o5_isEqual,
- &Scumm::o5_faceActor,
- &Scumm::o5_startScript,
- &Scumm::o5_getVerbEntrypoint,
- /* 4C */
- &Scumm::o5_soundKludge,
- &Scumm::o5_walkActorToActor,
- &Scumm::o5_putActorAtObject,
- &Scumm::o5_badOpcode,
- /* 50 */
- &Scumm::o5_pickupObjectOld,
- &Scumm::o5_animateActor,
- &Scumm::o5_actorFollowCamera,
- &Scumm::o5_actorSet,
- /* 54 */
- &Scumm::o5_setObjectName,
- &Scumm::o5_actorFromPos,
- &Scumm::o5_getActorMoving,
- &Scumm::o5_or,
- /* 58 */
- &Scumm::o5_overRide,
- &Scumm::o5_doSentence,
- &Scumm::o5_add,
- &Scumm::o5_divide,
- /* 5C */
- &Scumm::o5_oldRoomEffect,
- &Scumm::o5_actorSetClass,
- &Scumm::o5_walkActorTo,
- &Scumm::o5_isActorInBox,
- /* 60 */
- &Scumm::o5_freezeScripts,
- &Scumm::o5_putActor,
- &Scumm::o5_stopScript,
- &Scumm::o5_getActorFacing,
- /* 64 */
- &Scumm::o5_loadRoomWithEgo,
- &Scumm::o5_pickupObject,
- &Scumm::o5_getClosestObjActor,
- &Scumm::o5_dummy,
- /* 68 */
- &Scumm::o5_getScriptRunning,
- &Scumm::o5_setOwnerOf,
- &Scumm::o5_startScript,
- &Scumm::o5_debug,
- /* 6C */
- &Scumm::o5_getActorWidth,
- &Scumm::o5_putActorInRoom,
- &Scumm::o5_stopObjectScript,
- &Scumm::o5_badOpcode,
- /* 70 */
- &Scumm::o5_lights,
- &Scumm::o5_getActorCostume,
- &Scumm::o5_loadRoom,
- &Scumm::o5_roomOps,
- /* 74 */
- &Scumm::o5_getDist,
- &Scumm::o5_findObject,
- &Scumm::o5_walkActorToObject,
- &Scumm::o5_startObject,
- /* 78 */
- &Scumm::o5_isGreater, /* less? */
- &Scumm::o5_doSentence,
- &Scumm::o5_verbOps,
- &Scumm::o5_getActorWalkBox,
- /* 7C */
- &Scumm::o5_isSoundRunning,
- &Scumm::o5_findInventory,
- &Scumm::o5_walkActorTo,
- &Scumm::o5_drawBox,
- /* 80 */
- &Scumm::o5_breakHere,
- &Scumm::o5_putActor,
- &Scumm::o5_startMusic,
- &Scumm::o5_getActorRoom,
- /* 84 */
- &Scumm::o5_isGreaterEqual, /* less equal? */
- &Scumm::o5_drawObject,
- &Scumm::o5_getActorElevation,
- &Scumm::o5_setState,
- /* 88 */
- &Scumm::o5_isNotEqual,
- &Scumm::o5_faceActor,
- &Scumm::o5_startScript,
- &Scumm::o5_getVerbEntrypoint,
- /* 8C */
- &Scumm::o5_resourceRoutines,
- &Scumm::o5_walkActorToActor,
- &Scumm::o5_putActorAtObject,
- &Scumm::o5_getObjectState,
- /* 90 */
- &Scumm::o5_getObjectOwner,
- &Scumm::o5_animateActor,
- &Scumm::o5_panCameraTo,
- &Scumm::o5_actorSet,
- /* 94 */
- &Scumm::o5_print,
- &Scumm::o5_actorFromPos,
- &Scumm::o5_getRandomNr,
- &Scumm::o5_and,
- /* 98 */
- &Scumm::o5_quitPauseRestart,
- &Scumm::o5_doSentence,
- &Scumm::o5_move,
- &Scumm::o5_multiply,
- /* 9C */
- &Scumm::o5_startSound,
- &Scumm::o5_ifClassOfIs,
- &Scumm::o5_walkActorTo,
- &Scumm::o5_isActorInBox,
- /* A0 */
- &Scumm::o5_stopObjectCode,
- &Scumm::o5_putActor,
- &Scumm::o5_getAnimCounter,
- &Scumm::o5_getActorY,
- /* A4 */
- &Scumm::o5_loadRoomWithEgo,
- &Scumm::o5_pickupObject,
- &Scumm::o5_setVarRange,
- &Scumm::o5_dummy,
- /* A8 */
- &Scumm::o5_notEqualZero,
- &Scumm::o5_setOwnerOf,
- &Scumm::o5_startScript,
- &Scumm::o5_saveRestoreVerbs,
- /* AC */
- &Scumm::o5_expression,
- &Scumm::o5_putActorInRoom,
- &Scumm::o5_wait,
- &Scumm::o5_badOpcode,
- /* B0 */
- &Scumm::o5_matrixOps,
- &Scumm::o5_getInventoryCount,
- &Scumm::o5_setCameraAt,
- &Scumm::o5_roomOps,
- /* B4 */
- &Scumm::o5_getDist,
- &Scumm::o5_findObject,
- &Scumm::o5_walkActorToObject,
- &Scumm::o5_startObject,
- /* B8 */
- &Scumm::o5_lessOrEqual,
- &Scumm::o5_doSentence,
- &Scumm::o5_subtract,
- &Scumm::o5_getActorScale,
- /* BC */
- &Scumm::o5_stopSound,
- &Scumm::o5_findInventory,
- &Scumm::o5_walkActorTo,
- &Scumm::o5_drawBox,
- /* C0 */
- &Scumm::o5_endCutscene,
- &Scumm::o5_putActor,
- &Scumm::o5_chainScript,
- &Scumm::o5_getActorX,
- /* C4 */
- &Scumm::o5_isLess,
- &Scumm::o5_drawObject,
- &Scumm::o5_decrement,
- &Scumm::o5_setState,
- /* C8 */
- &Scumm::o5_isEqual,
- &Scumm::o5_faceActor,
- &Scumm::o5_startScript,
- &Scumm::o5_getVerbEntrypoint,
- /* CC */
- &Scumm::o5_pseudoRoom,
- &Scumm::o5_walkActorToActor,
- &Scumm::o5_putActorAtObject,
- &Scumm::o5_badOpcode,
- /* D0 */
- &Scumm::o5_pickupObjectOld,
- &Scumm::o5_animateActor,
- &Scumm::o5_actorFollowCamera,
- &Scumm::o5_actorSet,
- /* D4 */
- &Scumm::o5_setObjectName,
- &Scumm::o5_actorFromPos,
- &Scumm::o5_getActorMoving,
- &Scumm::o5_or,
- /* D8 */
- &Scumm::o5_printEgo,
- &Scumm::o5_doSentence,
- &Scumm::o5_add,
- &Scumm::o5_divide,
- /* DC */
- &Scumm::o5_badOpcode,
- &Scumm::o5_actorSetClass,
- &Scumm::o5_walkActorTo,
- &Scumm::o5_isActorInBox,
- /* E0 */
- &Scumm::o5_freezeScripts,
- &Scumm::o5_putActor,
- &Scumm::o5_stopScript,
- &Scumm::o5_getActorFacing,
- /* E4 */
- &Scumm::o5_loadRoomWithEgo,
- &Scumm::o5_pickupObject,
- &Scumm::o5_getClosestObjActor,
- &Scumm::o5_dummy,
- /* E8 */
- &Scumm::o5_getScriptRunning,
- &Scumm::o5_setOwnerOf,
- &Scumm::o5_startScript,
- &Scumm::o5_debug,
- /* EC */
- &Scumm::o5_getActorWidth,
- &Scumm::o5_putActorInRoom,
- &Scumm::o5_stopObjectScript,
- &Scumm::o5_badOpcode,
- /* F0 */
- &Scumm::o5_lights,
- &Scumm::o5_getActorCostume,
- &Scumm::o5_loadRoom,
- &Scumm::o5_roomOps,
- /* F4 */
- &Scumm::o5_getDist,
- &Scumm::o5_findObject,
- &Scumm::o5_walkActorToObject,
- &Scumm::o5_startObject,
- /* F8 */
- &Scumm::o5_isGreater,
- &Scumm::o5_doSentence,
- &Scumm::o5_verbOps,
- &Scumm::o5_getActorWalkBox,
- /* FC */
- &Scumm::o5_isSoundRunning,
- &Scumm::o5_findInventory,
- &Scumm::o5_walkActorTo,
- &Scumm::o5_drawBox
+ /* 00 */
+ &Scumm::o5_stopObjectCode,
+ &Scumm::o5_putActor,
+ &Scumm::o5_startMusic,
+ &Scumm::o5_getActorRoom,
+ /* 04 */
+ &Scumm::o5_isGreaterEqual,
+ &Scumm::o5_drawObject,
+ &Scumm::o5_getActorElevation,
+ &Scumm::o5_setState,
+ /* 08 */
+ &Scumm::o5_isNotEqual,
+ &Scumm::o5_faceActor,
+ &Scumm::o5_startScript,
+ &Scumm::o5_getVerbEntrypoint,
+ /* 0C */
+ &Scumm::o5_resourceRoutines,
+ &Scumm::o5_walkActorToActor,
+ &Scumm::o5_putActorAtObject,
+ &Scumm::o5_getObjectState,
+ /* 10 */
+ &Scumm::o5_getObjectOwner,
+ &Scumm::o5_animateActor,
+ &Scumm::o5_panCameraTo,
+ &Scumm::o5_actorSet,
+ /* 14 */
+ &Scumm::o5_print,
+ &Scumm::o5_actorFromPos,
+ &Scumm::o5_getRandomNr,
+ &Scumm::o5_and,
+ /* 18 */
+ &Scumm::o5_jumpRelative,
+ &Scumm::o5_doSentence,
+ &Scumm::o5_move,
+ &Scumm::o5_multiply,
+ /* 1C */
+ &Scumm::o5_startSound,
+ &Scumm::o5_ifClassOfIs,
+ &Scumm::o5_walkActorTo,
+ &Scumm::o5_isActorInBox,
+ /* 20 */
+ &Scumm::o5_stopMusic,
+ &Scumm::o5_putActor,
+ &Scumm::o5_getAnimCounter,
+ &Scumm::o5_getActorY,
+ /* 24 */
+ &Scumm::o5_loadRoomWithEgo,
+ &Scumm::o5_pickupObject,
+ &Scumm::o5_setVarRange,
+ &Scumm::o5_stringOps,
+ /* 28 */
+ &Scumm::o5_equalZero,
+ &Scumm::o5_setOwnerOf,
+ &Scumm::o5_startScript,
+ &Scumm::o5_delayVariable,
+ /* 2C */
+ &Scumm::o5_cursorCommand,
+ &Scumm::o5_putActorInRoom,
+ &Scumm::o5_delay,
+ &Scumm::o5_getObjectState,
+ /* 30 */
+ &Scumm::o5_matrixOps,
+ &Scumm::o5_getInventoryCount,
+ &Scumm::o5_setCameraAt,
+ &Scumm::o5_roomOps,
+ /* 34 */
+ &Scumm::o5_getDist,
+ &Scumm::o5_findObject,
+ &Scumm::o5_walkActorToObject,
+ &Scumm::o5_startObject,
+ /* 38 */
+ &Scumm::o5_lessOrEqual,
+ &Scumm::o5_doSentence,
+ &Scumm::o5_subtract,
+ &Scumm::o5_getActorScale,
+ /* 3C */
+ &Scumm::o5_stopSound,
+ &Scumm::o5_findInventory,
+ &Scumm::o5_walkActorTo,
+ &Scumm::o5_drawBox,
+ /* 40 */
+ &Scumm::o5_cutscene,
+ &Scumm::o5_putActor,
+ &Scumm::o5_chainScript,
+ &Scumm::o5_getActorX,
+ /* 44 */
+ &Scumm::o5_isLess,
+ &Scumm::o5_drawObject,
+ &Scumm::o5_increment,
+ &Scumm::o5_setState,
+ /* 48 */
+ &Scumm::o5_isEqual,
+ &Scumm::o5_faceActor,
+ &Scumm::o5_startScript,
+ &Scumm::o5_getVerbEntrypoint,
+ /* 4C */
+ &Scumm::o5_soundKludge,
+ &Scumm::o5_walkActorToActor,
+ &Scumm::o5_putActorAtObject,
+ &Scumm::o5_badOpcode,
+ /* 50 */
+ &Scumm::o5_pickupObjectOld,
+ &Scumm::o5_animateActor,
+ &Scumm::o5_actorFollowCamera,
+ &Scumm::o5_actorSet,
+ /* 54 */
+ &Scumm::o5_setObjectName,
+ &Scumm::o5_actorFromPos,
+ &Scumm::o5_getActorMoving,
+ &Scumm::o5_or,
+ /* 58 */
+ &Scumm::o5_overRide,
+ &Scumm::o5_doSentence,
+ &Scumm::o5_add,
+ &Scumm::o5_divide,
+ /* 5C */
+ &Scumm::o5_oldRoomEffect,
+ &Scumm::o5_actorSetClass,
+ &Scumm::o5_walkActorTo,
+ &Scumm::o5_isActorInBox,
+ /* 60 */
+ &Scumm::o5_freezeScripts,
+ &Scumm::o5_putActor,
+ &Scumm::o5_stopScript,
+ &Scumm::o5_getActorFacing,
+ /* 64 */
+ &Scumm::o5_loadRoomWithEgo,
+ &Scumm::o5_pickupObject,
+ &Scumm::o5_getClosestObjActor,
+ &Scumm::o5_dummy,
+ /* 68 */
+ &Scumm::o5_getScriptRunning,
+ &Scumm::o5_setOwnerOf,
+ &Scumm::o5_startScript,
+ &Scumm::o5_debug,
+ /* 6C */
+ &Scumm::o5_getActorWidth,
+ &Scumm::o5_putActorInRoom,
+ &Scumm::o5_stopObjectScript,
+ &Scumm::o5_badOpcode,
+ /* 70 */
+ &Scumm::o5_lights,
+ &Scumm::o5_getActorCostume,
+ &Scumm::o5_loadRoom,
+ &Scumm::o5_roomOps,
+ /* 74 */
+ &Scumm::o5_getDist,
+ &Scumm::o5_findObject,
+ &Scumm::o5_walkActorToObject,
+ &Scumm::o5_startObject,
+ /* 78 */
+ &Scumm::o5_isGreater, /* less? */
+ &Scumm::o5_doSentence,
+ &Scumm::o5_verbOps,
+ &Scumm::o5_getActorWalkBox,
+ /* 7C */
+ &Scumm::o5_isSoundRunning,
+ &Scumm::o5_findInventory,
+ &Scumm::o5_walkActorTo,
+ &Scumm::o5_drawBox,
+ /* 80 */
+ &Scumm::o5_breakHere,
+ &Scumm::o5_putActor,
+ &Scumm::o5_startMusic,
+ &Scumm::o5_getActorRoom,
+ /* 84 */
+ &Scumm::o5_isGreaterEqual, /* less equal? */
+ &Scumm::o5_drawObject,
+ &Scumm::o5_getActorElevation,
+ &Scumm::o5_setState,
+ /* 88 */
+ &Scumm::o5_isNotEqual,
+ &Scumm::o5_faceActor,
+ &Scumm::o5_startScript,
+ &Scumm::o5_getVerbEntrypoint,
+ /* 8C */
+ &Scumm::o5_resourceRoutines,
+ &Scumm::o5_walkActorToActor,
+ &Scumm::o5_putActorAtObject,
+ &Scumm::o5_getObjectState,
+ /* 90 */
+ &Scumm::o5_getObjectOwner,
+ &Scumm::o5_animateActor,
+ &Scumm::o5_panCameraTo,
+ &Scumm::o5_actorSet,
+ /* 94 */
+ &Scumm::o5_print,
+ &Scumm::o5_actorFromPos,
+ &Scumm::o5_getRandomNr,
+ &Scumm::o5_and,
+ /* 98 */
+ &Scumm::o5_quitPauseRestart,
+ &Scumm::o5_doSentence,
+ &Scumm::o5_move,
+ &Scumm::o5_multiply,
+ /* 9C */
+ &Scumm::o5_startSound,
+ &Scumm::o5_ifClassOfIs,
+ &Scumm::o5_walkActorTo,
+ &Scumm::o5_isActorInBox,
+ /* A0 */
+ &Scumm::o5_stopObjectCode,
+ &Scumm::o5_putActor,
+ &Scumm::o5_getAnimCounter,
+ &Scumm::o5_getActorY,
+ /* A4 */
+ &Scumm::o5_loadRoomWithEgo,
+ &Scumm::o5_pickupObject,
+ &Scumm::o5_setVarRange,
+ &Scumm::o5_dummy,
+ /* A8 */
+ &Scumm::o5_notEqualZero,
+ &Scumm::o5_setOwnerOf,
+ &Scumm::o5_startScript,
+ &Scumm::o5_saveRestoreVerbs,
+ /* AC */
+ &Scumm::o5_expression,
+ &Scumm::o5_putActorInRoom,
+ &Scumm::o5_wait,
+ &Scumm::o5_badOpcode,
+ /* B0 */
+ &Scumm::o5_matrixOps,
+ &Scumm::o5_getInventoryCount,
+ &Scumm::o5_setCameraAt,
+ &Scumm::o5_roomOps,
+ /* B4 */
+ &Scumm::o5_getDist,
+ &Scumm::o5_findObject,
+ &Scumm::o5_walkActorToObject,
+ &Scumm::o5_startObject,
+ /* B8 */
+ &Scumm::o5_lessOrEqual,
+ &Scumm::o5_doSentence,
+ &Scumm::o5_subtract,
+ &Scumm::o5_getActorScale,
+ /* BC */
+ &Scumm::o5_stopSound,
+ &Scumm::o5_findInventory,
+ &Scumm::o5_walkActorTo,
+ &Scumm::o5_drawBox,
+ /* C0 */
+ &Scumm::o5_endCutscene,
+ &Scumm::o5_putActor,
+ &Scumm::o5_chainScript,
+ &Scumm::o5_getActorX,
+ /* C4 */
+ &Scumm::o5_isLess,
+ &Scumm::o5_drawObject,
+ &Scumm::o5_decrement,
+ &Scumm::o5_setState,
+ /* C8 */
+ &Scumm::o5_isEqual,
+ &Scumm::o5_faceActor,
+ &Scumm::o5_startScript,
+ &Scumm::o5_getVerbEntrypoint,
+ /* CC */
+ &Scumm::o5_pseudoRoom,
+ &Scumm::o5_walkActorToActor,
+ &Scumm::o5_putActorAtObject,
+ &Scumm::o5_badOpcode,
+ /* D0 */
+ &Scumm::o5_pickupObjectOld,
+ &Scumm::o5_animateActor,
+ &Scumm::o5_actorFollowCamera,
+ &Scumm::o5_actorSet,
+ /* D4 */
+ &Scumm::o5_setObjectName,
+ &Scumm::o5_actorFromPos,
+ &Scumm::o5_getActorMoving,
+ &Scumm::o5_or,
+ /* D8 */
+ &Scumm::o5_printEgo,
+ &Scumm::o5_doSentence,
+ &Scumm::o5_add,
+ &Scumm::o5_divide,
+ /* DC */
+ &Scumm::o5_badOpcode,
+ &Scumm::o5_actorSetClass,
+ &Scumm::o5_walkActorTo,
+ &Scumm::o5_isActorInBox,
+ /* E0 */
+ &Scumm::o5_freezeScripts,
+ &Scumm::o5_putActor,
+ &Scumm::o5_stopScript,
+ &Scumm::o5_getActorFacing,
+ /* E4 */
+ &Scumm::o5_loadRoomWithEgo,
+ &Scumm::o5_pickupObject,
+ &Scumm::o5_getClosestObjActor,
+ &Scumm::o5_dummy,
+ /* E8 */
+ &Scumm::o5_getScriptRunning,
+ &Scumm::o5_setOwnerOf,
+ &Scumm::o5_startScript,
+ &Scumm::o5_debug,
+ /* EC */
+ &Scumm::o5_getActorWidth,
+ &Scumm::o5_putActorInRoom,
+ &Scumm::o5_stopObjectScript,
+ &Scumm::o5_badOpcode,
+ /* F0 */
+ &Scumm::o5_lights,
+ &Scumm::o5_getActorCostume,
+ &Scumm::o5_loadRoom,
+ &Scumm::o5_roomOps,
+ /* F4 */
+ &Scumm::o5_getDist,
+ &Scumm::o5_findObject,
+ &Scumm::o5_walkActorToObject,
+ &Scumm::o5_startObject,
+ /* F8 */
+ &Scumm::o5_isGreater,
+ &Scumm::o5_doSentence,
+ &Scumm::o5_verbOps,
+ &Scumm::o5_getActorWalkBox,
+ /* FC */
+ &Scumm::o5_isSoundRunning,
+ &Scumm::o5_findInventory,
+ &Scumm::o5_walkActorTo,
+ &Scumm::o5_drawBox
};
-static const char* opcode_lookup[] = {
- /* 00 */
- "o5_stopObjectCode",
- "o5_putActor",
- "o5_startMusic",
- "o5_getActorRoom",
- /* 04 */
- "o5_isGreaterEqual",
- "o5_drawObject",
- "o5_getActorElevation",
- "o5_setState",
- /* 08 */
- "o5_isNotEqual",
- "o5_faceActor",
- "o5_startScript",
- "o5_getVerbEntrypoint",
- /* 0C */
- "o5_resourceRoutines",
- "o5_walkActorToActor",
- "o5_putActorAtObject",
- "o5_getObjectState",
- /* 10 */
- "o5_getObjectOwner",
- "o5_animateActor",
- "o5_panCameraTo",
- "o5_actorSet",
- /* 14 */
- "o5_print",
- "o5_actorFromPos",
- "o5_getRandomNr",
- "o5_and",
- /* 18 */
- "o5_jumpRelative",
- "o5_doSentence",
- "o5_move",
- "o5_multiply",
- /* 1C */
- "o5_startSound",
- "o5_ifClassOfIs",
- "o5_walkActorTo",
- "o5_isActorInBox",
- /* 20 */
- "o5_stopMusic",
- "o5_putActor",
- "o5_getAnimCounter",
- "o5_getActorY",
- /* 24 */
- "o5_loadRoomWithEgo",
- "o5_pickupObject",
- "o5_setVarRange",
- "o5_stringOps",
- /* 28 */
- "o5_equalZero",
- "o5_setOwnerOf",
- "o5_startScript",
- "o5_delayVariable",
- /* 2C */
- "o5_cursorCommand",
- "o5_putActorInRoom",
- "o5_delay",
- "o5_badOpcode",
- /* 30 */
- "o5_matrixOps",
- "o5_getInventoryCount",
- "o5_setCameraAt",
- "o5_roomOps",
- /* 34 */
- "o5_getDist",
- "o5_findObject",
- "o5_walkActorToObject",
- "o5_startObject",
- /* 38 */
- "o5_lessOrEqual",
- "o5_doSentence",
- "o5_subtract",
- "o5_getActorScale",
- /* 3C */
- "o5_stopSound",
- "o5_findInventory",
- "o5_walkActorTo",
- "o5_drawBox",
- /* 40 */
- "o5_cutscene",
- "o5_putActor",
- "o5_chainScript",
- "o5_getActorX",
- /* 44 */
- "o5_isLess",
- "o5_badOpcode",
- "o5_increment",
- "o5_setState",
- /* 48 */
- "o5_isEqual",
- "o5_faceActor",
- "o5_startScript",
- "o5_getVerbEntrypoint",
- /* 4C */
- "o5_soundKludge",
- "o5_walkActorToActor",
- "o5_putActorAtObject",
- "o5_badOpcode",
- /* 50 */
- "o5_pickupObjectOld",
- "o5_animateActor",
- "o5_actorFollowCamera",
- "o5_actorSet",
- /* 54 */
- "o5_setObjectName",
- "o5_actorFromPos",
- "o5_getActorMoving",
- "o5_or",
- /* 58 */
- "o5_overRide",
- "o5_doSentence",
- "o5_add",
- "o5_divide",
- /* 5C */
- "o5_oldRoomEffect",
- "o5_actorSetClass",
- "o5_walkActorTo",
- "o5_isActorInBox",
- /* 60 */
- "o5_freezeScripts",
- "o5_putActor",
- "o5_stopScript",
- "o5_getActorFacing",
- /* 64 */
- "o5_loadRoomWithEgo",
- "o5_pickupObject",
- "o5_getClosestObjActor",
- "o5_dummy",
- /* 68 */
- "o5_getScriptRunning",
- "o5_setOwnerOf",
- "o5_startScript",
- "o5_debug",
- /* 6C */
- "o5_getActorWidth",
- "o5_putActorInRoom",
- "o5_stopObjectScript",
- "o5_badOpcode",
- /* 70 */
- "o5_lights",
- "o5_getActorCostume",
- "o5_loadRoom",
- "o5_roomOps",
- /* 74 */
- "o5_getDist",
- "o5_findObject",
- "o5_walkActorToObject",
- "o5_startObject",
- /* 78 */
- "o5_isGreater", /* less? */
- "o5_doSentence",
- "o5_verbOps",
- "o5_getActorWalkBox",
- /* 7C */
- "o5_isSoundRunning",
- "o5_findInventory",
- "o5_walkActorTo",
- "o5_drawBox",
- /* 80 */
- "o5_breakHere",
- "o5_putActor",
- "o5_startMusic",
- "o5_getActorRoom",
- /* 84 */
- "o5_isGreaterEqual", /* less equal? */
- "o5_drawObject",
- "o5_getActorElevation",
- "o5_setState",
- /* 88 */
- "o5_isNotEqual",
- "o5_faceActor",
- "o5_startScript",
- "o5_getVerbEntrypoint",
- /* 8C */
- "o5_resourceRoutines",
- "o5_walkActorToActor",
- "o5_putActorAtObject",
- "o5_getObjectState",
- /* 90 */
- "o5_getObjectOwner",
- "o5_animateActor",
- "o5_panCameraTo",
- "o5_actorSet",
- /* 94 */
- "o5_print",
- "o5_actorFromPos",
- "o5_getRandomNr",
- "o5_and",
- /* 98 */
- "o5_quitPauseRestart",
- "o5_doSentence",
- "o5_move",
- "o5_multiply",
- /* 9C */
- "o5_startSound",
- "o5_ifClassOfIs",
- "o5_walkActorTo",
- "o5_isActorInBox",
- /* A0 */
- "o5_stopObjectCode",
- "o5_putActor",
- "o5_getAnimCounter",
- "o5_getActorY",
- /* A4 */
- "o5_loadRoomWithEgo",
- "o5_pickupObject",
- "o5_setVarRange",
- "o5_dummy",
- /* A8 */
- "o5_notEqualZero",
- "o5_setOwnerOf",
- "o5_startScript",
- "o5_saveRestoreVerbs",
- /* AC */
- "o5_expression",
- "o5_putActorInRoom",
- "o5_wait",
- "o5_badOpcode",
- /* B0 */
- "o5_matrixOps",
- "o5_getInventoryCount",
- "o5_setCameraAt",
- "o5_roomOps",
- /* B4 */
- "o5_getDist",
- "o5_findObject",
- "o5_walkActorToObject",
- "o5_startObject",
- /* B8 */
- "o5_lessOrEqual",
- "o5_doSentence",
- "o5_subtract",
- "o5_getActorScale",
- /* BC */
- "o5_stopSound",
- "o5_findInventory",
- "o5_walkActorTo",
- "o5_drawBox",
- /* C0 */
- "o5_endCutscene",
- "o5_putActor",
- "o5_chainScript",
- "o5_getActorX",
- /* C4 */
- "o5_isLess",
- "o5_badOpcode",
- "o5_decrement",
- "o5_setState",
- /* C8 */
- "o5_isEqual",
- "o5_faceActor",
- "o5_startScript",
- "o5_getVerbEntrypoint",
- /* CC */
- "o5_pseudoRoom",
- "o5_walkActorToActor",
- "o5_putActorAtObject",
- "o5_badOpcode",
- /* D0 */
- "o5_pickupObjectOld",
- "o5_animateActor",
- "o5_actorFollowCamera",
- "o5_actorSet",
- /* D4 */
- "o5_setObjectName",
- "o5_actorFromPos",
- "o5_getActorMoving",
- "o5_or",
- /* D8 */
- "o5_printEgo",
- "o5_doSentence",
- "o5_add",
- "o5_divide",
- /* DC */
- "o5_badOpcode",
- "o5_actorSetClass",
- "o5_walkActorTo",
- "o5_isActorInBox",
- /* E0 */
- "o5_freezeScripts",
- "o5_putActor",
- "o5_stopScript",
- "o5_getActorFacing",
- /* E4 */
- "o5_loadRoomWithEgo",
- "o5_pickupObject",
- "o5_getClosestObjActor",
- "o5_dummy",
- /* E8 */
- "o5_getScriptRunning",
- "o5_setOwnerOf",
- "o5_startScript",
- "o5_debug",
- /* EC */
- "o5_getActorWidth",
- "o5_putActorInRoom",
- "o5_stopObjectScript",
- "o5_badOpcode",
- /* F0 */
- "o5_lights",
- "o5_getActorCostume",
- "o5_loadRoom",
- "o5_roomOps",
- /* F4 */
- "o5_getDist",
- "o5_findObject",
- "o5_walkActorToObject",
- "o5_startObject",
- /* F8 */
- "o5_isGreater",
- "o5_doSentence",
- "o5_verbOps",
- "o5_getActorWalkBox",
- /* FC */
- "o5_isSoundRunning",
- "o5_findInventory",
- "o5_walkActorTo",
- "o5_drawBox",
+ static const char *opcode_lookup[] = {
+ /* 00 */
+ "o5_stopObjectCode",
+ "o5_putActor",
+ "o5_startMusic",
+ "o5_getActorRoom",
+ /* 04 */
+ "o5_isGreaterEqual",
+ "o5_drawObject",
+ "o5_getActorElevation",
+ "o5_setState",
+ /* 08 */
+ "o5_isNotEqual",
+ "o5_faceActor",
+ "o5_startScript",
+ "o5_getVerbEntrypoint",
+ /* 0C */
+ "o5_resourceRoutines",
+ "o5_walkActorToActor",
+ "o5_putActorAtObject",
+ "o5_getObjectState",
+ /* 10 */
+ "o5_getObjectOwner",
+ "o5_animateActor",
+ "o5_panCameraTo",
+ "o5_actorSet",
+ /* 14 */
+ "o5_print",
+ "o5_actorFromPos",
+ "o5_getRandomNr",
+ "o5_and",
+ /* 18 */
+ "o5_jumpRelative",
+ "o5_doSentence",
+ "o5_move",
+ "o5_multiply",
+ /* 1C */
+ "o5_startSound",
+ "o5_ifClassOfIs",
+ "o5_walkActorTo",
+ "o5_isActorInBox",
+ /* 20 */
+ "o5_stopMusic",
+ "o5_putActor",
+ "o5_getAnimCounter",
+ "o5_getActorY",
+ /* 24 */
+ "o5_loadRoomWithEgo",
+ "o5_pickupObject",
+ "o5_setVarRange",
+ "o5_stringOps",
+ /* 28 */
+ "o5_equalZero",
+ "o5_setOwnerOf",
+ "o5_startScript",
+ "o5_delayVariable",
+ /* 2C */
+ "o5_cursorCommand",
+ "o5_putActorInRoom",
+ "o5_delay",
+ "o5_badOpcode",
+ /* 30 */
+ "o5_matrixOps",
+ "o5_getInventoryCount",
+ "o5_setCameraAt",
+ "o5_roomOps",
+ /* 34 */
+ "o5_getDist",
+ "o5_findObject",
+ "o5_walkActorToObject",
+ "o5_startObject",
+ /* 38 */
+ "o5_lessOrEqual",
+ "o5_doSentence",
+ "o5_subtract",
+ "o5_getActorScale",
+ /* 3C */
+ "o5_stopSound",
+ "o5_findInventory",
+ "o5_walkActorTo",
+ "o5_drawBox",
+ /* 40 */
+ "o5_cutscene",
+ "o5_putActor",
+ "o5_chainScript",
+ "o5_getActorX",
+ /* 44 */
+ "o5_isLess",
+ "o5_badOpcode",
+ "o5_increment",
+ "o5_setState",
+ /* 48 */
+ "o5_isEqual",
+ "o5_faceActor",
+ "o5_startScript",
+ "o5_getVerbEntrypoint",
+ /* 4C */
+ "o5_soundKludge",
+ "o5_walkActorToActor",
+ "o5_putActorAtObject",
+ "o5_badOpcode",
+ /* 50 */
+ "o5_pickupObjectOld",
+ "o5_animateActor",
+ "o5_actorFollowCamera",
+ "o5_actorSet",
+ /* 54 */
+ "o5_setObjectName",
+ "o5_actorFromPos",
+ "o5_getActorMoving",
+ "o5_or",
+ /* 58 */
+ "o5_overRide",
+ "o5_doSentence",
+ "o5_add",
+ "o5_divide",
+ /* 5C */
+ "o5_oldRoomEffect",
+ "o5_actorSetClass",
+ "o5_walkActorTo",
+ "o5_isActorInBox",
+ /* 60 */
+ "o5_freezeScripts",
+ "o5_putActor",
+ "o5_stopScript",
+ "o5_getActorFacing",
+ /* 64 */
+ "o5_loadRoomWithEgo",
+ "o5_pickupObject",
+ "o5_getClosestObjActor",
+ "o5_dummy",
+ /* 68 */
+ "o5_getScriptRunning",
+ "o5_setOwnerOf",
+ "o5_startScript",
+ "o5_debug",
+ /* 6C */
+ "o5_getActorWidth",
+ "o5_putActorInRoom",
+ "o5_stopObjectScript",
+ "o5_badOpcode",
+ /* 70 */
+ "o5_lights",
+ "o5_getActorCostume",
+ "o5_loadRoom",
+ "o5_roomOps",
+ /* 74 */
+ "o5_getDist",
+ "o5_findObject",
+ "o5_walkActorToObject",
+ "o5_startObject",
+ /* 78 */
+ "o5_isGreater", /* less? */
+ "o5_doSentence",
+ "o5_verbOps",
+ "o5_getActorWalkBox",
+ /* 7C */
+ "o5_isSoundRunning",
+ "o5_findInventory",
+ "o5_walkActorTo",
+ "o5_drawBox",
+ /* 80 */
+ "o5_breakHere",
+ "o5_putActor",
+ "o5_startMusic",
+ "o5_getActorRoom",
+ /* 84 */
+ "o5_isGreaterEqual", /* less equal? */
+ "o5_drawObject",
+ "o5_getActorElevation",
+ "o5_setState",
+ /* 88 */
+ "o5_isNotEqual",
+ "o5_faceActor",
+ "o5_startScript",
+ "o5_getVerbEntrypoint",
+ /* 8C */
+ "o5_resourceRoutines",
+ "o5_walkActorToActor",
+ "o5_putActorAtObject",
+ "o5_getObjectState",
+ /* 90 */
+ "o5_getObjectOwner",
+ "o5_animateActor",
+ "o5_panCameraTo",
+ "o5_actorSet",
+ /* 94 */
+ "o5_print",
+ "o5_actorFromPos",
+ "o5_getRandomNr",
+ "o5_and",
+ /* 98 */
+ "o5_quitPauseRestart",
+ "o5_doSentence",
+ "o5_move",
+ "o5_multiply",
+ /* 9C */
+ "o5_startSound",
+ "o5_ifClassOfIs",
+ "o5_walkActorTo",
+ "o5_isActorInBox",
+ /* A0 */
+ "o5_stopObjectCode",
+ "o5_putActor",
+ "o5_getAnimCounter",
+ "o5_getActorY",
+ /* A4 */
+ "o5_loadRoomWithEgo",
+ "o5_pickupObject",
+ "o5_setVarRange",
+ "o5_dummy",
+ /* A8 */
+ "o5_notEqualZero",
+ "o5_setOwnerOf",
+ "o5_startScript",
+ "o5_saveRestoreVerbs",
+ /* AC */
+ "o5_expression",
+ "o5_putActorInRoom",
+ "o5_wait",
+ "o5_badOpcode",
+ /* B0 */
+ "o5_matrixOps",
+ "o5_getInventoryCount",
+ "o5_setCameraAt",
+ "o5_roomOps",
+ /* B4 */
+ "o5_getDist",
+ "o5_findObject",
+ "o5_walkActorToObject",
+ "o5_startObject",
+ /* B8 */
+ "o5_lessOrEqual",
+ "o5_doSentence",
+ "o5_subtract",
+ "o5_getActorScale",
+ /* BC */
+ "o5_stopSound",
+ "o5_findInventory",
+ "o5_walkActorTo",
+ "o5_drawBox",
+ /* C0 */
+ "o5_endCutscene",
+ "o5_putActor",
+ "o5_chainScript",
+ "o5_getActorX",
+ /* C4 */
+ "o5_isLess",
+ "o5_badOpcode",
+ "o5_decrement",
+ "o5_setState",
+ /* C8 */
+ "o5_isEqual",
+ "o5_faceActor",
+ "o5_startScript",
+ "o5_getVerbEntrypoint",
+ /* CC */
+ "o5_pseudoRoom",
+ "o5_walkActorToActor",
+ "o5_putActorAtObject",
+ "o5_badOpcode",
+ /* D0 */
+ "o5_pickupObjectOld",
+ "o5_animateActor",
+ "o5_actorFollowCamera",
+ "o5_actorSet",
+ /* D4 */
+ "o5_setObjectName",
+ "o5_actorFromPos",
+ "o5_getActorMoving",
+ "o5_or",
+ /* D8 */
+ "o5_printEgo",
+ "o5_doSentence",
+ "o5_add",
+ "o5_divide",
+ /* DC */
+ "o5_badOpcode",
+ "o5_actorSetClass",
+ "o5_walkActorTo",
+ "o5_isActorInBox",
+ /* E0 */
+ "o5_freezeScripts",
+ "o5_putActor",
+ "o5_stopScript",
+ "o5_getActorFacing",
+ /* E4 */
+ "o5_loadRoomWithEgo",
+ "o5_pickupObject",
+ "o5_getClosestObjActor",
+ "o5_dummy",
+ /* E8 */
+ "o5_getScriptRunning",
+ "o5_setOwnerOf",
+ "o5_startScript",
+ "o5_debug",
+ /* EC */
+ "o5_getActorWidth",
+ "o5_putActorInRoom",
+ "o5_stopObjectScript",
+ "o5_badOpcode",
+ /* F0 */
+ "o5_lights",
+ "o5_getActorCostume",
+ "o5_loadRoom",
+ "o5_roomOps",
+ /* F4 */
+ "o5_getDist",
+ "o5_findObject",
+ "o5_walkActorToObject",
+ "o5_startObject",
+ /* F8 */
+ "o5_isGreater",
+ "o5_doSentence",
+ "o5_verbOps",
+ "o5_getActorWalkBox",
+ /* FC */
+ "o5_isSoundRunning",
+ "o5_findInventory",
+ "o5_walkActorTo",
+ "o5_drawBox",
};
@@ -677,134 +678,139 @@ static const char* opcode_lookup[] = {
_opcodes_lookup = opcode_lookup;
}
-void Scumm::o5_actorFollowCamera() {
+void Scumm::o5_actorFollowCamera()
+{
actorFollowCamera(getVarOrDirectByte(0x80));
}
-void Scumm::o5_actorFromPos() {
- int x,y;
+void Scumm::o5_actorFromPos()
+{
+ int x, y;
getResultPos();
x = getVarOrDirectWord(0x80);
y = getVarOrDirectWord(0x40);
- setResult(getActorFromPos(x,y));
+ setResult(getActorFromPos(x, y));
}
-void Scumm::o5_actorSet() {
- static const byte convertTable[20] = {1,0,0,2,0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20};
+void Scumm::o5_actorSet()
+{
+ static const byte convertTable[20] =
+ { 1, 0, 0, 2, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20 };
int act = getVarOrDirectByte(0x80);
Actor *a;
- int i,j;
+ int i, j;
- if (act == 0)
+ if (act == 0)
act = 1;
a = derefActorSafe(act, "actorSet");
-
- while ( (_opcode = fetchScriptByte()) != 0xFF) {
- if(_features & GF_SMALL_HEADER)
- _opcode = (_opcode&0xE0) | convertTable[(_opcode&0x1F)-1];
-
- if (!a) return;
-
- switch(_opcode&0x1F) {
- case 0: /* dummy case */
+
+ while ((_opcode = fetchScriptByte()) != 0xFF) {
+ if (_features & GF_SMALL_HEADER)
+ _opcode = (_opcode & 0xE0) | convertTable[(_opcode & 0x1F) - 1];
+
+ if (!a)
+ return;
+
+ switch (_opcode & 0x1F) {
+ case 0: /* dummy case */
getVarOrDirectByte(0x80);
break;
- case 1: /* costume */
+ case 1: /* costume */
setActorCostume(a, getVarOrDirectByte(0x80));
break;
- case 2: /* walkspeed */
+ case 2: /* walkspeed */
i = getVarOrDirectByte(0x80);
j = getVarOrDirectByte(0x40);
setActorWalkSpeed(a, i, j);
break;
- case 3: /* sound */
+ case 3: /* sound */
a->sound[0] = getVarOrDirectByte(0x80);
break;
- case 4: /* walkanim */
+ case 4: /* walkanim */
a->walkFrame = getVarOrDirectByte(0x80);
break;
- case 5: /* talkanim */
+ case 5: /* talkanim */
a->talkFrame1 = getVarOrDirectByte(0x80);
a->talkFrame2 = getVarOrDirectByte(0x40);
break;
- case 6: /* standanim */
+ case 6: /* standanim */
a->standFrame = getVarOrDirectByte(0x80);
break;
- case 7: /* ignore */
+ case 7: /* ignore */
getVarOrDirectByte(0x80);
getVarOrDirectByte(0x40);
getVarOrDirectByte(0x20);
break;
- case 8: /* init */
+ case 8: /* init */
initActor(a, 0);
break;
- case 9: /* elevation */
+ case 9: /* elevation */
a->elevation = getVarOrDirectWord(0x80);
a->needRedraw = true;
a->needBgReset = true;
break;
- case 10: /* defaultanims */
+ case 10: /* defaultanims */
a->initFrame = 1;
a->walkFrame = 2;
a->standFrame = 3;
a->talkFrame1 = 4;
a->talkFrame2 = 5;
break;
- case 11: /* palette */
+ case 11: /* palette */
i = getVarOrDirectByte(0x80);
j = getVarOrDirectByte(0x40);
checkRange(31, 0, i, "Illegal palet slot %d");
a->palette[i] = j;
a->needRedraw = true;
break;
- case 12: /* talk color */
+ case 12: /* talk color */
a->talkColor = getVarOrDirectByte(0x80);
break;
- case 13: /* name */
+ case 13: /* name */
loadPtrToResource(rtActorName, a->number, NULL);
break;
- case 14: /* initanim */
+ case 14: /* initanim */
a->initFrame = getVarOrDirectByte(0x80);
break;
- case 15: /* unk */
+ case 15: /* unk */
error("o5_actorset:unk not implemented");
break;
- case 16: /* width */
+ case 16: /* width */
a->width = getVarOrDirectByte(0x80);
break;
- case 17: /* scale */
+ case 17: /* scale */
a->scalex = getVarOrDirectByte(0x80);
a->scaley = getVarOrDirectByte(0x40);
- if(a->scalex>255 || a->scaley>255)
+ if (a->scalex > 255 || a->scaley > 255)
error("Setting an bad actor scale!");
a->needRedraw = true;
a->needBgReset = true;
break;
- case 18: /* neverzclip */
+ case 18: /* neverzclip */
a->forceClip = 0;
break;
- case 19: /* setzclip */
+ case 19: /* setzclip */
a->forceClip = getVarOrDirectByte(0x80);
break;
- case 20: /* ignoreboxes */
+ case 20: /* ignoreboxes */
a->ignoreBoxes = 1;
a->forceClip = 0;
-FixRoom:
- if (a->room==_currentRoom)
+ FixRoom:
+ if (a->room == _currentRoom)
putActor(a, a->x, a->y, a->room);
break;
- case 21: /* followboxes */
+ case 21: /* followboxes */
a->ignoreBoxes = 0;
a->forceClip = 0;
goto FixRoom;
- case 22: /* animspeed */
+ case 22: /* animspeed */
a->animSpeed = getVarOrDirectByte(0x80);
a->animProgress = 0;
break;
- case 23: /* unk2 */
- a->shadow_mode = getVarOrDirectByte(0x80); /* shadow mode */
+ case 23: /* unk2 */
+ a->shadow_mode = getVarOrDirectByte(0x80); /* shadow mode */
break;
default:
warning("o5_actorSet: default case");
@@ -812,56 +818,63 @@ FixRoom:
}
}
-void Scumm::o5_actorSetClass() {
+void Scumm::o5_actorSetClass()
+{
int act = getVarOrDirectWord(0x80);
int newClass;
- while ( (_opcode=fetchScriptByte()) != 0xFF) {
+ while ((_opcode = fetchScriptByte()) != 0xFF) {
newClass = getVarOrDirectWord(0x80);
- if (newClass==0) {
+ if (newClass == 0) {
_classData[act] = 0;
continue;
}
- if (newClass&0x80)
+ if (newClass & 0x80)
putClass(act, newClass, 1);
else
putClass(act, newClass, 0);
}
}
-void Scumm::o5_add() {
+void Scumm::o5_add()
+{
int a;
getResultPos();
a = getVarOrDirectWord(0x80);
setResult(readVar(_resultVarNumber) + a);
}
-void Scumm::o5_and() {
+void Scumm::o5_and()
+{
int a;
getResultPos();
a = getVarOrDirectWord(0x80);
setResult(readVar(_resultVarNumber) & a);
}
-void Scumm::o5_animateActor() {
+void Scumm::o5_animateActor()
+{
int act, anim;
act = getVarOrDirectByte(0x80);
anim = getVarOrDirectByte(0x40);
- animateActor(act,anim);
+ animateActor(act, anim);
}
-void Scumm::o5_badOpcode() {
+void Scumm::o5_badOpcode()
+{
error("Scumm opcode %d illegal", _opcode);
}
-void Scumm::o5_breakHere() {
+void Scumm::o5_breakHere()
+{
updateScriptPtr();
_currentScript = 0xFF;
}
-void Scumm::o5_chainScript() {
+void Scumm::o5_chainScript()
+{
int16 vars[16];
int data;
int cur;
@@ -873,7 +886,7 @@ void Scumm::o5_chainScript() {
cur = _currentScript;
if (vm.slot[cur].cutsceneOverride != 0)
- error("Script %d chaining with active cutscene/override");
+ error("Script %d chaining with active cutscene/override");
vm.slot[cur].number = 0;
vm.slot[cur].status = 0;
@@ -882,65 +895,67 @@ void Scumm::o5_chainScript() {
runScript(data, vm.slot[cur].unk1, vm.slot[cur].unk2, vars);
}
-void Scumm::o5_cursorCommand() {
- int i,j,k;
+void Scumm::o5_cursorCommand()
+{
+ int i, j, k;
int16 table[16];
- switch((_opcode=fetchScriptByte())&0x1F) {
- case 1: /* cursor show */
+ switch ((_opcode = fetchScriptByte()) & 0x1F) {
+ case 1: /* cursor show */
_cursorState = 1;
verbMouseOver(0);
break;
- case 2: /* cursor hide */
+ case 2: /* cursor hide */
_cursorState = 0;
verbMouseOver(0);
break;
- case 3: /* userput on */
+ case 3: /* userput on */
_userPut = 1;
break;
- case 4: /* userput off */
+ case 4: /* userput off */
_userPut = 0;
break;
- case 5: /* cursor soft on */
+ case 5: /* cursor soft on */
_cursorState++;
if (_cursorState > 1) {
error("Cursor state greater than 1 in script");
}
verbMouseOver(0);
break;
- case 6: /* cursor soft off */
+ case 6: /* cursor soft off */
_cursorState--;
verbMouseOver(0);
break;
- case 7: /* userput soft on */
+ case 7: /* userput soft on */
_userPut++;
break;
- case 8: /* userput soft off */
+ case 8: /* userput soft off */
_userPut--;
break;
- case 10: /* set cursor img */
+ case 10: /* set cursor img */
i = getVarOrDirectByte(0x80);
j = getVarOrDirectByte(0x40);
- if(_gameId != GID_LOOM256)
- setCursorImg(i, j, 1);
+ if (_gameId != GID_LOOM256)
+ setCursorImg(i, j, 1);
break;
- case 11: /* set cursor hotspot */
+ case 11: /* set cursor hotspot */
i = getVarOrDirectByte(0x80);
j = getVarOrDirectByte(0x40);
k = getVarOrDirectByte(0x20);
setCursorHotspot2(j, k);
break;
- case 12: /* init cursor */
+ case 12: /* init cursor */
setCursor(getVarOrDirectByte(0x80));
break;
- case 13: /* init charset */
+ case 13: /* init charset */
initCharset(getVarOrDirectByte(0x80));
break;
- case 14: /* unk */
+ case 14: /* unk */
getWordVararg(table);
- for (i=0; i<16; i++)
- charset._colorMap[i] = _charsetData[string[1].t_charset][i] = (unsigned char)table[i];
+ for (i = 0; i < 16; i++)
+ charset._colorMap[i] = _charsetData[string[1].t_charset][i] =
+ (unsigned char)table[i];
break;
}
@@ -948,57 +963,65 @@ void Scumm::o5_cursorCommand() {
_vars[VAR_USERPUT] = _userPut;
}
-void Scumm::o5_cutscene() {
+void Scumm::o5_cutscene()
+{
int16 args[16];
getWordVararg(args);
cutscene(args);
}
-void Scumm::o5_endCutscene() {
+void Scumm::o5_endCutscene()
+{
endCutscene();
}
-void Scumm::o5_debug() {
+void Scumm::o5_debug()
+{
getVarOrDirectWord(0x80);
}
-void Scumm::o5_decrement() {
+void Scumm::o5_decrement()
+{
getResultPos();
- setResult(readVar(_resultVarNumber)-1);
+ setResult(readVar(_resultVarNumber) - 1);
}
-void Scumm::o5_delay() {
+void Scumm::o5_delay()
+{
int delay = fetchScriptByte();
- delay |= fetchScriptByte()<<8;
- delay |= fetchScriptByte()<<16;
+ delay |= fetchScriptByte() << 8;
+ delay |= fetchScriptByte() << 16;
vm.slot[_currentScript].delay = delay;
vm.slot[_currentScript].status = 1;
o5_breakHere();
}
-void Scumm::o5_delayVariable() {
+void Scumm::o5_delayVariable()
+{
vm.slot[_currentScript].delay = readVar(fetchScriptWord());
vm.slot[_currentScript].status = 1;
o5_breakHere();
}
-void Scumm::o5_divide() {
+void Scumm::o5_divide()
+{
int a;
getResultPos();
a = getVarOrDirectWord(0x80);
- if(a==0) {
+ if (a == 0) {
error("Divide by zero");
setResult(0);
- } else
+ } else
setResult(readVar(_resultVarNumber) / a);
}
-void Scumm::o5_doSentence() {
- int a,b;
+void Scumm::o5_doSentence()
+{
+ int a, b;
SentenceTab *st;
a = getVarOrDirectByte(0x80);
- if (a==0xFE) {
+ if (a == 0xFE) {
_sentenceNum = 0;
stopScriptNr(_vars[VAR_SENTENCE_SCRIPT]);
clearClickedStatus();
@@ -1010,7 +1033,7 @@ void Scumm::o5_doSentence() {
st->unk5 = a;
st->unk4 = getVarOrDirectWord(0x40);
b = st->unk3 = getVarOrDirectWord(0x20);
- if (b==0) {
+ if (b == 0) {
st->unk2 = 0;
} else {
st->unk2 = 1;
@@ -1018,9 +1041,10 @@ void Scumm::o5_doSentence() {
st->unk = 0;
}
-void Scumm::o5_drawBox() {
- int x,y,x2,y2,color;
-
+void Scumm::o5_drawBox()
+{
+ int x, y, x2, y2, color;
+
x = getVarOrDirectWord(0x80);
y = getVarOrDirectWord(0x40);
@@ -1032,71 +1056,73 @@ void Scumm::o5_drawBox() {
drawBox(x, y, x2, y2, color);
}
-void Scumm::o5_drawObject() {
- int state,obj,idx,i;
+void Scumm::o5_drawObject()
+{
+ int state, obj, idx, i;
ObjectData *od;
- uint16 x,y,w,h;
+ uint16 x, y, w, h;
int xpos, ypos;
state = 1;
xpos = ypos = 255;
obj = getVarOrDirectWord(0x80);
- if (_features & GF_SMALL_HEADER) {
- int temp = getVarOrDirectWord(0x40);
- getVarOrDirectWord(0x20); // Room
-
- idx = getObjectIndex(obj);
- if(idx==-1)
- return;
- od = &_objs[idx];
- xpos = ypos = 255;
- if (temp!=0xFF) {
- od->walk_x += (xpos<<3) - od->x_pos;
- od->x_pos = xpos<<3;
- od->walk_y += (ypos<<3) - od->y_pos;
- od->y_pos = ypos<<3;
- }
- addObjectToDrawQue(idx);
-
- x = od->x_pos;
- y = od->y_pos;
- w = od->width;
- h = od->height;
-
- i = _numObjectsInRoom;
- do {
- if (_objs[i].x_pos == x && _objs[i].y_pos == y && _objs[i].width == w && _objs[i].height==h)
- putState(_objs[i].obj_nr, 0);
- } while (--i);
-
- putState(obj, state);
- return;
- }
-
- switch((_opcode = fetchScriptByte())&0x1F) {
- case 1: /* draw at */
+ if (_features & GF_SMALL_HEADER) {
+ int temp = getVarOrDirectWord(0x40);
+ getVarOrDirectWord(0x20); // Room
+
+ idx = getObjectIndex(obj);
+ if (idx == -1)
+ return;
+ od = &_objs[idx];
+ xpos = ypos = 255;
+ if (temp != 0xFF) {
+ od->walk_x += (xpos << 3) - od->x_pos;
+ od->x_pos = xpos << 3;
+ od->walk_y += (ypos << 3) - od->y_pos;
+ od->y_pos = ypos << 3;
+ }
+ addObjectToDrawQue(idx);
+
+ x = od->x_pos;
+ y = od->y_pos;
+ w = od->width;
+ h = od->height;
+
+ i = _numObjectsInRoom;
+ do {
+ if (_objs[i].x_pos == x && _objs[i].y_pos == y && _objs[i].width == w
+ && _objs[i].height == h)
+ putState(_objs[i].obj_nr, 0);
+ } while (--i);
+
+ putState(obj, state);
+ return;
+ }
+
+ switch ((_opcode = fetchScriptByte()) & 0x1F) {
+ case 1: /* draw at */
xpos = getVarOrDirectWord(0x80);
ypos = getVarOrDirectWord(0x40);
break;
- case 2: /* set state */
+ case 2: /* set state */
state = getVarOrDirectWord(0x80);
break;
- case 0x1F: /* neither */
+ case 0x1F: /* neither */
break;
default:
error("o5_drawObject: default case");
}
idx = getObjectIndex(obj);
- if (idx==-1)
+ if (idx == -1)
return;
od = &_objs[idx];
- if (xpos!=0xFF) {
- od->walk_x += (xpos<<3) - od->x_pos;
- od->x_pos = xpos<<3;
- od->walk_y += (ypos<<3) - od->y_pos;
- od->y_pos = ypos<<3;
+ if (xpos != 0xFF) {
+ od->walk_x += (xpos << 3) - od->x_pos;
+ od->x_pos = xpos << 3;
+ od->walk_y += (ypos << 3) - od->y_pos;
+ od->y_pos = ypos << 3;
}
addObjectToDrawQue(idx);
@@ -1108,51 +1134,53 @@ void Scumm::o5_drawObject() {
i = _numObjectsInRoom;
do {
if (_objs[i].x_pos == x && _objs[i].y_pos == y
- && _objs[i].width == w && _objs[i].height==h)
+ && _objs[i].width == w && _objs[i].height == h)
putState(_objs[i].obj_nr, 0);
} while (--i);
putState(obj, state);
}
-void Scumm::o5_dummy() {
+void Scumm::o5_dummy()
+{
/* nothing */
}
-void Scumm::o5_expression() {
+void Scumm::o5_expression()
+{
int dst, i;
_scummStackPos = 0;
getResultPos();
dst = _resultVarNumber;
- while ((_opcode = fetchScriptByte())!=0xFF) {
- switch(_opcode&0x1F) {
- case 1: /* varordirect */
+ while ((_opcode = fetchScriptByte()) != 0xFF) {
+ switch (_opcode & 0x1F) {
+ case 1: /* varordirect */
push(getVarOrDirectWord(0x80));
break;
- case 2: /* add */
+ case 2: /* add */
i = pop();
push(i + pop());
break;
- case 3: /* sub */
+ case 3: /* sub */
i = pop();
push(pop() - i);
break;
- case 4: /* mul */
+ case 4: /* mul */
i = pop();
push(i * pop());
break;
- case 5: /* div */
+ case 5: /* div */
i = pop();
- if (i==0)
+ if (i == 0)
error("Divide by zero");
push(pop() / i);
break;
- case 6: /* normal opcode */
+ case 6: /* normal opcode */
_opcode = fetchScriptByte();
- (this->*(getOpcode(_opcode)))();
+ (this->*(getOpcode(_opcode))) ();
push(_vars[0]);
break;
}
@@ -1162,174 +1190,208 @@ void Scumm::o5_expression() {
setResult(pop());
}
-void Scumm::o5_faceActor() {
+void Scumm::o5_faceActor()
+{
int act, obj;
act = getVarOrDirectByte(0x80);
obj = getVarOrDirectWord(0x40);
faceActorToObj(act, obj);
}
-void Scumm::o5_findInventory() {
+void Scumm::o5_findInventory()
+{
int t;
getResultPos();
t = getVarOrDirectByte(0x80);
- setResult(findInventory(t,getVarOrDirectByte(0x40)));
+ setResult(findInventory(t, getVarOrDirectByte(0x40)));
}
-void Scumm::o5_findObject() {
+void Scumm::o5_findObject()
+{
int t;
getResultPos();
t = getVarOrDirectWord(0x80);
setResult(findObject(t, getVarOrDirectWord(0x40)));
}
-void Scumm::o5_freezeScripts() {
+void Scumm::o5_freezeScripts()
+{
int scr = getVarOrDirectByte(0x80);
- if (scr!=0)
+ if (scr != 0)
freezeScripts(scr);
else
unfreezeScripts();
}
-void Scumm::o5_getActorCostume() {
+void Scumm::o5_getActorCostume()
+{
getResultPos();
- setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorCostume")->costume);
+ setResult(derefActorSafe(getVarOrDirectByte(0x80), "o5_getActorCostume")->
+ costume);
}
-void Scumm::o5_getActorElevation() {
+void Scumm::o5_getActorElevation()
+{
getResultPos();
- setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorElevation")->elevation);
+ setResult(derefActorSafe(getVarOrDirectByte(0x80), "o5_getActorElevation")->
+ elevation);
}
-void Scumm::o5_getActorFacing() {
+void Scumm::o5_getActorFacing()
+{
getResultPos();
- setResult(newDirToOldDir(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorFacing")->facing));
+ setResult(newDirToOldDir
+ (derefActorSafe(getVarOrDirectByte(0x80), "o5_getActorFacing")->
+ facing));
}
-void Scumm::o5_getActorMoving() {
+void Scumm::o5_getActorMoving()
+{
getResultPos();
- setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorMoving")->moving);
+ setResult(derefActorSafe(getVarOrDirectByte(0x80), "o5_getActorMoving")->
+ moving);
}
-void Scumm::o5_getActorRoom() {
+void Scumm::o5_getActorRoom()
+{
int temp;
getResultPos();
- temp=getVarOrDirectByte(0x80);
+ temp = getVarOrDirectByte(0x80);
- setResult(derefActorSafe(temp,"o5_getActorRoom")->room);
+ setResult(derefActorSafe(temp, "o5_getActorRoom")->room);
}
-void Scumm::o5_getActorScale() {
- if(_gameId == GID_INDY3_256) {
- getVarOrDirectByte(0x80); /*FIXME: missing stuff here*/
+void Scumm::o5_getActorScale()
+{
+ if (_gameId == GID_INDY3_256) {
+ getVarOrDirectByte(0x80); /*FIXME: missing stuff here */
return;
}
getResultPos();
- setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorScale")->scalex);
+ setResult(derefActorSafe(getVarOrDirectByte(0x80), "o5_getActorScale")->
+ scalex);
}
-void Scumm::o5_getActorWalkBox() {
+void Scumm::o5_getActorWalkBox()
+{
getResultPos();
- setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorWalkbox")->walkbox);
+ setResult(derefActorSafe(getVarOrDirectByte(0x80), "o5_getActorWalkbox")->
+ walkbox);
}
-void Scumm::o5_getActorWidth() {
+void Scumm::o5_getActorWidth()
+{
getResultPos();
- setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorWidth")->width);
+ setResult(derefActorSafe(getVarOrDirectByte(0x80), "o5_getActorWidth")->
+ width);
}
-void Scumm::o5_getActorX() {
+void Scumm::o5_getActorX()
+{
int actor;
getResultPos();
actor = getVarOrDirectWord(0x80);
setResult(getObjX(actor));
}
-void Scumm::o5_getActorY() {
+void Scumm::o5_getActorY()
+{
getResultPos();
setResult(getObjY(getVarOrDirectWord(0x80)));
}
-void Scumm::o5_getAnimCounter() {
+void Scumm::o5_getAnimCounter()
+{
getResultPos();
- setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorAnimCounter")->cost.animCounter1);
+ setResult(derefActorSafe
+ (getVarOrDirectByte(0x80),
+ "o5_getActorAnimCounter")->cost.animCounter1);
}
-void Scumm::o5_getClosestObjActor() {
+void Scumm::o5_getClosestObjActor()
+{
int obj;
int act;
- int closest_obj=0xFF, closest_dist=0xFF;
+ int closest_obj = 0xFF, closest_dist = 0xFF;
int dist;
getResultPos();
act = getVarOrDirectWord(0x80);
obj = _vars[VAR_V5_OBJECT_HI];
-
- do {
- dist = getObjActToObjActDist(act,obj);
+
+ do {
+ dist = getObjActToObjActDist(act, obj);
if (dist < closest_dist) {
closest_dist = dist;
closest_obj = obj;
}
} while (--obj >= _vars[VAR_V5_OBJECT_LO]);
-
+
setResult(closest_dist);
}
-void Scumm::o5_getDist() {
- int o1,o2;
+void Scumm::o5_getDist()
+{
+ int o1, o2;
int r;
getResultPos();
o1 = getVarOrDirectWord(0x80);
o2 = getVarOrDirectWord(0x40);
- r = getObjActToObjActDist(o1,o2);
+ r = getObjActToObjActDist(o1, o2);
/* Fix for monkey 2, dunno what's wrong in scummvm */
- if (_gameId==GID_MONKEY2 && vm.slot[_currentScript].number==40 && r<60)
- r=60;
+ if (_gameId == GID_MONKEY2 && vm.slot[_currentScript].number == 40
+ && r < 60)
+ r = 60;
setResult(r);
}
-void Scumm::o5_getInventoryCount() {
+void Scumm::o5_getInventoryCount()
+{
getResultPos();
setResult(getInventoryCount(getVarOrDirectByte(0x80)));
}
-void Scumm::o5_getObjectOwner() {
+void Scumm::o5_getObjectOwner()
+{
getResultPos();
setResult(getOwner(getVarOrDirectWord(0x80)));
}
-void Scumm::o5_getObjectState() {
- if(_features & GF_SMALL_HEADER) {
+void Scumm::o5_getObjectState()
+{
+ if (_features & GF_SMALL_HEADER) {
int a = getVarOrDirectWord(0x80);
int b = getVarOrDirectByte(0x40);
-
- if((getState(a) &0xF0 >>4) != b)
+
+ if ((getState(a) & 0xF0 >> 4) != b)
o5_jumpRelative();
else
- ignoreScriptWord();
+ ignoreScriptWord();
} else {
getResultPos();
setResult(getState(getVarOrDirectWord(0x80)));
}
}
-void Scumm::o5_getRandomNr() {
+void Scumm::o5_getRandomNr()
+{
getResultPos();
- setResult(getRandomNumber(getVarOrDirectByte(0x80)+1));
+ setResult(getRandomNumber(getVarOrDirectByte(0x80) + 1));
}
-void Scumm::o5_getScriptRunning() {
+void Scumm::o5_getScriptRunning()
+{
getResultPos();
setResult(isScriptRunning(getVarOrDirectByte(0x80)));
}
-void Scumm::o5_getVerbEntrypoint() {
- int a,b;
+void Scumm::o5_getVerbEntrypoint()
+{
+ int a, b;
getResultPos();
a = getVarOrDirectWord(0x80);
b = getVarOrDirectWord(0x40);
@@ -1337,17 +1399,18 @@ void Scumm::o5_getVerbEntrypoint() {
setResult(getVerbEntrypoint(a, b));
}
-void Scumm::o5_ifClassOfIs() {
- int act,cls, b;
+void Scumm::o5_ifClassOfIs()
+{
+ int act, cls, b;
bool cond = true;
act = getVarOrDirectWord(0x80);
-
- while ( (_opcode = fetchScriptByte()) != 0xFF) {
+
+ while ((_opcode = fetchScriptByte()) != 0xFF) {
cls = getVarOrDirectWord(0x80);
b = getClass(act, cls);
- if (cls&0x80 && !b || !(cls&0x80) && b)
+ if (cls & 0x80 && !b || !(cls & 0x80) && b)
cond = false;
}
if (cond)
@@ -1356,12 +1419,14 @@ void Scumm::o5_ifClassOfIs() {
o5_jumpRelative();
}
-void Scumm::o5_increment() {
+void Scumm::o5_increment()
+{
getResultPos();
- setResult(readVar(_resultVarNumber)+1);
+ setResult(readVar(_resultVarNumber) + 1);
}
-void Scumm::o5_isActorInBox() {
+void Scumm::o5_isActorInBox()
+{
int box;
Actor *a;
@@ -1374,63 +1439,88 @@ void Scumm::o5_isActorInBox() {
ignoreScriptWord();
}
-void Scumm::o5_isEqual() {
+void Scumm::o5_isEqual()
+{
int16 a = readVar(fetchScriptWord());
int16 b = getVarOrDirectWord(0x80);
- if (b == a) ignoreScriptWord();
- else o5_jumpRelative();
+ if (b == a)
+ ignoreScriptWord();
+ else
+ o5_jumpRelative();
}
-void Scumm::o5_isGreater() {
+void Scumm::o5_isGreater()
+{
int16 a = readVar(fetchScriptWord());
int16 b = getVarOrDirectWord(0x80);
- if (b > a) ignoreScriptWord();
- else o5_jumpRelative();
+ if (b > a)
+ ignoreScriptWord();
+ else
+ o5_jumpRelative();
}
-void Scumm::o5_isGreaterEqual() {
+void Scumm::o5_isGreaterEqual()
+{
int16 a = readVar(fetchScriptWord());
int16 b = getVarOrDirectWord(0x80);
- if (b >= a) ignoreScriptWord();
- else o5_jumpRelative();
+ if (b >= a)
+ ignoreScriptWord();
+ else
+ o5_jumpRelative();
}
-void Scumm::o5_isLess() {
+void Scumm::o5_isLess()
+{
int16 a = readVar(fetchScriptWord());
int16 b = getVarOrDirectWord(0x80);
- if (b < a) ignoreScriptWord();
- else o5_jumpRelative();
+ if (b < a)
+ ignoreScriptWord();
+ else
+ o5_jumpRelative();
}
-void Scumm::o5_lessOrEqual() {
+void Scumm::o5_lessOrEqual()
+{
int16 a = readVar(fetchScriptWord());
int16 b = getVarOrDirectWord(0x80);
- if (b <= a) ignoreScriptWord();
- else o5_jumpRelative();
+ if (b <= a)
+ ignoreScriptWord();
+ else
+ o5_jumpRelative();
}
-void Scumm::o5_isNotEqual() {
+void Scumm::o5_isNotEqual()
+{
int16 a = readVar(fetchScriptWord());
int16 b = getVarOrDirectWord(0x80);
- if (b != a) ignoreScriptWord();
- else o5_jumpRelative();
+ if (b != a)
+ ignoreScriptWord();
+ else
+ o5_jumpRelative();
}
-void Scumm::o5_notEqualZero() {
+void Scumm::o5_notEqualZero()
+{
int a = readVar(fetchScriptWord());
- if (a != 0) ignoreScriptWord();
- else o5_jumpRelative();
+ if (a != 0)
+ ignoreScriptWord();
+ else
+ o5_jumpRelative();
}
-void Scumm::o5_equalZero() {
+void Scumm::o5_equalZero()
+{
int a = readVar(fetchScriptWord());
- if (a == 0) ignoreScriptWord();
- else o5_jumpRelative();
+ if (a == 0)
+ ignoreScriptWord();
+ else
+ o5_jumpRelative();
}
-void Scumm::o5_isSoundRunning() {
+void Scumm::o5_isSoundRunning()
+{
int snd;
getResultPos();
snd = getVarOrDirectByte(0x80);
@@ -1439,12 +1529,14 @@ void Scumm::o5_isSoundRunning() {
setResult(snd);
}
-void Scumm::o5_jumpRelative() {
- _scriptPointer += (int16)fetchScriptWord();
+void Scumm::o5_jumpRelative()
+{
+ _scriptPointer += (int16) fetchScriptWord();
}
-void Scumm::o5_lights() {
- int a,b,c;
+void Scumm::o5_lights()
+{
+ int a, b, c;
a = getVarOrDirectByte(0x80);
b = fetchScriptByte();
@@ -1453,37 +1545,39 @@ void Scumm::o5_lights() {
/* if (c==0)
_vars[VAR_V5_DRAWFLAGS] = a;
else if (c==1) {*/
- warning("o5_lights: lights not implemented");
-// }
- _fullRedraw=1;
+ warning("o5_lights: lights not implemented");
+// }
+ _fullRedraw = 1;
}
-void Scumm::o5_loadRoom() {
+void Scumm::o5_loadRoom()
+{
int room;
-
+
/* Begin: Autosave
- _saveLoadSlot = 0;
- sprintf(_saveLoadName, "Autosave", _saveLoadSlot);
- _saveLoadFlag = 1;
- _saveLoadCompatible = false;
- End: Autosave */
+ _saveLoadSlot = 0;
+ sprintf(_saveLoadName, "Autosave", _saveLoadSlot);
+ _saveLoadFlag = 1;
+ _saveLoadCompatible = false;
+ End: Autosave */
room = getVarOrDirectByte(0x80);
startScene(room, 0, 0);
_fullRedraw = 1;
}
-void Scumm::o5_loadRoomWithEgo() {
- int obj, room, x,y;
+void Scumm::o5_loadRoomWithEgo()
+{
+ int obj, room, x, y;
Actor *a;
/* Begin: Autosave
- _saveLoadSlot = 0;
- sprintf(_saveLoadName, "Autosave", _saveLoadSlot);
- _saveLoadFlag = 1;
- _saveLoadCompatible = false;
- End: Autosave */
-
+ _saveLoadSlot = 0;
+ sprintf(_saveLoadName, "Autosave", _saveLoadSlot);
+ _saveLoadFlag = 1;
+ _saveLoadCompatible = false;
+ End: Autosave */
+
obj = getVarOrDirectWord(0x80);
room = getVarOrDirectByte(0x40);
@@ -1492,8 +1586,8 @@ void Scumm::o5_loadRoomWithEgo() {
/* Warning: used previously _xPos, _yPos from a previous update of those */
putActor(a, a->x, a->y, room);
- x = (int16)fetchScriptWord();
- y = (int16)fetchScriptWord();
+ x = (int16) fetchScriptWord();
+ y = (int16) fetchScriptWord();
_egoPositioned = false;
@@ -1504,42 +1598,43 @@ void Scumm::o5_loadRoomWithEgo() {
camera._dest.x = camera._cur.x = a->x;
setCameraFollows(a);
- _fullRedraw=1;
+ _fullRedraw = 1;
if (x != -1) {
startWalkActor(a, x, y, -1);
}
}
-void Scumm::o5_matrixOps() {
- int a,b;
+void Scumm::o5_matrixOps()
+{
+ int a, b;
- if(_features & GF_OLD256) {
+ if (_features & GF_OLD256) {
a = getVarOrDirectByte(0x80);
b = fetchScriptByte();
- if (b == 0x40) // Lock Box
+ if (b == 0x40) // Lock Box
setBoxFlags(a, 0x80);
else
setBoxFlags(a, 0);
return;
}
-
+
_opcode = fetchScriptByte();
- switch(_opcode & 0x1F) {
+ switch (_opcode & 0x1F) {
case 1:
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
- setBoxFlags(a,b);
+ setBoxFlags(a, b);
break;
case 2:
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
- setBoxScale(a,b);
+ setBoxScale(a, b);
break;
case 3:
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
- setBoxScale(a,(b-1)|0x8000);
+ setBoxScale(a, (b - 1) | 0x8000);
break;
case 4:
createBoxMatrix();
@@ -1547,12 +1642,14 @@ void Scumm::o5_matrixOps() {
}
}
-void Scumm::o5_move() {
+void Scumm::o5_move()
+{
getResultPos();
setResult(getVarOrDirectWord(0x80));
}
-void Scumm::o5_multiply() {
+void Scumm::o5_multiply()
+{
int a;
getResultPos();
a = getVarOrDirectWord(0x80);
@@ -1560,30 +1657,34 @@ void Scumm::o5_multiply() {
}
-void Scumm::o5_or() {
+void Scumm::o5_or()
+{
int a;
getResultPos();
a = getVarOrDirectWord(0x80);
setResult(readVar(_resultVarNumber) | a);
}
-void Scumm::o5_overRide() {
- if(fetchScriptByte()!=0)
+void Scumm::o5_overRide()
+{
+ if (fetchScriptByte() != 0)
beginOverride();
else
endOverride();
}
-void Scumm::o5_panCameraTo() {
+void Scumm::o5_panCameraTo()
+{
panCameraTo(getVarOrDirectWord(0x80), 0);
}
-void Scumm::o5_pickupObject() {
+void Scumm::o5_pickupObject()
+{
int obj, room;
obj = getVarOrDirectWord(0x80);
room = getVarOrDirectByte(0x40);
- if (room==0)
+ if (room == 0)
room = _roomResource;
addObjectToInventory(obj, room);
putOwner(obj, _vars[VAR_EGO]);
@@ -1594,45 +1695,51 @@ void Scumm::o5_pickupObject() {
runHook(1);
}
-void Scumm::o5_print() {
+void Scumm::o5_print()
+{
_actorToPrintStrFor = getVarOrDirectByte(0x80);
decodeParseString();
}
-void Scumm::o5_printEgo() {
+void Scumm::o5_printEgo()
+{
_actorToPrintStrFor = (unsigned char)_vars[VAR_EGO];
decodeParseString();
}
-void Scumm::o5_pseudoRoom() {
+void Scumm::o5_pseudoRoom()
+{
int i = fetchScriptByte(), j;
while ((j = fetchScriptByte()) != 0) {
if (j >= 0x80) {
- _resourceMapper[j&0x7F] = i;
+ _resourceMapper[j & 0x7F] = i;
}
}
}
-void Scumm::o5_putActor() {
- int x,y;
+void Scumm::o5_putActor()
+{
+ int x, y;
Actor *a;
a = derefActorSafe(getVarOrDirectByte(0x80), "o5_putActor");
- if (!a) return;
+ if (!a)
+ return;
x = getVarOrDirectWord(0x40);
y = getVarOrDirectWord(0x20);
-
+
putActor(a, x, y, a->room);
}
-void Scumm::o5_putActorAtObject() {
+void Scumm::o5_putActorAtObject()
+{
int obj;
Actor *a;
a = derefActorSafe(getVarOrDirectByte(0x80), "o5_putActorAtObject");
obj = getVarOrDirectWord(0x40);
- if (whereIsObject(obj)!=WIO_NOT_FOUND)
+ if (whereIsObject(obj) != WIO_NOT_FOUND)
getObjectXYPos(obj);
else {
_xPos = 240;
@@ -1641,13 +1748,15 @@ void Scumm::o5_putActorAtObject() {
putActor(a, _xPos, _yPos, a->room);
}
-void Scumm::o5_putActorInRoom() {
+void Scumm::o5_putActorInRoom()
+{
int room;
Actor *a;
a = derefActorSafe(getVarOrDirectByte(0x80), "o5_putActorInRoom");
room = getVarOrDirectByte(0x40);
- if (a->visible && _currentRoom!=room && _vars[VAR_TALK_ACTOR]==a->number) {
+ if (a->visible && _currentRoom != room
+ && _vars[VAR_TALK_ACTOR] == a->number) {
clearMsgQueue();
}
a->room = room;
@@ -1655,8 +1764,9 @@ void Scumm::o5_putActorInRoom() {
putActor(a, 0, 0, 0);
}
-void Scumm::o5_quitPauseRestart() {
- switch(fetchScriptByte()) {
+void Scumm::o5_quitPauseRestart()
+{
+ switch (fetchScriptByte()) {
case 1:
pauseGame(false);
break;
@@ -1666,206 +1776,206 @@ void Scumm::o5_quitPauseRestart() {
}
}
-void Scumm::o5_resourceRoutines() {
- int resid=0;
+void Scumm::o5_resourceRoutines()
+{
+ int resid = 0;
_opcode = fetchScriptByte();
if (_opcode != 17)
resid = getVarOrDirectByte(0x80);
- if(_features & GF_OLD256) /*FIXME: find a better way to implement this */
- _opcode&=0x3F;
- switch(_opcode&0x1F) {
- case 1: /* load script */
+ if (_features & GF_OLD256) /*FIXME: find a better way to implement this */
+ _opcode &= 0x3F;
+ switch (_opcode & 0x1F) {
+ case 1: /* load script */
ensureResourceLoaded(rtScript, resid);
break;
- case 2: /* load sound */
+ case 2: /* load sound */
ensureResourceLoaded(rtSound, resid);
break;
- case 3: /* load costume */
+ case 3: /* load costume */
ensureResourceLoaded(rtCostume, resid);
break;
- case 4: /* load room */
- if(_features & GF_OLD256)
- ensureResourceLoaded(rtScript, resid & 0x7F); /*FIXME: missing stuff...*/
+ case 4: /* load room */
+ if (_features & GF_OLD256)
+ ensureResourceLoaded(rtScript, resid & 0x7F); /*FIXME: missing stuff... */
else
ensureResourceLoaded(rtRoom, resid);
break;
- case 5: /* nuke script */
+ case 5: /* nuke script */
setResourceCounter(rtScript, resid, 0x7F);
break;
- case 6: /* nuke sound */
+ case 6: /* nuke sound */
setResourceCounter(rtSound, resid, 0x7F);
break;
- case 7: /* nuke costume */
+ case 7: /* nuke costume */
setResourceCounter(rtCostume, resid, 0x7F);
break;
- case 8: /* nuke room */
+ case 8: /* nuke room */
setResourceCounter(rtRoom, resid, 0x7F);
break;
- case 9: /* lock script */
+ case 9: /* lock script */
if (resid >= _numGlobalScripts)
break;
- lock(rtScript,resid);
+ lock(rtScript, resid);
break;
- case 10:/* lock sound */
- lock(rtSound,resid);
+ case 10: /* lock sound */
+ lock(rtSound, resid);
break;
- case 11:/* lock costume */
- lock(rtCostume,resid);
+ case 11: /* lock costume */
+ lock(rtCostume, resid);
break;
- case 12:/* lock room */
+ case 12: /* lock room */
if (resid > 0x7F)
- resid = _resourceMapper[resid&0x7F];
- lock(rtRoom,resid);
+ resid = _resourceMapper[resid & 0x7F];
+ lock(rtRoom, resid);
break;
- case 13:/* unlock script */
+ case 13: /* unlock script */
if (resid >= _numGlobalScripts)
break;
- unlock(rtScript,resid);
+ unlock(rtScript, resid);
break;
- case 14:/* unlock sound */
- unlock(rtSound,resid);
+ case 14: /* unlock sound */
+ unlock(rtSound, resid);
break;
- case 15:/* unlock costume */
- unlock(rtCostume,resid);
+ case 15: /* unlock costume */
+ unlock(rtCostume, resid);
break;
- case 16:/* unlock room */
+ case 16: /* unlock room */
if (resid > 0x7F)
- resid = _resourceMapper[resid&0x7F];
- unlock(rtRoom,resid);
+ resid = _resourceMapper[resid & 0x7F];
+ unlock(rtRoom, resid);
break;
- case 17:/* clear heap */
+ case 17: /* clear heap */
heapClear(0);
- unkHeapProc2(0,0);
+ unkHeapProc2(0, 0);
break;
- case 18:/* load charset */
+ case 18: /* load charset */
loadCharset(resid);
break;
- case 19:/* nuke charset */
+ case 19: /* nuke charset */
nukeCharset(resid);
break;
- case 20:/* load fl object */
+ case 20: /* load fl object */
loadFlObject(getVarOrDirectWord(0x40), resid);
break;
- default:
- warning("Unknown o5_resourcesroutine: %d", _opcode&0x1F);
- break;
+ default:
+ warning("Unknown o5_resourcesroutine: %d", _opcode & 0x1F);
+ break;
}
}
-void Scumm::o5_roomOps() {
- int a=0,b=0,c,d,e;
+void Scumm::o5_roomOps()
+{
+ int a = 0, b = 0, c, d, e;
- if(_features & GF_OLD256)
- {
+ if (_features & GF_OLD256) {
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
- if(_gameId == GID_INDY3_256 && a == 16 && b == 0) /* FIXME */
- {
+ if (_gameId == GID_INDY3_256 && a == 16 && b == 0) { /* FIXME */
// Set screen height
c = fetchScriptByte();
d = fetchScriptByte();
- e = fetchScriptByte();
- initScreens(0,a,320,c);
+ e = fetchScriptByte();
+ initScreens(0, a, 320, c);
return;
}
}
-
+
_opcode = fetchScriptByte();
- switch(_opcode & 0x1F) {
- case 1: /* room scroll */
- if(!(_features & GF_OLD256))
- {
+ switch (_opcode & 0x1F) {
+ case 1: /* room scroll */
+ if (!(_features & GF_OLD256)) {
a = getVarOrDirectWord(0x80);
b = getVarOrDirectWord(0x40);
}
- if (a < 160) a=160;
- if (b < 160) b=160;
- if (a > _scrWidth-160) a=_scrWidth-160;
- if (b > _scrWidth-160) b=_scrWidth-160;
+ if (a < 160)
+ a = 160;
+ if (b < 160)
+ b = 160;
+ if (a > _scrWidth - 160)
+ a = _scrWidth - 160;
+ if (b > _scrWidth - 160)
+ b = _scrWidth - 160;
_vars[VAR_CAMERA_MIN_X] = a;
_vars[VAR_CAMERA_MAX_X] = b;
break;
- case 2: /* room color */
- if(_features & GF_SMALL_HEADER) {
- if(!(_features & GF_OLD256))
- {
- a = getVarOrDirectWord(0x80);
- b = getVarOrDirectWord(0x40);
+ case 2: /* room color */
+ if (_features & GF_SMALL_HEADER) {
+ if (!(_features & GF_OLD256)) {
+ a = getVarOrDirectWord(0x80);
+ b = getVarOrDirectWord(0x40);
}
- checkRange(256, 0, a, "o5_roomOps: 2: Illegal room color slot (%d)");
- _currentPalette[a]=b;
- _fullRedraw = 1;
- } else {
- error("room-color is no longer a valid command");
- }
+ checkRange(256, 0, a, "o5_roomOps: 2: Illegal room color slot (%d)");
+ _currentPalette[a] = b;
+ _fullRedraw = 1;
+ } else {
+ error("room-color is no longer a valid command");
+ }
break;
- case 3: /* set screen */
- if(!(_features & GF_OLD256))
- {
+ case 3: /* set screen */
+ if (!(_features & GF_OLD256)) {
a = getVarOrDirectWord(0x80);
b = getVarOrDirectWord(0x40);
}
- initScreens(0,a,320,b);
- break;
- case 4: /* set palette color */
- if(_features & GF_SMALL_HEADER) {
- if(!(_features & GF_OLD256))
- {
- a = getVarOrDirectWord(0x80);
- b = getVarOrDirectWord(0x40);
+ initScreens(0, a, 320, b);
+ break;
+ case 4: /* set palette color */
+ if (_features & GF_SMALL_HEADER) {
+ if (!(_features & GF_OLD256)) {
+ a = getVarOrDirectWord(0x80);
+ b = getVarOrDirectWord(0x40);
}
- checkRange(256, 0, a, "o5_roomOps: 2: Illegal room color slot (%d)");
- _currentPalette[a]=b; /*FIXME: should be shadow palette */
- // _fullRedraw = 1;
- } else {
- a = getVarOrDirectWord(0x80);
- b = getVarOrDirectWord(0x40);
- c = getVarOrDirectWord(0x20);
- _opcode = fetchScriptByte();
- d = getVarOrDirectByte(0x80);
- setPalColor(d, a, b, c); /* index, r, g, b */
- }
- break;
- case 5: /* shake on */
+ checkRange(256, 0, a, "o5_roomOps: 2: Illegal room color slot (%d)");
+ _currentPalette[a] = b; /*FIXME: should be shadow palette */
+ // _fullRedraw = 1;
+ } else {
+ a = getVarOrDirectWord(0x80);
+ b = getVarOrDirectWord(0x40);
+ c = getVarOrDirectWord(0x20);
+ _opcode = fetchScriptByte();
+ d = getVarOrDirectByte(0x80);
+ setPalColor(d, a, b, c); /* index, r, g, b */
+ }
+ break;
+ case 5: /* shake on */
setShake(1);
break;
- case 6: /* shake off */
+ case 6: /* shake off */
setShake(0);
break;
- case 7: /* room scale for old games */
+ case 7: /* room scale for old games */
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
- _opcode=fetchScriptByte();
+ _opcode = fetchScriptByte();
c = getVarOrDirectByte(0x80);
d = getVarOrDirectByte(0x40);
- _opcode=fetchScriptByte();
+ _opcode = fetchScriptByte();
e = getVarOrDirectByte(0x40);
- setScaleItem(e-1,b,a,d,c);
- case 8: /* room scale? */
+ setScaleItem(e - 1, b, a, d, c);
+ case 8: /* room scale? */
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
c = getVarOrDirectByte(0x20);
darkenPalette(b, c, a, a, a);
break;
- case 9: /* ? */
+ case 9: /* ? */
_saveLoadFlag = getVarOrDirectByte(0x80);
_saveLoadSlot = getVarOrDirectByte(0x40);
- _saveLoadSlot = 99; /* use this slot */
+ _saveLoadSlot = 99; /* use this slot */
_saveLoadCompatible = true;
break;
- case 10: /* ? */
+ case 10: /* ? */
a = getVarOrDirectWord(0x80);
if (a) {
_switchRoomEffect = (byte)(a);
- _switchRoomEffect2 = (byte)(a>>8);
+ _switchRoomEffect2 = (byte)(a >> 8);
} else {
screenEffect(_newEffect);
}
break;
- case 11: /* ? */
+ case 11: /* ? */
a = getVarOrDirectWord(0x80);
b = getVarOrDirectWord(0x40);
c = getVarOrDirectWord(0x20);
@@ -1874,7 +1984,7 @@ void Scumm::o5_roomOps() {
e = getVarOrDirectByte(0x40);
darkenPalette(d, e, a, b, c);
break;
- case 12: /* ? */
+ case 12: /* ? */
a = getVarOrDirectWord(0x80);
b = getVarOrDirectWord(0x40);
c = getVarOrDirectWord(0x20);
@@ -1884,22 +1994,22 @@ void Scumm::o5_roomOps() {
unkRoomFunc3(d, e, a, b, c);
break;
- case 13: { /* save-string */
- char buf[256],*s;
- a = getVarOrDirectByte(0x80);
- s = buf;
- while ((*s++=fetchScriptByte()));
- warning("roomops:13 save-string(%d,\"%s\") not implemented", a, buf);
- break;
+ case 13:{ /* save-string */
+ char buf[256], *s;
+ a = getVarOrDirectByte(0x80);
+ s = buf;
+ while ((*s++ = fetchScriptByte()));
+ warning("roomops:13 save-string(%d,\"%s\") not implemented", a, buf);
+ break;
}
- case 14: /* load-string */
- char buf[256],*s;
+ case 14: /* load-string */
+ char buf[256], *s;
a = getVarOrDirectByte(0x80);
s = buf;
- while ((*s++=fetchScriptByte()));
+ while ((*s++ = fetchScriptByte()));
warning("roomops:14 load-string(%d,\"%s\") not implemented", a, buf);
break;
- case 15: /* palmanip? */
+ case 15: /* palmanip? */
a = getVarOrDirectByte(0x80);
_opcode = fetchScriptByte();
b = getVarOrDirectByte(0x80);
@@ -1909,33 +2019,35 @@ void Scumm::o5_roomOps() {
unkRoomFunc4(b, c, a, d, 1);
break;
- case 16: /* ? */
+ case 16: /* ? */
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
- if (a < 1) a = 1; /* FIXME: ZAK256 */
+ if (a < 1)
+ a = 1; /* FIXME: ZAK256 */
checkRange(16, 1, a, "o5_roomOps: 16: color cycle out of range (%d)");
- _colorCycle[a-1].delay = (b!=0) ? 0x4000 / (b*0x4C) : 0;
+ _colorCycle[a - 1].delay = (b != 0) ? 0x4000 / (b * 0x4C) : 0;
break;
}
}
-void Scumm::o5_saveRestoreVerbs() {
- int a,b,c,slot, slot2;
+void Scumm::o5_saveRestoreVerbs()
+{
+ int a, b, c, slot, slot2;
_opcode = fetchScriptByte();
-
+
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
c = getVarOrDirectByte(0x20);
- switch(_opcode) {
- case 1: /* hide verbs */
+ switch (_opcode) {
+ case 1: /* hide verbs */
if (_gameId == GID_ZAK256) // FIXME?
return;
- while (a<=b) {
- slot = getVerbSlot(a,0);
- if (slot && _verbs[slot].saveid==0) {
+ while (a <= b) {
+ slot = getVerbSlot(a, 0);
+ if (slot && _verbs[slot].saveid == 0) {
_verbs[slot].saveid = c;
drawVerb(slot, 0);
verbMouseOver(0);
@@ -1943,14 +2055,14 @@ void Scumm::o5_saveRestoreVerbs() {
a++;
}
break;
- case 2: /* show verbs */
- while (a<=b) {
+ case 2: /* show verbs */
+ while (a <= b) {
slot = getVerbSlot(a, c);
if (slot) {
- slot2 = getVerbSlot(a,0);
+ slot2 = getVerbSlot(a, 0);
if (slot2)
killVerb(slot2);
- slot = getVerbSlot(a,c);
+ slot = getVerbSlot(a, c);
_verbs[slot].saveid = 0;
drawVerb(slot, 0);
verbMouseOver(0);
@@ -1958,9 +2070,9 @@ void Scumm::o5_saveRestoreVerbs() {
a++;
}
break;
- case 3: /* kill verbs */
- while (a<=b) {
- slot = getVerbSlot(a,c);
+ case 3: /* kill verbs */
+ while (a <= b) {
+ slot = getVerbSlot(a, c);
if (slot)
killVerb(slot);
a++;
@@ -1971,32 +2083,34 @@ void Scumm::o5_saveRestoreVerbs() {
}
}
-void Scumm::o5_setCameraAt() {
+void Scumm::o5_setCameraAt()
+{
setCameraAtEx(getVarOrDirectWord(0x80));
}
-void Scumm::o5_setObjectName() {
+void Scumm::o5_setObjectName()
+{
int obj = getVarOrDirectWord(0x80);
int size;
int a;
int i;
byte *name;
unsigned char work[255];
-
+
if (obj < NUM_ACTORS)
error("Can't set actor %d name with new-name-of", obj);
if (!getOBCDFromObject(obj))
error("Can't set name of object %d", obj);
- name = getObjOrActorName(obj);
+ name = getObjOrActorName(obj);
size = getResourceDataSize(name);
- i = 0;
+ i = 0;
while ((a = fetchScriptByte()) != 0) {
- work[i++] = a;
+ work[i++] = a;
- if (a==0xFF) {
+ if (a == 0xFF) {
work[i++] = fetchScriptByte();
work[i++] = fetchScriptByte();
work[i++] = fetchScriptByte();
@@ -2006,17 +2120,18 @@ void Scumm::o5_setObjectName() {
if (i >= size) {
work[i] = 0;
- warning("New name of object %d too long (old *%s* new *%s*)",
- obj, name, work);
+ warning("New name of object %d too long (old *%s* new *%s*)",
+ obj, name, work);
i = size - 1;
}
work[i] = 0;
- strcpy((char*)name, (char*)work);
+ strcpy((char *)name, (char *)work);
runHook(0);
}
-void Scumm::o5_setOwnerOf() {
+void Scumm::o5_setOwnerOf()
+{
int obj, owner;
obj = getVarOrDirectWord(0x80);
@@ -2025,7 +2140,8 @@ void Scumm::o5_setOwnerOf() {
setOwnerOf(obj, owner);
}
-void Scumm::o5_setState() {
+void Scumm::o5_setState()
+{
int obj, state;
obj = getVarOrDirectWord(0x80);
state = getVarOrDirectByte(0x40);
@@ -2035,30 +2151,32 @@ void Scumm::o5_setState() {
clearDrawObjectQueue();
}
-void Scumm::o5_setVarRange() {
- int a,b;
+void Scumm::o5_setVarRange()
+{
+ int a, b;
getResultPos();
- a=fetchScriptByte();
+ a = fetchScriptByte();
do {
- if (_opcode&0x80)
- b=fetchScriptWord();
+ if (_opcode & 0x80)
+ b = fetchScriptWord();
else
- b=fetchScriptByte();
-
+ b = fetchScriptByte();
+
setResult(b);
_resultVarNumber++;
} while (--a);
}
-void Scumm::o5_soundKludge() {
+void Scumm::o5_soundKludge()
+{
int16 items[15];
int i;
if (_features & GF_SMALL_HEADER) // Is dummy function in
- return; // SCUMM V3
+ return; // SCUMM V3
- for (i=0; i<15; i++)
+ for (i = 0; i < 15; i++)
items[i] = 0;
getWordVararg(items);
@@ -2066,11 +2184,13 @@ void Scumm::o5_soundKludge() {
soundKludge(items);
}
-void Scumm::o5_startMusic() {
+void Scumm::o5_startMusic()
+{
addSoundToQueue(getVarOrDirectByte(0x80));
}
-void Scumm::o5_startObject() {
+void Scumm::o5_startObject()
+{
int obj, script;
int16 data[16];
@@ -2081,40 +2201,48 @@ void Scumm::o5_startObject() {
runVerbCode(obj, script, 0, 0, data);
}
-void Scumm::o5_startScript() {
- int op,script;
+void Scumm::o5_startScript()
+{
+ int op, script;
int16 data[16];
- int a,b;
-
+ int a, b;
+
op = _opcode;
script = getVarOrDirectByte(0x80);
getWordVararg(data);
a = b = 0;
- if (op&0x40) b=1;
- if (op&0x20) a=1;
+ if (op & 0x40)
+ b = 1;
+ if (op & 0x20)
+ a = 1;
runScript(script, a, b, data);
}
-void Scumm::o5_startSound() {
+void Scumm::o5_startSound()
+{
addSoundToQueue(getVarOrDirectByte(0x80));
}
-void Scumm::o5_stopMusic() {
+void Scumm::o5_stopMusic()
+{
stopAllSounds();
}
-void Scumm::o5_stopObjectCode() {
+void Scumm::o5_stopObjectCode()
+{
stopObjectCode();
}
-void Scumm::o5_stopObjectScript() {
+void Scumm::o5_stopObjectScript()
+{
stopObjectScript(getVarOrDirectWord(0x80));
}
-void Scumm::o5_stopScript() {
+void Scumm::o5_stopScript()
+{
int script;
script = getVarOrDirectByte(0x80);
@@ -2125,32 +2253,36 @@ void Scumm::o5_stopScript() {
stopScriptNr(script);
}
-void Scumm::o5_stopSound() {
+void Scumm::o5_stopSound()
+{
stopSound(getVarOrDirectByte(0x80));
}
-void Scumm::o5_stringOps() {
- int a,b,c,i;
+void Scumm::o5_stringOps()
+{
+ int a, b, c, i;
byte *ptr;
_opcode = fetchScriptByte();
- switch(_opcode&0x1F) {
- case 1: /* loadstring */
+ switch (_opcode & 0x1F) {
+ case 1: /* loadstring */
loadPtrToResource(rtString, getVarOrDirectByte(0x80), NULL);
break;
- case 2: /* copystring */
+ case 2: /* copystring */
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
nukeResource(rtString, a);
ptr = getResourceAddress(rtString, b);
- if (ptr) loadPtrToResource(rtString, a, ptr);
+ if (ptr)
+ loadPtrToResource(rtString, a, ptr);
break;
- case 3: /* set string char */
+ case 3: /* set string char */
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
ptr = getResourceAddress(rtString, a);
- if (!(_gameId == GID_LOOM256)) { /* FIXME - LOOM256 */
- if (ptr==NULL) error("String %d does not exist", a);
+ if (!(_gameId == GID_LOOM256)) { /* FIXME - LOOM256 */
+ if (ptr == NULL)
+ error("String %d does not exist", a);
c = getVarOrDirectByte(0x20);
ptr[b] = c;
} else
@@ -2158,23 +2290,24 @@ void Scumm::o5_stringOps() {
break;
- case 4: /* get string char */
+ case 4: /* get string char */
getResultPos();
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
ptr = getResourceAddress(rtString, a);
- if (ptr==NULL) error("String %d does not exist", a);
+ if (ptr == NULL)
+ error("String %d does not exist", a);
setResult(ptr[b]);
break;
-
- case 5: /* create empty string */
+
+ case 5: /* create empty string */
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
nukeResource(rtString, a);
if (b) {
ptr = createResource(rtString, a, b);
if (ptr) {
- for(i=0; i<b; i++)
+ for (i = 0; i < b; i++)
ptr[i] = 0;
}
}
@@ -2182,70 +2315,72 @@ void Scumm::o5_stringOps() {
}
}
-void Scumm::o5_subtract() {
+void Scumm::o5_subtract()
+{
int a;
getResultPos();
a = getVarOrDirectWord(0x80);
setResult(readVar(_resultVarNumber) - a);
}
-void Scumm::o5_verbOps() {
- int verb,slot;
+void Scumm::o5_verbOps()
+{
+ int verb, slot;
VerbSlot *vs;
- int a,b;
+ int a, b;
byte *ptr;
verb = getVarOrDirectByte(0x80);
- slot = getVerbSlot(verb,0);
- checkRange(_maxVerbs-1, 0, slot, "Illegal new verb slot %d");
+ slot = getVerbSlot(verb, 0);
+ checkRange(_maxVerbs - 1, 0, slot, "Illegal new verb slot %d");
vs = &_verbs[slot];
vs->verbid = verb;
- while ((_opcode=fetchScriptByte()) != 0xFF) {
- switch(_opcode&0x1F) {
- case 1: /* load image */
+ while ((_opcode = fetchScriptByte()) != 0xFF) {
+ switch (_opcode & 0x1F) {
+ case 1: /* load image */
a = getVarOrDirectWord(0x80);
if (slot) {
setVerbObject(_roomResource, a, slot);
vs->type = 1;
}
break;
- case 2: /* load from code */
+ case 2: /* load from code */
loadPtrToResource(rtVerb, slot, NULL);
- if (slot==0)
+ if (slot == 0)
nukeResource(rtVerb, slot);
vs->type = 0;
vs->imgindex = 0;
break;
- case 3: /* color */
+ case 3: /* color */
vs->color = getVarOrDirectByte(0x80);
break;
- case 4: /* set hi color */
+ case 4: /* set hi color */
vs->hicolor = getVarOrDirectByte(0x80);
break;
- case 5: /* set xy */
+ case 5: /* set xy */
vs->x = getVarOrDirectWord(0x80);
vs->y = getVarOrDirectWord(0x40);
break;
- case 6: /* set on */
- vs->curmode=1;
+ case 6: /* set on */
+ vs->curmode = 1;
break;
- case 7: /* set off */
- vs->curmode=0;
+ case 7: /* set off */
+ vs->curmode = 0;
break;
- case 8: /* delete */
+ case 8: /* delete */
killVerb(slot);
break;
- case 9: /* new */
+ case 9: /* new */
slot = getVerbSlot(verb, 0);
- if (slot==0) {
- for (slot=1; slot<_maxVerbs; slot++) {
- if(_verbs[slot].verbid==0)
+ if (slot == 0) {
+ for (slot = 1; slot < _maxVerbs; slot++) {
+ if (_verbs[slot].verbid == 0)
break;
}
- if (slot==_maxVerbs)
+ if (slot == _maxVerbs)
error("Too many verbs");
}
vs = &_verbs[slot];
@@ -2262,40 +2397,40 @@ void Scumm::o5_verbOps() {
vs->imgindex = 0;
break;
- case 16: /* set dim color */
+ case 16: /* set dim color */
vs->dimcolor = getVarOrDirectByte(0x80);
break;
- case 17: /* dim */
+ case 17: /* dim */
vs->curmode = 2;
break;
- case 18: /* set key */
+ case 18: /* set key */
vs->key = getVarOrDirectByte(0x80);
break;
- case 19: /* set center */
+ case 19: /* set center */
vs->center = 1;
break;
- case 20: /* set to string */
+ case 20: /* set to string */
ptr = getResourceAddress(rtString, getVarOrDirectWord(0x80));
if (!ptr)
nukeResource(rtVerb, slot);
else {
loadPtrToResource(rtVerb, slot, ptr);
}
- if (slot==0)
+ if (slot == 0)
nukeResource(rtVerb, slot);
vs->type = 0;
vs->imgindex = 0;
break;
- case 22: /* assign object */
+ case 22: /* assign object */
a = getVarOrDirectWord(0x80);
b = getVarOrDirectByte(0x40);
- if (slot && vs->imgindex!=a) {
+ if (slot && vs->imgindex != a) {
setVerbObject(b, a, slot);
vs->type = 1;
vs->imgindex = a;
}
break;
- case 23: /* set back color */
+ case 23: /* set back color */
vs->bkcolor = getVarOrDirectByte(0x80);
break;
}
@@ -2304,37 +2439,38 @@ void Scumm::o5_verbOps() {
verbMouseOver(0);
}
-void Scumm::o5_wait() {
+void Scumm::o5_wait()
+{
byte *oldaddr;
oldaddr = _scriptPointer - 1;
- if(_opcode == 0xAE && _gameId == GID_INDY3_256) {
+ if (_opcode == 0xAE && _gameId == GID_INDY3_256) {
_opcode = 2;
} else
_opcode = fetchScriptByte();
-
- switch(_opcode&0x1F) {
- case 1: /* wait for actor */
+
+ switch (_opcode & 0x1F) {
+ case 1: /* wait for actor */
if (derefActorSafe(getVarOrDirectByte(0x80), "o5_wait")->moving)
break;
return;
- case 2: /* wait for message */
+ case 2: /* wait for message */
if ((_currentRoom == 0) && (_gameId == GID_ZAK256)) // Bypass Zak256 script hang
return;
if (_vars[VAR_HAVE_MSG])
break;
return;
- case 3: /* wait for camera */
- if (camera._cur.x>>3 != camera._dest.x>>3)
+ case 3: /* wait for camera */
+ if (camera._cur.x >> 3 != camera._dest.x >> 3)
break;
return;
- case 4: /* wait for sentence */
+ case 4: /* wait for sentence */
if (_sentenceNum) {
- if (sentence[_sentenceNum-1].unk &&
- !isScriptInUse(_vars[VAR_SENTENCE_SCRIPT]) )
+ if (sentence[_sentenceNum - 1].unk &&
+ !isScriptInUse(_vars[VAR_SENTENCE_SCRIPT]))
return;
break;
}
@@ -2350,7 +2486,8 @@ void Scumm::o5_wait() {
o5_breakHere();
}
-void Scumm::o5_walkActorTo() {
+void Scumm::o5_walkActorTo()
+{
int x, y;
Actor *a;
a = derefActorSafe(getVarOrDirectByte(0x80), "o5_walkActorTo");
@@ -2359,8 +2496,9 @@ void Scumm::o5_walkActorTo() {
startWalkActor(a, x, y, -1);
}
-void Scumm::o5_walkActorToActor() {
- int b,x,y;
+void Scumm::o5_walkActorToActor()
+{
+ int b, x, y;
Actor *a, *a2;
int nr;
int nr2 = getVarOrDirectByte(0x80);
@@ -2375,7 +2513,7 @@ void Scumm::o5_walkActorToActor() {
}
nr = getVarOrDirectByte(0x40);
- if (nr==106 && _gameId==GID_INDY4) {
+ if (nr == 106 && _gameId == GID_INDY4) {
warning("Bypassing Indy4 bug");
fetchScriptByte();
return;
@@ -2389,10 +2527,10 @@ void Scumm::o5_walkActorToActor() {
fetchScriptByte();
return;
}
- b = fetchScriptByte(); /* distance from actor */
- if (b==0xFF) {
+ b = fetchScriptByte(); /* distance from actor */
+ if (b == 0xFF) {
b = a2->scalex * a->width / 0xFF;
- b = b + b/2;
+ b = b + b / 2;
}
x = a2->x;
y = a2->y;
@@ -2400,11 +2538,12 @@ void Scumm::o5_walkActorToActor() {
x += b;
else
x -= b;
-
+
startWalkActor(a, x, y, -1);
}
-void Scumm::o5_walkActorToObject() {
+void Scumm::o5_walkActorToObject()
+{
int obj;
Actor *a;
@@ -2412,16 +2551,17 @@ void Scumm::o5_walkActorToObject() {
a = derefActorSafe(getVarOrDirectByte(0x80), "o5_walkActorToObject");
obj = getVarOrDirectWord(0x40);
- if (whereIsObject(obj)!=WIO_NOT_FOUND) {
+ if (whereIsObject(obj) != WIO_NOT_FOUND) {
getObjectXYPos(obj);
startWalkActor(a, _xPos, _yPos, _dir);
}
}
-int Scumm::getWordVararg(int16 *ptr) {
+int Scumm::getWordVararg(int16 * ptr)
+{
int i;
- for (i=0; i<15; i++)
+ for (i = 0; i < 15; i++)
ptr[i] = 0;
i = 0;
@@ -2431,22 +2571,25 @@ int Scumm::getWordVararg(int16 *ptr) {
return i;
}
-int Scumm::getVarOrDirectWord(byte mask) {
- if (_opcode&mask)
+int Scumm::getVarOrDirectWord(byte mask)
+{
+ if (_opcode & mask)
return readVar(fetchScriptWord());
- return (int16)fetchScriptWord();
+ return (int16) fetchScriptWord();
}
-int Scumm::getVarOrDirectByte(byte mask) {
- if (_opcode&mask)
+int Scumm::getVarOrDirectByte(byte mask)
+{
+ if (_opcode & mask)
return readVar(fetchScriptWord());
return fetchScriptByte();
}
-void Scumm::decodeParseString() {
+void Scumm::decodeParseString()
+{
int textSlot;
- switch(_actorToPrintStrFor) {
+ switch (_actorToPrintStrFor) {
case 252:
textSlot = 3;
break;
@@ -2468,53 +2611,61 @@ void Scumm::decodeParseString() {
string[textSlot].color = string[textSlot].t_color;
string[textSlot].charset = string[textSlot].t_charset;
- while((_opcode=fetchScriptByte()) != 0xFF) {
- switch(_opcode&0xF) {
- case 0: /* set string xy */
+ while ((_opcode = fetchScriptByte()) != 0xFF) {
+ switch (_opcode & 0xF) {
+ case 0: /* set string xy */
string[textSlot].xpos = getVarOrDirectWord(0x80);
string[textSlot].ypos = getVarOrDirectWord(0x40);
string[textSlot].overhead = false;
break;
- case 1: /* color */
+ case 1: /* color */
string[textSlot].color = getVarOrDirectByte(0x80);
break;
- case 2: /* right */
+ case 2: /* right */
string[textSlot].right = getVarOrDirectWord(0x80);
break;
- case 4: /* center*/
+ case 4: /* center */
string[textSlot].center = true;
string[textSlot].overhead = false;
break;
- case 6: /* left */
+ case 6: /* left */
string[textSlot].center = false;
string[textSlot].overhead = false;
break;
- case 7: /* overhead */
+ case 7: /* overhead */
string[textSlot].overhead = true;
break;
- case 8: { /* play loom talkie sound - use in other games ? */
- int x = getVarOrDirectWord(0x80);
- int offset;
- int delay;
-
- if (x != 0)
- offset = (int)((x & 0xffff) * 7.5 - 22650);
- else
- offset = 0;
- delay = (int)((getVarOrDirectWord(0x40) & 0xffff) * 7.5);
- if (_gameId == GID_LOOM256)
- cd_play(this, 1, 0, offset, delay);
- else
- warning("parseString: 8");
- }
- break;
+ case 8:{ /* play loom talkie sound - use in other games ? */
+ int x = getVarOrDirectWord(0x80);
+ int offset;
+ int delay;
+
+ if (x != 0)
+ offset = (int)((x & 0xffff) * 7.5 - 22650);
+ else
+ offset = 0;
+ delay = (int)((getVarOrDirectWord(0x40) & 0xffff) * 7.5);
+ if (_gameId == GID_LOOM256)
+ cd_play(this, 1, 0, offset, delay);
+ else
+ warning("parseString: 8");
+ }
+ break;
case 15:
_messagePtr = _scriptPointer;
- switch(textSlot) {
- case 0: actorTalk(); break;
- case 1: drawString(1); break;
- case 2: unkMessage1(); break;
- case 3: unkMessage2(); break;
+ switch (textSlot) {
+ case 0:
+ actorTalk();
+ break;
+ case 1:
+ drawString(1);
+ break;
+ case 2:
+ unkMessage1();
+ break;
+ case 3:
+ unkMessage2();
+ break;
}
_scriptPointer = _messagePtr;
return;
@@ -2532,28 +2683,29 @@ void Scumm::decodeParseString() {
string[textSlot].t_charset = string[textSlot].charset;
}
-void Scumm::o5_oldRoomEffect() {
+void Scumm::o5_oldRoomEffect()
+{
int a;
- _opcode=fetchScriptByte();
- if((_opcode & 0x1F) == 3)
- {
+ _opcode = fetchScriptByte();
+ if ((_opcode & 0x1F) == 3) {
a = getVarOrDirectWord(0x80);
}
warning("Unsupported oldRoomEffect");
}
-void Scumm::o5_pickupObjectOld() {
+void Scumm::o5_pickupObjectOld()
+{
int obj = getVarOrDirectWord(0x80);
-
- if(getObjectIndex(obj) == -1)
+
+ if (getObjectIndex(obj) == -1)
return;
- if(whereIsObject(obj) == WIO_INVENTORY) /* Don't take an */
- return; /* object twice */
+ if (whereIsObject(obj) == WIO_INVENTORY) /* Don't take an */
+ return; /* object twice */
// warning("adding %d from %d to inventoryOld", obj, _currentRoom);
- addObjectToInventory(obj,_currentRoom);
+ addObjectToInventory(obj, _currentRoom);
// warning("added to inventoryOld");
removeObjectFromRoom(obj);
putOwner(obj, _vars[VAR_EGO]);