[Scummvm-git-logs] scummvm master -> 2a707b3dc9baee60bf44b632193d2135cb7f0099
mgerhardy
noreply at scummvm.org
Tue Jun 14 18:54:13 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
2a707b3dc9 TWINE: synced lerp methods with the original source
Commit: 2a707b3dc9baee60bf44b632193d2135cb7f0099
https://github.com/scummvm/scummvm/commit/2a707b3dc9baee60bf44b632193d2135cb7f0099
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2022-06-14T20:53:52+02:00
Commit Message:
TWINE: synced lerp methods with the original source
Changed paths:
engines/twine/audio/sound.cpp
engines/twine/holomap.cpp
engines/twine/renderer/redraw.cpp
engines/twine/renderer/screens.cpp
engines/twine/scene/collision.cpp
engines/twine/scene/collision.h
engines/twine/scene/extra.cpp
engines/twine/scene/gamestate.cpp
engines/twine/script/script_life_v1.cpp
diff --git a/engines/twine/audio/sound.cpp b/engines/twine/audio/sound.cpp
index bdea8884f85..241314c5f51 100644
--- a/engines/twine/audio/sound.cpp
+++ b/engines/twine/audio/sound.cpp
@@ -54,7 +54,7 @@ void Sound::setSamplePosition(int32 channelIdx, int32 x, int32 y, int32 z) {
const int32 camY = _engine->_grid->_newCamera.y * SIZE_BRICK_Y;
const int32 camZ = _engine->_grid->_newCamera.z * SIZE_BRICK_XZ;
int32 distance = getDistance3D(camX, camY, camZ, x, y, z);
- distance = _engine->_collision->getAverageValue(0, distance, 10000, 255);
+ distance = _engine->_collision->clampedLerp(0, distance, 10000, 255);
const byte targetVolume = CLIP<byte>(255 - distance, 0, 255);
_engine->_system->getMixer()->setChannelVolume(samplesPlaying[channelIdx], targetVolume);
}
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index b331c337565..c5284443840 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -595,8 +595,8 @@ void Holomap::processHolomap() {
if (rotate) {
const int32 dt = _engine->_lbaTime - time;
- xRot = _engine->_collision->getAverageValue(ClampAngle(xRot), _locations[currentLocation].angleX, 75, dt);
- yRot = _engine->_collision->getAverageValue(ClampAngle(yRot), _locations[currentLocation].angleY, 75, dt);
+ xRot = _engine->_collision->clampedLerp(ClampAngle(xRot), _locations[currentLocation].angleX, 75, dt);
+ yRot = _engine->_collision->clampedLerp(ClampAngle(yRot), _locations[currentLocation].angleY, 75, dt);
redraw = true;
}
diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index 69c476c674f..0241c551a8e 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -571,7 +571,7 @@ void Redraw::renderOverlays() {
break;
}
case OverlayType::koNumberRange: {
- const int32 range = _engine->_collision->getAverageValue(overlay->info1, overlay->info0, 100, overlay->lifeTime - _engine->_lbaTime - 50);
+ const int32 range = _engine->_collision->clampedLerp(overlay->info1, overlay->info0, 100, overlay->lifeTime - _engine->_lbaTime - 50);
char text[10];
sprintf(text, "%d", range);
diff --git a/engines/twine/renderer/screens.cpp b/engines/twine/renderer/screens.cpp
index 5fca7a5497c..bef020c8f37 100644
--- a/engines/twine/renderer/screens.cpp
+++ b/engines/twine/renderer/screens.cpp
@@ -136,11 +136,11 @@ void Screens::fadeOut(const uint32 *pal) {
fadeToBlack(pal);
}
-int32 Screens::lerp(int32 value, int32 start, int32 end, int32 t) {
- if (!end) {
- return start;
+int32 Screens::lerp(int32 val1, int32 val2, int32 nbstep, int32 step) { // RegleTrois32
+ if (nbstep < 0) {
+ return val2;
}
- return (((start - value) * t) / end) + value;
+ return (((val2 - val1) * step) / nbstep) + val1;
}
void Screens::adjustPalette(uint8 r, uint8 g, uint8 b, const uint32 *rgbaPal, int32 intensity) {
diff --git a/engines/twine/scene/collision.cpp b/engines/twine/scene/collision.cpp
index 0b85525397f..1be439d8d4f 100644
--- a/engines/twine/scene/collision.cpp
+++ b/engines/twine/scene/collision.cpp
@@ -82,20 +82,20 @@ bool Collision::standingOnActor(int32 actorIdx1, int32 actorIdx2) const {
return true;
}
-int32 Collision::getAverageValue(int32 start, int32 end, int32 maxDelay, int32 delay) const { // BoundRegleTrois
- if (delay <= 0) {
- return start;
+int32 Collision::clampedLerp(int32 val1, int32 val2, int32 nbstep, int32 step) const { // BoundRegleTrois
+ if (step <= 0) {
+ return val1;
}
- if (delay >= maxDelay) {
- return end;
+ if (step >= nbstep) {
+ return val2;
}
- return (((end - start) * delay) / maxDelay) + start;
+ return val1 + (((val2 - val1) * step) / nbstep);
}
void Collision::reajustPos(IVec3 &processActor, ShapeType brickShape) const {
- if (brickShape == ShapeType::kNone) {
+ if (brickShape <= ShapeType::kSolid) {
return;
}
@@ -167,16 +167,16 @@ void Collision::reajustPos(IVec3 &processActor, ShapeType brickShape) const {
switch (brickShape) {
case ShapeType::kStairsTopLeft:
- processActor.y = yw + getAverageValue(0, SIZE_BRICK_Y, SIZE_BRICK_XZ, processActor.x - xw);
+ processActor.y = yw + clampedLerp(0, SIZE_BRICK_Y, SIZE_BRICK_XZ, processActor.x - xw);
break;
case ShapeType::kStairsTopRight:
- processActor.y = yw + getAverageValue(0, SIZE_BRICK_Y, SIZE_BRICK_XZ, processActor.z - zw);
+ processActor.y = yw + clampedLerp(0, SIZE_BRICK_Y, SIZE_BRICK_XZ, processActor.z - zw);
break;
case ShapeType::kStairsBottomLeft:
- processActor.y = yw + getAverageValue(SIZE_BRICK_Y, 0, SIZE_BRICK_XZ, processActor.z - zw);
+ processActor.y = yw + clampedLerp(SIZE_BRICK_Y, 0, SIZE_BRICK_XZ, processActor.z - zw);
break;
case ShapeType::kStairsBottomRight:
- processActor.y = yw + getAverageValue(SIZE_BRICK_Y, 0, SIZE_BRICK_XZ, processActor.x - xw);
+ processActor.y = yw + clampedLerp(SIZE_BRICK_Y, 0, SIZE_BRICK_XZ, processActor.x - xw);
break;
default:
break;
diff --git a/engines/twine/scene/collision.h b/engines/twine/scene/collision.h
index eae368c416f..ec6e3b14956 100644
--- a/engines/twine/scene/collision.h
+++ b/engines/twine/scene/collision.h
@@ -54,7 +54,7 @@ public:
*/
bool standingOnActor(int32 actorIdx1, int32 actorIdx2) const;
- int32 getAverageValue(int32 start, int32 end, int32 maxDelay, int32 delay) const;
+ int32 clampedLerp(int32 start, int32 end, int32 maxDelay, int32 delay) const;
/**
* Reajust actor position in scene according with brick shape bellow actor
diff --git a/engines/twine/scene/extra.cpp b/engines/twine/scene/extra.cpp
index c08ce9ee6c3..f44316f3830 100644
--- a/engines/twine/scene/extra.cpp
+++ b/engines/twine/scene/extra.cpp
@@ -544,7 +544,7 @@ void Extra::processExtras() { // GereExtras
const int32 deltaT = _engine->_lbaTime - extra->spawnTime;
if (extra->type & ExtraType::EXPLOSION) {
- extra->sprite = _engine->_collision->getAverageValue(SPRITEHQR_EXPLOSION_FIRST_FRAME, 100, 30, deltaT);
+ extra->sprite = _engine->_collision->clampedLerp(SPRITEHQR_EXPLOSION_FIRST_FRAME, 100, 30, deltaT);
continue;
}
// process extra moving
diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp
index d5b0bbbd746..3cadf73e87c 100644
--- a/engines/twine/scene/gamestate.cpp
+++ b/engines/twine/scene/gamestate.cpp
@@ -510,11 +510,11 @@ void GameState::processGameoverAnimation() {
return;
}
- const int32 avg = _engine->_collision->getAverageValue(40000, 3200, 500, _engine->_lbaTime - startLbaTime);
- const int32 cdot = _engine->_screens->lerp(1, ANGLE_360, 100, (_engine->_lbaTime - startLbaTime) % 100);
+ const int32 zoom = _engine->_collision->clampedLerp(40000, 3200, TO_SECONDS(10), _engine->_lbaTime - startLbaTime);
+ const int32 angle = _engine->_screens->lerp(1, ANGLE_360, TO_SECONDS(2), (_engine->_lbaTime - startLbaTime) % TO_SECONDS(2));
_engine->blitWorkToFront(rect);
- _engine->_renderer->setCameraAngle(0, 0, 0, 0, -cdot, 0, avg);
+ _engine->_renderer->setCameraAngle(0, 0, 0, 0, -angle, 0, zoom);
_engine->_renderer->renderIsoModel(0, 0, 0, ANGLE_0, ANGLE_0, ANGLE_0, gameOverPtr, dummy);
_engine->_lbaTime++;
diff --git a/engines/twine/script/script_life_v1.cpp b/engines/twine/script/script_life_v1.cpp
index 5670f63e775..840b25063d5 100644
--- a/engines/twine/script/script_life_v1.cpp
+++ b/engines/twine/script/script_life_v1.cpp
@@ -952,7 +952,7 @@ static int32 lGIVE_GOLD_PIECES(TwinEEngine *engine, LifeScriptContext &ctx) {
for (int16 i = 0; i < OVERLAY_MAX_ENTRIES; i++) {
OverlayListStruct *overlay = &engine->_redraw->overlayList[i];
if (overlay->info0 != -1 && overlay->type == OverlayType::koNumberRange) {
- overlay->info0 = engine->_collision->getAverageValue(overlay->info1, overlay->info0, 100, overlay->lifeTime - engine->_lbaTime - TO_SECONDS(1));
+ overlay->info0 = engine->_collision->clampedLerp(overlay->info1, overlay->info0, TO_SECONDS(2), overlay->lifeTime - engine->_lbaTime - TO_SECONDS(1));
overlay->info1 = engine->_gameState->_inventoryNumKashes;
overlay->lifeTime = engine->_lbaTime + TO_SECONDS(3);
hideRange = true;
More information about the Scummvm-git-logs
mailing list