void AGOSEngine::vc82_getPathValue() { uint8 val; uint16 var = vcReadNextWord(); if (getGameType() == GType_FF && getBitFlag(82)) { val = _pathValues1[_GPVCount1++]; } else { val = _pathValues[_GPVCount++]; } vcWriteVar(var, val); }
void AGOSEngine::scrollScreen() { byte *dst; const byte *src; uint x, y; dst = getBackGround(); if (_scrollXMax == 0) { uint screenSize = 8 * _screenWidth; if (_scrollFlag < 0) { memmove(dst + screenSize, dst, _scrollWidth * _screenHeight - screenSize); } else { memmove(dst, dst + screenSize, _scrollWidth * _screenHeight - screenSize); } y = _scrollY - 8; if (_scrollFlag > 0) { dst += _screenHeight * _screenWidth - screenSize; y += 488; } src = _scrollImage + y / 2; decodeRow(dst, src + readUint32Wrapper(src), _scrollWidth, _backGroundBuf->pitch); _scrollY += _scrollFlag; vcWriteVar(250, _scrollY); fillBackFromBackGround(_screenHeight, _scrollWidth); } else { if (_scrollFlag < 0) { memmove(dst + 8, dst, _screenWidth * _scrollHeight - 8); } else { memmove(dst, dst + 8, _screenWidth * _scrollHeight - 8); } x = _scrollX; x -= (getGameType() == GType_FF) ? 8 : 1; if (_scrollFlag > 0) { dst += _screenWidth - 8; x += (getGameType() == GType_FF) ? 648 : 41; } if (getGameType() == GType_FF) src = _scrollImage + x / 2; else src = _scrollImage + x * 4; decodeColumn(dst, src + readUint32Wrapper(src), _scrollHeight, _backGroundBuf->pitch); _scrollX += _scrollFlag; vcWriteVar(251, _scrollX); if (getGameType() == GType_SIMON2) { src = getBackGround(); dst = (byte *)_window4BackScn->pixels; for (int i = 0; i < _scrollHeight; i++) { memcpy(dst, src, _screenWidth); src += _backGroundBuf->pitch; dst += _window4BackScn->pitch; } } else { fillBackFromBackGround(_scrollHeight, _screenWidth); } setMoveRect(0, 0, 320, _scrollHeight); _window4Flag = 1; } _scrollFlag = 0; if (getGameType() == GType_SIMON2) { AnimTable *animTable = _screenAnim1; while (animTable->srcPtr) { animTable->srcPtr = 0; animTable++; } VgaSprite *vsp = _vgaSprites; while (vsp->id) { vsp->windowNum |= 0x8000; vsp++; } } }
void AGOSEngine::vc47_addToVar() { uint16 var = vcReadNextWord(); vcWriteVar(var, vcReadVar(var) + vcReadVar(vcReadNextWord())); }
void AGOSEngine::vc32_copyVar() { uint16 a = vcReadVar(vcReadNextWord()); vcWriteVar(vcReadNextWord(), a); }