void ProgramParser_br::parseRValue(ScriptVar &v, const char *str) { if (isdigit(static_cast<unsigned char>(str[0])) || str[0] == '-') { v.setImmediate(atoi(str)); return; } int index = _program->findLocal(str); if (index != -1) { v.setLocal(&ctxt.locals[index]); return; } AnimationPtr a; if (str[1] == '.') { a = _vm->_location.findAnimation(&str[2]); if (!a) { error("unknown animation '%s' in script", &str[2]); } } else a = AnimationPtr(ctxt.a); if (str[0] == 'X') { v.setField(a.get(), &Animation::getX); } else if (str[0] == 'Y') { v.setField(a.get(), &Animation::getY); } else if (str[0] == 'Z') { v.setField(a.get(), &Animation::getZ); } else if (str[0] == 'F') { v.setField(a.get(), &Animation::getF); } else if (str[0] == 'N') { v.setImmediate(a->getFrameNum()); } else if (str[0] == 'R') { v.setRandom(atoi(&str[1])); } else if (str[0] == 'L') { #if 0 // disabled because no references to lip sync has been found in the scripts v.setField(&_vm->_lipSyncVal); #endif warning("Lip sync instruction encountered! Please notify the team"); } }
void ProgramParser_ns::parseRValue(ScriptVar &v, const char *str) { if (Common::isDigit(str[0]) || str[0] == '-') { v.setImmediate(atoi(str)); return; } int index = _program->findLocal(str); if (index != -1) { v.setLocal(&ctxt.locals[index]); return; } AnimationPtr a; if (str[1] == '.') { a = _vm->_location.findAnimation(&str[2]); } else { a = ctxt.a; } if (str[0] == 'X') { v.setField(a.get(), &Animation::getX); } else if (str[0] == 'Y') { v.setField(a.get(), &Animation::getY); } else if (str[0] == 'Z') { v.setField(a.get(), &Animation::getZ); } else if (str[0] == 'F') { v.setField(a.get(), &Animation::getF); } }