[Scummvm-cvs-logs] SF.net SVN: scummvm: [28899] scummvm/trunk/engines/saga/sfuncs.cpp

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Thu Sep 13 19:55:00 CEST 2007


Revision: 28899
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28899&view=rev
Author:   thebluegr
Date:     2007-09-13 10:55:00 -0700 (Thu, 13 Sep 2007)

Log Message:
-----------
Cleanup and simplification of several of the script opcodes used in ITE and IHNM

Modified Paths:
--------------
    scummvm/trunk/engines/saga/sfuncs.cpp

Modified: scummvm/trunk/engines/saga/sfuncs.cpp
===================================================================
--- scummvm/trunk/engines/saga/sfuncs.cpp	2007-09-13 15:49:40 UTC (rev 28898)
+++ scummvm/trunk/engines/saga/sfuncs.cpp	2007-09-13 17:55:00 UTC (rev 28899)
@@ -253,8 +253,7 @@
 // Script function #0 (0x00)
 // Print a debugging message
 void Script::sfPutString(SCRIPTFUNC_PARAMS) {
-	const char *str;
-	str = thread->_strings->getString(thread->pop());
+	const char *str = thread->_strings->getString(thread->pop());
 
 	_vm->_console->DebugPrintf("sfPutString: %s\n",str);
 	debug(0, "sfPutString: %s", str);
@@ -263,8 +262,7 @@
 // Script function #1 (0x01) blocking
 // Param1: time in ticks
 void Script::sfWait(SCRIPTFUNC_PARAMS) {
-	int16 time;
-	time = thread->pop();
+	int16 time = thread->pop();
 
 	if (!_skipSpeeches) {
 		thread->waitDelay(_vm->ticksToMSec(time)); // put thread to sleep
@@ -274,8 +272,8 @@
 // Script function #2 (0x02)
 void Script::sfTakeObject(SCRIPTFUNC_PARAMS) {
 	uint16 objectId = thread->pop();
-	ObjectData *obj;
-	obj = _vm->_actor->getObj(objectId);
+	ObjectData *obj = _vm->_actor->getObj(objectId);
+
 	if (obj->_sceneNumber != ITE_SCENE_INV) {
 		obj->_sceneNumber = ITE_SCENE_INV;
 
@@ -297,23 +295,20 @@
 void Script::sfIsCarried(SCRIPTFUNC_PARAMS) {
 	uint16 objectId = thread->pop();
 	CommonObjectData *object;
+
 	if (_vm->_actor->validObjId(objectId)) {
 		object = _vm->_actor->getObj(objectId);
 		thread->_returnValue = (object->_sceneNumber == ITE_SCENE_INV) ? 1 : 0;
 	} else {
 		thread->_returnValue = 0;
 	}
-
-
 }
 
 // Script function #4 (0x04) nonblocking
 // Set the command display to the specified text string
 // Param1: dialogue index of string
 void Script::sfStatusBar(SCRIPTFUNC_PARAMS) {
-	int16 stringIndex = thread->pop();
-
-	_vm->_interface->setStatusText(thread->_strings->getString(stringIndex));
+	_vm->_interface->setStatusText(thread->_strings->getString(thread->pop()));
 }
 
 // Script function #5 (0x05)
@@ -353,15 +348,11 @@
 // Param2: actor x
 // Param3: actor y
 void Script::sfScriptWalkTo(SCRIPTFUNC_PARAMS) {
-	uint16 actorId;
+	uint16 actorId = thread->pop();
+	ActorData *actor = _vm->_actor->getActor(actorId);
 	Location actorLocation;
-	ActorData *actor;
-
-	actorId = thread->pop();
 	actorLocation.x = thread->pop();
 	actorLocation.y = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
 	actorLocation.z = actor->_location.z;
 
 	actor->_flags &= ~kFollower;
@@ -377,10 +368,10 @@
 // Param3: theObject
 // Param4: withObject
 void Script::sfScriptDoAction(SCRIPTFUNC_PARAMS) {
-	uint16 objectId;
-	uint16 action;
-	uint16 theObject;
-	uint16 withObject;
+	uint16 objectId = thread->pop();
+	uint16 action = thread->pop();
+	uint16 theObject = thread->pop();
+	uint16 withObject = thread->pop();
 	int16 scriptEntryPointNumber;
 	int16 moduleNumber;
 	ActorData *actor;
@@ -388,11 +379,6 @@
 	const HitZone *hitZone;
 	Event event;
 
-	objectId = thread->pop();
-	action = thread->pop();
-	theObject = thread->pop();
-	withObject = thread->pop();
-
 	switch (objectTypeId(objectId)) {
 		case kGameObjectObject:
 			obj = _vm->_actor->getObj(objectId);
@@ -453,14 +439,9 @@
 // Param1: actor id
 // Param2: actor orientation
 void Script::sfSetActorFacing(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int actorDirection;
-	ActorData *actor;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
+	int actorDirection = thread->pop();
 
-	actorId = thread->pop();
-	actorDirection = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
 	actor->_facingDirection = actor->_actionDirection = actorDirection;
 	actor->_targetObject = ID_NOTHING;
 }
@@ -492,11 +473,7 @@
 // reenabled.
 // Param1: boolean
 void Script::sfLockUser(SCRIPTFUNC_PARAMS) {
-	int16 lock;
-
-	lock = thread->pop();
-
-	if (lock) {
+	if (thread->pop()) {
 		_vm->_interface->deactivate();
 	} else {
 		_vm->_interface->activate();
@@ -509,6 +486,7 @@
 void Script::sfPreDialog(SCRIPTFUNC_PARAMS) {
 	_vm->_interface->deactivate();
 	_vm->_interface->converseClear();
+
 	if (_vm->_interface->isInMainMode())
 		_vm->_interface->setMode(kPanelConverse);
 	else
@@ -521,11 +499,8 @@
 void Script::sfKillActorThreads(SCRIPTFUNC_PARAMS) {
 	ScriptThread *anotherThread;
 	ScriptThreadList::iterator threadIterator;
-	int16 actorId;
+	int16 actorId = thread->pop();
 
-	actorId = thread->pop();
-
-
 	for (threadIterator = _threadList.begin(); threadIterator != _threadList.end(); ++threadIterator) {
 		anotherThread = threadIterator.operator->();
 		if ((anotherThread != thread) && (anotherThread->_threadVars[kThreadVarActor] == actorId)) {
@@ -539,34 +514,21 @@
 // Param1: actor id
 // Param2: object id
 void Script::sfFaceTowards(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int16 targetObject;
-	ActorData *actor;
-
-	actorId = thread->pop();
-	targetObject = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
-	actor->_targetObject = targetObject;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
+	actor->_targetObject = thread->pop();
 }
 
 // Script function #15 (0x0F)
 // Param1: actor id
 // Param2: target object
 void Script::sfSetFollower(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int16 targetObject;
+	int16 actorId = thread->pop();
+	ActorData *actor = _vm->_actor->getActor(actorId);
+	actor->_targetObject = thread->pop();
 
-	ActorData *actor;
+	debug(1, "sfSetFollower(%d, %d) [%d]", actorId, actor->_targetObject, _vm->_actor->actorIdToIndex(actorId));
 
-	actorId = thread->pop();
-	targetObject = thread->pop();
-
-	debug(1, "sfSetFollower(%d, %d) [%d]", actorId, targetObject, _vm->_actor->actorIdToIndex(actorId));
-
-	actor = _vm->_actor->getActor(actorId);
-	actor->_targetObject = targetObject;
-	if (targetObject != ID_NOTHING) {
+	if (actor->_targetObject != ID_NOTHING) {
 		actor->_flags |= kFollower;
 		actor->_actorFlags &= ~kActorNoFollow;
 	} else {
@@ -576,11 +538,9 @@
 
 // Script function #16 (0x10)
 void Script::sfScriptGotoScene(SCRIPTFUNC_PARAMS) {
-	int16 sceneNumber;
-	int16 entrance;
+	int16 sceneNumber = thread->pop();
+	int16 entrance = thread->pop();
 
-	sceneNumber = thread->pop();
-	entrance = thread->pop();
 	if (_vm->getGameType() == GType_IHNM) {
 		_vm->_gfx->setCursor(kCursorBusy);
 	}
@@ -634,14 +594,10 @@
 // Param1: object id
 // Param2: sprite index
 void Script::sfSetObjImage(SCRIPTFUNC_PARAMS) {
-	uint16 objectId;
-	uint16 spriteId;
-	ObjectData *obj;
+	uint16 objectId = thread->pop();
+	uint16 spriteId = thread->pop();
+	ObjectData *obj = _vm->_actor->getObj(objectId);
 
-	objectId = thread->pop();
-	spriteId = thread->pop();
-
-	obj = _vm->_actor->getObj(objectId);
 	if (_vm->getGameType() == GType_IHNM)
 		obj->_spriteListResourceId = spriteId;
 	else
@@ -653,27 +609,19 @@
 // Param1: object id
 // Param2: name index
 void Script::sfSetObjName(SCRIPTFUNC_PARAMS) {
-	uint16 objectId;
-	uint16 nameIdx;
-	ObjectData *obj;
+	uint16 objectId = thread->pop();
+	uint16 nameIdx = thread->pop();
+	ObjectData *obj = _vm->_actor->getObj(objectId);
 
-	objectId = thread->pop();
-	nameIdx = thread->pop();
-
-	obj = _vm->_actor->getObj(objectId);
 	obj->_nameIndex = nameIdx;
 }
 
 // Script function #19 (0x13)
 // Param1: object id
 void Script::sfGetObjImage(SCRIPTFUNC_PARAMS) {
-	uint16 objectId;
-	ObjectData *obj;
+	uint16 objectId = thread->pop();
+	ObjectData *obj = _vm->_actor->getObj(objectId);
 
-	objectId = thread->pop();
-
-	obj = _vm->_actor->getObj(objectId);
-
 	if (_vm->getGameType() == GType_IHNM)
 		thread->_returnValue = obj->_spriteListResourceId;
 	else
@@ -700,8 +648,7 @@
 // Script function #21 (0x15)
 // Param1: door #
 void Script::sfScriptOpenDoor(SCRIPTFUNC_PARAMS) {
-	int16 doorNumber;
-	doorNumber = thread->pop();
+	int16 doorNumber = thread->pop();
 
 	if (_vm->_scene->getFlags() & kSceneFlagISO) {
 		_vm->_isoMap->setTileDoorState(doorNumber, 1);
@@ -713,8 +660,7 @@
 // Script function #22 (0x16)
 // Param1: door #
 void Script::sfScriptCloseDoor(SCRIPTFUNC_PARAMS) {
-	int16 doorNumber;
-	doorNumber = thread->pop();
+	int16 doorNumber = thread->pop();
 
 	if (_vm->_scene->getFlags() & kSceneFlagISO) {
 		_vm->_isoMap->setTileDoorState(doorNumber, 0);
@@ -742,10 +688,7 @@
 // Script function #25 (0x19)
 // Param1: actor id
 void Script::sfDoCenterActor(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	actorId = thread->pop();
-
-	_vm->_actor->_centerActor = _vm->_actor->getActor(actorId);
+	_vm->_actor->_centerActor = _vm->_actor->getActor(thread->pop());
 }
 
 // Script function #26 (0x1A) nonblocking
@@ -767,19 +710,14 @@
 // Param2: actor x
 // Param3: actor y
 void Script::sfScriptWalkToAsync(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
+	int16 actorId = thread->pop();
+	ActorData *actor = _vm->_actor->getActor(actorId);
 	Location actorLocation;
-	ActorData *actor;
-
-	actorId = thread->pop();
 	actorLocation.x = thread->pop();
 	actorLocation.y = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
 	actorLocation.z = actor->_location.z;
 
 	actor->_flags &= ~kFollower;
-
 	_vm->_actor->actorWalkTo(actorId, actorLocation);
 }
 
@@ -811,15 +749,9 @@
 // Param1: actor id
 // Param2: current action
 void Script::sfSetActorState(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int currentAction;
-	ActorData *actor;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
+	int currentAction = thread->pop();
 
-	actorId = thread->pop();
-	currentAction = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
-
 	if ((currentAction >= kActionWalkToPoint) && (currentAction <= kActionWalkToPoint)) {
 		wakeUpActorThread(kWaitTypeWalk, actor);
 	}
@@ -832,15 +764,13 @@
 // Param2: actor pos x
 // Param3: actor pos y
 void Script::sfScriptMoveTo(SCRIPTFUNC_PARAMS) {
-	int16 objectId;
+	int16 objectId = thread->pop();
 	Location location;
+	location.x = thread->pop();
+	location.y = thread->pop();
 	ActorData *actor;
 	ObjectData *obj;
 
-	objectId = thread->pop();
-	location.x = thread->pop();
-	location.y = thread->pop();
-
 	if (_vm->_actor->validActorId(objectId)) {
 		actor = _vm->_actor->getActor(objectId);
 
@@ -868,19 +798,12 @@
 
 // Script function #32 (0x20)
 void Script::sfDropObject(SCRIPTFUNC_PARAMS) {
-	uint16 objectId;
-	uint16 spriteId;
-	int16 x;
-	int16 y;
-	ObjectData *obj;
+	uint16 objectId = thread->pop();
+	uint16 spriteId = thread->pop();
+	int16 x = thread->pop();
+	int16 y = thread->pop();
+	ObjectData *obj = _vm->_actor->getObj(objectId);
 
-	objectId = thread->pop();
-	spriteId = thread->pop();
-	x = thread->pop();
-	y = thread->pop();
-
-	obj = _vm->_actor->getObj(objectId);
-
 	if (obj->_sceneNumber == ITE_SCENE_INV) {
 		_vm->_interface->removeFromInventory(objectId);
 	}
@@ -923,17 +846,11 @@
 // Param1: actor id 1
 // Param2: actor id 2
 void Script::sfSwapActors(SCRIPTFUNC_PARAMS) {
-	int16 actorId1;
-	int16 actorId2;
-	ActorData *actor1;
-	ActorData *actor2;
+	int16 actorId1 = thread->pop();
+	int16 actorId2 = thread->pop();
+	ActorData *actor1 = _vm->_actor->getActor(actorId1);
+	ActorData *actor2 = _vm->_actor->getActor(actorId2);
 
-	actorId1 = thread->pop();
-	actorId2 = thread->pop();
-
-	actor1 = _vm->_actor->getActor(actorId1);
-	actor2 = _vm->_actor->getActor(actorId2);
-
 	SWAP(actor1->_location, actor2->_location);
 
 	if (actor1->_flags & kProtagonist) {
@@ -958,24 +875,19 @@
 ///....
 // Param3: actor idN
 void Script::sfSimulSpeech(SCRIPTFUNC_PARAMS) {
-	int16 stringId;
-	int16 actorsCount;
+	int16 stringId = thread->pop();
+	int16 actorsCount = thread->pop();
 	int i;
 	uint16 actorsIds[ACTOR_SPEECH_ACTORS_MAX];
-	const char *string;
+	const char *string = thread->_strings->getString(stringId);
 	int16 sampleResourceId = -1;
 
-	stringId = thread->pop();
-	actorsCount = thread->pop();
-
 	if (actorsCount > ACTOR_SPEECH_ACTORS_MAX)
 		error("sfSimulSpeech actorsCount=0x%X exceed ACTOR_SPEECH_ACTORS_MAX", actorsCount);
 
 	for (i = 0; i < actorsCount; i++)
 		actorsIds[i] = thread->pop();
 
-	string = thread->_strings->getString(stringId);
-
 	if (thread->_voiceLUT->voices) {
 		if (_vm->getGameType() == GType_IHNM && stringId >= 338) {
 			sampleResourceId = -1;
@@ -996,23 +908,17 @@
 // Param3: actor y
 // Param4: actor walk flag
 void Script::sfScriptWalk(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
+	int16 actorId = thread->pop();
+	ActorData *actor = _vm->_actor->getActor(actorId);
 	Location actorLocation;
-	ActorData *actor;
-	uint16 walkFlags;
-
-	actorId = thread->pop();
 	actorLocation.x = thread->pop();
 	actorLocation.y = thread->pop();
-	walkFlags = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
 	actorLocation.z = actor->_location.z;
+	uint16 walkFlags = thread->pop();
 
+	actor->_flags &= ~kFollower;
 	_vm->_actor->realLocation(actorLocation, ID_NOTHING, walkFlags);
 
-	actor->_flags &= ~kFollower;
-
 	if (_vm->_actor->actorWalkTo(actorId, actorLocation) && !(walkFlags & kWalkAsync)) {
 		thread->waitWalk(actor);
 	}
@@ -1030,19 +936,11 @@
 // Param3: cycle frame number
 // Param4: cycle delay
 void Script::sfCycleFrames(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int16 flags;
-	int cycleFrameSequence;
-	int cycleDelay;
-	ActorData *actor;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
+	int16 flags = thread->pop();
+	int cycleFrameSequence = thread->pop();
+	int cycleDelay = thread->pop();
 
-	actorId = thread->pop();
-	flags = thread->pop();
-	cycleFrameSequence = thread->pop();
-	cycleDelay = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
-
 	if (flags & kCyclePong) {
 		actor->_currentAction = kActionPongFrames;
 	} else {
@@ -1060,8 +958,8 @@
 	if (flags & kCycleReverse) {
 		if (_vm->getGameType() == GType_IHNM && 
 			_vm->_scene->currentChapterNumber() == 2 && _vm->_scene->currentSceneNumber() == 41) {
-			// Prevent Benny from walking backwards after talking to the child via the monitor. This occurs in the
-			// original as well, and is fixed by not setting the kActorBackwards flag at this point
+			// WORKAROUND: Prevent Benny from walking backwards after talking to the child via the monitor. This
+			// occurs in the original as well, and is fixed by not setting the kActorBackwards flag at this point
 		} else {
 			actor->_actorFlags |= kActorBackwards;
 		}
@@ -1078,20 +976,12 @@
 // Param2: frame type
 // Param3: frame offset
 void Script::sfSetFrame(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int frameType;
-	int frameOffset;
-	ActorData *actor;
-	ActorFrameRange *frameRange;
+	int16 actorId = thread->pop();
+	ActorData *actor = _vm->_actor->getActor(actorId);
+	int frameType = thread->pop();
+	int frameOffset = thread->pop();
+	ActorFrameRange *frameRange = _vm->_actor->getActorFrameRange(actorId, frameType);
 
-	actorId = thread->pop();
-	frameType = thread->pop();
-	frameOffset = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
-
-	frameRange = _vm->_actor->getActorFrameRange(actorId, frameType);
-
 	actor->_frameNumber = frameRange->frameIndex + frameOffset;
 
 	if (actor->_currentAction != kActionFall) {
@@ -1102,17 +992,13 @@
 // Script function #39 (0x27)
 // Sets the right-hand portrait
 void Script::sfSetPortrait(SCRIPTFUNC_PARAMS) {
-	int16 param = thread->pop();
-
-	_vm->_interface->setRightPortrait(param);
+	_vm->_interface->setRightPortrait(thread->pop());
 }
 
 // Script function #40 (0x28)
 // Sets the left-hand portrait
 void Script::sfSetProtagPortrait(SCRIPTFUNC_PARAMS) {
-	int16 param = thread->pop();
-
-	_vm->_interface->setLeftPortrait(param);
+	_vm->_interface->setLeftPortrait(thread->pop());
 }
 
 // Script function #41 (0x29) nonblocking
@@ -1144,21 +1030,15 @@
 // Param3: actor y
 // Param4: frame seq
 void Script::sfScriptSpecialWalk(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int16 walkFrameSequence;
+	int16 actorId = thread->pop();
+	ActorData *actor = _vm->_actor->getActor(actorId);
 	Location actorLocation;
-	ActorData *actor;
-
-	actorId = thread->pop();
 	actorLocation.x = thread->pop();
 	actorLocation.y = thread->pop();
-	walkFrameSequence = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
 	actorLocation.z = actor->_location.z;
+	int16 walkFrameSequence = thread->pop();
 
 	_vm->_actor->actorWalkTo(actorId, actorLocation);
-
 	actor->_walkFrameSequence = walkFrameSequence;
 }
 
@@ -1170,27 +1050,18 @@
 // Param5: actor action
 // Param6: actor frame number
 void Script::sfPlaceActor(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	Location actorLocation;
-	int actorDirection;
-	int frameType;
-	int frameOffset;
-	ActorData *actor;
+	int16 actorId = thread->pop();
+	ActorData *actor = _vm->_actor->getActor(actorId);
+	actor->_location.x = thread->pop();
+	actor->_location.y = thread->pop();
+	int actorDirection = thread->pop();
+	int frameType = thread->pop();
+	int frameOffset = thread->pop();
 	ActorFrameRange *frameRange;
 
-	actorId = thread->pop();
-	actorLocation.x = thread->pop();
-	actorLocation.y = thread->pop();
-	actorDirection = thread->pop();
-	frameType = thread->pop();
-	frameOffset = thread->pop();
+	debug(1, "sfPlaceActor(id = 0x%x, x=%d, y=%d, dir=%d, frameType=%d, frameOffset=%d)", actorId, actor->_location.x,
+		  actor->_location.y, actorDirection, frameType, frameOffset);
 
-	debug(1, "sfPlaceActor(id = 0x%x, x=%d, y=%d, dir=%d, frameType=%d, frameOffset=%d)", actorId, actorLocation.x,
-		  actorLocation.y, actorDirection, frameType, frameOffset);
-
-	actor = _vm->_actor->getActor(actorId);
-	actor->_location.x = actorLocation.x;
-	actor->_location.y = actorLocation.y;
 	actor->_facingDirection = actor->_actionDirection = actorDirection;
 
 	if (!actor->_frames)
@@ -1227,25 +1098,18 @@
 // Param4: actor y
 // Param5: actor walk flag
 void Script::sfScriptWalkRelative(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int16 objectId;
-	uint16 walkFlags;
+	int16 actorId = thread->pop();
+	ActorData *actor = _vm->_actor->getActor(actorId);
+	int16 objectId = thread->pop();
 	Location actorLocation;
-	ActorData *actor;
-
-	actorId = thread->pop();
-	objectId = thread->pop();
 	actorLocation.x = thread->pop();
 	actorLocation.y = thread->pop();
-	walkFlags = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
 	actorLocation.z = actor->_location.z;
+	uint16 walkFlags = thread->pop();
 
+	actor->_flags &= ~kFollower;
 	_vm->_actor->realLocation(actorLocation, objectId, walkFlags);
 
-	actor->_flags &= ~kFollower;
-
 	if (_vm->_actor->actorWalkTo(actorId, actorLocation) && !(walkFlags & kWalkAsync)) {
 		thread->waitWalk(actor);
 	}
@@ -1264,50 +1128,36 @@
 // Param4: actor y
 // Param5: actor walk flag
 void Script::sfScriptMoveRelative(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int16 objectId;
-	uint16 walkFlags;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
+	int16 objectId = thread->pop();
 	Location actorLocation;
-	ActorData *actor;
-
-	actorId = thread->pop();
-	objectId = thread->pop();
 	actorLocation.x = thread->pop();
 	actorLocation.y = thread->pop();
-	walkFlags = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
 	actorLocation.z = actor->_location.z;
+	uint16 walkFlags = thread->pop();
 
 	_vm->_actor->realLocation(actorLocation, objectId, walkFlags);
 
-
 	actor->_location = actorLocation;
 	actor->_actorFlags = (actor->_actorFlags & ~kActorFacingMask) | (walkFlags & kActorFacingMask);
 }
 
 // Script function #47 (0x2F)
 void Script::sfSimulSpeech2(SCRIPTFUNC_PARAMS) {
-	int16 stringId;
-	int16 actorsCount;
-	int16 speechFlags;
+	int16 stringId = thread->pop();
+	const char *string = thread->_strings->getString(stringId);
+	int16 actorsCount = thread->pop();
+	int16 speechFlags = thread->pop();
 	int i;
 	uint16 actorsIds[ACTOR_SPEECH_ACTORS_MAX];
-	const char *string;
 	int16 sampleResourceId = -1;
 
-	stringId = thread->pop();
-	actorsCount = thread->pop();
-	speechFlags = thread->pop();
-
 	if (actorsCount > ACTOR_SPEECH_ACTORS_MAX)
 		error("sfSimulSpeech2 actorsCount=0x%X exceed ACTOR_SPEECH_ACTORS_MAX", actorsCount);
 
 	for (i = 0; i < actorsCount; i++)
 		actorsIds[i] = thread->pop();
 
-	string = thread->_strings->getString(stringId);
-
 	if (thread->_voiceLUT->voices) {
 		sampleResourceId = thread->_voiceLUT->voices[stringId];
 		if (sampleResourceId <= 0 || sampleResourceId > 4000)
@@ -1322,7 +1172,7 @@
 // Script function #48 (0x30)
 // Param1: string rid
 void Script::sfPlacard(SCRIPTFUNC_PARAMS) {
-	int stringId;
+	int stringId = thread->pop();
 	Surface *backBuffer = _vm->_gfx->getBackBuffer();
 	static PalEntry cur_pal[PAL_ENTRIES];
 	PalEntry *pal;
@@ -1334,8 +1184,6 @@
 	_vm->_interface->rememberMode();
 	_vm->_interface->setMode(kPanelPlacard);
 
-	stringId = thread->pop();
-
 	event.type = kEvTOneshot;
 	event.code = kCursorEvent;
 	event.op = kEventHide;
@@ -1433,8 +1281,7 @@
 void Script::sfPsychicProfile(SCRIPTFUNC_PARAMS) {
 	thread->wait(kWaitTypePlacard);
 
-	int stringId = thread->pop();
-	_vm->_scene->showPsychicProfile(thread->_strings->getString(stringId));
+	_vm->_scene->showPsychicProfile(thread->_strings->getString(thread->pop()));
 }
 
 void Script::sfPsychicProfileOff(SCRIPTFUNC_PARAMS) {
@@ -1447,9 +1294,7 @@
 
 // Script function #50 (0x32)
 void Script::sfSetProtagState(SCRIPTFUNC_PARAMS) {
-	int protagState = thread->pop();
-
-	_vm->_actor->setProtagState(protagState);
+	_vm->_actor->setProtagState(thread->pop());
 }
 
 // Script function #51 (0x33)
@@ -1470,26 +1315,20 @@
 // Param5: actionCycle
 // Param6: flags
 void Script::sfThrowActor(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	ActorData *actor;
-	int16 flags;
-	int32 actionCycle;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
 	Location location;
-
-	actorId = thread->pop();
 	location.x = thread->pop();
 	location.y = thread->pop();
-	thread->pop();
-	actionCycle = thread->pop();
-	flags = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
 	location.z = actor->_location.z;
+	thread->pop();	// not used
+	int32 actionCycle = thread->pop();
+	int16 flags = thread->pop();
+
 	actor->_currentAction = kActionFall;
 	actor->_actionCycle = actionCycle;
 	actor->_fallAcceleration	= -20;
 	actor->_fallVelocity = - (actor->_fallAcceleration * actor->_actionCycle) / 2;
-	actor->_fallPosition	= actor->_location.z << 4;
+	actor->_fallPosition = actor->_location.z << 4;
 
 	actor->_finalTarget = location;
 	actor->_actionCycle--;
@@ -1502,12 +1341,8 @@
 // Param1: actor id
 // Param2: target object
 void Script::sfWaitWalk(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	ActorData *actor;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
 
-	actorId = thread->pop();
-	actor = _vm->_actor->getActor(actorId);
-
 	if ((actor->_currentAction == kActionWalkToPoint) ||
 		(actor->_currentAction == kActionWalkToLink) ||
 		(actor->_currentAction == kActionFall)) {
@@ -1524,13 +1359,9 @@
 // Param1: actor id
 // Param2: scene number
 void Script::sfChangeActorScene(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int32 sceneNumber;
-	ActorData *actor;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
+	int32 sceneNumber = thread->pop();
 
-	actorId = thread->pop();
-	sceneNumber = thread->pop();
-	actor = _vm->_actor->getActor(actorId);
 	actor->_sceneNumber = sceneNumber;
 }
 
@@ -1540,19 +1371,11 @@
 // Param3: frame seq
 // Param4: flags
 void Script::sfScriptClimb(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	int16 z;
-	ActorData *actor;
-	uint16 flags;
-	int cycleFrameSequence;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
+	actor->_finalTarget.z = thread->pop();
+	int cycleFrameSequence = thread->pop();
+	uint16 flags = thread->pop();
 
-	actorId = thread->pop();
-	z = thread->pop();
-	cycleFrameSequence = thread->pop();
-	flags = thread->pop();
-
-	actor = _vm->_actor->getActor(actorId);
-	actor->_finalTarget.z = z;
 	actor->_flags &= ~kFollower;
 	actor->_actionCycle = 1;
 	actor->_cycleFrameSequence = cycleFrameSequence;
@@ -1566,10 +1389,8 @@
 // Param1: door #
 // Param2: door state
 void Script::sfSetDoorState(SCRIPTFUNC_PARAMS) {
-	int16 doorNumber;
-	int16 doorState;
-	doorNumber = thread->pop();
-	doorState = thread->pop();
+	int16 doorNumber = thread->pop();
+	int16 doorState = thread->pop();
 
 	if (_vm->_scene->getFlags() & kSceneFlagISO) {
 		_vm->_isoMap->setTileDoorState(doorNumber, doorState);
@@ -1582,15 +1403,11 @@
 // Param1: actor id
 // Param2: z
 void Script::sfSetActorZ(SCRIPTFUNC_PARAMS) {
-	int16 objectId;
+	int16 objectId = thread->pop();
+	int16 z = thread->pop();
 	ActorData *actor;
 	ObjectData *obj;
-	int16 z;
 
-	objectId = thread->pop();
-	z = thread->pop();
-
-
 	if (_vm->_actor->validActorId(objectId)) {
 		actor = _vm->_actor->getActor(objectId);
 		actor->_location.z = z;
@@ -1609,22 +1426,15 @@
 // Param4: x
 // Param5: y
 void Script::sfScriptText(SCRIPTFUNC_PARAMS) {
-	int16 stringId;
-	int16 flags;
-	Rect rect;
-	int color;
+	const char *text = thread->_strings->getString(thread->pop());
+	int16 flags = thread->pop();
+	int color = thread->pop();
 	Point point;
-	int width;
-	const char*text;
-	stringId = thread->pop();
-	flags = thread->pop();
-	color = thread->pop();
 	point.x = thread->pop();
 	point.y = thread->pop();
+	Rect rect;
+	int width = _vm->_font->getStringWidth(kKnownFontScript, text, 0, kFontOutline);
 
-	text = thread->_strings->getString(stringId);
-
-	width = _vm->_font->getStringWidth(kKnownFontScript, text, 0, kFontOutline);
 	rect.top = point.y - 6;
 	rect.setHeight(12);
 	rect.left = point.x - width / 2;
@@ -1637,35 +1447,25 @@
 // Script function #60 (0x3C)
 // Param1: actor id
 void Script::sfGetActorX(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	ActorData *actor;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
 
-	actorId = thread->pop();
-	actor = _vm->_actor->getActor(actorId);
-
 	thread->_returnValue = actor->_location.x >> 2;
 }
 
 // Script function #61 (0x3D)
 // Param1: actor id
 void Script::sfGetActorY(SCRIPTFUNC_PARAMS) {
-	int16 actorId;
-	ActorData *actor;
+	ActorData *actor = _vm->_actor->getActor(thread->pop());
 
-	actorId = thread->pop();
-	actor = _vm->_actor->getActor(actorId);
-
 	thread->_returnValue = actor->_location.y >> 2;
 }
 
 // Script function #62 (0x3E)
 void Script::sfEraseDelta(SCRIPTFUNC_PARAMS) {
-	Surface *backGroundSurface;
+	Surface *backGroundSurface = _vm->_render->getBackGroundSurface();
 	BGInfo backGroundInfo;
 
-	backGroundSurface = _vm->_render->getBackGroundSurface();
 	_vm->_scene->getBGInfo(backGroundInfo);
-
 	backGroundSurface->blit(backGroundInfo.bounds, backGroundInfo.buffer);
 }
 
@@ -1726,12 +1526,11 @@
 
 // Script function #65 (0x41)
 void Script::sfTossRif(SCRIPTFUNC_PARAMS) {
-	int16 uc , vc;
 	uint16 direction;
 	ActorData *protagonist = _vm->_actor->_protagonist;
+	int16 uc = protagonist->_location.u() >> 4;
+	int16 vc = protagonist->_location.v() >> 4;
 
-	uc = protagonist->_location.u() >> 4;
-	vc = protagonist->_location.v() >> 4;
 	if (_vm->_isoMap->findNearestChasm(uc, vc, direction)) {
 		uc <<= 4;
 		vc <<= 4;
@@ -1807,10 +1606,9 @@
 }
 
 // Script function #72 (0x48)
+// Param1: animation id
 void Script::sfGetDeltaFrame(SCRIPTFUNC_PARAMS) {
-	uint16 animId = (uint16)thread->pop();
-
-	thread->_returnValue = _vm->_anim->getCurrentFrame(animId);
+	thread->_returnValue = _vm->_anim->getCurrentFrame((uint16)thread->pop());
 }
 
 // Script function #73 (0x49)
@@ -1827,10 +1625,8 @@
 	if (_vm->_copyProtection) {
 		thread->_returnValue = _vm->_interface->getProtectHash();
 	} else {
-		int protectHash;
-
 		//cheating
-		protectHash = thread->pop();
+		int protectHash = thread->pop();
 		thread->push(protectHash);
 		thread->_returnValue = protectHash;
 	}
@@ -1838,10 +1634,7 @@
 
 // Script function #75 (0x4b)
 void Script::sfRand(SCRIPTFUNC_PARAMS) {
-	int16 param;
-
-	param = thread->pop();
-	thread->_returnValue = _vm->_rnd.getRandomNumber(param - 1);
+	thread->_returnValue = _vm->_rnd.getRandomNumber(thread->pop() - 1);
 }
 
 // Script function #76 (0x4c)
@@ -1853,7 +1646,6 @@
 void Script::sfPlayVoice(SCRIPTFUNC_PARAMS) {
 	int16 param = thread->pop();
 
-	warning("sfPlayVoice(%d)", param);
 	if (param > 0) {
 		_vm->_sndRes->playVoice(param + 3712);
 	} else {
@@ -1895,13 +1687,12 @@
 }
 
 void Script::sfSetChapterPoints(SCRIPTFUNC_PARAMS) {
-	int16 ethics = thread->pop();
-	int16 barometer = thread->pop();
 	int chapter = _vm->_scene->currentChapterNumber();
+	_vm->_ethicsPoints[chapter] = thread->pop();
+	int16 barometer = thread->pop();
 	static PalEntry cur_pal[PAL_ENTRIES];
 
-	_vm->_ethicsPoints[chapter] = ethics;
-	_vm->_spiritualBarometer = ethics * 256 / barometer;
+	_vm->_spiritualBarometer = _vm->_ethicsPoints[chapter] * 256 / barometer;
 	_vm->_scene->setChapterPointsChanged(true);		// don't save this music when saving in IHNM
 
 	if (_vm->_spiritualBarometer > 255)
@@ -1925,12 +1716,9 @@
 }
 
 void Script::sfScriptStartCutAway(SCRIPTFUNC_PARAMS) {
-	int16 cut;
-	int16 fade;
-
-	cut = thread->pop();
+	int16 cut = thread->pop();
 	thread->pop();		// Not used
-	fade = thread->pop();
+	int16 fade = thread->pop();
 
 	_vm->_anim->setCutAwayMode(kPanelCutaway);	
 	_vm->_anim->playCutaway(cut, fade != 0);
@@ -1956,8 +1744,7 @@
 // Used in IHNM only
 // Param1: frames
 void Script::sfWaitFrames(SCRIPTFUNC_PARAMS) {
-	int16 frames;
-	frames = thread->pop();
+	int16 frames = thread->pop();
 
 	if (!_skipSpeeches)
 		thread->waitFrames(_vm->_frameCount + frames);
@@ -1988,10 +1775,8 @@
 }
 
 void Script::sfScriptStartVideo(SCRIPTFUNC_PARAMS) {
-	int16 vid;
-	int16 fade;
-	vid = thread->pop();
-	fade = thread->pop();
+	int16 vid = thread->pop();
+	int16 fade = thread->pop();
 
 	_vm->_anim->setCutAwayMode(kPanelVideo);
 	_vm->_anim->startVideo(vid, fade != 0);
@@ -2013,14 +1798,11 @@
 }
 
 void Script::sfAddIHNMDemoHelpTextLine(SCRIPTFUNC_PARAMS) {
-	int stringId, textHeight;
+	int stringId = thread->pop();
+	int textHeight = _vm->_font->getHeight(kKnownFontVerb, thread->_strings->getString(stringId), 226, kFontCentered);
 	TextListEntry textEntry;
 	Event event;
 
-	stringId = thread->pop();
-
-	textHeight = _vm->_font->getHeight(kKnownFontVerb, thread->_strings->getString(stringId), 226, kFontCentered);
-
 	textEntry.knownColor = kKnownColorBlack;
 	textEntry.useRect = true;
 	textEntry.rect.left = 245;
@@ -2059,9 +1841,7 @@
 }
 
 void Script::sfDemoSetInteractive(SCRIPTFUNC_PARAMS) {
-	int16 interactiveFlag = thread->pop();
-
-	if (interactiveFlag == 0) {
+	if (thread->pop() == 0) {
 		_vm->_interface->deactivate();
 		_vm->_interface->setMode(kPanelNull);
 	}
@@ -2187,9 +1967,7 @@
 }
 
 void Script::sfDisableAbortSpeeches(SCRIPTFUNC_PARAMS) {
-	int value = thread->pop();
-
-	_vm->_interface->disableAbortSpeeches(value != 0);
+	_vm->_interface->disableAbortSpeeches(thread->pop() != 0);
 }
 
 void Script::sfNull(SCRIPTFUNC_PARAMS) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list