void Inter_v7::storeValue(uint16 index, uint16 type, uint32 value) { switch (type) { case OP_ARRAY_INT8: case TYPE_VAR_INT8: WRITE_VARO_UINT8(index, value); break; case TYPE_VAR_INT16: case TYPE_VAR_INT32_AS_INT16: case TYPE_ARRAY_INT16: WRITE_VARO_UINT16(index, value); break; default: WRITE_VARO_UINT32(index, value); } }
bool Inter_Fascination::oFascin_assign(OpFuncParams ¶ms) { byte destType = _vm->_game->_script->peekByte(); int16 dest = _vm->_game->_script->readVarIndex(); byte loopCount; if (_vm->_game->_script->peekByte() == 99) { _vm->_game->_script->skip(1); loopCount = _vm->_game->_script->readByte(); } else loopCount = 1; for (int i = 0; i < loopCount; i++) { int16 result; int16 srcType = _vm->_game->_script->evalExpr(&result); switch (destType) { case TYPE_VAR_INT8: if (srcType != TYPE_IMM_INT16) { char* str = _vm->_game->_script->getResultStr(); WRITE_VARO_STR(dest, str); } else WRITE_VARO_UINT8(dest + i, _vm->_game->_script->getResultInt()); break; case TYPE_VAR_INT32_AS_INT16: case TYPE_ARRAY_INT16: WRITE_VARO_UINT16(dest + i * 2, _vm->_game->_script->getResultInt()); break; case TYPE_VAR_INT32: case TYPE_ARRAY_INT32: WRITE_VAR_OFFSET(dest + i * 4, _vm->_game->_script->getResultInt()); break; case TYPE_VAR_STR: case TYPE_ARRAY_STR: if (srcType == TYPE_IMM_INT16) WRITE_VARO_UINT8(dest, result); else WRITE_VARO_STR(dest, _vm->_game->_script->getResultStr()); break; } } return false; }
void Inter_v7::storeString(uint16 index, uint16 type, const char *value) { uint32 maxLength = _vm->_global->_inter_animDataSize * 4 - 1; char *str = GET_VARO_STR(index); switch (type) { case TYPE_VAR_STR: if (strlen(value) > maxLength) warning("Inter_v7::storeString(): String too long"); Common::strlcpy(str, value, maxLength); break; case TYPE_IMM_INT8: case TYPE_VAR_INT8: strcpy(str, value); break; case TYPE_ARRAY_INT8: WRITE_VARO_UINT8(index, atoi(value)); break; case TYPE_VAR_INT16: case TYPE_VAR_INT32_AS_INT16: case TYPE_ARRAY_INT16: WRITE_VARO_UINT16(index, atoi(value)); break; case TYPE_VAR_INT32: case TYPE_ARRAY_INT32: WRITE_VARO_UINT32(index, atoi(value)); break; default: warning("Inter_v7::storeString(): Requested to store a string into type %d", type); break; } }
void Inter_v6::o6_assign(OpFuncParams ¶ms) { uint16 size, destType; uint16 dest = _vm->_game->_script->readVarIndex(&size, &destType); if (size != 0) { int16 src; _vm->_game->_script->push(); src = _vm->_game->_script->readVarIndex(&size, 0); memcpy(_vm->_inter->_variables->getAddressOff8(dest), _vm->_inter->_variables->getAddressOff8((uint16) src), size * 4); _vm->_game->_script->pop(); _vm->_game->_script->evalExpr(&src); return; } byte loopCount; if (_vm->_game->_script->peekByte() == 98) { _vm->_game->_script->skip(1); loopCount = _vm->_game->_script->readByte(); for (int i = 0; i < loopCount; i++) { uint8 c = _vm->_game->_script->readByte(); uint16 n = _vm->_game->_script->readUint16(); memset(_vm->_inter->_variables->getAddressOff8(dest), c, n); dest += n; } return; } else if (_vm->_game->_script->peekByte() == 99) { _vm->_game->_script->skip(1); loopCount = _vm->_game->_script->readByte(); } else loopCount = 1; for (int i = 0; i < loopCount; i++) { int16 result; int16 srcType = _vm->_game->_script->evalExpr(&result); switch (destType) { case TYPE_VAR_INT8: case TYPE_ARRAY_INT8: WRITE_VARO_UINT8(dest + i, _vm->_game->_script->getResultInt()); break; case TYPE_VAR_INT16: case TYPE_ARRAY_INT16: WRITE_VARO_UINT16(dest + i * 2, _vm->_game->_script->getResultInt()); break; case TYPE_VAR_INT32: case TYPE_ARRAY_INT32: WRITE_VAR_OFFSET(dest + i * 4, _vm->_game->_script->getResultInt()); break; case TYPE_VAR_INT32_AS_INT16: WRITE_VARO_UINT16(dest + i * 4, _vm->_game->_script->getResultInt()); break; case TYPE_VAR_STR: case TYPE_ARRAY_STR: if (srcType == TYPE_IMM_INT16) WRITE_VARO_UINT8(dest, result); else WRITE_VARO_STR(dest, _vm->_game->_script->getResultStr()); break; } } }