mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
791 lines
23 KiB
C++
791 lines
23 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
|
|
#include "director/lingo/lingo.h"
|
|
#include "director/cast.h"
|
|
#include "director/sprite.h"
|
|
|
|
namespace Director {
|
|
|
|
class Sprite;
|
|
|
|
TheEntity entities[] = {
|
|
{ kTheActorList, "actorList", false }, // D4 property
|
|
{ kTheBeepOn, "beepOn", false }, // D2 p
|
|
{ kTheButtonStyle, "buttonStyle", false }, // D2 p
|
|
{ kTheCast, "cast", true }, // D3
|
|
{ kTheCastMembers, "castmembers", false }, // D3
|
|
{ kTheCenterStage, "centerStage", false }, // D2 p
|
|
{ kTheChars, "chars", false }, // D3
|
|
{ kTheCheckBoxAccess, "checkBoxAccess", false }, // D2 p
|
|
{ kTheCheckBoxType, "checkBoxType", false }, // D2 p
|
|
{ kTheClickLoc, "clickLoc", false }, // D4 function
|
|
{ kTheClickOn, "clickOn", false }, // D2 f
|
|
{ kTheColorDepth, "colorDepth", false }, // D2 p
|
|
{ kTheColorQD, "colorQD", false }, // D2 f
|
|
{ kTheCommandDown, "commandDown", false }, // D2 f
|
|
{ kTheControlDown, "controlDown", false }, // D2 f
|
|
{ kTheDate, "date", false }, // D3
|
|
{ kTheDoubleClick, "doubleClick", false }, // D2 f
|
|
{ kTheExitLock, "exitLock", false }, // D2 p
|
|
{ kTheField, "field", true }, // D3
|
|
{ kTheFixStageSize, "fixStageSize", false }, // D2 p
|
|
{ kTheFloatPrecision, "floatPrecision", false }, // D3 p
|
|
{ kTheFrame, "frame", false }, // D2 f
|
|
{ kTheFrameLabel, "frameLabel", false }, // D4 p
|
|
{ kTheFrameScript, "frameScript", false }, // D4 p
|
|
{ kTheFramePalette, "framePalette", false }, // D4 p
|
|
{ kTheFreeBlock, "freeBlock", false }, // D2 f
|
|
{ kTheFreeBytes, "freeBytes", false }, // D2 f
|
|
{ kTheFullColorPermit, "fullColorPermit", false }, // D2 p
|
|
{ kTheImageDirect, "imageDirect", false }, // D2 p
|
|
{ kTheItems, "items", false }, // D3
|
|
{ kTheItemDelimiter, "itemDelimiter", false }, // D4 p
|
|
{ kTheKey, "key", false }, // D2 f
|
|
{ kTheKeyCode, "keyCode", false }, // D2 f
|
|
{ kTheKeyDownScript, "keyDownScript", false }, // D2 p
|
|
{ kTheKeyUpScript, "keyUpScript", false }, // D4 p
|
|
{ kTheLabelList, "labelList", false }, // D3 f
|
|
{ kTheLast, "last", false }, // D4 f
|
|
{ kTheLastClick, "lastClick", false }, // D2 f
|
|
{ kTheLastEvent, "lastEvent", false }, // D2 f
|
|
{ kTheLastFrame, "lastFrame", false }, // D4 p
|
|
{ kTheLastKey, "lastKey", false }, // D2 f
|
|
{ kTheLastRoll, "lastRoll", false }, // D2 f
|
|
{ kTheLines, "lines", false }, // D3
|
|
{ kTheMachineType, "machineType", false }, // D2 f
|
|
{ kTheMaxInteger, "maxInteger", false }, // D4 f
|
|
{ kTheMemorySize, "memorySize", false }, // D2 f
|
|
{ kTheMenu, "menu", true },
|
|
{ kTheMenus, "menus", false },
|
|
{ kTheMenuItem, "menuitem", true },
|
|
{ kTheMenuItems, "menuitems", false },
|
|
{ kTheMouseCast, "mouseCast", false }, // D3 f
|
|
{ kTheMouseChar, "mouseChar", false }, // D3 f
|
|
{ kTheMouseDown, "mouseDown", false }, // D2 f
|
|
{ kTheMouseDownScript, "mouseDownScript", false }, // D2 p
|
|
{ kTheMouseH, "mouseH", false }, // D2 f
|
|
{ kTheMouseItem, "mouseItem", false }, // D3 f
|
|
{ kTheMouseLine, "mouseLine", false }, // D3 f
|
|
{ kTheMouseUp, "mouseUp", false }, // D2 f
|
|
{ kTheMouseUpScript, "mouseUpScript", false }, // D2 p
|
|
{ kTheMouseV, "mouseV", false }, // D2 f
|
|
{ kTheMouseWord, "mouseWord", false }, // D3 f
|
|
{ kTheMovie, "movie", false }, // D2 f
|
|
{ kTheMovieFileFreeSize,"movieFileFreeSize",false }, // D4 f
|
|
{ kTheMovieFileSize, "movieFileSize", false }, // D4 f
|
|
{ kTheMovieName, "movieName", false }, // D4 f
|
|
{ kTheMoviePath, "moviePath", false }, // D4 f
|
|
{ kTheMultiSound, "multiSound", false }, // D4 p
|
|
{ kTheOptionDown, "optionDown", false }, // D2 f
|
|
{ kTheParamCount, "paramCount", false }, // D4 f
|
|
{ kThePathName, "pathName", false }, // D2 f
|
|
{ kThePauseState, "pauseState", false }, // D2 f
|
|
{ kThePerFrameHook, "perFrameHook", false }, // D2 p
|
|
{ kThePreloadEventAbort,"preloadEventAbort",false }, // D4 p
|
|
{ kThePreLoadRAM, "preLoadRAM", false }, // D4 p
|
|
{ kTheQuickTimePresent, "quickTimePresent", false }, // D4 f
|
|
{ kTheRandomSeed, "randomSeed", false }, // D4 p
|
|
{ kTheResult, "result", false }, // D2 f
|
|
{ kTheRightMouseDown, "rightMouseDown", false },
|
|
{ kTheRightMouseUp, "rightMouseUp", false },
|
|
{ kTheRomanLingo, "romanLingo", false }, // D4 p
|
|
{ kTheSearchCurrentFolder,"searchCurrentFolder",false },// D4 f
|
|
{ kTheSearchPath, "searchPath", false }, // D4 f
|
|
{ kTheSelection, "selection", false }, // D2 f
|
|
{ kTheSelEnd, "selEnd", false }, // D2 p
|
|
{ kTheSelStart, "selStart", false }, // D2 p
|
|
{ kTheShiftDown, "shiftDown", false }, // D2 f
|
|
{ kTheSoundEnabled, "soundEnabled", false }, // D2 p
|
|
{ kTheSoundLevel, "soundLevel", false }, // D2 p
|
|
{ kTheSprite, "sprite", true }, // D4
|
|
{ kTheSqrt, "sqrt", false }, // D2 f
|
|
{ kTheStage, "stage", false }, // D4 p
|
|
{ kTheStageBottom, "stageBottom", false }, // D2 f
|
|
{ kTheStageColor, "stageColor", false }, // D3 p
|
|
{ kTheStageLeft, "stageLeft", false }, // D2 f
|
|
{ kTheStageRight, "stageRight", false }, // D2 f
|
|
{ kTheStageTop, "stageTop", false }, // D2 f
|
|
{ kTheStillDown, "stillDown", false }, // D2 f
|
|
{ kTheSwitchColorDepth, "switchColorDepth", false }, // D2 p
|
|
{ kTheTicks, "ticks", false }, // D2 f
|
|
{ kTheTimeoutKeydown, "timeoutKeydown", false }, // D2 p
|
|
{ kTheTimeoutLapsed, "timeoutLapsed", false }, // D2 p
|
|
{ kTheTimeoutLength, "timeoutLength", false }, // D2 p
|
|
{ kTheTimeoutMouse, "timeoutMouse", false }, // D2 p
|
|
{ kTheTimeoutPlay, "timeoutPlay", false }, // D2 p
|
|
{ kTheTimeoutScript, "timeoutScript", false }, // D2 p
|
|
{ kTheTime, "time", false }, // D3 f
|
|
{ kTheTimer, "timer", false }, // D2 p
|
|
{ kTheTrace, "trace", false }, // D4 p
|
|
{ kTheTraceLoad, "traceLoad", false }, // D4 p
|
|
{ kTheTraceLogFile, "traceLogFile", false }, // D4 p
|
|
{ kTheUpdateMovieEnabled,"updateMovieEnabled",false }, // D4 p
|
|
{ kTheWindow, "window", true }, // D4
|
|
{ kTheWindowList, "windowList", false }, // D4 p
|
|
{ kTheWords, "words", false }, // D3
|
|
{ kTheNOEntity, NULL, false }
|
|
};
|
|
|
|
TheEntityField fields[] = {
|
|
{ kTheSprite, "backColor", kTheBackColor }, // D2 p
|
|
{ kTheSprite, "blend", kTheBlend }, // D4 p
|
|
{ kTheSprite, "bottom", kTheBottom }, // D2 p
|
|
{ kTheSprite, "castNum", kTheCastNum }, // D2 p
|
|
{ kTheSprite, "constraint", kTheConstraint }, // D2 p
|
|
{ kTheSprite, "cursor", kTheCursor }, // D2 p
|
|
{ kTheSprite, "editableText", kTheEditableText }, // D4 p
|
|
{ kTheSprite, "foreColor", kTheForeColor }, // D2 p
|
|
{ kTheSprite, "height", kTheHeight }, // D2 p
|
|
{ kTheSprite, "immediate", kTheImmediate }, // D2 p
|
|
{ kTheSprite, "ink", kTheInk }, // D2 p
|
|
{ kTheSprite, "left", kTheLeft }, // D2 p
|
|
{ kTheSprite, "lineSize", kTheLineSize }, // D2 p
|
|
{ kTheSprite, "locH", kTheLocH }, // D2 p
|
|
{ kTheSprite, "locV", kTheLocV }, // D2 p
|
|
{ kTheSprite, "moveableSprite",kTheMoveableSprite },// D4 p
|
|
{ kTheSprite, "movieRate", kTheMovieRate }, // D4 P
|
|
{ kTheSprite, "movieTime", kTheMovieTime }, // D4 P
|
|
{ kTheSprite, "pattern", kThePattern }, // D2 p
|
|
{ kTheSprite, "puppet", kThePuppet }, // D2 p
|
|
{ kTheSprite, "right", kTheRight }, // D2 p
|
|
{ kTheSprite, "scoreColor", kTheScoreColor }, // D4 p
|
|
{ kTheSprite, "scriptNum", kTheScriptNum }, // D4 p
|
|
{ kTheSprite, "startTime", kTheStartTime }, // D4 p
|
|
{ kTheSprite, "stretch", kTheStrech }, // D2 p
|
|
{ kTheSprite, "stopTime", kTheStopTime }, // D4 p
|
|
{ kTheSprite, "top", kTheTop }, // D2 p
|
|
{ kTheSprite, "trails", kTheTrails }, // D4 p
|
|
{ kTheSprite, "type", kTheType }, // D2 p
|
|
{ kTheSprite, "visible", kTheVisible }, // D4 p
|
|
{ kTheSprite, "volume", kTheVolume }, // D4 p
|
|
{ kTheSprite, "width", kTheWidth }, // D2 p
|
|
|
|
// Common cast fields
|
|
{ kTheCast, "castType", kTheCastType }, // D4 p
|
|
{ kTheCast, "filename", kTheFileName }, // D4 p
|
|
{ kTheCast, "height", kTheHeight }, // D4 p
|
|
{ kTheCast, "loaded", kTheLoaded }, // D4 p
|
|
{ kTheCast, "modified", kTheModified }, // D4 p
|
|
{ kTheCast, "name", kTheName }, // D3 p
|
|
{ kTheCast, "number", kTheNumber }, // D3 p
|
|
{ kTheCast, "rect", kTheRect }, // D4 p
|
|
{ kTheCast, "purgePriority",kThePurgePriority },// D4 p // 0 Never purge, 1 Purge Last, 2 Purge next, 2 Purge normal
|
|
{ kTheCast, "scriptText", kTheScriptText }, // D4 p
|
|
{ kTheCast, "width", kTheWidth }, // D4 p
|
|
|
|
// Shape fields
|
|
{ kTheCast, "backColor", kTheBackColor }, // D4 p
|
|
{ kTheCast, "foreColor", kTheForeColor }, // D4 p
|
|
|
|
// Digital video fields
|
|
{ kTheCast, "center", kTheCenter }, // D4 p
|
|
{ kTheCast, "controller", kTheController }, // D4 p
|
|
{ kTheCast, "crop", kTheCrop }, // D4 p
|
|
{ kTheCast, "directToStage",kTheDirectToStage },// D4 p
|
|
{ kTheCast, "duration", kTheDuration }, // D4 p
|
|
{ kTheCast, "frameRate", kTheFrameRate }, // D4 p
|
|
{ kTheCast, "loop", kTheLoop }, // D4 p
|
|
{ kTheCast, "pausedAtStart",kThePausedAtStart },// D4 p
|
|
{ kTheCast, "preLoad", kThePreLoad }, // D4 p
|
|
{ kTheCast, "sound", kTheSound }, // D4 p // 0-1 off-on
|
|
{ kTheCast, "video", kTheVideo }, // D4 p
|
|
|
|
// Bitmap fields
|
|
{ kTheCast, "depth", kTheDepth },
|
|
{ kTheCast, "regPoint", kTheRegPoint }, // D4 p
|
|
{ kTheCast, "palette", kThePalette }, // D4 p
|
|
{ kTheCast, "picture", kThePicture }, // D3 p
|
|
|
|
// TextCast fields
|
|
{ kTheCast, "hilite", kTheHilite }, // D2 p
|
|
{ kTheCast, "size", kTheSize }, // D4 p
|
|
{ kTheCast, "text", kTheText }, // D2 p
|
|
|
|
// Field fields
|
|
{ kTheField, "textAlign", kTheTextAlign }, // D3 p
|
|
{ kTheField, "textFont", kTheTextFont }, // D3 p
|
|
{ kTheField, "textHeight", kTheTextheight }, // D3 p
|
|
{ kTheField, "textSize", kTheTextSize }, // D3 p
|
|
{ kTheField, "textStyle", kTheTextStyle }, // D3 p
|
|
|
|
{ kTheWindow, "drawRect", kTheDrawRect }, // D4 p
|
|
{ kTheWindow, "fileName", kTheFileName }, // D4 p
|
|
{ kTheWindow, "modal", kTheModal }, // D4 p
|
|
{ kTheWindow, "rect", kTheRect }, // D4 p
|
|
{ kTheWindow, "title", kTheTitle }, // D4 p
|
|
{ kTheWindow, "titleVisible", kTheTitleVisible }, // D4 p
|
|
{ kTheWindow, "sourceRect", kTheSourceRect }, // D4 p
|
|
{ kTheWindow, "visible", kTheVisible }, // D4 p
|
|
{ kTheWindow, "windowType", kTheWindowType }, // D4 p
|
|
|
|
{ kTheMenuItem, "checkmark", kTheCheckMark }, // D3 p
|
|
{ kTheMenuItem, "enabled", kTheEnabled }, // D3 p
|
|
{ kTheMenuItem, "name", kTheName }, // D3 p
|
|
{ kTheMenuItem, "script", kTheScript }, // D3 p
|
|
|
|
{ kTheMenu, "name", kTheName }, // D3 p
|
|
|
|
{ kTheCastMembers, "number", kTheNumber }, // D3 p
|
|
{ kTheChars, "number", kTheNumber }, // D3 p
|
|
{ kTheItems, "number", kTheNumber }, // D3 p
|
|
{ kTheLines, "number", kTheNumber }, // D3 p
|
|
{ kTheMenuItems,"number", kTheNumber }, // D3 p
|
|
{ kTheMenus, "number", kTheNumber }, // D3 p
|
|
{ kTheWords, "number", kTheNumber }, // D3 p
|
|
|
|
{ kTheDate, "short", kTheShort }, // D3 f
|
|
{ kTheDate, "long", kTheLong }, // D3 f
|
|
{ kTheDate, "abbreviated", kTheAbbr }, // D3 f
|
|
{ kTheDate, "abbrev", kTheAbbr }, // D3 f
|
|
{ kTheDate, "abbr", kTheAbbr }, // D3 f
|
|
{ kTheTime, "short", kTheShort }, // D3 f
|
|
{ kTheTime, "long", kTheLong }, // D3 f
|
|
{ kTheTime, "abbreviated", kTheAbbr }, // D3 f
|
|
{ kTheTime, "abbrev", kTheAbbr }, // D3 f
|
|
{ kTheTime, "abbr", kTheAbbr }, // D3 f
|
|
|
|
{ kTheNOEntity, NULL, kTheNOField }
|
|
};
|
|
|
|
void Lingo::initTheEntities() {
|
|
TheEntity *e = entities;
|
|
|
|
while (e->entity != kTheNOEntity) {
|
|
_theEntities[e->name] = e;
|
|
e++;
|
|
}
|
|
|
|
TheEntityField *f = fields;
|
|
|
|
while (f->entity != kTheNOEntity) {
|
|
_theEntityFields[Common::String::format("%d%s", f->entity, f->name)] = f;
|
|
f++;
|
|
}
|
|
}
|
|
|
|
void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
|
|
switch (entity) {
|
|
case kTheSprite:
|
|
setTheSprite(id, field, d);
|
|
break;
|
|
case kThePerFrameHook:
|
|
warning("STUB: setting the perframehook");
|
|
break;
|
|
case kTheFloatPrecision:
|
|
_floatPrecision = d.toInt();
|
|
_floatPrecision = MAX(0, MIN(_floatPrecision, 19)); // 0 to 19
|
|
_floatPrecisionFormat = Common::String::format("%%.%df", _floatPrecision);
|
|
warning("set to %d: %s", _floatPrecision, _floatPrecisionFormat.c_str());
|
|
break;
|
|
case kTheColorDepth:
|
|
_vm->_colorDepth = d.toInt();
|
|
|
|
// bpp. 1, 2, 4, 8, 32
|
|
warning("STUB: Set color depth to %d", _vm->_colorDepth);
|
|
break;
|
|
default:
|
|
warning("Unprocessed setting field %d of entity %d", field, entity);
|
|
}
|
|
}
|
|
|
|
void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
|
|
int id = 0;
|
|
|
|
if (id1.type == INT) {
|
|
id = id1.u.i;
|
|
} else {
|
|
warning("Unknown the sprite id type: %s", id1.type2str());
|
|
return;
|
|
}
|
|
|
|
d.toInt(); // Enforce Integer
|
|
|
|
if (!_vm->getCurrentScore()) {
|
|
warning("The sprite %d field %d setting over non-active score", id, field);
|
|
return;
|
|
}
|
|
|
|
Sprite *sprite = _vm->getCurrentScore()->getSpriteById(id);
|
|
|
|
if (!sprite)
|
|
return;
|
|
|
|
switch (field) {
|
|
case kTheCastNum:
|
|
if (_vm->getCurrentScore()->_castTypes.contains(d.u.i)) {
|
|
_vm->getCurrentScore()->loadCastInto(sprite, d.u.i);
|
|
sprite->_castId = d.u.i;
|
|
}
|
|
break;
|
|
case kTheWidth:
|
|
sprite->_width = d.u.i;
|
|
break;
|
|
case kTheHeight:
|
|
sprite->_height = d.u.i;
|
|
break;
|
|
case kTheTrails:
|
|
sprite->_trails = d.u.i;
|
|
break;
|
|
case kTheInk:
|
|
sprite->_ink = static_cast<InkType>(d.u.i);
|
|
break;
|
|
case kTheLocH:
|
|
sprite->_startPoint.x = d.u.i;
|
|
break;
|
|
case kTheLocV:
|
|
sprite->_startPoint.y = d.u.i;
|
|
break;
|
|
case kTheConstraint:
|
|
sprite->_constraint = d.u.i;
|
|
break;
|
|
case kTheMoveableSprite:
|
|
sprite->_moveable = d.u.i;
|
|
break;
|
|
case kTheBackColor:
|
|
sprite->_backColor = d.u.i;
|
|
break;
|
|
case kTheForeColor:
|
|
sprite->_foreColor = d.u.i;
|
|
break;
|
|
case kTheLeft:
|
|
sprite->_left = d.u.i;
|
|
break;
|
|
case kTheRight:
|
|
sprite->_right = d.u.i;
|
|
break;
|
|
case kTheTop:
|
|
sprite->_top = d.u.i;
|
|
break;
|
|
case kTheBottom:
|
|
sprite->_bottom = d.u.i;
|
|
break;
|
|
case kTheBlend:
|
|
sprite->_blend = d.u.i;
|
|
break;
|
|
case kTheVisible:
|
|
sprite->_visible = (d.u.i == 0 ? false : true);
|
|
break;
|
|
case kTheType:
|
|
sprite->_type = static_cast<SpriteType>(d.u.i);
|
|
break;
|
|
case kTheMovieRate:
|
|
sprite->_movieRate = d.u.i;
|
|
break;
|
|
case kTheMovieTime:
|
|
sprite->_movieTime = d.u.i;
|
|
break;
|
|
case kTheStopTime:
|
|
sprite->_stopTime = d.u.i;
|
|
break;
|
|
case kTheStartTime:
|
|
sprite->_startTime = d.u.i;
|
|
break;
|
|
case kTheStretch:
|
|
sprite->_stretch = d.u.i;
|
|
break;
|
|
case kTheVolume:
|
|
sprite->_volume = d.u.i;
|
|
break;
|
|
case kTheLineSize:
|
|
sprite->_lineSize = d.u.i;
|
|
break;
|
|
case kTheEditableText:
|
|
sprite->_editableText = *d.toString();
|
|
break;
|
|
default:
|
|
warning("Unprocessed setting field %d of sprite", field);
|
|
}
|
|
}
|
|
|
|
Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
|
|
Datum d;
|
|
|
|
switch (entity) {
|
|
case kTheSprite:
|
|
d = getTheSprite(id, field);
|
|
break;
|
|
case kTheCast:
|
|
d = getTheCast(id, field);
|
|
break;
|
|
case kThePerFrameHook:
|
|
warning("STUB: getting the perframehook");
|
|
break;
|
|
case kTheFloatPrecision:
|
|
d.type = INT;
|
|
d.u.i = _floatPrecision;
|
|
break;
|
|
case kTheSqrt:
|
|
id.toFloat();
|
|
d.type = FLOAT;
|
|
d.u.f = sqrt(id.u.f);
|
|
break;
|
|
case kTheKey:
|
|
d.type = STRING;
|
|
d.u.s = new Common::String(_vm->_key);
|
|
break;
|
|
case kTheKeyCode:
|
|
d.type = INT;
|
|
d.u.i = _vm->_keyCode;
|
|
break;
|
|
case kTheColorQD:
|
|
d.type = INT;
|
|
d.u.i = 1;
|
|
break;
|
|
case kTheColorDepth:
|
|
// bpp. 1, 2, 4, 8, 32
|
|
d.type = INT;
|
|
d.u.i = _vm->_colorDepth;
|
|
break;
|
|
case kTheMachineType:
|
|
// 1 - Macintosh 512Ke D2
|
|
// 2 - Macintosh Plus D2
|
|
// 3 - Macintosh SE D2
|
|
// 4 - Macintosh II D2
|
|
// 5 - Macintosh IIx D2
|
|
// 6 - Macintosh IIcx D2
|
|
// 7 - Macintosh SE/30 D2
|
|
// 8 - Macintosh Portable D2
|
|
// 9 - Macintosh IIci D2
|
|
// 11 - Macintosh IIfx D3
|
|
// 15 - Macintosh Classic D3
|
|
// 16 - Macintosh IIsi D3
|
|
// 17 - Macintosh LC D3
|
|
// 18 - Macintosh Quadra 900 D3
|
|
// 19 - PowerBook 170 D3
|
|
// 20 - Macintosh Quadra 700 D3
|
|
// 21 - Classic II D3
|
|
// 22 - PowerBook 100 D3
|
|
// 23 - PowerBook 140 D3
|
|
// 24 - Macintosh Quadra 950 D4
|
|
// 25 - Macintosh LCIII D4
|
|
// 27 - PowerBook Duo 210 D4
|
|
// 28 - Macintosh Centris 650 D4
|
|
// 30 - PowerBook Duo 230 D4
|
|
// 31 - PowerBook 180 D4
|
|
// 32 - PowerBook 160 D4
|
|
// 33 - Macintosh Quadra 800 D4
|
|
// 35 - Macintosh LC II D4
|
|
// 42 - Macintosh IIvi D4
|
|
// 45 - Power Macintosh 7100/70 D5
|
|
// 46 - Macintosh IIvx D4
|
|
// 47 - Macintosh Color Classic D4
|
|
// 48 - PowerBook 165c D4
|
|
// 50 - Macintosh Centris 610 D4
|
|
// 52 - PowerBook 145 D4
|
|
// 53 - PowerComputing 8100/100 D5
|
|
// 73 - Power Macintosh 6100/60 D5
|
|
// 76 - Macintosh Quadra 840av D4
|
|
// 256 - IBM PC-type machine D3
|
|
d.type = INT;
|
|
d.u.i = _vm->_machineType;
|
|
break;
|
|
case kTheFrame:
|
|
d.type = INT;
|
|
d.u.i = _vm->getCurrentScore()->getCurrentFrame();
|
|
break;
|
|
default:
|
|
warning("Unprocessed getting field %d of entity %d", field, entity);
|
|
d.type = VOID;
|
|
}
|
|
|
|
return d;
|
|
}
|
|
|
|
Datum Lingo::getTheSprite(Datum &id1, int field) {
|
|
Datum d;
|
|
int id = 0;
|
|
|
|
if (id1.type == INT) {
|
|
id = id1.u.i;
|
|
} else {
|
|
warning("Unknown the sprite id type: %s", id1.type2str());
|
|
return d;
|
|
}
|
|
|
|
if (!_vm->getCurrentScore()) {
|
|
warning("The sprite %d field %d setting over non-active score", id, field);
|
|
return d;
|
|
}
|
|
|
|
Sprite *sprite = _vm->getCurrentScore()->getSpriteById(id);
|
|
|
|
if (!sprite)
|
|
return d;
|
|
|
|
d.type = INT;
|
|
|
|
switch (field) {
|
|
case kTheCastNum:
|
|
d.u.i = sprite->_castId;
|
|
break;
|
|
case kTheWidth:
|
|
d.u.i = sprite->_width;
|
|
break;
|
|
case kTheHeight:
|
|
d.u.i = sprite->_height;
|
|
break;
|
|
case kTheTrails:
|
|
d.u.i = sprite->_trails;
|
|
break;
|
|
case kTheInk:
|
|
d.u.i = sprite->_ink;
|
|
break;
|
|
case kTheLocH:
|
|
d.u.i = sprite->_startPoint.x;
|
|
break;
|
|
case kTheLocV:
|
|
d.u.i = sprite->_startPoint.y;
|
|
break;
|
|
case kTheConstraint:
|
|
d.u.i = sprite->_constraint;
|
|
break;
|
|
case kTheMoveableSprite:
|
|
d.u.i = sprite->_moveable;
|
|
break;
|
|
case kTheBackColor:
|
|
d.u.i = sprite->_backColor;
|
|
break;
|
|
case kTheForeColor:
|
|
d.u.i = sprite->_foreColor;
|
|
break;
|
|
case kTheLeft:
|
|
d.u.i = sprite->_left;
|
|
break;
|
|
case kTheRight:
|
|
d.u.i = sprite->_right;
|
|
break;
|
|
case kTheBottom:
|
|
d.u.i = sprite->_bottom;
|
|
break;
|
|
case kTheTop:
|
|
d.u.i = sprite->_top;
|
|
break;
|
|
case kTheBlend:
|
|
d.u.i = sprite->_blend;
|
|
break;
|
|
case kTheVisible:
|
|
d.u.i = (sprite->_visible ? 1 : 0);
|
|
break;
|
|
case kTheType:
|
|
d.u.i = sprite->_type;
|
|
break;
|
|
case kTheMovieRate:
|
|
d.u.i = sprite->_movieRate;
|
|
break;
|
|
case kTheMovieTime:
|
|
d.u.i = sprite->_movieTime;
|
|
break;
|
|
case kTheStopTime:
|
|
d.u.i = sprite->_stopTime;
|
|
break;
|
|
case kTheStartTime:
|
|
d.u.i = sprite->_startTime;
|
|
break;
|
|
case kTheVolume:
|
|
d.u.i = sprite->_volume;
|
|
break;
|
|
case kTheStretch:
|
|
d.u.i = sprite->_stretch;
|
|
break;
|
|
case kTheLineSize:
|
|
d.u.i = sprite->_lineSize;
|
|
break;
|
|
case kTheEditableText:
|
|
d.toString();
|
|
d.u.s = &sprite->_editableText;
|
|
break;
|
|
default:
|
|
warning("Unprocessed getting field %d of sprite", field);
|
|
d.type = VOID;
|
|
}
|
|
|
|
return d;
|
|
}
|
|
|
|
Datum Lingo::getTheCast(Datum &id1, int field) {
|
|
Datum d;
|
|
int id = 0;
|
|
|
|
if (id1.type == INT) {
|
|
id = id1.u.i;
|
|
} else {
|
|
warning("Unknown the cast id type: %s", id1.type2str());
|
|
return d;
|
|
}
|
|
|
|
if (!_vm->getCurrentScore()) {
|
|
warning("The cast %d field %d setting over non-active score", id, field);
|
|
return d;
|
|
}
|
|
|
|
CastType castType;
|
|
CastInfo *castInfo;
|
|
if (!_vm->getCurrentScore()->_castTypes.contains(id)) {
|
|
if (field == kTheLoaded) {
|
|
d.type = INT;
|
|
d.u.i = 0;
|
|
}
|
|
|
|
return d;
|
|
} else {
|
|
warning("The cast %d found", id);
|
|
}
|
|
|
|
castType = _vm->getCurrentScore()->_castTypes[id];
|
|
castInfo = _vm->getCurrentScore()->_castsInfo[id];
|
|
|
|
d.type = INT;
|
|
|
|
switch (field) {
|
|
case kTheCastType:
|
|
d.u.i = castType;
|
|
break;
|
|
case kTheFileName:
|
|
d.toString();
|
|
d.u.s = &castInfo->fileName;
|
|
break;
|
|
case kTheName:
|
|
d.toString();
|
|
d.u.s = &castInfo->name;
|
|
break;
|
|
case kTheScriptText:
|
|
d.toString();
|
|
d.u.s = &castInfo->script;
|
|
break;
|
|
case kTheWidth:
|
|
d.u.i = _vm->getCurrentScore()->getCastMemberInitialRect(id).width();
|
|
break;
|
|
case kTheHeight:
|
|
d.u.i = _vm->getCurrentScore()->getCastMemberInitialRect(id).height();
|
|
break;
|
|
case kTheBackColor:
|
|
{
|
|
if (castType != kCastShape) {
|
|
warning("Field %d of cast %d not found", field, id);
|
|
d.type = VOID;
|
|
return d;
|
|
}
|
|
|
|
ShapeCast *shape = _vm->getCurrentScore()->_loadedShapes->getVal(id);
|
|
d.u.i = shape->bgCol;
|
|
}
|
|
break;
|
|
case kTheForeColor:
|
|
{
|
|
if (castType != kCastShape) {
|
|
warning("Field %d of cast %d not found", field, id);
|
|
d.type = VOID;
|
|
return d;
|
|
}
|
|
|
|
ShapeCast *shape = _vm->getCurrentScore()->_loadedShapes->getVal(id);
|
|
d.u.i = shape->fgCol;
|
|
}
|
|
break;
|
|
case kTheLoaded:
|
|
d.u.i = 1; //Not loaded handled above
|
|
break;
|
|
default:
|
|
warning("Unprocessed getting field %d of cast %d", field, id);
|
|
d.type = VOID;
|
|
//TODO find out about String fields
|
|
}
|
|
|
|
return d;
|
|
}
|
|
|
|
void Lingo::setTheCast(Datum &id1, int field, Datum &d) {
|
|
int id = 0;
|
|
|
|
if (id1.type == INT) {
|
|
id = id1.u.i;
|
|
} else {
|
|
warning("Unknown the cast id type: %s", id1.type2str());
|
|
return;
|
|
}
|
|
|
|
if (!_vm->getCurrentScore()) {
|
|
warning("The cast %d field %d setting over non-active score", id, field);
|
|
return;
|
|
}
|
|
|
|
CastType castType = _vm->getCurrentScore()->_castTypes[id];
|
|
CastInfo *castInfo = _vm->getCurrentScore()->_castsInfo[id];
|
|
|
|
if (!castInfo) {
|
|
warning("The cast %d found", id);
|
|
return;
|
|
}
|
|
|
|
switch (field) {
|
|
case kTheCastType:
|
|
// TODO: You can actually switch the cast type!?
|
|
warning("Tried to switch cast type of %d", id);
|
|
//cast->type = static_cast<CastType>(d.u.i);
|
|
//cast->modified = 1;
|
|
break;
|
|
case kTheFileName:
|
|
castInfo->fileName = *d.u.s;
|
|
break;
|
|
case kTheName:
|
|
castInfo->name = *d.u.s;
|
|
break;
|
|
case kTheScriptText:
|
|
castInfo->script = *d.u.s;
|
|
break;
|
|
case kTheWidth:
|
|
_vm->getCurrentScore()->getCastMemberInitialRect(id).setWidth(d.u.i);
|
|
_vm->getCurrentScore()->setCastMemberModified(id);
|
|
break;
|
|
case kTheHeight:
|
|
_vm->getCurrentScore()->getCastMemberInitialRect(id).setHeight(d.u.i);
|
|
_vm->getCurrentScore()->setCastMemberModified(id);
|
|
break;
|
|
case kTheBackColor:
|
|
{
|
|
if (castType != kCastShape) {
|
|
warning("Field %d of cast %d not found", field, id);
|
|
}
|
|
ShapeCast *shape = _vm->getCurrentScore()->_loadedShapes->getVal(id);
|
|
shape->bgCol = d.u.i;
|
|
shape->modified = 1;
|
|
}
|
|
break;
|
|
case kTheForeColor:
|
|
{
|
|
if (castType != kCastShape) {
|
|
warning("Field %d of cast %d not found", field, id);
|
|
return;
|
|
}
|
|
ShapeCast *shape = _vm->getCurrentScore()->_loadedShapes->getVal(id);
|
|
shape->fgCol = d.u.i;
|
|
shape->modified = 1;
|
|
}
|
|
break;
|
|
default:
|
|
warning("Unprocessed getting field %d of cast %d", field, id);
|
|
}
|
|
}
|
|
|
|
} // End of namespace Director
|