public void FnFadeUp(uint palNum, uint scroll)
{
//_currentScreen points to new screen,
//_scrollScreen points to graphic showing old room
if ((scroll != 123) && (scroll != 321))
scroll = 0;
if ((scroll == 0) || SystemVars.Instance.SystemFlags.HasFlag(SystemFlags.NoScroll))
{
var palette = _skyCompact.FetchCptRaw((ushort)palNum);
if (palette == null)
throw new NotSupportedException(string.Format("Screen::fnFadeUp: can't fetch compact {0:X2}", palNum));
//# ifdef SCUMM_BIG_ENDIAN
// byte tmpPal[VGA_COLORS * 3];
// for (uint16 cnt = 0; cnt < VGA_COLORS * 3; cnt++)
// tmpPal[cnt] = palette[cnt ^ 1];
// paletteFadeUp(tmpPal);
//#else
PaletteFadeUp(palette);
//#endif
}
else if (scroll == 123)
{
// scroll left (going right)
System.Diagnostics.Debug.Assert(Current != null && _scrollScreen != null);
for (var scrollCnt = 0; scrollCnt < GameScreenWidth / ScrollJump - 1; scrollCnt++)
{
var scrNewPtr = scrollCnt * ScrollJump;
var scrOldPtr = 0;
for (var lineCnt = 0; lineCnt < GameScreenHeight; lineCnt++)
{
Buffer.BlockCopy(_scrollScreen, scrOldPtr + ScrollJump, _scrollScreen, scrOldPtr,
GameScreenWidth - ScrollJump);
Buffer.BlockCopy(Current, scrNewPtr, _scrollScreen, scrOldPtr + GameScreenWidth - ScrollJump,
GameScreenWidth - ScrollJump);
scrNewPtr += GameScreenWidth;
scrOldPtr += GameScreenWidth;
}
ShowScreen(_scrollScreen);
WaitForTick();
}
ShowScreen(Current);
}
else if (scroll == 321)
{
// scroll right (going left)
System.Diagnostics.Debug.Assert(Current != null && _scrollScreen != null);
for (var scrollCnt = 0; scrollCnt < GameScreenWidth / ScrollJump - 1; scrollCnt++)
{
var scrNewPtr = GameScreenWidth - (scrollCnt + 1) * ScrollJump;
var scrOldPtr = 0;
for (var lineCnt = 0; lineCnt < GameScreenHeight; lineCnt++)
{
Buffer.BlockCopy(_scrollScreen, scrOldPtr + ScrollJump, _scrollScreen, scrOldPtr,
GameScreenWidth - ScrollJump);
Buffer.BlockCopy(Current, scrNewPtr, _scrollScreen, scrOldPtr, ScrollJump);
scrNewPtr += GameScreenWidth;
scrOldPtr += GameScreenWidth;
}
ShowScreen(_scrollScreen);
WaitForTick();
}
ShowScreen(Current);
}
_scrollScreen = null;
}