private void DoSprites(byte layer)
{
ushort drawListNum = Logic.DRAW_LIST_NO;
while (Logic.ScriptVariables[drawListNum] != 0)
{
// std sp loop
var idNum = Logic.ScriptVariables[drawListNum];
drawListNum++;
var drawList = new UShortAccess(_skyCompact.FetchCptRaw((ushort)idNum), 0);
while (drawList[0] != 0)
{
// new_draw_list:
while ((drawList[0] != 0) && (drawList[0] != 0xFFFF))
{
// back_loop:
// not_new_list
var spriteData = _skyCompact.FetchCpt(drawList[0]);
drawList.Offset += 2;
if (((spriteData.Core.status & (1 << layer)) != 0) &&
(spriteData.Core.screen == Logic.ScriptVariables[Logic.SCREEN]))
{
var toBeDrawn = SkyEngine.ItemList[spriteData.Core.frame >> 6];
if (toBeDrawn == null)
{
// TODO: debug(9, "Spritedata %d not loaded", spriteData.frame >> 6);
spriteData.Core.status = 0;
}
else
{
DrawSprite(toBeDrawn, spriteData);
if (layer == Back)
VerticalMask();
if ((spriteData.Core.status & 8) != 0)
VectorToGame(0x81);
else
VectorToGame(1);
}
}
}
while (drawList[0] == 0xFFFF)
drawList = new UShortAccess(_skyCompact.FetchCptRaw(drawList[1]), 0);
}
}
}