[Scummvm-git-logs] scummvm master -> f6654b8b1f59673a4baf8a30bbcd6fb65def3b86
rvanlaar
noreply at scummvm.org
Sun Feb 5 11:21:51 UTC 2023
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:
f6654b8b1f DIRECTOR: LINGO: Reset lingo parameters
Commit: f6654b8b1f59673a4baf8a30bbcd6fb65def3b86
https://github.com/scummvm/scummvm/commit/f6654b8b1f59673a4baf8a30bbcd6fb65def3b86
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2023-02-05T12:21:27+01:00
Commit Message:
DIRECTOR: LINGO: Reset lingo parameters
Reset a few lingo the keywords on goto events.
the beepOn, 0
the keyDownScript, ""
the mouseDownScript, ""
the mouseUpScript, ""
Director 4 Lingo Dictionary p.102
Fixes the menu on the clock in hhouse.
Hhouse set some scripts to "dontPassEvent" and relied on Director
to reset their values when 'go' was called.
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-funcs.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
engines/director/lingo/tests/the.lingo
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index cddf3619a59..0402968ecb4 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1391,7 +1391,7 @@ void LB::b_go(int nargs) {
warning("b_go: frame arg should be of type STRING or INT, not %s", frame.type2str());
}
- g_lingo->func_goto(frame, movie);
+ g_lingo->func_goto(frame, movie, true);
}
if (nargs > 0) {
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 5a5724a39db..12f2ddf08d2 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -181,7 +181,7 @@ void Lingo::func_mciwait(const Common::String &name) {
warning("STUB: MCI wait file: %s", name.c_str());
}
-void Lingo::func_goto(Datum &frame, Datum &movie) {
+void Lingo::func_goto(Datum &frame, Datum &movie, bool calledfromgo) {
_vm->_playbackPaused = false;
if (!_vm->getCurrentMovie())
@@ -199,6 +199,9 @@ void Lingo::func_goto(Datum &frame, Datum &movie) {
// freeze this script context. We'll return to it after entering the next frame.
g_lingo->_freezeState = true;
+ if (calledfromgo)
+ g_lingo->resetLingoGo();
+
if (movie.type != VOID) {
Common::String movieFilenameRaw = movie.asString();
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index e305acf64d5..7aa9bcb2145 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -39,6 +39,7 @@
#include "director/lingo/lingo-code.h"
#include "director/lingo/lingo-codegen.h"
#include "director/lingo/lingo-gr.h"
+#include "director/lingo/lingo-the.h"
#include "director/lingo/lingo-object.h"
namespace Director {
@@ -686,6 +687,26 @@ void Lingo::lingoError(const char *s, ...) {
}
}
+void Lingo::resetLingoGo() {
+ // Reset lingo items that are reset on `go` command
+ // Director 4 Lingo Dictionary p.102
+ Datum emptyDatum = Datum("");
+ Datum dZero = Datum(0);
+ Datum nullId;
+ g_lingo->setTheEntity(kTheBeepOn, nullId, kTheNOField, dZero);
+ g_lingo->setTheEntity(kTheKeyDownScript, nullId, kTheNOField, emptyDatum);
+ g_lingo->setTheEntity(kTheMouseDownScript, nullId, kTheNOField, emptyDatum);
+ g_lingo->setTheEntity(kTheMouseUpScript, nullId, kTheNOField, emptyDatum);
+
+ // TODO
+ // Should also be reset based on: Director 4 Lingo Dictionary p.102
+ // the constraint properties
+ // cursor of sprite
+ // immediate of sprite
+ // cursor
+ // puppetSprite
+}
+
void Lingo::resetLingo() {
debugC(3, kDebugLingoExec, "Resetting Lingo!");
@@ -695,21 +716,7 @@ void Lingo::resetLingo() {
popContext(true);
}
- // TODO
- //
- // reset the following:
- // the keyDownScript
- // the mouseUpScript
- // the mouseDownScript
- // the beepOn
- // the constraint properties
- // the cursor
- // the immediate sprite properties
- // the puppetSprite
- // cursor commands
- //
- // NOTE:
- // timeoutScript is not reset
+ resetLingoGo();
}
int Lingo::getAlignedType(const Datum &d1, const Datum &d2, bool numsOnly) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 12498e33b7c..ddfbfb4d24d 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -314,6 +314,7 @@ public:
~Lingo();
void resetLingo();
+ void resetLingoGo();
int getMenuNum();
int getMenuItemsNum(Datum &d);
@@ -402,7 +403,7 @@ public:
void func_mci(const Common::String &name);
void func_mciwait(const Common::String &name);
void func_beep(int repeats);
- void func_goto(Datum &frame, Datum &movie);
+ void func_goto(Datum &frame, Datum &movie, bool commandgo = false );
void func_gotoloop();
void func_gotonext();
void func_gotoprevious();
diff --git a/engines/director/lingo/tests/the.lingo b/engines/director/lingo/tests/the.lingo
index 4a8f8389908..5d3db12dd18 100644
--- a/engines/director/lingo/tests/the.lingo
+++ b/engines/director/lingo/tests/the.lingo
@@ -87,3 +87,9 @@ scummvmAssertEqual(the number of items in chunkExpr, 1)
set the itemDelimiter to ":"
scummvmAssertEqual(the number of items in chunkExpr, 3)
set the itemDelimiter to save
+
+-- test initialisation
+scummvmAssertEqual(the beepOn, 0)
+scummvmAssertEqual(the keyDownScript, "")
+scummvmAssertEqual(the mouseDownScript, "")
+scummvmAssertEqual(the mouseUpScript, "")
More information about the Scummvm-git-logs
mailing list