aboutsummaryrefslogtreecommitdiff
path: root/engines/director/lingo
diff options
context:
space:
mode:
Diffstat (limited to 'engines/director/lingo')
-rw-r--r--engines/director/lingo/lingo-builtins.cpp5
-rw-r--r--engines/director/lingo/lingo-funcs.cpp23
-rw-r--r--engines/director/lingo/lingo.h1
3 files changed, 22 insertions, 7 deletions
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 4d3b7ddf5b..cf044f2072 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -905,9 +905,8 @@ void Lingo::b_label(int nargs) {
void Lingo::b_marker(int nargs) {
Datum d = g_lingo->pop();
d.toInt();
- warning("STUB: b_marker(%d)", d.u.i);
-
- g_lingo->push(Datum(0));
+ int marker = g_lingo->func_marker(d.u.i);
+ g_lingo->push(marker);
}
void Lingo::b_moveableSprite(int nargs) {
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 70580b10be..140549be8b 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -212,21 +212,21 @@ void Lingo::func_gotoloop() {
if (!_vm->_currentScore)
return;
- _vm->_currentScore->gotoloop();
+ _vm->_currentScore->gotoLoop();
}
void Lingo::func_gotonext() {
if (!_vm->_currentScore)
return;
- _vm->_currentScore->gotonext();
+ _vm->_currentScore->gotoNext();
}
-
+
void Lingo::func_gotoprevious() {
if (!_vm->_currentScore)
return;
- _vm->_currentScore->gotoprevious();
+ _vm->_currentScore->gotoPrevious();
}
void Lingo::func_cursor(int c) {
@@ -265,4 +265,19 @@ void Lingo::func_beep(int repeats) {
_vm->getSoundManager()->systemBeep();
}
+int Lingo::func_marker(int m) {
+ int labelNumber = _vm->getCurrentScore()->getCurrentLabelNumber();
+ if (m != 0) {
+ if (m < 0) {
+ for (int marker = 0; marker > m; marker--)
+ labelNumber = _vm->getCurrentScore()->getPreviousLabelNumber(labelNumber);
+ } else {
+ for (int marker = 0; marker < m; marker++)
+ labelNumber = _vm->getCurrentScore()->getNextLabelNumber(labelNumber);
+ }
+ }
+
+ return labelNumber;
+}
+
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index a739ee77e7..8e033b181d 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -460,6 +460,7 @@ public:
void func_gotonext();
void func_gotoprevious();
void func_cursor(int c);
+ int func_marker(int m);
public:
void setTheEntity(int entity, Datum &id, int field, Datum &d);