void ToucheEngine::op_loadSprite() { debugC(9, kDebugOpcodes, "ToucheEngine::op_loadSprite()"); int16 index = _script.readNextWord(); int16 num = _script.readNextWord(); res_loadSprite(num, index); }
void ToucheEngine::loadGameStateData(Common::ReadStream *stream) { setKeyCharMoney(); clearDirtyRects(); _flagsTable[115] = 0; clearRoomArea(); _currentEpisodeNum = stream->readUint16LE(); _newMusicNum = stream->readUint16LE(); _currentRoomNum = stream->readUint16LE(); res_loadRoom(_currentRoomNum); int16 roomOffsX = _flagsTable[614] = stream->readUint16LE(); int16 roomOffsY = _flagsTable[615] = stream->readUint16LE(); _disabledInputCounter = stream->readUint16LE(); res_loadProgram(_currentEpisodeNum); setupEpisode(-1); saveOrLoadCommonArray(*stream, _programHitBoxTable); saveOrLoadCommonArray(*stream, _programBackgroundTable); saveOrLoadCommonArray(*stream, _programAreaTable); saveOrLoadCommonArray(*stream, _programWalkTable); saveOrLoadCommonArray(*stream, _programPointsTable); stream->read(_updatedRoomAreasTable, 200); for (uint i = 1; i < _updatedRoomAreasTable[0]; ++i) { updateRoomAreas(_updatedRoomAreasTable[i], -1); } saveOrLoadStaticArray(*stream, _sequenceEntryTable, NUM_SEQUENCES); saveOrLoadStaticArray(*stream, _flagsTable, 1024); saveOrLoadStaticArray(*stream, _inventoryList1, 100); saveOrLoadStaticArray(*stream, _inventoryList2, 100); saveOrLoadStaticArray(*stream, _inventoryList3, 6); saveOrLoadStaticArray(*stream, _keyCharsTable, NUM_KEYCHARS); saveOrLoadStaticArray(*stream, _inventoryItemsInfoTable, NUM_INVENTORY_ITEMS); saveOrLoadStaticArray(*stream, _talkTable, NUM_TALK_ENTRIES); _talkListEnd = stream->readUint16LE(); _talkListCurrent = stream->readUint16LE(); if (stream->readUint32LE() != saveLoadEndMarker) { warning("Corrupted gamestate data"); // if that ever happens, exit the game quitGame(); } _flagsTable[614] = roomOffsX; _flagsTable[615] = roomOffsY; for (uint i = 0; i < NUM_SEQUENCES; ++i) { if (_sequenceEntryTable[i].seqNum != -1) { res_loadSequence(_sequenceEntryTable[i].seqNum, i); } if (_sequenceEntryTable[i].sprNum != -1) { res_loadSprite(_sequenceEntryTable[i].sprNum, i); } } _currentKeyCharNum = _flagsTable[104]; _inventoryStateTable[0].displayOffset = 0; _inventoryStateTable[1].displayOffset = 0; _inventoryStateTable[2].displayOffset = 0; drawInventory(_currentKeyCharNum, 1); Graphics::copyRect(_offscreenBuffer, kScreenWidth, 0, 0, _backdropBuffer, _currentBitmapWidth, _flagsTable[614], _flagsTable[615], kScreenWidth, kRoomHeight); updateRoomRegions(); _fullRedrawCounter = 1; _roomNeedRedraw = false; if (_flagsTable[617] != 0) { res_loadSpeech(_flagsTable[617]); } debug(0, "Loaded state, current episode %d", _currentEpisodeNum); }