aboutsummaryrefslogtreecommitdiff
path: root/engines/director/lingo/lingo-builtins.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2017-02-22 17:05:08 +0100
committerEugene Sandulenko2017-02-22 17:05:08 +0100
commit9cdeb4c88ec5dafba4640c3cc442b9486a068ba7 (patch)
tree7bdd5d24f603c30a1bf7e16c2efee129c461c94b /engines/director/lingo/lingo-builtins.cpp
parentd2fe6628f2ac6542f6c39ffeff06c254be52a5e8 (diff)
downloadscummvm-rg350-9cdeb4c88ec5dafba4640c3cc442b9486a068ba7.tar.gz
scummvm-rg350-9cdeb4c88ec5dafba4640c3cc442b9486a068ba7.tar.bz2
scummvm-rg350-9cdeb4c88ec5dafba4640c3cc442b9486a068ba7.zip
DIRECTOR: Lingo: Implemented b_field() method
Diffstat (limited to 'engines/director/lingo/lingo-builtins.cpp')
-rw-r--r--engines/director/lingo/lingo-builtins.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index f4c26a2193..6411c59d4f 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1505,7 +1505,21 @@ void Lingo::b_cast(int nargs) {
void Lingo::b_field(int nargs) {
Datum d = g_lingo->pop();
- warning("STUB: b_field");
+ int id;
+
+ if (d.type == STRING) {
+ if (g_director->getCurrentScore()->_castsNames.contains(*d.u.s))
+ id = g_director->getCurrentScore()->_castsNames[*d.u.s];
+ else
+ error("b_filed: Reference to non-existent field: %s", d.u.s->c_str());
+ } else if (d.type == INT || d.type == FLOAT) {
+ d.toInt();
+ id = d.u.i;
+ } else {
+ error("b_field: Incorrect reference type: %s", d.type2str());
+ }
+
+ d.u.i = id;
d.type = REFERENCE;