int KyraEngine_MR::o3_goodConscienceChat(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_goodConscienceChat(%p) (%d)", (const void *)script, stackPos(0)); int id = stackPos(0); const char *str = (const char *)getTableEntry(_useActorBuffer ? _actorFile : _sceneStrings, id); goodConscienceChat(str, _vocHigh, id); return 0; }
int KyraEngine_MR::o3_npcChatSequence(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_npcChatSequence(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1)); const int id = stackPos(0); const char *str = (const char *)getTableEntry(_sceneStrings, id); if (str) npcChatSequence(str, stackPos(1), _vocHigh, id); return 0; }
NonEmptyOctetString ParserVocabulary::resolveStringOrIndex(TableNames table, const NonIdentifyingStringOrIndex &input) const { unsigned int stringIndex = input._stringIndex; if (stringIndex == INDEX_NOT_SET) { return decodeCharacterString(input._characterString); } return getTableEntry(table, stringIndex); }
void KyraEngine_MR::eelScript() { if (_chatText) return; _screen->hideMouse(); if (_inventoryState) hideInventory(); removeHandItem(); objectChat((const char *)getTableEntry(_cCodeFile, 35), 0, 204, 35); objectChat((const char *)getTableEntry(_cCodeFile, 40), 0, 204, 40); setGameFlag(0xD1); snd_playSoundEffect(0x2A, 0xC8); setGameFlag(0x171); switch (_characterShapeFile-1) { case 0: runAnimationScript("EELS01.EMC", 0, 0, 1, 1); break; case 1: runAnimationScript("EELS02.EMC", 0, 0, 1, 1); break; case 2: runAnimationScript("EELS03.EMC", 0, 0, 1, 1); break; case 3: runAnimationScript("EELS04.EMC", 0, 0, 1, 1); break; default: resetGameFlag(0x171); runAnimationScript("EELS00.EMC", 0, 0, 1, 1); } changeChapter(2, 29, 0, 4); _screen->showMouse(); }
int KyraEngine_MR::o3_objectChat(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_objectChat(%p) (%d)", (const void *)script, stackPos(0)); int id = stackPos(0); const char *str = (const char *)getTableEntry(_useActorBuffer ? _actorFile : _sceneStrings, id); if (str) { objectChat(str, 0, _vocHigh, id); playStudioSFX(str); } return 0; }
NonEmptyOctetString ParserVocabulary::resolveStringOrIndex(TableNames table, const IdentifyingStringOrIndex &input) const { assert(table > 0 && table < TABLENAMES_MAX); unsigned int stringIndex = input._stringIndex; if (stringIndex == INDEX_NOT_SET) { return input._literalCharacterString; } return getTableEntry(table, stringIndex); }
char *KyraEngine_HoF::getTableString(int id, uint8 *buffer, int decode) { char *string = (char *)getTableEntry(buffer, id); if (decode && _flags.lang != Common::JA_JPN) { Util::decodeString1(string, _internStringBuf); Util::decodeString2(_internStringBuf, _internStringBuf); string = _internStringBuf; } return string; }
void KyraEngine_MR::timerFleaDeath(int arg) { _timer->setCountdown(4, 5400); saveGameStateIntern(999, "Autosave", 0); _screen->hideMouse(); _timer->disable(4); runAnimationScript("FLEADTH1.EMC", 0, 0, 1, 1); runAnimationScript("FLEADTH2.EMC", 0, 0, 1, 0); showBadConscience(); delay(60, true); const char *str1 = (const char *)getTableEntry(_cCodeFile, 130); const char *str2 = (const char *)getTableEntry(_cCodeFile, 131); if (str1 && str2) { badConscienceChat(str1, 204, 130); badConscienceChat(str2, 204, 131); } delay(60, true); hideBadConscience(); runAnimationScript("FLEADTH3.EMC", 0, 0, 0, 1); _deathHandler = 9; _screen->showMouse(); }
bool KyraEngine_MR::updateScore(int scoreId, int strId) { int scoreIndex = (scoreId >> 3); int scoreBit = scoreId & 7; if ((_scoreFlagTable[scoreIndex] & (1 << scoreBit)) != 0) return false; setNextIdleAnimTimer(); _scoreFlagTable[scoreIndex] |= (1 << scoreBit); strcpy(_stringBuffer, (const char *)getTableEntry(_scoreFile, strId)); strcat(_stringBuffer, ": "); assert(scoreId < _scoreTableSize); int count = _scoreTable[scoreId]; if (count > 0) scoreIncrease(count, _stringBuffer); setNextIdleAnimTimer(); return true; }
//ade_set_args(state, arguments, variables) //---------------------------------------------- //based on "Programming in Lua" // //Takes variables given and pushes them onto the //Lua stack. Use it to return variables from a //Lua scripting function. // //NOTE: You can also use this to push arguments //on to the stack in series. See script_state::SetHookVar int ade_set_args(lua_State *L, const char *fmt, ...) { //Start throught va_list vl; int nargs; int setargs; //args actually set va_start(vl, fmt); nargs = 0; setargs = 0; while(*fmt != '\0') { switch(*fmt++) { case '*': lua_pushnil(L); break; case 'b': //WMC - Bool is actually int for GCC (Why...?) lua_pushboolean(L, va_arg(vl, int) ? 1 : 0); break; case 'd': lua_pushnumber(L, va_arg(vl, double)); break; case 'f': lua_pushnumber(L, va_arg(vl, double)); break; case 'i': lua_pushnumber(L, va_arg(vl, int)); break; case 's': { //WMC - Isn't working with HookVar for some strange reason char *s = va_arg(vl, char*); lua_pushstring(L, s); break; } case 'x': lua_pushnumber(L, f2fl(va_arg(vl, fix))); break; case 'o': { //WMC - char must be 1 byte, foo. Assert(sizeof(char)==1); //WMC - step by step //Copy over objectdata ade_odata od = (ade_odata) va_arg(vl, ade_odata); //Create new LUA object and get handle char *newod = (char*)lua_newuserdata(L, od.size + sizeof(ODATA_SIG_TYPE)); //Create or get object metatable luaL_getmetatable(L, getTableEntry(od.idx).Name); //Set the metatable for the object lua_setmetatable(L, -2); //Copy the actual object data to the Lua object memcpy(newod, od.buf, od.size); //Also copy in the unique sig if(od.sig != NULL) memcpy(newod + od.size, od.sig, sizeof(ODATA_SIG_TYPE)); else { ODATA_SIG_TYPE tempsig = ODATA_SIG_DEFAULT; memcpy(newod + od.size, &tempsig, sizeof(ODATA_SIG_TYPE)); } break; } case 't': { // Set a table luacpp::LuaTable* table = va_arg(vl, luacpp::LuaTable*); // This must be a pointer since C++ classes can't be passed by vararg table->pushValue(); break; } case 'u': { // Set a function luacpp::LuaFunction* func = va_arg(vl, luacpp::LuaFunction*); // This must be a pointer since C++ classes can't be passed by vararg func->pushValue(); break; } //WMC - Don't forget to update lua_set_arg default: Error(LOCATION, "Bad character passed to ade_set_args; (%c)", *(fmt-1)); setargs--; } nargs++; setargs++; } va_end(vl); return setargs; }
int KyraEngine_MR::o3_showSceneStringsMessage(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_showSceneStringsMessage(%p) (%d)", (const void *)script, stackPos(0)); showMessage((const char *)getTableEntry(_sceneStrings, stackPos(0)), 0xFF, 0xF0); return 0; }
int KyraEngine_MR::o3_daggerWarning(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_daggerWarning(%p) ()", (const void *)script); int selection = 1; _screen->hideMouse(); _screen->copyRegionToBuffer(1, 0, 0, 320, 200, _screenBuffer); int curPageBackUp = _screen->_curPage; _screen->_curPage = 2; _screen->drawFilledBox(0, 0, 0x13F, 0xC7, 0xB4, 0xB3, 0xB6); _screen->drawFilledBox(0xF, 0xAA, 0x68, 0xBA, 0xB4, 0xB3, 0xB6); _screen->drawFilledBox(0x73, 0xAA, 0xCC, 0xBA, 0xB4, 0xB3, 0xB6); _screen->drawFilledBox(0xD6, 0xAA, 0x12F, 0xBA, 0xB4, 0xB3, 0xB6); int y = 15; for (int i = 100; i <= 107; ++i) { const char *str = (const char *)getTableEntry(_cCodeFile, i); int x = _text->getCenterStringX(str, 0, 0x13F); _text->printText(str, x, y, 0xFF, 0xF0, 0x00); y += 10; } y += 15; for (int i = 110; i <= 113; ++i) { const char *str = (const char *)getTableEntry(_cCodeFile, i); int x = _text->getCenterStringX(str, 0, 0x13F); _text->printText(str, x, y, 0xFF, 0xF0, 0x00); y += 10; } const char *str = 0; int x = 0; str = (const char *)getTableEntry(_cCodeFile, 120); x = _text->getCenterStringX(str, 0xF, 0x68); _text->printText(str, x, 174, 0xFF, 0xF0, 0x00); str = (const char *)getTableEntry(_cCodeFile, 121); x = _text->getCenterStringX(str, 0x73, 0xCC); _text->printText(str, x, 174, 0xFF, 0xF0, 0x00); str = (const char *)getTableEntry(_cCodeFile, 122); x = _text->getCenterStringX(str, 0xD6, 0x12F); _text->printText(str, x, 174, 0xFF, 0xF0, 0x00); _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0); _screen->updateScreen(); _screen->_curPage = curPageBackUp; _screen->showMouse(); while (!shouldQuit()) { int keys = checkInput(0); removeInputTop(); if (keys == 198 || keys == 199) { if (_mouseX >= 15 && _mouseX <= 104 && _mouseY >= 170 && _mouseY <= 186) { selection = 1; break; } else if (_mouseX >= 115 && _mouseX <= 204 && _mouseY >= 170 && _mouseY <= 186) { selection = 2; break; } else if (_mouseX >= 214 && _mouseX <= 303 && _mouseY >= 170 && _mouseY <= 186) { selection = 3; break; } } delay(10); } restorePage3(); _screen->copyBlockToPage(1, 0, 0, 320, 200, _screenBuffer); return selection; }