[Scummvm-cvs-logs] scummvm master -> 83a3cb7db1f88560745c85a3aba4b023ed69d785
sev-
sev at scummvm.org
Mon Aug 8 20:54:28 CEST 2016
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
d07460963d DIRECTOR: Lingo: Fix toString() function
a253d1f50e DIRECTOR: Fix crash during test execution
83a3cb7db1 DIRECTOR: Lingo: Made 'go to' and 'play' commands work with expressions
Commit: d07460963d091f78c677e31eeaa3760e7a801016
https://github.com/scummvm/scummvm/commit/d07460963d091f78c677e31eeaa3760e7a801016
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-08T20:37:26+02:00
Commit Message:
DIRECTOR: Lingo: Fix toString() function
Changed paths:
engines/director/lingo/lingo.cpp
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 05478bb..7076ac2 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -273,10 +273,10 @@ Common::String *Datum::toString() {
Common::String *s = new Common::String;
switch (type) {
case INT:
- s->format("%d", u.i);
+ *s = Common::String::format("%d", u.i);
break;
case FLOAT:
- s->format(g_lingo->_floatPrecisionFormat.c_str(), u.f);
+ *s = Common::String::format(g_lingo->_floatPrecisionFormat.c_str(), u.f);
break;
case STRING:
delete s;
Commit: a253d1f50e7ea624c5d8f53119506f5fd7e47baa
https://github.com/scummvm/scummvm/commit/a253d1f50e7ea624c5d8f53119506f5fd7e47baa
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-08T20:52:43+02:00
Commit Message:
DIRECTOR: Fix crash during test execution
Changed paths:
engines/director/score.cpp
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index bcf65d8..6587270 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -429,6 +429,11 @@ void Score::loadScriptText(Common::SeekableSubReadStreamEndian &stream) {
}
void Score::setStartToLabel(Common::String label) {
+ if (!_labels) {
+ warning("setStartToLabel: No labels set");
+ return;
+ }
+
Common::SortedArray<Label *>::iterator i;
for (i = _labels->begin(); i != _labels->end(); ++i) {
Commit: 83a3cb7db1f88560745c85a3aba4b023ed69d785
https://github.com/scummvm/scummvm/commit/83a3cb7db1f88560745c85a3aba4b023ed69d785
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-08T20:53:30+02:00
Commit Message:
DIRECTOR: Lingo: Made 'go to' and 'play' commands work with expressions
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-funcs.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 21cfef7..0c1b5d6 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -677,18 +677,13 @@ void Lingo::c_goto() {
Datum mode = g_lingo->pop();
Datum frame, movie;
- if (mode.u.i == 1 || mode.u.i == 3)
- frame = g_lingo->pop();
-
if (mode.u.i == 2 || mode.u.i == 3)
movie = g_lingo->pop();
- frame.toString();
- movie.toString();
-
- warning("c_goto(%s, %s)", frame.u.s->c_str(), movie.u.s->c_str());
+ if (mode.u.i == 1 || mode.u.i == 3)
+ frame = g_lingo->pop();
- //g_lingo->func_goto(frame, movie);
+ g_lingo->func_goto(frame, movie);
}
void Lingo::c_gotoloop() {
@@ -704,13 +699,28 @@ void Lingo::c_gotoprevious() {
}
void Lingo::c_play() {
- Common::String frame((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]);
- g_lingo->_pc += g_lingo->calcStringAlignment(frame.c_str());
+ Datum mode = g_lingo->pop();
+ Datum frame, movie;
- Common::String movie((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]);
- g_lingo->_pc += g_lingo->calcStringAlignment(movie.c_str());
+ if (mode.u.i == 2 || mode.u.i == 3)
+ movie = g_lingo->pop();
+
+ if (mode.u.i == 1 || mode.u.i == 3)
+ frame = g_lingo->pop();
+
+ if (frame.type == VOID) {
+ frame.u.s = new Common::String("<void>");
+ frame.type = STRING;
+ }
+ frame.toString();
+
+ if (movie.type == VOID) {
+ movie.u.s = new Common::String("<void>");
+ movie.type = STRING;
+ }
+ movie.toString();
- warning("STUB: c_play(%s, %s)", frame.c_str(), movie.c_str());
+ warning("STUB: c_play(%s, %s)", frame.u.s->c_str(), movie.u.s->c_str());
}
void Lingo::c_playdone() {
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 08b3d45..da2cd5f 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -189,25 +189,35 @@ void Lingo::func_mciwait(Common::String &s) {
warning("STUB: MCI wait file: %s", s.c_str());
}
-void Lingo::func_goto(Common::String &frame, Common::String &movie) {
- if (!_vm->_movies || !_vm->_movies->contains(movie)) {
- warning("Movie %s does not exist", movie.c_str());
- return;
+void Lingo::func_goto(Datum &frame, Datum &movie) {
+ if (movie.type != VOID) {
+ movie.toString();
+
+ if (!_vm->_movies || !_vm->_movies->contains(*movie.u.s)) {
+ warning("Movie %s does not exist", movie.u.s->c_str());
+ return;
+ }
+
+ _vm->_currentScore = _vm->_movies->getVal(*movie.u.s);
+ _vm->_currentScore->loadArchive();
}
- _vm->_currentScore = _vm->_movies->getVal(movie);
- _vm->_currentScore->loadArchive();
+ if (!_vm->_currentScore) {
+ warning("func_goto: No score is loaded");
+ return;
+ }
- if (frame.empty())
+ if (frame.type == VOID)
return;
- for (uint16 i = 0; i < frame.size(); i++) {
- if (!Common::isDigit(frame[i])) {
- _vm->_currentScore->setStartToLabel(frame);
- return;
- }
+ if (frame.type == STRING) {
+ _vm->_currentScore->setStartToLabel(*frame.u.s);
+ return;
}
- _vm->_currentScore->setCurrentFrame(strtol(frame.c_str(), 0, 10));
+
+ frame.toInt();
+
+ _vm->_currentScore->setCurrentFrame(frame.u.i);
}
void Lingo::func_gotoloop() {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 862917b..8de3a5f 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -301,7 +301,7 @@ public:
void func_mci(Common::String &s);
void func_mciwait(Common::String &s);
- void func_goto(Common::String &frame, Common::String &movie);
+ void func_goto(Datum &frame, Datum &movie);
void func_gotoloop();
void func_gotonext();
void func_gotoprevious();
More information about the Scummvm-git-logs
mailing list