[Scummvm-git-logs] scummvm master -> e761fe91187842b5bfc9979d608a4f62a4d3d261

mgerhardy martin.gerhardy at gmail.com
Thu Nov 19 18:30:12 UTC 2020


This automated email contains information about 9 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
8eb377226d TWINE: endless loops for samples is -1 - but we are expecting 0
ff86acbd03 TWINE: renamed method parameter
b2d14d50cf TWINE: move script comments
d19ad32bb7 TWINE: brk file comments
f6d9a81d7f TWINE: move script fix
47405a5e61 TWINE: fixed missing read of kFollow2 actor idx
89c02f349a TWINE: implemented mPLAY_FLA move script
b3a1882eb2 TWINE: added new animation id constants
e761fe9118 TWINE: fixed off-by-one error in mANGLE_RND


Commit: 8eb377226d3f349e7a987d54d6afbb89fc1be4d1
    https://github.com/scummvm/scummvm/commit/8eb377226d3f349e7a987d54d6afbb89fc1be4d1
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-19T18:35:27+01:00

Commit Message:
TWINE: endless loops for samples is -1 - but we are expecting 0

Changed paths:
    engines/twine/sound.cpp


diff --git a/engines/twine/sound.cpp b/engines/twine/sound.cpp
index 855af41ed3..aabe80a54d 100644
--- a/engines/twine/sound.cpp
+++ b/engines/twine/sound.cpp
@@ -137,6 +137,9 @@ bool Sound::playSample(int channelIdx, int index, uint8 *sampPtr, int32 sampSize
 		delete stream;
 		return false;
 	}
+	if (loop == -1) {
+		loop = 0;
+	}
 	_engine->_system->getMixer()->playStream(soundType, &samplesPlaying[channelIdx], Audio::makeLoopingAudioStream(audioStream, loop), index);
 	return true;
 }


Commit: ff86acbd03a561e0e29f51a1a88860a34a99a359
    https://github.com/scummvm/scummvm/commit/ff86acbd03a561e0e29f51a1a88860a34a99a359
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-19T18:35:27+01:00

Commit Message:
TWINE: renamed method parameter

Changed paths:
    engines/twine/actor.cpp
    engines/twine/extra.cpp
    engines/twine/extra.h


diff --git a/engines/twine/actor.cpp b/engines/twine/actor.cpp
index f605a5d9cf..d08ae1a3d5 100644
--- a/engines/twine/actor.cpp
+++ b/engines/twine/actor.cpp
@@ -486,12 +486,12 @@ void Actor::processActorExtraBonus(int32 actorIdx) { // GiveExtraBonus
 	if (actor->dynamicFlags.bIsDead) {
 		_engine->_extra->addExtraBonus(actor->x, actor->y, actor->z, 0x100, 0, bonusSprite, actor->bonusAmount);
 		// FIXME add constant for sample index
-		_engine->_sound->playSample(Samples::ItemPopup, 0x1000, 1, actor->x, actor->y, actor->z, actorIdx);
+		_engine->_sound->playSample(Samples::ItemPopup, 4096, 1, actor->x, actor->y, actor->z, actorIdx);
 	} else {
 		const int32 angle = _engine->_movements->getAngleAndSetTargetActorDistance(actor->x, actor->z, _engine->_scene->sceneHero->x, _engine->_scene->sceneHero->z);
 		_engine->_extra->addExtraBonus(actor->x, actor->y + actor->boudingBox.y.topRight, actor->z, 200, angle, bonusSprite, actor->bonusAmount);
 		// FIXME add constant for sample index
-		_engine->_sound->playSample(Samples::ItemPopup, 0x1000, 1, actor->x, actor->y + actor->boudingBox.y.topRight, actor->z, actorIdx);
+		_engine->_sound->playSample(Samples::ItemPopup, 4096, 1, actor->x, actor->y + actor->boudingBox.y.topRight, actor->z, actorIdx);
 	}
 }
 
diff --git a/engines/twine/extra.cpp b/engines/twine/extra.cpp
index abc3d23aec..6b5e940b92 100644
--- a/engines/twine/extra.cpp
+++ b/engines/twine/extra.cpp
@@ -158,7 +158,7 @@ void Extra::resetExtras() {
 	}
 }
 
-void Extra::throwExtra(ExtraListStruct *extra, int32 var1, int32 var2, int32 var3, int32 var4) { // InitFly
+void Extra::throwExtra(ExtraListStruct *extra, int32 var1, int32 angle, int32 var3, int32 var4) { // InitFly
 	extra->type |= 2;
 
 	extra->lastX = extra->x;
@@ -169,7 +169,7 @@ void Extra::throwExtra(ExtraListStruct *extra, int32 var1, int32 var2, int32 var
 
 	extra->destY = -_engine->_renderer->destZ;
 
-	_engine->_movements->rotateActor(0, _engine->_renderer->destX, var2);
+	_engine->_movements->rotateActor(0, _engine->_renderer->destX, angle);
 
 	extra->destX = _engine->_renderer->destX;
 	extra->destZ = _engine->_renderer->destZ;
@@ -283,7 +283,7 @@ int32 Extra::addExtraBonus(int32 x, int32 y, int32 z, int32 param, int32 angle,
 	return -1;
 }
 
-int32 Extra::addExtraThrow(int32 actorIdx, int32 x, int32 y, int32 z, int32 spriteIdx, int32 var2, int32 var3, int32 var4, int32 var5, int32 strengthOfHit) { // ThrowExtra
+int32 Extra::addExtraThrow(int32 actorIdx, int32 x, int32 y, int32 z, int32 spriteIdx, int32 var2, int32 angle, int32 var4, int32 var5, int32 strengthOfHit) { // ThrowExtra
 	for (int32 i = 0; i < EXTRA_MAX_ENTRIES; i++) {
 		ExtraListStruct *extra = &extraList[i];
 		if (extra->info0 != -1) {
@@ -296,7 +296,7 @@ int32 Extra::addExtraThrow(int32 actorIdx, int32 x, int32 y, int32 z, int32 spri
 		extra->z = z;
 
 		// same as InitFly
-		throwExtra(extra, var2, var3, var4, var5);
+		throwExtra(extra, var2, angle, var4, var5);
 
 		extra->strengthOfHit = strengthOfHit;
 		extra->lifeTime = _engine->lbaTime;
diff --git a/engines/twine/extra.h b/engines/twine/extra.h
index 1c4634ab15..8d0023de76 100644
--- a/engines/twine/extra.h
+++ b/engines/twine/extra.h
@@ -59,7 +59,7 @@ class Extra {
 private:
 	TwinEEngine *_engine;
 
-	void throwExtra(ExtraListStruct *extra, int32 var1, int32 var2, int32 var3, int32 var4);
+	void throwExtra(ExtraListStruct *extra, int32 var1, int32 angle, int32 var3, int32 var4);
 	void processMagicballBounce(ExtraListStruct *extra, int32 x, int32 y, int32 z);
 	int32 findExtraKey();
 	int32 addExtraAimingAtKey(int32 actorIdx, int32 x, int32 y, int32 z, int32 spriteIdx, int32 extraIdx);
@@ -84,7 +84,7 @@ public:
 
 	void addExtraSpecial(int32 x, int32 y, int32 z, ExtraSpecialType type);
 	int32 addExtraBonus(int32 x, int32 y, int32 z, int32 param, int32 angle, int32 type, int32 bonusAmount);
-	int32 addExtraThrow(int32 actorIdx, int32 x, int32 y, int32 z, int32 spriteIdx, int32 var2, int32 var3, int32 var4, int32 var5, int32 strengthOfHit);
+	int32 addExtraThrow(int32 actorIdx, int32 x, int32 y, int32 z, int32 spriteIdx, int32 var2, int32 angle, int32 var4, int32 var5, int32 strengthOfHit);
 	int32 addExtraAiming(int32 actorIdx, int32 x, int32 y, int32 z, int32 spriteIdx, int32 targetActorIdx, int32 maxSpeed, int32 strengthOfHit);
 	void addExtraThrowMagicball(int32 x, int32 y, int32 z, int32 param1, int32 angle, int32 param2, int32 param3);
 


Commit: b2d14d50cf735e467f533c0e19e96b5980f6b43b
    https://github.com/scummvm/scummvm/commit/b2d14d50cf735e467f533c0e19e96b5980f6b43b
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-19T18:35:27+01:00

Commit Message:
TWINE: move script comments

Changed paths:
    engines/twine/script_move_v1.cpp


diff --git a/engines/twine/script_move_v1.cpp b/engines/twine/script_move_v1.cpp
index f42e6866d1..527d04da4b 100644
--- a/engines/twine/script_move_v1.cpp
+++ b/engines/twine/script_move_v1.cpp
@@ -133,7 +133,7 @@ static int32 mWAIT_ANIM(TwinEEngine *engine, MoveScriptContext &ctx) {
 
 /*0x06*/
 static int32 mLOOP(TwinEEngine *engine, MoveScriptContext &ctx) {
-	// TODO
+	// TODO no params
 	return -1;
 }
 
@@ -454,7 +454,7 @@ static int32 mSAMPLE_STOP(TwinEEngine *engine, MoveScriptContext &ctx) {
 
 /*0x1E*/
 static int32 mPLAY_FLA(TwinEEngine *engine, MoveScriptContext &ctx) {
-	// TODO
+	// TODO param1: null-terminated string - name of the fla file to play (extension may be included, but it's not required)
 	return -1;
 }
 


Commit: d19ad32bb78f451f098d92f36f7478a065df441f
    https://github.com/scummvm/scummvm/commit/d19ad32bb78f451f098d92f36f7478a065df441f
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-19T18:35:27+01:00

Commit Message:
TWINE: brk file comments

Changed paths:
    engines/twine/resources.h


diff --git a/engines/twine/resources.h b/engines/twine/resources.h
index 15e70b0098..3e60ea9e95 100644
--- a/engines/twine/resources.h
+++ b/engines/twine/resources.h
@@ -205,6 +205,7 @@ public:
 	 * isometric bricks, which are some kind of tiles, that are used for building the terrains in LBA 1 isometric scenes.
 	 * One brick is the tiniest piece of a grid, which has 64 x 64 x 25 cells. Bricks cannot be used directly on a grid,
 	 * but instead they are grouped into blocks by block libraries, which are then referenced by grids
+	 * Bricks are images or sprites in a special format.
 	 */
 	static constexpr const char *HQR_LBA_BRK_FILE = "lba_brk.hqr";
 	// scenes (active area content (actors, scripts, etc.))


Commit: f6d9a81d7ff3f77ad87170466d21e35d1bace14f
    https://github.com/scummvm/scummvm/commit/f6d9a81d7ff3f77ad87170466d21e35d1bace14f
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-19T18:35:27+01:00

Commit Message:
TWINE: move script fix

Changed paths:
    engines/twine/script_move_v1.cpp


diff --git a/engines/twine/script_move_v1.cpp b/engines/twine/script_move_v1.cpp
index 527d04da4b..8b0d387320 100644
--- a/engines/twine/script_move_v1.cpp
+++ b/engines/twine/script_move_v1.cpp
@@ -184,7 +184,12 @@ static int32 mLABEL(TwinEEngine *engine, MoveScriptContext &ctx) {
 
 /*0x0A*/
 static int32 mGOTO(TwinEEngine *engine, MoveScriptContext &ctx) {
-	ctx.stream.seek(ctx.stream.readSint16LE());
+	const int16 pos = ctx.stream.readSint16LE();
+	if (pos == -1) {
+		ctx.actor->positionInMoveScript = -1;
+		return 1;
+	}
+	ctx.stream.seek(pos);
 	return 0;
 }
 


Commit: 47405a5e61c60f293488a35e38f20a80f564537f
    https://github.com/scummvm/scummvm/commit/47405a5e61c60f293488a35e38f20a80f564537f
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-19T18:35:27+01:00

Commit Message:
TWINE: fixed missing read of kFollow2 actor idx

Changed paths:
    engines/twine/script_life_v1.cpp


diff --git a/engines/twine/script_life_v1.cpp b/engines/twine/script_life_v1.cpp
index 9ba2b038be..502d94cee7 100644
--- a/engines/twine/script_life_v1.cpp
+++ b/engines/twine/script_life_v1.cpp
@@ -470,7 +470,7 @@ static int32 lNO_IF(TwinEEngine *engine, LifeScriptContext &ctx) {
 
 /*0x0A*/
 static int32 lLABEL(TwinEEngine *engine, LifeScriptContext &ctx) {
-	ctx.stream.skip(1);
+	ctx.stream.skip(1); // label id
 	return 0;
 }
 
@@ -608,7 +608,7 @@ static int32 lSET_DIRMODE(TwinEEngine *engine, LifeScriptContext &ctx) {
 	const int32 controlMode = ctx.stream.readByte();
 
 	ctx.actor->controlMode = (ControlMode)controlMode;
-	if (ctx.actor->controlMode == ControlMode::kFollow) {
+	if (ctx.actor->controlMode == ControlMode::kFollow || ctx.actor->controlMode == ControlMode::kFollow2) {
 		ctx.actor->followedActor = ctx.stream.readByte();
 	}
 
@@ -622,7 +622,7 @@ static int32 lSET_DIRMODE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
 
 	ActorStruct *otherActor = engine->_scene->getActor(otherActorIdx);
 	otherActor->controlMode = (ControlMode)controlMode;
-	if (otherActor->controlMode == ControlMode::kFollow) {
+	if (otherActor->controlMode == ControlMode::kFollow || ctx.actor->controlMode == ControlMode::kFollow2) {
 		otherActor->followedActor = ctx.stream.readByte();
 	}
 


Commit: 89c02f349aabf5789e5d046c504df6ed75bf8d4f
    https://github.com/scummvm/scummvm/commit/89c02f349aabf5789e5d046c504df6ed75bf8d4f
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-19T18:35:27+01:00

Commit Message:
TWINE: implemented mPLAY_FLA move script

Changed paths:
    engines/twine/script_life_v1.cpp
    engines/twine/script_move_v1.cpp


diff --git a/engines/twine/script_life_v1.cpp b/engines/twine/script_life_v1.cpp
index 502d94cee7..e4d922bf7f 100644
--- a/engines/twine/script_life_v1.cpp
+++ b/engines/twine/script_life_v1.cpp
@@ -1007,10 +1007,11 @@ static int32 lSUB_LIFE_POINT_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
 	int32 otherActorIdx = ctx.stream.readByte();
 	static int32 lifeValue = ctx.stream.readByte();
 
-	engine->_scene->getActor(otherActorIdx)->life -= lifeValue;
+	ActorStruct *otherActor = engine->_scene->getActor(otherActorIdx);
+	otherActor->life -= lifeValue;
 
-	if (engine->_scene->getActor(otherActorIdx)->life < 0) {
-		engine->_scene->getActor(otherActorIdx)->life = 0;
+	if (otherActor->life < 0) {
+		otherActor->life = 0;
 	}
 
 	return 0;
diff --git a/engines/twine/script_move_v1.cpp b/engines/twine/script_move_v1.cpp
index 8b0d387320..68b66a2dd1 100644
--- a/engines/twine/script_move_v1.cpp
+++ b/engines/twine/script_move_v1.cpp
@@ -25,10 +25,12 @@
 #include "common/util.h"
 #include "twine/actor.h"
 #include "twine/animations.h"
+#include "twine/flamovies.h"
 #include "twine/movements.h"
 #include "twine/redraw.h"
 #include "twine/renderer.h"
 #include "twine/scene.h"
+#include "twine/screens.h"
 #include "common/memstream.h"
 #include "twine/sound.h"
 #include "twine/twine.h"
@@ -459,8 +461,24 @@ static int32 mSAMPLE_STOP(TwinEEngine *engine, MoveScriptContext &ctx) {
 
 /*0x1E*/
 static int32 mPLAY_FLA(TwinEEngine *engine, MoveScriptContext &ctx) {
-	// TODO param1: null-terminated string - name of the fla file to play (extension may be included, but it's not required)
-	return -1;
+	int strIdx = 0;
+	char movie[64];
+	do {
+		const byte c = ctx.stream.readByte();
+		movie[strIdx++] = c;
+		if (c == '\0') {
+			break;
+		}
+		if (strIdx >= ARRAYSIZE(movie)) {
+			error("Max string size exceeded for fla name");
+		}
+	} while (true);
+
+	engine->_flaMovies->playFlaMovie(movie);
+	engine->setPalette(engine->_screens->paletteRGBA);
+	engine->_screens->clearScreen();
+	engine->flip();
+	return 0;
 }
 
 /*0x1F*/


Commit: b3a1882eb2d844cce2b5296db6e6594d5d6a9a3c
    https://github.com/scummvm/scummvm/commit/b3a1882eb2d844cce2b5296db6e6594d5d6a9a3c
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-19T18:35:28+01:00

Commit Message:
TWINE: added new animation id constants

Changed paths:
    engines/twine/shared.h


diff --git a/engines/twine/shared.h b/engines/twine/shared.h
index 6906cd90e1..e892e0ed8a 100644
--- a/engines/twine/shared.h
+++ b/engines/twine/shared.h
@@ -85,7 +85,11 @@ enum class AnimationTypes {
 	kHit2 = 22,
 	kSabreAttack = 23,
 	kSabreUnknown = 24,
-
+	kCarStarting = 303,
+	kCarDriving = 304,
+	kCarDrivingBackwards = 305,
+	kCarStopping = 306,
+	kCarFrozen = 307,
 	kAnimInvalid = 255
 };
 


Commit: e761fe91187842b5bfc9979d608a4f62a4d3d261
    https://github.com/scummvm/scummvm/commit/e761fe91187842b5bfc9979d608a4f62a4d3d261
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-19T19:09:18+01:00

Commit Message:
TWINE: fixed off-by-one error in mANGLE_RND

Changed paths:
    engines/twine/script_move_v1.cpp


diff --git a/engines/twine/script_move_v1.cpp b/engines/twine/script_move_v1.cpp
index 68b66a2dd1..62e532debf 100644
--- a/engines/twine/script_move_v1.cpp
+++ b/engines/twine/script_move_v1.cpp
@@ -250,7 +250,7 @@ static int32 mWAIT_NUM_ANIM(TwinEEngine *engine, MoveScriptContext &ctx) {
 		ctx.undo(2);
 	}
 
-	return abortMove;
+	return abortMove ? 1 : 0;
 }
 
 /*0x0E*/
@@ -546,7 +546,7 @@ static int32 mANGLE_RND(TwinEEngine *engine, MoveScriptContext &ctx) {
 	}
 
 	if (ctx.actor->angle != engine->_scene->currentScriptValue) {
-		ctx.stream.rewind(4);
+		ctx.undo(4);
 		return 1;
 	}
 	engine->_movements->clearRealAngle(ctx.actor);
@@ -614,10 +614,10 @@ void ScriptMove::processMoveScript(int32 actorIdx) {
 		if (end < 0) {
 			warning("Actor %d Life script [%s] not implemented", actorIdx, function_map[scriptOpcode].name);
 		}
+		if (ctx.actor->positionInMoveScript != -1) {
+			actor->positionInMoveScript = ctx.stream.pos();
+		}
 	} while (end != 1);
-	if (ctx.actor->positionInMoveScript != -1) {
-		actor->positionInMoveScript = ctx.stream.pos();
-	}
 }
 
 } // namespace TwinE




More information about the Scummvm-git-logs mailing list