void AGOSEngine::vcStopAnimation(uint16 zone, uint16 sprite) { uint16 oldCurSpriteId, oldCurZoneNum; VgaSprite *vsp; VgaTimerEntry *vte; const byte *vcPtrOrg; oldCurSpriteId = _vgaCurSpriteId; oldCurZoneNum = _vgaCurZoneNum; vcPtrOrg = _vcPtr; _vgaCurZoneNum = zone; _vgaCurSpriteId = sprite; vsp = findCurSprite(); if (vsp->id) { vc25_halt_sprite(); vte = _vgaTimerList; while (vte->delay) { if (vte->id == _vgaCurSpriteId && vte->zoneNum == _vgaCurZoneNum) { deleteVgaEvent(vte); break; } vte++; } } _vgaCurZoneNum = oldCurZoneNum; _vgaCurSpriteId = oldCurSpriteId; _vcPtr = vcPtrOrg; }
void AGOSEngine::vc46_setSpriteY() { VgaSprite *vsp = findCurSprite(); vsp->y = vcReadVar(vcReadNextWord()); vsp->windowNum |= 0x8000; dirtyBackGround(); _vgaSpriteChanged++; }
void AGOSEngine::vc80_setOverlayImage() { VgaSprite *vsp = findCurSprite(); vsp->image = vcReadVarOrWord(); vsp->x += vcReadNextWord(); vsp->y += vcReadNextWord(); vsp->flags = kDFOverlayed; _vgaSpriteChanged++; }
void AGOSEngine::vc61_setMaskImage() { VgaSprite *vsp = findCurSprite(); vsp->image = vcReadVarOrWord(); vsp->x += vcReadNextWord(); vsp->y += vcReadNextWord(); vsp->flags = kDFMasked | kDFSkipStoreBG; vsp->windowNum |= 0x8000; dirtyBackGround(); _vgaSpriteChanged++; }
void AGOSEngine::vc76_setScaleXOffs() { if (getGameType() == GType_PP && getBitFlag(120)) { VgaSprite *vsp1, *vsp2; uint16 old_file_1, tmp1, tmp2; old_file_1 = _vgaCurSpriteId; _vgaCurSpriteId = vcReadVar(vcReadNextWord()); vsp1 = findCurSprite(); _vgaCurSpriteId = vcReadVar(vcReadNextWord()); vsp2 = findCurSprite(); tmp1 = vsp1->x; tmp2 = vsp2->x; vsp1->x = tmp2; vsp2->x = tmp1; tmp1 = vsp1->y; tmp2 = vsp2->y; vsp1->y = tmp2; vsp2->y = tmp1; _vgaCurSpriteId = old_file_1; _vcPtr += 2; } else { VgaSprite *vsp = findCurSprite(); vsp->image = vcReadNextWord(); int16 x = vcReadNextWord(); uint16 var = vcReadNextWord(); vsp->x += getScale(vsp->y, x); _variableArrayPtr[var] = vsp->x; checkScrollX(x, vsp->x); vsp->flags = kDFScaled; } }
void AGOSEngine::vc77_setScaleYOffs() { VgaSprite *vsp = findCurSprite(); vsp->image = vcReadNextWord(); int16 y = vcReadNextWord(); uint16 var = vcReadNextWord(); vsp->y += getScale(vsp->y, y); _variableArrayPtr[var] = vsp->y; if (y != 0) checkScrollY(y, vsp->y); vsp->flags = kDFScaled; }
void AGOSEngine_Simon1::vcStopAnimation(uint16 zone, uint16 sprite) { uint16 oldCurSpriteId, oldCurZoneNum; VgaSleepStruct *vfs; VgaSprite *vsp; VgaTimerEntry *vte; const byte *vcPtrOrg; oldCurSpriteId = _vgaCurSpriteId; oldCurZoneNum = _vgaCurZoneNum; vcPtrOrg = _vcPtr; _vgaCurZoneNum = zone; _vgaCurSpriteId = sprite; vfs = _waitSyncTable; while (vfs->ident != 0) { if (vfs->id == _vgaCurSpriteId && vfs->zoneNum == _vgaCurZoneNum) { while (vfs->ident != 0) { memcpy(vfs, vfs + 1, sizeof(VgaSleepStruct)); vfs++; } break; } vfs++; } vsp = findCurSprite(); if (vsp->id) { vc25_halt_sprite(); vte = _vgaTimerList; while (vte->delay) { if (vte->id == _vgaCurSpriteId && vte->zoneNum == _vgaCurZoneNum) { deleteVgaEvent(vte); break; } vte++; } } _vgaCurZoneNum = oldCurZoneNum; _vgaCurSpriteId = oldCurSpriteId; _vcPtr = vcPtrOrg; }
void AGOSEngine_Feeble::vc48_setPathFinder() { uint16 a = (uint16)_variableArrayPtr[12]; const uint16 *p = _pathFindArray[a - 1]; VgaSprite *vsp = findCurSprite(); int16 x, y, ydiff; int16 x1, y1, x2, y2; uint pos = 0; x = vsp->x; while (x >= (int16)readUint16Wrapper(p + 2)) { p += 2; pos++; } x1 = readUint16Wrapper(p); y1 = readUint16Wrapper(p + 1); x2 = readUint16Wrapper(p + 2); y2 = readUint16Wrapper(p + 3); if (x2 != 9999) { ydiff = y2 - y1; if (ydiff < 0) { ydiff = -ydiff; x = vsp->x & 7; ydiff *= x; ydiff /= 8; ydiff = -ydiff; } else { x = vsp->x & 7; ydiff *= x; ydiff /= 8; } y1 += ydiff; } y = vsp->y; vsp->y = y1; checkScrollY(y1 - y, y1); _variableArrayPtr[11] = x1; _variableArrayPtr[13] = pos; }
void AGOSEngine::vc78_computeXY() { VgaSprite *vsp = findCurSprite(); uint16 a = (uint16)_variableArrayPtr[12]; uint16 b = (uint16)_variableArrayPtr[13]; const uint16 *p = _pathFindArray[a - 1]; p += b * 2; uint16 posx = readUint16Wrapper(p); _variableArrayPtr[15] = posx; vsp->x = posx; uint16 posy = readUint16Wrapper(p + 1); _variableArrayPtr[16] = posy; vsp->y = posy; if (getGameType() == GType_FF) { setBitFlag(85, false); if (getBitFlag(74)) { centerScroll(); } } }