Implemented the SCI2.1 kMulDiv kernel function. Walking in Torin's Passage is done correctly now, without leaving trails

svn-id: r49909
This commit is contained in:
Filippos Karapetis 2010-06-16 21:56:39 +00:00
parent 9b6f71d7cf
commit 20d8de27ba
3 changed files with 10 additions and 0 deletions

View file

@ -387,6 +387,7 @@ SciKernelFunction kfunct_mappers[] = {
{ "List", kList, ".*" },
{ "Robot", kRobot, ".*" },
{ "IsOnMe", kIsOnMe, "iio.*" },
{ "MulDiv", kMulDiv, "iii" },
#endif

View file

@ -413,6 +413,7 @@ reg_t kIsHiRes(EngineState *s, int argc, reg_t *argv);
reg_t kArray(EngineState *s, int argc, reg_t *argv);
reg_t kListAt(EngineState *s, int argc, reg_t *argv);
reg_t kString(EngineState *s, int argc, reg_t *argv);
reg_t kMulDiv(EngineState *s, int argc, reg_t *argv);
// "Screen items" in SCI32 are views
reg_t kAddScreenItem(EngineState *s, int argc, reg_t *argv);
reg_t kUpdateScreenItem(EngineState *s, int argc, reg_t *argv);

View file

@ -879,6 +879,14 @@ reg_t kCreateTextBitmap(EngineState *s, int argc, reg_t *argv) {
return NULL_REG;
}
reg_t kMulDiv(EngineState *s, int argc, reg_t *argv) {
int16 multiplicant = argv[0].toSint16();
int16 multiplier = argv[1].toSint16();
int16 denominator = argv[2].toSint16();
return make_reg(0, multiplicant * multiplier / denominator);
}
} // End of namespace Sci
#endif // ENABLE_SCI32