[Scummvm-git-logs] scummvm master -> 802d191e24e9e7d11fe2f6f8403890484faa2032
elasota
noreply at scummvm.org
Sat May 27 17:09:24 UTC 2023
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
86eb2e6142 VCRUISE: Add highlights for circuit puzzle
802d191e24 VCRUISE: Set default framerates for Schizm
Commit: 86eb2e61428658826b460965099ed42253f61230
https://github.com/scummvm/scummvm/commit/86eb2e61428658826b460965099ed42253f61230
Author: elasota (ejlasota at gmail.com)
Date: 2023-05-27T12:20:31-04:00
Commit Message:
VCRUISE: Add highlights for circuit puzzle
Changed paths:
engines/vcruise/runtime.cpp
engines/vcruise/runtime.h
diff --git a/engines/vcruise/runtime.cpp b/engines/vcruise/runtime.cpp
index ad56d7b6f7a..5d71f54bdcb 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -2071,11 +2071,13 @@ void Runtime::continuePlayingAnimation(bool loop, bool useStopFrame, bool &outAn
}
void Runtime::drawSectionToScreen(const RenderSection §ion, const Common::Rect &rect) {
+ const RenderSection *sourceSection = §ion;
+
if (_debugMode && (&_gameSection == §ion)) {
- _gameDebugBackBuffer.surf->blitFrom(*section.surf, rect, rect);
+ _gameDebugBackBuffer.surf->blitFrom(*sourceSection->surf, rect, rect);
commitSectionToScreen(_gameDebugBackBuffer, rect);
} else
- commitSectionToScreen(section, rect);
+ commitSectionToScreen(*sourceSection, rect);
}
void Runtime::commitSectionToScreen(const RenderSection §ion, const Common::Rect &rect) {
@@ -2347,7 +2349,7 @@ void Runtime::terminateScript() {
// The circuit puzzle doesn't call puzzleDone unless you zoom back into the puzzle,
// which can cause the puzzle to leak. Clean it up here instead.
if (!puzzleWasSet)
- _circuitPuzzle.reset();
+ clearCircuitPuzzle();
}
changeToScreen(_roomNumber, _screenNumber);
@@ -3258,9 +3260,13 @@ bool Runtime::dischargeIdleMouseMove() {
bool changedCircuitState = false;
bool isOnCircuitLink = false;
bool isCircuitLinkDown = false;
+
+ bool wasOnOpenCircuitLink = _idleIsOnOpenCircuitPuzzleLink;
+
Common::Point circuitCoord;
+ Common::Rect circuitHighlightRect;
if (_circuitPuzzle) {
- isOnCircuitLink = resolveCircuitPuzzleInteraction(relMouse, circuitCoord, isCircuitLinkDown);
+ isOnCircuitLink = resolveCircuitPuzzleInteraction(relMouse, circuitCoord, isCircuitLinkDown, circuitHighlightRect);
if (isOnCircuitLink != _idleIsOnOpenCircuitPuzzleLink)
changedCircuitState = true;
@@ -3272,13 +3278,24 @@ bool Runtime::dischargeIdleMouseMove() {
if (changedCircuitState) {
_idleIsOnOpenCircuitPuzzleLink = isOnCircuitLink;
+
+ if (wasOnOpenCircuitLink)
+ clearCircuitHighlightRect(_idleCircuitPuzzleLinkHighlightRect);
+
if (isOnCircuitLink) {
+ // Started being on a circuit link
+ _idleCircuitPuzzleLinkHighlightRect = circuitHighlightRect;
+ drawCircuitHighlightRect(_idleCircuitPuzzleLinkHighlightRect);
+
_idleCircuitPuzzleCoord = circuitCoord;
_idleIsCircuitPuzzleLinkDown = isCircuitLinkDown;
} else {
+ // No longer on a circuit link
_idleCircuitPuzzleCoord = Common::Point(0, 0);
_idleIsCircuitPuzzleLinkDown = false;
}
+
+ _idleCircuitPuzzleLinkHighlightRect = circuitHighlightRect;
}
if (isOnInteraction && (_idleIsOnInteraction == false || changedCircuitState)) {
@@ -5220,7 +5237,7 @@ const Graphics::Font *Runtime::resolveFont(const Common::String &textStyle, uint
return fcItem->font;
}
-bool Runtime::resolveCircuitPuzzleInteraction(const Common::Point &relMouse, Common::Point &outCoord, bool &outIsDown) const {
+bool Runtime::resolveCircuitPuzzleInteraction(const Common::Point &relMouse, Common::Point &outCoord, bool &outIsDown, Common::Rect &outHighlightRect) const {
if (!_circuitPuzzle)
return false;
@@ -5233,6 +5250,7 @@ bool Runtime::resolveCircuitPuzzleInteraction(const Common::Point &relMouse, Com
if (padCircuitInteractionRect(rectSpec->_downLinkRect).contains(relMouse)) {
outCoord = cellCoord;
outIsDown = true;
+ outHighlightRect = rectSpec->_downLinkRect;
return true;
}
}
@@ -5240,6 +5258,7 @@ bool Runtime::resolveCircuitPuzzleInteraction(const Common::Point &relMouse, Com
if (padCircuitInteractionRect(rectSpec->_rightLinkRect).contains(relMouse)) {
outCoord = cellCoord;
outIsDown = false;
+ outHighlightRect = rectSpec->_rightLinkRect;
return true;
}
}
@@ -5249,6 +5268,77 @@ bool Runtime::resolveCircuitPuzzleInteraction(const Common::Point &relMouse, Com
return false;
}
+void Runtime::clearCircuitPuzzle() {
+ _circuitPuzzle.reset();
+}
+
+void Runtime::clearCircuitHighlightRect(const Common::Rect &rectBase) {
+ // This is an invert, so these operations are symmetrical
+ drawCircuitHighlightRect(rectBase);
+}
+
+void Runtime::drawCircuitHighlightRect(const Common::Rect &rectBase) {
+ Common::Rect rect(rectBase.left, rectBase.top, rectBase.right + 1, rectBase.bottom + 1);
+
+ Graphics::ManagedSurface *surf = _gameSection.surf.get();
+ uint32 invertMask = surf->format.ARGBToColor(0, 255, 255, 255);
+
+ const uint kNumSpans = 4;
+
+ void *spanStarts[kNumSpans];
+ int32 spanSteps[kNumSpans];
+ uint spanNumPixels[kNumSpans];
+
+ spanStarts[0] = surf->getBasePtr(rect.left, rect.top);
+ spanStarts[1] = surf->getBasePtr(rect.left, rect.bottom - 1);
+ spanStarts[2] = surf->getBasePtr(rect.left, rect.top + 1);
+ spanStarts[3] = surf->getBasePtr(rect.right - 1, rect.top + 1);
+
+ spanSteps[0] = surf->format.bytesPerPixel;
+ spanSteps[1] = surf->format.bytesPerPixel;
+ spanSteps[2] = surf->pitch;
+ spanSteps[3] = surf->pitch;
+
+ spanNumPixels[0] = rect.width();
+ spanNumPixels[1] = rect.width();
+ spanNumPixels[2] = rect.height() - 2;
+ spanNumPixels[3] = rect.height() - 2;
+
+ for (uint spanIndex = 0; spanIndex < kNumSpans; spanIndex++) {
+ void *pixelPtr = spanStarts[spanIndex];
+ int32 step = spanSteps[spanIndex];
+ uint numPixels = spanNumPixels[spanIndex];
+
+ switch (surf->format.bytesPerPixel) {
+ case 1:
+ while (numPixels > 0) {
+ (*static_cast<byte *>(pixelPtr)) ^= invertMask;
+ numPixels--;
+ pixelPtr = static_cast<byte *>(pixelPtr) + step;
+ }
+ break;
+ case 2:
+ while (numPixels > 0) {
+ (*static_cast<uint16 *>(pixelPtr)) ^= invertMask;
+ numPixels--;
+ pixelPtr = static_cast<byte *>(pixelPtr) + step;
+ }
+ break;
+ case 4:
+ while (numPixels > 0) {
+ (*static_cast<uint32 *>(pixelPtr)) ^= invertMask;
+ numPixels--;
+ pixelPtr = static_cast<byte *>(pixelPtr) + step;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ drawSectionToScreen(_gameSection, rect);
+}
+
Common::Rect Runtime::padCircuitInteractionRect(const Common::Rect &rect) {
Common::Rect result = rect;
result.right += 4;
@@ -7512,6 +7602,7 @@ void Runtime::scriptOpPuzzleInit(ScriptArg_t arg) {
if (firstMover != firstMover2 || unknownParam != 0)
error("PuzzleInit had a weird parameter");
+ clearCircuitPuzzle();
_circuitPuzzle.reset(new CircuitPuzzle(firstMover));
_circuitPuzzleConnectAnimation = animDef1;
_circuitPuzzleBlockAnimation = animDef2;
@@ -7574,6 +7665,11 @@ void Runtime::scriptOpPuzzleDoMove1(ScriptArg_t arg) {
_gameState = kGameStateWaitingForAnimation;
}
+
+ clearCircuitHighlightRect(_idleCircuitPuzzleLinkHighlightRect);
+ _idleIsOnOpenCircuitPuzzleLink = false;
+
+ changeToCursor(_cursors[kCursorArrow]);
}
void Runtime::scriptOpPuzzleDoMove2(ScriptArg_t arg) {
diff --git a/engines/vcruise/runtime.h b/engines/vcruise/runtime.h
index 3a45cf18b71..478bb62a3c5 100644
--- a/engines/vcruise/runtime.h
+++ b/engines/vcruise/runtime.h
@@ -909,7 +909,10 @@ private:
const Graphics::Font *resolveFont(const Common::String &textStyle, uint size);
- bool resolveCircuitPuzzleInteraction(const Common::Point &relMouse, Common::Point &outCoord, bool &outIsDown) const;
+ bool resolveCircuitPuzzleInteraction(const Common::Point &relMouse, Common::Point &outCoord, bool &outIsDown, Common::Rect &outHighlightRect) const;
+ void clearCircuitPuzzle();
+ void clearCircuitHighlightRect(const Common::Rect &rect);
+ void drawCircuitHighlightRect(const Common::Rect &rect);
static Common::Rect padCircuitInteractionRect(const Common::Rect &rect);
// Script things
@@ -1245,6 +1248,8 @@ private:
uint _idleInteractionID;
bool _idleIsOnOpenCircuitPuzzleLink;
+ Common::Rect _idleCircuitPuzzleLinkHighlightRect;
+
bool _idleIsCircuitPuzzleLinkDown;
Common::Point _idleCircuitPuzzleCoord;
Commit: 802d191e24e9e7d11fe2f6f8403890484faa2032
https://github.com/scummvm/scummvm/commit/802d191e24e9e7d11fe2f6f8403890484faa2032
Author: elasota (ejlasota at gmail.com)
Date: 2023-05-27T13:02:02-04:00
Commit Message:
VCRUISE: Set default framerates for Schizm
Changed paths:
engines/vcruise/runtime.cpp
diff --git a/engines/vcruise/runtime.cpp b/engines/vcruise/runtime.cpp
index 5d71f54bdcb..ee5de303393 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -1318,6 +1318,10 @@ bool Runtime::bootGame(bool newGame) {
_languageIndex = li;
}
} else if (_gameID == GID_SCHIZM) {
+ _animSpeedRotation = Fraction(21, 1); // Probably accurate
+ _animSpeedStaticAnim = Fraction(21, 1); // Probably accurate
+ _animSpeedDefault = Fraction(21, 1); // Probably accurate
+
const Common::Language langIndexes[] = {
Common::PL_POL,
Common::EN_GRB,
More information about the Scummvm-git-logs
mailing list