Initial commit
This commit is contained in:
365
engines/director/lingo/lingodec/names.cpp
Normal file
365
engines/director/lingo/lingodec/names.cpp
Normal file
@@ -0,0 +1,365 @@
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#include "common/str.h"
|
||||
#include "common/stream.h"
|
||||
#include "common/util.h"
|
||||
#include "./enums.h"
|
||||
#include "./names.h"
|
||||
|
||||
namespace LingoDec {
|
||||
|
||||
namespace StandardNames {
|
||||
/* StandardNames */
|
||||
|
||||
const char *const opcodeNamesS[] = {
|
||||
// single-byte
|
||||
"unk00",
|
||||
"ret", // kOpRet 0x01
|
||||
"retfactory", // kOpRetFactory 0x02
|
||||
"pushzero", // kOpPushZero 0x03
|
||||
"mul", // kOpMul 0x04
|
||||
"add", // kOpAdd 0x05
|
||||
"sub", // kOpSub 0x06
|
||||
"div", // kOpDiv 0x07
|
||||
"mod", // kOpMod 0x08
|
||||
"inv", // kOpInv 0x09
|
||||
"joinstr", // kOpJoinStr 0x0a
|
||||
"joinpadstr", // kOpJoinPadStr 0x0b
|
||||
"lt", // kOpLt 0x0c
|
||||
"lteq", // kOpLtEq 0x0d
|
||||
"nteq", // kOpNtEq 0x0e
|
||||
"eq", // kOpEq 0x0f
|
||||
"gt", // kOpGt 0x10
|
||||
"gteq", // kOpGtEq 0x11
|
||||
"and", // kOpAnd 0x12
|
||||
"or", // kOpOr 0x13
|
||||
"not", // kOpNot 0x14
|
||||
"containsstr", // kOpContainsStr 0x15
|
||||
"contains0str", // kOpContains0Str 0x16
|
||||
"getchunk", // kOpGetChunk 0x17
|
||||
"hilitechunk", // kOpHiliteChunk 0x18
|
||||
"ontospr", // kOpOntoSpr 0x19
|
||||
"intospr", // kOpIntoSpr 0x1a
|
||||
"getfield", // kOpGetField 0x1b
|
||||
"starttell", // kOpStartTell 0x1c
|
||||
"endtell", // kOpEndTell 0x1d
|
||||
"pushlist", // kOpPushList 0x1e
|
||||
"pushproplist", // kOpPushPropList 0x1f
|
||||
"unk20",
|
||||
"swap", // kOpSwap 0x21
|
||||
};
|
||||
|
||||
const char *const opcodeNamesM[] = {
|
||||
// multi-byte
|
||||
"unk40",
|
||||
"pushint8", // kOpPushInt8 0x41
|
||||
"pusharglistnoret", // kOpPushArgListNoRet 0x42
|
||||
"pusharglist", // kOpPushArgList 0x43
|
||||
"pushcons", // kOpPushCons 0x44
|
||||
"pushsymb", // kOpPushSymb 0x45
|
||||
"pushvarref", // kOpPushVarRef 0x46
|
||||
"unk47",
|
||||
"getglobal2", // kOpGetGlobal2 0x48
|
||||
"getglobal", // kOpGetGlobal 0x49
|
||||
"getprop", // kOpGetProp 0x4a
|
||||
"getparam", // kOpGetParam 0x4b
|
||||
"getlocal", // kOpGetLocal 0x4c
|
||||
"unk4d",
|
||||
"setglobal2", // kOpSetGlobal2 0x4e
|
||||
"setglobal", // kOpSetGlobal 0x4f
|
||||
"setprop", // kOpSetProp 0x50
|
||||
"setparam", // kOpSetParam 0x51
|
||||
"setlocal", // kOpSetLocal 0x52
|
||||
"jmp", // kOpJmp 0x53
|
||||
"endrepeat", // kOpEndRepeat 0x54
|
||||
"jmpifz", // kOpJmpIfZ 0x55
|
||||
"localcall", // kOpLocalCall 0x56
|
||||
"extcall", // kOpExtCall 0x57
|
||||
"objcallv4", // kOpObjCallV4 0x58
|
||||
"put", // kOpPut 0x59
|
||||
"putchunk", // kOpPutChunk 0x5a
|
||||
"deletechunk", // kOpDeleteChunk 0x5b
|
||||
"get", // kOpGet 0x5c
|
||||
"set", // kOpSet 0x5d
|
||||
"unk5e",
|
||||
"getmovieprop", // kOpGetMovieProp 0x5f
|
||||
"setmovieprop", // kOpSetMovieProp 0x60
|
||||
"getobjprop", // kOpGetObjProp 0x61
|
||||
"setobjprop", // kOpSetObjProp 0x62
|
||||
"tellcall", // kOpTellCall 0x63
|
||||
"peek", // kOpPeek 0x64
|
||||
"pop", // kOpPop 0x65
|
||||
"thebuiltin", // kOpTheBuiltin 0x66
|
||||
"objcall", // kOpObjCall 0x67
|
||||
"unk68",
|
||||
"unk69",
|
||||
"unk6a",
|
||||
"unk6b",
|
||||
"unk6c",
|
||||
"pushchunkvarref", // kOpPushChunkVarRef 0x6d
|
||||
"pushint16", // kOpPushInt16 0x6e
|
||||
"pushint32", // kOpPushInt32 0x6f
|
||||
"getchainedprop", // kOpGetChainedProp 0x70
|
||||
"pushfloat32", // kOpPushFloat32 0x71
|
||||
"gettoplevelprop", // kOpGetTopLevelProp 0x72
|
||||
"newobj", // kOpNewObj 0x73
|
||||
};
|
||||
|
||||
const char *const binaryOpNames[] = {
|
||||
"unk00",
|
||||
"unk01",
|
||||
"unk02",
|
||||
"unk03",
|
||||
"*", // kOpMul 0x04
|
||||
"+", // kOpAdd 0x05
|
||||
"-", // kOpSub 0x06
|
||||
"/", // kOpDiv 0x07
|
||||
"mod", // kOpMod 0x08
|
||||
"unk09",
|
||||
"&", // kOpJoinStr 0x0a
|
||||
"&&", // kOpJoinPadStr 0x0b
|
||||
"<", // kOpLt 0x0c
|
||||
"<=", // kOpLtEq 0x0d
|
||||
"<>", // kOpNtEq 0x0e
|
||||
"=", // kOpEq 0x0f
|
||||
">", // kOpGt 0x10
|
||||
">=", // kOpGtEq 0x11
|
||||
"and", // kOpAnd 0x12
|
||||
"or", // kOpOr 0x13
|
||||
"unk14",
|
||||
"contains", // kOpContainsStr 0x15
|
||||
"starts", // kOpContains0Str 0x16
|
||||
};
|
||||
|
||||
const char *const chunkTypeNames[] = {
|
||||
"unk00",
|
||||
"char", // kChunkChar 0x01
|
||||
"word", // kChunkWord 0x02
|
||||
"item", // kChunkItem 0x03
|
||||
"line", // kChunkLine 0x04
|
||||
};
|
||||
|
||||
const char *const putTypeNames[] = {
|
||||
"unk00",
|
||||
"into", // kPutInto 0x01
|
||||
"after", // kPutAfter 0x02
|
||||
"before", // kPutBefore 0x03
|
||||
};
|
||||
|
||||
const char *const moviePropertyNames[] = {
|
||||
"floatPrecision", // 0x00
|
||||
"mouseDownScript", // 0x01
|
||||
"mouseUpScript", // 0x02
|
||||
"keyDownScript", // 0x03
|
||||
"keyUpScript", // 0x04
|
||||
"timeoutScript", // 0x05
|
||||
"short time", // 0x06
|
||||
"abbr time", // 0x07
|
||||
"long time", // 0x08
|
||||
"short date", // 0x09
|
||||
"abbr date", // 0x0a
|
||||
"long date", // 0x0b
|
||||
};
|
||||
|
||||
const char *const whenEventNames[] = {
|
||||
"unk00",
|
||||
"mouseDown",// 0x01
|
||||
"mouseUp", // 0x02
|
||||
"keyDown", // 0x03
|
||||
"keyUp", // 0x04
|
||||
"timeOut", // 0x05
|
||||
};
|
||||
|
||||
const char *const menuPropertyNames[] = {
|
||||
"unk00",
|
||||
"name", // 0x01
|
||||
"number of menuItems", // 0x02
|
||||
};
|
||||
|
||||
const char *const menuItemPropertyNames[] = {
|
||||
"unk00",
|
||||
"name", // 0x01
|
||||
"checkMark",// 0x02
|
||||
"enabled", // 0x03
|
||||
"script", // 0x04
|
||||
};
|
||||
|
||||
const char *const soundPropertyNames[] = {
|
||||
"unk00",
|
||||
"volume", // 0x01
|
||||
};
|
||||
|
||||
const char *const spritePropertyNames[] = {
|
||||
"unk00",
|
||||
"type", // 0x01
|
||||
"backColor", // 0x02
|
||||
"bottom", // 0x03
|
||||
"castNum", // 0x04
|
||||
"constraint", // 0x05
|
||||
"cursor", // 0x06
|
||||
"foreColor", // 0x07
|
||||
"height", // 0x08
|
||||
"immediate", // 0x09
|
||||
"ink", // 0x0a
|
||||
"left", // 0x0b
|
||||
"lineSize", // 0x0c
|
||||
"locH", // 0x0d
|
||||
"locV", // 0x0e
|
||||
"movieRate", // 0x0f
|
||||
"movieTime", // 0x10
|
||||
"pattern", // 0x11
|
||||
"puppet", // 0x12
|
||||
"right", // 0x13
|
||||
"startTime", // 0x14
|
||||
"stopTime", // 0x15
|
||||
"stretch", // 0x16
|
||||
"top", // 0x17
|
||||
"trails", // 0x18
|
||||
"visible", // 0x19
|
||||
"volume", // 0x1a
|
||||
"width", // 0x1b
|
||||
"blend", // 0x1c
|
||||
"scriptNum", // 0x1d
|
||||
"moveableSprite", // 0x1e
|
||||
"editableText", // 0x1f
|
||||
"scoreColor", // 0x20
|
||||
"loc", // 0x21
|
||||
"rect", // 0x22
|
||||
"memberNum", // 0x23
|
||||
"castLibNum", // 0x24
|
||||
"member", // 0x25
|
||||
"scriptInstanceList", // 0x26
|
||||
"currentTime", // 0x27
|
||||
"mostRecentCuePoint", // 0x28
|
||||
"tweened", // 0x29
|
||||
"name", // 0x2a
|
||||
};
|
||||
|
||||
const char *const animationPropertyNames[] = {
|
||||
"unk00",
|
||||
"beepOn", // 0x01
|
||||
"buttonStyle", // 0x02
|
||||
"centerStage", // 0x03
|
||||
"checkBoxAccess", // 0x04
|
||||
"checkboxType", // 0x05
|
||||
"colorDepth", // 0x06
|
||||
"colorQD", // 0x07
|
||||
"exitLock", // 0x08
|
||||
"fixStageSize", // 0x09
|
||||
"fullColorPermit", // 0x0a
|
||||
"imageDirect", // 0x0b
|
||||
"doubleClick", // 0x0c
|
||||
"key", // 0x0d
|
||||
"lastClick", // 0x0e
|
||||
"lastEvent", // 0x0f
|
||||
"keyCode", // 0x10
|
||||
"lastKey", // 0x11
|
||||
"lastRoll", // 0x12
|
||||
"timeoutLapsed", // 0x13
|
||||
"multiSound", // 0x14
|
||||
"pauseState", // 0x15
|
||||
"quickTimePresent", // 0x16
|
||||
"selEnd", // 0x17
|
||||
"selStart", // 0x18
|
||||
"soundEnabled", // 0x19
|
||||
"soundLevel", // 0x1a
|
||||
"stageColor", // 0x1b
|
||||
// 0x1c indicates dontPassEvent was called.
|
||||
// It doesn't seem to have a Lingo-accessible name.
|
||||
"unk1c",
|
||||
"switchColorDepth", // 0x1d
|
||||
"timeoutKeyDown", // 0x1e
|
||||
"timeoutLength", // 0x1f
|
||||
"timeoutMouse", // 0x20
|
||||
"timeoutPlay", // 0x21
|
||||
"timer", // 0x22
|
||||
"preLoadRAM", // 0x23
|
||||
"videoForWindowsPresent", // 0x24
|
||||
"netPresent", // 0x25
|
||||
"safePlayer", // 0x26
|
||||
"soundKeepDevice", // 0x27
|
||||
"soundMixMedia", // 0x28
|
||||
};
|
||||
|
||||
const char *const animation2PropertyNames[] = {
|
||||
"unk00",
|
||||
"perFrameHook", // 0x01
|
||||
"number of castMembers",// 0x02
|
||||
"number of menus", // 0x03
|
||||
"number of castLibs", // 0x04
|
||||
"number of xtras", // 0x05
|
||||
};
|
||||
|
||||
const char *const memberPropertyNames[] = {
|
||||
"unk00",
|
||||
"name", // 0x01
|
||||
"text", // 0x02
|
||||
"textStyle", // 0x03
|
||||
"textFont", // 0x04
|
||||
"textHeight", // 0x05
|
||||
"textAlign", // 0x06
|
||||
"textSize", // 0x07
|
||||
"picture", // 0x08
|
||||
"hilite", // 0x09
|
||||
"number", // 0x0a
|
||||
"size", // 0x0b
|
||||
"loop", // 0x0c
|
||||
"duration", // 0x0d
|
||||
"controller", // 0x0e
|
||||
"directToStage",// 0x0f
|
||||
"sound", // 0x10
|
||||
"foreColor", // 0x11
|
||||
"backColor", // 0x12
|
||||
"type", // 0x13
|
||||
};
|
||||
|
||||
Common::String getOpcodeName(byte id) {
|
||||
if (id < 0x22)
|
||||
return opcodeNamesS[id];
|
||||
|
||||
if (id < 0x40)
|
||||
return Common::String::format("unk%02x" , id);
|
||||
|
||||
id = id % 0x40;
|
||||
|
||||
if (id < 0x34)
|
||||
return opcodeNamesM[id];
|
||||
|
||||
return Common::String::format("unk%02x" , id);
|
||||
}
|
||||
|
||||
} // namespace StandardNames
|
||||
|
||||
/* ScriptNames */
|
||||
|
||||
void ScriptNames::read(Common::SeekableReadStream &stream) {
|
||||
// Lingo scripts are always big endian regardless of file endianness
|
||||
unknown0 = stream.readSint32BE();
|
||||
unknown1 = stream.readSint32BE();
|
||||
len1 = stream.readUint32BE();
|
||||
len2 = stream.readUint32BE();
|
||||
namesOffset = stream.readUint16BE();
|
||||
namesCount = stream.readUint16BE();
|
||||
|
||||
stream.seek(namesOffset);
|
||||
names.resize(namesCount);
|
||||
for (auto &name : names) {
|
||||
name = stream.readPascalString();
|
||||
}
|
||||
}
|
||||
|
||||
bool ScriptNames::validName(int id) const {
|
||||
return -1 < id && (unsigned)id < names.size();
|
||||
}
|
||||
|
||||
Common::String ScriptNames::getName(int id) const {
|
||||
if (validName(id))
|
||||
return names[id];
|
||||
return Common::String::format("UNKNOWN_NAME_%d", id);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user