/* Выполнение строки кода */ AS3_Val QSPExecString(void *param, AS3_Val args) { char *s; QSP_CHAR *strWC; QSP_BOOL isRefresh; AS3_ArrayValue(args, "StrType, IntType", &s, &isRefresh); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspPrepareExecution(); if (qspIsDisableCodeExec) return AS3_False(); strWC = qspC2W(s); qspExecStringAsCodeWithArgs(strWC, 0, 0, 0); free(strWC); if (qspErrorNum) return AS3_False(); if (isRefresh) qspCallRefreshInt(QSP_FALSE); return AS3_True(); }
/* Загрузка состояния из файла */ AS3_Val QSPOpenSavedGame(void *param, AS3_Val args) { char *fileName; QSP_CHAR *fileNameWC; QSP_BOOL isRefresh; AS3_ArrayValue(args, "StrType, IntType", &fileName, &isRefresh); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspPrepareExecution(); if (qspIsDisableCodeExec) return AS3_False(); fileNameWC = qspC2W(fileName); qspOpenGameStatus(fileNameWC); free(fileNameWC); if (qspErrorNum) return AS3_False(); if (isRefresh) qspCallRefreshInt(QSP_FALSE); return AS3_True(); }
/* Выполнение кода указанной локации */ AS3_Val QSPExecLocationCode(void *param, AS3_Val args) { char *name; QSP_CHAR *nameWC; QSP_BOOL isRefresh; AS3_ArrayValue(args, "StrType, IntType", &name, &isRefresh); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspPrepareExecution(); if (qspIsDisableCodeExec) return AS3_False(); nameWC = qspC2W(name); qspExecLocByName(nameWC, QSP_FALSE); free(nameWC); if (qspErrorNum) return AS3_False(); if (isRefresh) qspCallRefreshInt(QSP_FALSE); return AS3_True(); }
/* Загрузка состояния из памяти */ QSP_BOOL QSPOpenSavedGameFromData(const void *data, int dataSize, QSP_BOOL isRefresh) { int dataLen; QSP_CHAR *ptr; if (qspIsExitOnError && qspErrorNum) return QSP_FALSE; qspPrepareExecution(); if (qspIsDisableCodeExec) return QSP_FALSE; dataLen = dataSize / sizeof(QSP_CHAR); ptr = (QSP_CHAR *)malloc((dataLen + 1) * sizeof(QSP_CHAR)); memcpy(ptr, data, dataSize); ptr[dataLen] = 0; qspOpenGameStatusFromString(ptr); free(ptr); if (qspErrorNum) return QSP_FALSE; if (isRefresh) qspCallRefreshInt(QSP_FALSE); return QSP_TRUE; }
/* Сохранение состояния в память */ AS3_Val QSPSaveGameAsData(void *param, AS3_Val args) { int len; QSP_BOOL isRefresh; AS3_Val data; QSP_CHAR *buf; AS3_ArrayValue(args, "AS3ValType, IntType", &data, &isRefresh); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspPrepareExecution(); if (qspIsDisableCodeExec) return AS3_False(); if (!(len = qspSaveGameStatusToString(&buf))) return AS3_False(); AS3_ByteArray_seek(data, 0, SEEK_SET); AS3_ByteArray_writeBytes(data, buf, len * sizeof(QSP_CHAR)); free(buf); if (isRefresh) qspCallRefreshInt(QSP_FALSE); return AS3_True(); }
/* Установить индекс выбранного объекта */ AS3_Val QSPSetSelObjectIndex(void *param, AS3_Val args) { int ind; QSP_BOOL isRefresh; AS3_ArrayValue(args, "IntType, IntType", &ind, &isRefresh); if (ind >= 0 && ind < qspCurObjectsCount && ind != qspCurSelObject) { if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspPrepareExecution(); if (qspIsDisableCodeExec) return AS3_False(); qspCurSelObject = ind; qspExecLocByVarNameWithArgs(QSP_FMT("ONOBJSEL"), 0, 0); if (qspErrorNum) return AS3_False(); if (isRefresh) qspCallRefreshInt(QSP_FALSE); } return AS3_True(); }
/* Загрузка состояния из памяти */ AS3_Val QSPOpenSavedGameFromData(void *param, AS3_Val args) { AS3_Val data; int dataSize, dataLen; QSP_BOOL isRefresh; QSP_CHAR *ptr; AS3_ArrayValue(args, "AS3ValType, IntType, IntType", &data, &dataSize, &isRefresh); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspPrepareExecution(); if (qspIsDisableCodeExec) return AS3_False(); dataLen = dataSize / sizeof(QSP_CHAR); ptr = (QSP_CHAR *)malloc((dataLen + 1) * sizeof(QSP_CHAR)); AS3_ByteArray_seek(data, 0, SEEK_SET); AS3_ByteArray_readBytes(ptr, data, dataSize); ptr[dataLen] = 0; qspOpenGameStatusFromString(ptr); free(ptr); if (qspErrorNum) return AS3_False(); if (isRefresh) qspCallRefreshInt(QSP_FALSE); return AS3_True(); }
/* Перезапуск игры */ void QSPRestartGame(QSP_BOOL *res, QSP_BOOL isRefresh) { if (qspIsExitOnError && qspErrorNum) { *res = QSP_FALSE; return; } qspPrepareExecution(); if (qspIsDisableCodeExec) { *res = QSP_FALSE; return; } qspNewGame(QSP_TRUE); if (qspErrorNum) { *res = QSP_FALSE; return; } if (isRefresh) qspCallRefreshInt(QSP_FALSE); *res = QSP_TRUE; }
/* Загрузка состояния из файла */ void QSPOpenSavedGame(QSP_BOOL *res, const QSP_CHAR *fileName, QSP_BOOL isRefresh) { if (qspIsExitOnError && qspErrorNum) { *res = QSP_FALSE; return; } qspPrepareExecution(); if (qspIsDisableCodeExec) { *res = QSP_FALSE; return; } qspOpenGameStatus((QSP_CHAR *)fileName); if (qspErrorNum) { *res = QSP_FALSE; return; } if (isRefresh) qspCallRefreshInt(QSP_FALSE); *res = QSP_TRUE; }
/* Выполнение кода локации-обработчика строки ввода */ void QSPExecUserInput(QSP_BOOL *res, QSP_BOOL isRefresh) { if (qspIsExitOnError && qspErrorNum) { *res = QSP_FALSE; return; } qspPrepareExecution(); if (qspIsDisableCodeExec) { *res = QSP_FALSE; return; } qspExecLocByVarNameWithArgs(QSP_FMT("USERCOM"), 0, 0); if (qspErrorNum) { *res = QSP_FALSE; return; } if (isRefresh) qspCallRefreshInt(QSP_FALSE); *res = QSP_TRUE; }
/* Выполнение кода указанной локации */ void QSPExecLocationCode(QSP_BOOL *res, const QSP_CHAR *name, QSP_BOOL isRefresh) { if (qspIsExitOnError && qspErrorNum) { *res = QSP_FALSE; return; } qspPrepareExecution(); if (qspIsDisableCodeExec) { *res = QSP_FALSE; return; } qspExecLocByName((QSP_CHAR *)name, QSP_FALSE); if (qspErrorNum) { *res = QSP_FALSE; return; } if (isRefresh) qspCallRefreshInt(QSP_FALSE); *res = QSP_TRUE; }
/* Выполнение строки кода */ void QSPExecString(QSP_BOOL *res, const QSP_CHAR *s, QSP_BOOL isRefresh) { if (qspIsExitOnError && qspErrorNum) { *res = QSP_FALSE; return; } qspPrepareExecution(); if (qspIsDisableCodeExec) { *res = QSP_FALSE; return; } qspExecStringAsCodeWithArgs((QSP_CHAR *)s, 0, 0, 0); if (qspErrorNum) { *res = QSP_FALSE; return; } if (isRefresh) qspCallRefreshInt(QSP_FALSE); *res = QSP_TRUE; }
/* Сохранение состояния в память */ QSP_BOOL QSPSaveGameAsData(void *buf, int bufSize, int *realSize, QSP_BOOL isRefresh) { int len, size; QSP_CHAR *data; if (qspIsExitOnError && qspErrorNum) return QSP_FALSE; qspPrepareExecution(); if (qspIsDisableCodeExec) return QSP_FALSE; if (!(len = qspSaveGameStatusToString(&data))) { *realSize = 0; return QSP_FALSE; } size = len * sizeof(QSP_CHAR); *realSize = size; if (size > bufSize) { free(data); return QSP_FALSE; } memcpy(buf, data, size); free(data); if (isRefresh) qspCallRefreshInt(QSP_FALSE); return QSP_TRUE; }