[Scummvm-git-logs] scummvm master -> d8d1b62a978a525c697cdbf9ae7a50f05819be98
elasota
noreply at scummvm.org
Tue Mar 14 03:20:00 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:
ff35ee19ab VCRUISE: Partly implement vertical panning, add "minus" op
d8d1b62a97 VCRUISE: Add some ops for the citadel
Commit: ff35ee19ab0886da4ae2955ac22122933ba392f6
https://github.com/scummvm/scummvm/commit/ff35ee19ab0886da4ae2955ac22122933ba392f6
Author: elasota (ejlasota at gmail.com)
Date: 2023-03-13T23:19:36-04:00
Commit Message:
VCRUISE: Partly implement vertical panning, add "minus" op
Changed paths:
engines/vcruise/runtime.cpp
engines/vcruise/runtime.h
engines/vcruise/script.cpp
engines/vcruise/script.h
diff --git a/engines/vcruise/runtime.cpp b/engines/vcruise/runtime.cpp
index ba03c51e9c9..750034cc8d1 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -1052,6 +1052,7 @@ bool Runtime::runScript() {
DISPATCH_OP(Or);
DISPATCH_OP(Add);
DISPATCH_OP(Sub);
+ DISPATCH_OP(Negate);
DISPATCH_OP(CmpEq);
DISPATCH_OP(CmpGt);
DISPATCH_OP(CmpLt);
@@ -1480,6 +1481,10 @@ bool Runtime::dischargeIdleMouseMove() {
interactionID = kPanLeftInteraction;
else if (panRelMouse.x >= kPanoramaPanningMarginX)
interactionID = kPanRightInteraction;
+ else if (panRelMouse.y <= -kPanoramaPanningMarginY)
+ interactionID = kPanUpInteraction;
+ else if (panRelMouse.y >= kPanoramaPanningMarginY)
+ interactionID = kPanDownInteraction;
if (interactionID) {
// If there's an interaction script for this direction, execute it
@@ -2155,6 +2160,12 @@ void Runtime::detectPanoramaDirections() {
if (_havePanAnimations)
_panoramaDirectionFlags |= kPanoramaHorizFlags;
+
+ if (_havePanDownFromDirection[_direction])
+ _panoramaDirectionFlags |= kPanoramaDownFlag;
+
+ if (_havePanUpFromDirection[_direction])
+ _panoramaDirectionFlags |= kPanoramaUpFlag;
}
void Runtime::detectPanoramaMouseMovement(uint32 timestamp) {
@@ -2174,7 +2185,7 @@ void Runtime::panoramaActivate() {
panCursor |= kPanCursorDraggableHoriz;
if (_panoramaDirectionFlags & kPanoramaUpFlag)
panCursor |= kPanCursorDraggableUp;
- if (_panoramaDirectionFlags & kPanoramaUpFlag)
+ if (_panoramaDirectionFlags & kPanoramaDownFlag)
panCursor |= kPanCursorDraggableDown;
cursorID = _panCursors[panCursor];
@@ -2712,9 +2723,9 @@ void Runtime::scriptOpAnimS(ScriptArg_t arg) {
TAKE_STACK(kAnimDefStackArgs + 2);
AnimationDef animDef = stackArgsToAnimDef(stackArgs + 0);
- animDef.firstFrame = animDef.lastFrame; // Static animation
- changeAnimation(animDef, false);
+ // Static animations start on the last frame
+ changeAnimation(animDef, animDef.lastFrame, false);
_gameState = kGameStateWaitingForAnimation;
_screenNumber = stackArgs[kAnimDefStackArgs + 0];
@@ -2743,8 +2754,7 @@ void Runtime::scriptOpStatic(ScriptArg_t arg) {
AnimationDef animDef = stackArgsToAnimDef(stackArgs);
- animDef.firstFrame = animDef.lastFrame;
- changeAnimation(animDef, false);
+ changeAnimation(animDef, animDef.lastFrame, false);
_havePendingReturnToIdleState = true;
_havePanAnimations = false;
@@ -3170,7 +3180,7 @@ void Runtime::scriptOpVerticalPanSet(bool *flags) {
uint rDir = baseDirection;
uint lDir = baseDirection;
- for (uint i = 1; i < radius; i++) {
+ for (uint i = 1; i <= radius; i++) {
rDir++;
if (rDir == kNumDirections)
rDir = 0;
@@ -3230,6 +3240,12 @@ void Runtime::scriptOpSub(ScriptArg_t arg) {
_scriptStack.push_back(stackArgs[0] - stackArgs[1]);
}
+void Runtime::scriptOpNegate(ScriptArg_t arg) {
+ TAKE_STACK(1);
+
+ _scriptStack.push_back(-stackArgs[0]);
+}
+
void Runtime::scriptOpCmpEq(ScriptArg_t arg) {
TAKE_STACK(2);
diff --git a/engines/vcruise/runtime.h b/engines/vcruise/runtime.h
index 44e979eac23..1bb8b19934e 100644
--- a/engines/vcruise/runtime.h
+++ b/engines/vcruise/runtime.h
@@ -583,6 +583,7 @@ private:
void scriptOpOr(ScriptArg_t arg);
void scriptOpAdd(ScriptArg_t arg);
void scriptOpSub(ScriptArg_t arg);
+ void scriptOpNegate(ScriptArg_t arg);
void scriptOpCmpEq(ScriptArg_t arg);
void scriptOpCmpLt(ScriptArg_t arg);
void scriptOpCmpGt(ScriptArg_t arg);
diff --git a/engines/vcruise/script.cpp b/engines/vcruise/script.cpp
index 402dcc42ba5..6c6204f917c 100644
--- a/engines/vcruise/script.cpp
+++ b/engines/vcruise/script.cpp
@@ -363,6 +363,7 @@ static ScriptNamedInstruction g_namedInstructions[] = {
{"+", ProtoOp::kProtoOpScript, ScriptOps::kAdd},
{"-", ProtoOp::kProtoOpScript, ScriptOps::kSub},
{"not", ProtoOp::kProtoOpScript, ScriptOps::kNot},
+ {"minus", ProtoOp::kProtoOpScript, ScriptOps::kNegate},
{"=", ProtoOp::kProtoOpScript, ScriptOps::kCmpEq},
{">", ProtoOp::kProtoOpScript, ScriptOps::kCmpGt},
{"<", ProtoOp::kProtoOpScript, ScriptOps::kCmpLt},
diff --git a/engines/vcruise/script.h b/engines/vcruise/script.h
index 3fbc12845a5..3b78b761eef 100644
--- a/engines/vcruise/script.h
+++ b/engines/vcruise/script.h
@@ -111,6 +111,7 @@ enum ScriptOp {
kOr,
kSub,
kAdd,
+ kNegate,
kCmpEq,
kCmpLt,
kCmpGt,
Commit: d8d1b62a978a525c697cdbf9ae7a50f05819be98
https://github.com/scummvm/scummvm/commit/d8d1b62a978a525c697cdbf9ae7a50f05819be98
Author: elasota (ejlasota at gmail.com)
Date: 2023-03-13T23:19:36-04:00
Commit Message:
VCRUISE: Add some ops for the citadel
Changed paths:
engines/vcruise/runtime.cpp
engines/vcruise/runtime.h
engines/vcruise/script.cpp
engines/vcruise/script.h
diff --git a/engines/vcruise/runtime.cpp b/engines/vcruise/runtime.cpp
index 750034cc8d1..ae804aaed58 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -336,7 +336,7 @@ Runtime::Runtime(OSystem *system, Audio::Mixer *mixer, const Common::FSNode &roo
_scriptNextInstruction(0), _escOn(false), _debugMode(false), _panoramaDirectionFlags(0),
_loadedAnimation(0), _animPendingDecodeFrame(0), _animDisplayingFrame(0), _animFirstFrame(0), _animLastFrame(0), _animStopFrame(0),
_animFrameRateLock(0), _animStartTime(0), _animFramesDecoded(0), _animDecoderState(kAnimDecoderStateStopped),
- _animPlayWhileIdle(false), _idleIsOnInteraction(false), _idleHaveClickInteraction(false), _idleHaveDragInteraction(false), _idleInteractionID(0),
+ _animPlayWhileIdle(false), _idleIsOnInteraction(false), _idleHaveClickInteraction(false), _idleHaveDragInteraction(false), _idleInteractionID(0), _haveIdleStaticAnimation(false),
_loadedArea(0), _lmbDown(false), _lmbDragging(false), _lmbReleaseWasClick(false), _lmbDownTime(0),
_panoramaState(kPanoramaStateInactive),
_listenerX(0), _listenerY(0), _listenerAngle(0) {
@@ -1004,6 +1004,7 @@ bool Runtime::runScript() {
DISPATCH_OP(ItemRemove);
DISPATCH_OP(ItemHighlightSet);
DISPATCH_OP(ItemAdd);
+ DISPATCH_OP(ItemHaveSpace);
DISPATCH_OP(SetCursor);
DISPATCH_OP(SetRoom);
DISPATCH_OP(LMB);
@@ -1014,7 +1015,9 @@ bool Runtime::runScript() {
DISPATCH_OP(SoundL1);
DISPATCH_OP(SoundL2);
DISPATCH_OP(SoundL3);
+ DISPATCH_OP(3DSoundS2);
DISPATCH_OP(3DSoundL2);
+ DISPATCH_OP(StopAL);
DISPATCH_OP(Range);
DISPATCH_OP(AddXSound);
DISPATCH_OP(ClrXSound);
@@ -1387,6 +1390,7 @@ void Runtime::changeToScreen(uint roomNumber, uint screenNumber) {
_haveIdleAnimations[i] = false;
_havePendingReturnToIdleState = true;
+ _haveIdleStaticAnimation = false;
}
}
@@ -2752,12 +2756,19 @@ void Runtime::scriptOpAnim(ScriptArg_t arg) {
void Runtime::scriptOpStatic(ScriptArg_t arg) {
TAKE_STACK(kAnimDefStackArgs);
+ // QUIRK/BUG WORKAROUND: Static animations don't override other static animations!
+ // In Reah Room05, the script for 0b8 (NGONG) sets the static animation to :NNAWA_NGONG and then
+ // to :NSWIT_SGONG, but NNAWA_NGONG is the correct one, so we must ignore the second static animation
+ if (_haveIdleStaticAnimation)
+ return;
+
AnimationDef animDef = stackArgsToAnimDef(stackArgs);
changeAnimation(animDef, animDef.lastFrame, false);
_havePendingReturnToIdleState = true;
_havePanAnimations = false;
+ _haveIdleStaticAnimation = true;
_gameState = kGameStateWaitingForAnimation;
}
@@ -2833,6 +2844,17 @@ void Runtime::scriptOpItemAdd(ScriptArg_t arg) {
inventoryAddItem(stackArgs[0]);
}
+void Runtime::scriptOpItemHaveSpace(ScriptArg_t arg) {
+ for (const InventoryItem &item : _inventory) {
+ if (item.itemID == 0) {
+ _scriptStack.push_back(1);
+ return;
+ }
+ }
+
+ _scriptStack.push_back(0);
+}
+
void Runtime::scriptOpSetCursor(ScriptArg_t arg) {
TAKE_STACK(1);
@@ -2911,6 +2933,17 @@ void Runtime::scriptOp3DSoundL2(ScriptArg_t arg) {
triggerSound(true, stackArgs[0], stackArgs[1], 0, true);
}
+void Runtime::scriptOp3DSoundS2(ScriptArg_t arg) {
+ TAKE_STACK(4);
+
+ setSound3DParameters(stackArgs[0], stackArgs[2], stackArgs[3], _pendingSoundParams3D);
+ triggerSound(false, stackArgs[0], stackArgs[1], 0, true);
+}
+
+void Runtime::scriptOpStopAL(ScriptArg_t arg) {
+ warning("stopaL not implemented yet");
+}
+
void Runtime::scriptOpAddXSound(ScriptArg_t arg) {
TAKE_STACK(4);
diff --git a/engines/vcruise/runtime.h b/engines/vcruise/runtime.h
index 1bb8b19934e..419b2ede1aa 100644
--- a/engines/vcruise/runtime.h
+++ b/engines/vcruise/runtime.h
@@ -534,6 +534,7 @@ private:
void scriptOpItemRemove(ScriptArg_t arg);
void scriptOpItemHighlightSet(ScriptArg_t arg);
void scriptOpItemAdd(ScriptArg_t arg);
+ void scriptOpItemHaveSpace(ScriptArg_t arg);
void scriptOpSetCursor(ScriptArg_t arg);
void scriptOpSetRoom(ScriptArg_t arg);
@@ -545,7 +546,9 @@ private:
void scriptOpSoundL1(ScriptArg_t arg);
void scriptOpSoundL2(ScriptArg_t arg);
void scriptOpSoundL3(ScriptArg_t arg);
+ void scriptOp3DSoundS2(ScriptArg_t arg);
void scriptOp3DSoundL2(ScriptArg_t arg);
+ void scriptOpStopAL(ScriptArg_t arg);
void scriptOpRange(ScriptArg_t arg);
void scriptOpAddXSound(ScriptArg_t arg);
void scriptOpClrXSound(ScriptArg_t arg);
@@ -646,6 +649,7 @@ private:
StaticAnimation _idleAnimations[kNumDirections];
bool _haveIdleAnimations[kNumDirections];
+ bool _haveIdleStaticAnimation;
StaticAnimParams _pendingStaticAnimParams;
AnimationDef _postFacingAnimDef;
diff --git a/engines/vcruise/script.cpp b/engines/vcruise/script.cpp
index 6c6204f917c..b5dcb8dfa70 100644
--- a/engines/vcruise/script.cpp
+++ b/engines/vcruise/script.cpp
@@ -337,6 +337,7 @@ static ScriptNamedInstruction g_namedInstructions[] = {
{"cr?", ProtoOp::kProtoOpScript, ScriptOps::kItemCheck},
{"cr!", ProtoOp::kProtoOpScript, ScriptOps::kItemRemove},
{"sr!", ProtoOp::kProtoOpScript, ScriptOps::kItemHighlightSet},
+ {"r?", ProtoOp::kProtoOpScript, ScriptOps::kItemHaveSpace},
{"r!", ProtoOp::kProtoOpScript, ScriptOps::kItemAdd},
{"cursor!", ProtoOp::kProtoOpScript, ScriptOps::kSetCursor},
{"room!", ProtoOp::kProtoOpScript, ScriptOps::kSetRoom},
@@ -347,7 +348,8 @@ static ScriptNamedInstruction g_namedInstructions[] = {
{"rnd", ProtoOp::kProtoOpScript, ScriptOps::kRandom},
{"drop", ProtoOp::kProtoOpScript, ScriptOps::kDrop},
{"dup", ProtoOp::kProtoOpScript, ScriptOps::kDup},
- {"say2", ProtoOp::kProtoOpScript, ScriptOps::kSay3}, // FIXME: Figure out what the difference is between say2 and say3
+ {"say1", ProtoOp::kProtoOpScript, ScriptOps::kSay3}, // FIXME: Figure out what the difference is between the say ops
+ {"say2", ProtoOp::kProtoOpScript, ScriptOps::kSay3}, // FIXME: Figure out what the difference is between the say ops
{"say3", ProtoOp::kProtoOpScript, ScriptOps::kSay3},
{"say3@", ProtoOp::kProtoOpScript, ScriptOps::kSay3Get},
{"setTimer", ProtoOp::kProtoOpScript, ScriptOps::kSetTimer},
@@ -378,7 +380,9 @@ static ScriptNamedInstruction g_namedInstructions[] = {
{"soundL1", ProtoOp::kProtoOpScript, ScriptOps::kSoundL1},
{"soundL2", ProtoOp::kProtoOpScript, ScriptOps::kSoundL2},
{"soundL3", ProtoOp::kProtoOpScript, ScriptOps::kSoundL3},
+ {"3DsoundS2", ProtoOp::kProtoOpScript, ScriptOps::k3DSoundS2},
{"3DsoundL2", ProtoOp::kProtoOpScript, ScriptOps::k3DSoundL2},
+ {"stopaL", ProtoOp::kProtoOpScript, ScriptOps::kStopAL},
{"range", ProtoOp::kProtoOpScript, ScriptOps::kRange},
{"addXsound", ProtoOp::kProtoOpScript, ScriptOps::kAddXSound},
{"clrXsound", ProtoOp::kProtoOpScript, ScriptOps::kClrXSound},
diff --git a/engines/vcruise/script.h b/engines/vcruise/script.h
index 3b78b761eef..912a978492c 100644
--- a/engines/vcruise/script.h
+++ b/engines/vcruise/script.h
@@ -62,6 +62,7 @@ enum ScriptOp {
kVarLoad,
kVarStore,
kItemCheck,
+ kItemHaveSpace,
kItemRemove,
kItemHighlightSet,
kItemAdd,
@@ -75,7 +76,9 @@ enum ScriptOp {
kSoundL1,
kSoundL2,
kSoundL3,
+ k3DSoundS2,
k3DSoundL2,
+ kStopAL,
kRange,
kAddXSound,
kClrXSound,
More information about the Scummvm-git-logs
mailing list