aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/vm.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 6174dc838c..ab186ba819 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -1199,10 +1199,28 @@ void run_vm(EngineState *s, int restoring) {
s->r_acc = OBJ_PROPERTY(obj, (opparams[0] >> 1)) = ACC_ARITHMETIC_L(1 + /*acc*/);
break;
- case 0x36: // dpToa
+ case 0x36: { // dpToa
s->r_acc = OBJ_PROPERTY(obj, (opparams[0] >> 1));
+#if 0
+ // Speed throttling is possible here as well
+ // although this opens other issues like mud wrestling in lsl5 uses another local variable for delays
+ Object *var_container = obj;
+ if (!(obj->getInfoSelector().offset & SCRIPT_INFO_CLASS))
+ var_container = s->_segMan->getObject(obj->getSuperClassSelector());
+ uint16 varSelector = var_container->getVarSelector(opparams[0] >> 1);
+// printf("%X\n", varSelector);
+// printf("%s\n", s->_kernel->getSelectorName(varSelector).c_str());
+ if ((varSelector == 0x84) || (varSelector == 0x92))) {
+ // selectors cycles, cycleCnt from lsl5 hardcoded
+ uint32 curTime = g_system->getMillis();
+ if (s->_lastAnimateTime + 30 > curTime)
+ break;
+ s->_lastAnimateTime = curTime;
+ }
+#endif
s->r_acc = OBJ_PROPERTY(obj, (opparams[0] >> 1)) = ACC_ARITHMETIC_L(-1 + /*acc*/);
break;
+ }
case 0x37: // ipTos
validate_arithmetic(OBJ_PROPERTY(obj, (opparams[0] >> 1)));