--------------------------------------------------------------------------

- Web resources

http://www.lua.org/
http://luaforge.net/projects/luabinaries/ (Lua Compiler builds)
http://luaforge.net/projects/luaedit/ (Editing and Debugging tool)
http://luaforge.net/projects/chunkspy/ (Lua Disassembler)
http://luaforge.net/projects/luadec/ (Lua Decompiler - beta)

--------------------------------------------------------------------------

- Lua SimAntics

Opcode: 0x7E
Operands: STR# (2 bytes), index + 1 (2 bytes), flags (2 bytes)

STR# is usually 0x130
index = file name of chunk to call (without the extension)
flags - +1 = extern script?, +2 = private, +4 = semi-global

--------------------------------------------------------------------------

- File naming

filename.objLua - a chunk that can be called at run time
filename.globalObjLua - a chunk that defines a global Lua object

File names should describe in some detail what the script does (see the
built-in script names for example).

--------------------------------------------------------------------------

- Global functions

value = GetTreeParameter(paramNum)
value = GetTemp(tempNum)
value = GetLocal(localNum)
objectId = GetStackObjectId()

bool = IsFlagSet(value, flagNum)

SetTreeParameter(paramNum, value)
SetTemp(tempNum, value)
SetLocal(localNum, value)
ClearFlag(value, flagNum)
SetFlag(value, flagNum)

value = GetConstant(instance, index)

value = GetObjectDefinitionField(guid, defIndex)
value = GetObjectSemiAttribute(objectId, index)
value = GetObjectAttribute(objectId, index)
value = GetObjectData(objectId, dataIndex)

SetObjectSemiAttribute(objectId, index, value)
SetObjectAttribute(objectId, index, value)
SetObjectData(objectId, dataIndex, value)

value = BitShiftRight(value, shiftValue)
value = BitShiftLeft(value, shiftValue)

value = BitwiseXOr(value, value)
value = BitwiseOr(value, value)
value = BitwiseAnd(value, value)
bool = IsBitSet(source, bitNum)

ClearBit(value, bitNum)
SetBit(value, bitNum)

SetObjectArray(objectId, arrayNum, list)
list = GetObjectArrayCopy(objectId, arrayNum)

value = GetNeighborPersonData(?, personDataIndex)
value = GetPersonData(personId, personDataIndex)

ObjectError(string)

SetScriptReturnValue(bool)

--------------------------------------------------------------------------

- nWorld

nWorld.MoveObjectToLocation(objectId, posX, posY, posZ)
posZ = nWorld.GetTerrainElevationForXY(posX, posY)
posZ = nWorld.GetTerrainElevationForObject(objectId)

posX, posY, posZ = nWorld.GetObjectLocation(objectId)

posX = nWorld.GetMinX()
posY = nWorld.GetMinY()
posX = nWorld.GetMaxX()
posY = nWorld.GetMaxY()
value = nWorld.GetLotSizeX()
value = nWorld.GetLotSizeY()

tileX, tileY, level = nWorld.GetObjectTile(objectId)
objList = nWorld.GetObjectsOnTile(tileX, tileY, level)

tileX = nWorld.GetMinTileX()
tileY = nWorld.GetMinTileY()
tileX = nWorld.GetMaxTileX()
tileY = nWorld.GetMaxTileY()
value = nWorld.GetNumTilesX()
value = nWorld.GetNumTilesY()

level = nWorld.GetMinLevel()
level = nWorld.GetMaxLevel()
value = nWorld.GetNumLevels()

bool = nWorld.IsOnLot(?)

--------------------------------------------------------------------------

- nGameState

neighborhoodId, houseId = nGameState.GetLotTripInfo()
bool = nGameState.GetSaveLotEnabled()
bool = nGameState.GetTransitionsEnabled()

nGameState.GetCurrentState(?)

--------------------------------------------------------------------------

- GlobalObjManager

objList = GlobalObjManager:getObjectIds(searchMode, value)

guid = GlobalObjManager:getObjectGUIDFromObjectId(objectId)

personId = GlobalObjManager:getPersonIdFromGUID(guid)
? = GlobalObjManager:getObjectIdFromGUID(guid)

bool = GlobalObjManager:verifyObjectId(objectId)

GlobalObjManager:getPersonIds(?)
GlobalObjManager:getNeighborIds(?)

--------------------------------------------------------------------------

- CachedPerson

cPerson = CachedPerson.new(personId)

guid = cPerson:getGUID()
value = cPerson:getPersonData(personDataName)
cPerson:setPersonData(personDataName, value)

value = cPerson:getNumQueuedInteractions()
objectId = cPerson:getQueuedInteractionObjectId(index)
value = cPerson:getQueuedInteractionId(index)

--------------------------------------------------------------------------

- CachedNeighbor

cNeighbor = CachedNeighbor.new(neighborId)

value = cNeighbor:getOutfitProperty(outfitIndex, outfitPropIndex)
guid = cNeighbor:getGUID()

--------------------------------------------------------------------------

- NeighborhoodManager

xNeighborhood = NeighborhoodManager.new()

value = xNeighborhood:getNumNeighborhoodsOfType(neighborhoodTypeName)
neighborhoodList = xNeighborhood:getNeighborhoodIds()
neighborhoodTypeName = xNeighborhood:getNeighborhoodType(neighborhoodId)

xNeighborhood:getCurrentNeighborhoodType(?)

--------------------------------------------------------------------------

- Inventory/Tokens

xInventory = Inventory.new(?)

tokenList = xInventory:getTokensByGUID(guid)

value = xToken:countProperties()
value = xToken:getProperty(index)

xInventory:getTokens(?)
xInventory:getTokensByFlags(?)
xInventory:findToken(?)
xInventory:countTokens(?)
xInventory:countTokensByGUID(?)
xInventory:countTokensByFlags(?)
xInventory:removeTokensOfGUID(?)
xInventory:removeTokensMarkedForDeletion(?)
xInventory:addToken(?)

xToken:clearProperties(?)
xToken:setProperty(?)
xToken:popProperty(?)
xToken:pushProperty(?)
xToken:getPropertiesCopy(?)
xToken:setProperties(?)

--------------------------------------------------------------------------

- Notes

value - a numeric value, usually a 16-bit signed integer
bool - a boolean value (i.e. false or true)
string - an array of characters
guid - a numeric 32-bit value
index - a positive numeric value, usually a table reference
shiftValue - a positive non-zero numeric value, usually 1 to 15
tempNum - Temp (T[]) index
paramNum - Param index
localNum - Local index
flagNum - flag position (1 to 16)
bitNum - bit position (0 to 15)
objList - a table of objectId values
neighborhoodList - a table of neighborhoodId values
tokenList - a table of xToken values
searchMode - 1 = with GUID, 2 = get all parts of objectId (k-v)
tileX, tileY, level - numeric positional values

personDataName - person data field name (see PersonData)
personDataIndex - value of PersonData[field name]
dataIndex - value of ObjData[field name] (see ObjectData)
defIndex - value of ObjDef[field name] (see ObjectDefinition)
outfitIndex - value in PersonData["Current Outfit"]
outfitPropIndex - value of OutfitProperty[field name] (see OutfitData)
neighborhoodTypeName - "primary", "university", "downtown"

scope - 0 = private, 1 = semiglobal, 2 = global

--------------------------------------------------------------------------

- Supported libraries

math, string, table, debug, os, io (?)

--------------------------------------------------------------------------
