aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2016-07-09 23:09:01 +0200
committerEugene Sandulenko2016-08-03 23:40:36 +0200
commit0b64438dbd3b2ff3579b47da9a46b274b2acde79 (patch)
tree4257a9004d89ec406e1bd220edbba528ac204c19
parentda408c0ad03429a4cbe9718491c1130fef47e1d1 (diff)
downloadscummvm-rg350-0b64438dbd3b2ff3579b47da9a46b274b2acde79.tar.gz
scummvm-rg350-0b64438dbd3b2ff3579b47da9a46b274b2acde79.tar.bz2
scummvm-rg350-0b64438dbd3b2ff3579b47da9a46b274b2acde79.zip
DIRECTOR: Lingo: Added more 'the' entities. Implemented the floatPrecision entity
-rw-r--r--engines/director/director.cpp2
-rw-r--r--engines/director/lingo/lingo-code.cpp2
-rw-r--r--engines/director/lingo/lingo-the.cpp136
-rw-r--r--engines/director/lingo/lingo-the.h12
-rw-r--r--engines/director/lingo/lingo.cpp3
-rw-r--r--engines/director/lingo/lingo.h4
6 files changed, 97 insertions, 62 deletions
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index 107a9a5f77..5a6c8ec32f 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -120,7 +120,7 @@ Common::Error DirectorEngine::run() {
if x = 1 then\n\
put 1\n\
else if x = 2 then\n\
- put 2.1\n\
+ put 1232.12345678901234\n\
put 2.2\n\
else if x = 3 then put 3\n\
end if\n\
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 817f9c9a7f..f7dc403d3f 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -80,7 +80,7 @@ void Lingo::c_printtop(void) {
warning("%d", d.u.i);
break;
case FLOAT:
- warning("%f", d.u.f);
+ warning(g_lingo->_floatPrecisionFormat.c_str(), d.u.f);
break;
case VAR:
if (!d.u.sym) {
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index b3c070286a..410be8ed4f 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -31,38 +31,47 @@ static struct TheEntityProto {
const char *name;
int hasID;
} entities[] = {
- { kTheFrame, "frame", VOID },
- { kThePathName, "pathname", VOID },
- { kTheMovie, "movie", VOID },
- { kTheMouseH, "mouseh", VOID },
- { kTheMouseV, "mousev", VOID },
- { kTheMouseDownScript, "mouseDownScript", VOID },
- { kTheMouseUpScript, "mouseUpScript", VOID },
+ { kTheCast, "cast", INT }, // string?
{ kTheClickOn, "clickOn", VOID },
+ { kTheColorDepth, "colorDepth", VOID },
+ { kTheColorQD, "colorQD", VOID },
+ { kTheCommandDown, "commandDown", VOID },
+ { kTheControlDown, "controlDown", VOID },
{ kTheDoubleClick, "doubleClick", VOID },
+ { kTheExitLock, "exitlock", VOID },
+ { kTheFloatPrecision, "floatPrecision", VOID },
+ { kTheFrame, "frame", VOID },
+ { kTheItemDelimiter, "itemDelimiter", VOID },
+ { kTheKey, "key", VOID },
{ kTheLastClick, "lastClick", VOID },
- { kTheLastFrame, "lastFrame", VOID },
{ kTheLastEvent, "lastEvent", VOID },
- { kTheMouseUp, "mouseUp", VOID },
- { kTheMouseDown, "mouseDown", VOID },
- { kTheRightMouseUp, "rightMouseUp", VOID },
- { kTheRightMouseDown, "rightMouseDown", VOID },
- { kTheStillDown, "stillDown", VOID },
- { kTheKey, "key", VOID },
- { kTheControlDown, "controlDown", VOID },
- { kTheCommandDown, "commandDown", VOID },
- { kTheShiftDown, "shiftDown", VOID },
- { kTheOptionDown, "optionDown", VOID },
+ { kTheLastFrame, "lastFrame", VOID },
{ kTheMenu, "menu", INT },
{ kTheMenus, "menus", VOID },
{ kTheMenuItem, "menuitem", STRING }, // int?
{ kTheMenuItems, "menuitems", VOID },
- { kTheSprite, "sprite", INT },
- { kTheCast, "cast", INT }, // string?
+ { kTheMouseDown, "mouseDown", VOID },
+ { kTheMouseDownScript, "mouseDownScript", VOID },
+ { kTheMouseH, "mouseh", VOID },
+ { kTheMouseUp, "mouseUp", VOID },
+ { kTheMouseUpScript, "mouseUpScript", VOID },
+ { kTheMouseV, "mousev", VOID },
+ { kTheMovie, "movie", VOID },
+ { kTheMultiSound, "multiSound", VOID },
+ { kTheOptionDown, "optionDown", VOID },
+ { kThePathName, "pathname", VOID },
{ kThePerFrameHook, "perframehook", VOID },
+ { kThePreloadEventAbort,"preloadEventAbort",VOID },
+ { kTheRightMouseDown, "rightMouseDown", VOID },
+ { kTheRightMouseUp, "rightMouseUp", VOID },
+ { kTheRomanLingo, "romanLingo", VOID },
+ { kTheShiftDown, "shiftDown", VOID },
+ { kTheSprite, "sprite", INT },
+ { kTheStage, "stage", VOID },
+ { kTheStillDown, "stillDown", VOID },
{ kTheTicks, "ticks", VOID },
- { kTheTimer, "timer", VOID },
{ kTheTimeoutLength, "timeoutlength", VOID },
+ { kTheTimer, "timer", VOID },
{ kTheWindow, "window", VOID },
{ kTheNOEntity, NULL, false }
};
@@ -72,47 +81,47 @@ static struct TheEntityFieldProto {
const char *name;
TheField field;
} fields[] = {
- { kTheSprite, "castnum", kTheCastNum },
- { kTheSprite, "cursor", kTheCursor },
- { kTheSprite, "loch", kTheLocH },
- { kTheSprite, "locv", kTheLocV },
- { kTheSprite, "backColor", kTheBackColor },
- { kTheSprite, "blend", kTheBlend },
- { kTheSprite, "bottom", kTheBottom },
- { kTheSprite, "constraint", kTheConstraint },
- { kTheSprite, "editableText", kTheEditableText },
- { kTheSprite, "foreColor", kTheForeColor },
- { kTheSprite, "height", kTheHeight },
- { kTheSprite, "ink", kTheInk },
- { kTheSprite, "left", kTheLeft },
- { kTheSprite, "lineSize", kTheLineSize },
- { kTheSprite, "moveable", kTheMoveable },
- { kTheSprite, "movieRate", kTheMovieRate },
- { kTheSprite, "movieTime", kTheMovieTime },
- { kTheSprite, "right", kTheRight },
- { kTheSprite, "stopTime", kTheStopTime },
- { kTheSprite, "stretch", kTheStrech },
- { kTheSprite, "startTime", kTheStartTime },
- { kTheSprite, "scriptNum", kTheScriptNum },
- { kTheSprite, "top", kTheTop },
- { kTheSprite, "trails", kTheTrails },
- { kTheSprite, "type", kTheType },
- { kTheSprite, "visible", kTheVisible },
- { kTheSprite, "volume", kTheVolume },
- { kTheSprite, "width", kTheWidth },
+ { kTheSprite, "backColor", kTheBackColor },
+ { kTheSprite, "blend", kTheBlend },
+ { kTheSprite, "bottom", kTheBottom },
+ { kTheSprite, "castnum", kTheCastNum },
+ { kTheSprite, "constraint", kTheConstraint },
+ { kTheSprite, "cursor", kTheCursor },
+ { kTheSprite, "editableText", kTheEditableText },
+ { kTheSprite, "foreColor", kTheForeColor },
+ { kTheSprite, "height", kTheHeight },
+ { kTheSprite, "ink", kTheInk },
+ { kTheSprite, "left", kTheLeft },
+ { kTheSprite, "lineSize", kTheLineSize },
+ { kTheSprite, "loch", kTheLocH },
+ { kTheSprite, "locv", kTheLocV },
+ { kTheSprite, "moveable", kTheMoveable },
+ { kTheSprite, "movieRate", kTheMovieRate },
+ { kTheSprite, "movieTime", kTheMovieTime },
+ { kTheSprite, "right", kTheRight },
+ { kTheSprite, "scriptNum", kTheScriptNum },
+ { kTheSprite, "startTime", kTheStartTime },
+ { kTheSprite, "stretch", kTheStrech },
+ { kTheSprite, "stopTime", kTheStopTime },
+ { kTheSprite, "top", kTheTop },
+ { kTheSprite, "trails", kTheTrails },
+ { kTheSprite, "type", kTheType },
+ { kTheSprite, "visible", kTheVisible },
+ { kTheSprite, "volume", kTheVolume },
+ { kTheSprite, "width", kTheWidth },
//Common cast fields
- { kTheCast, "width", kTheWidth },
- { kTheCast, "height", kTheHeight },
- { kTheCast, "filename", kTheFilename },
- { kTheCast, "scriptText", kTheScriptText },
{ kTheCast, "castType", kTheCastType },
+ { kTheCast, "filename", kTheFilename },
+ { kTheCast, "height", kTheHeight },
+ { kTheCast, "loaded", kTheLoaded },
+ { kTheCast, "modified", kTheModified },
{ kTheCast, "name", kTheName },
- { kTheCast, "rect", kTheRect },
{ kTheCast, "number", kTheNumber },
- { kTheCast, "modified", kTheModified },
- { kTheCast, "loaded", kTheLoaded },
- { kTheCast, "purgePriority",kThePurgePriority }, //0 Never purge, 1 Purge Last, 2 Purge next, 2 Purge normal
+ { kTheCast, "rect", kTheRect },
+ { kTheCast, "purgePriority",kThePurgePriority }, // 0 Never purge, 1 Purge Last, 2 Purge next, 2 Purge normal
+ { kTheCast, "scriptText", kTheScriptText },
+ { kTheCast, "width", kTheWidth },
//Shape fields
{ kTheCast, "backColor", kTheBackColor },
@@ -134,8 +143,8 @@ static struct TheEntityFieldProto {
{ kTheCast, "picture", kThePicture },
//TextCast fields
- { kTheCast, "size", kTheSize },
{ kTheCast, "hilite", kTheHilite },
+ { kTheCast, "size", kTheSize },
{ kTheCast, "text", kTheText },
{ kTheWindow, "drawRect", kTheDrawRect },
@@ -146,7 +155,7 @@ static struct TheEntityFieldProto {
{ kTheMenuItem, "checkmark", kTheCheckMark },
{ kTheMenuItem, "enabled", kTheEnabled },
{ kTheMenuItem, "name", kTheName },
- { kTheMenuItem, "name", kTheScript },
+ { kTheMenuItem, "script", kTheScript },
{ kTheMenu, "name", kTheName },
@@ -164,6 +173,11 @@ void Lingo::setTheEntity(TheEntity entity, int id, TheField field, Datum &d) {
case kThePerFrameHook:
warning("STUB: setting the perframehook");
break;
+ case kTheFloatPrecision:
+ _floatPrecision = d.toInt();
+ _floatPrecision = MAX(0, MIN(_floatPrecision, 19)); // 0 to 19
+ _floatPrecisionFormat.format("%%.%df", _floatPrecision);
+ break;
default:
error("Unprocessed setting field %d of entity %d", field, entity);
}
@@ -220,6 +234,10 @@ Datum Lingo::getTheEntity(TheEntity entity, int id, TheField field) {
case kThePerFrameHook:
warning("STUB: getting the perframehook");
break;
+ case kTheFloatPrecision:
+ d.type = INT;
+ d.u.i = _floatPrecision;
+ break;
default:
error("Unprocessed getting field %d of entity %d", field, entity);
}
diff --git a/engines/director/lingo/lingo-the.h b/engines/director/lingo/lingo-the.h
index 6fc62f8736..c3ee20fb04 100644
--- a/engines/director/lingo/lingo-the.h
+++ b/engines/director/lingo/lingo-the.h
@@ -61,7 +61,17 @@ enum TheEntity {
kTheControlDown,
kTheCommandDown,
kTheShiftDown,
- kTheOptionDown
+ kTheOptionDown,
+
+ kTheColorDepth,
+ kTheColorQD,
+ kTheExitLock,
+ kTheFloatPrecision,
+ kTheItemDelimiter,
+ kTheMultiSound,
+ kThePreloadEventAbort,
+ kTheRomanLingo,
+ kTheStage
};
enum TheField {
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 9fe17f3be5..a73820dff6 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -91,6 +91,9 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
_linenumber = _colnumber = 0;
+ _floatPrecision = 4;
+ _floatPrecisionFormat = "%.4f";
+
warning("Lingo Inited");
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index f3b36f94f6..ea41762f11 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -266,6 +266,8 @@ public:
int _linenumber;
int _colnumber;
+ Common::String _floatPrecisionFormat;
+
private:
int parse(const char *code);
void push(Datum d);
@@ -285,6 +287,8 @@ private:
StackData _stack;
DirectorEngine *_vm;
+
+ int _floatPrecision;
};
extern Lingo *g_lingo;