protected virtual void CursorCommand()
{
var subOp = ReadByte();
switch (subOp)
{
case 0x90: // SO_CURSOR_ON Turn cursor on
_cursor.State = 1;
VerbMouseOver(0);
break;
case 0x91: // SO_CURSOR_OFF Turn cursor off
_cursor.State = 0;
VerbMouseOver(0);
break;
case 0x92: // SO_USERPUT_ON
_userPut = 1;
break;
case 0x93: // SO_USERPUT_OFF
_userPut = 0;
break;
case 0x94: // SO_CURSOR_SOFT_ON Turn soft cursor on
_cursor.State++;
if (_cursor.State > 1)
throw new NotSupportedException("Cursor state greater than 1 in script");
VerbMouseOver(0);
break;
case 0x95: // SO_CURSOR_SOFT_OFF Turn soft cursor off
_cursor.State--;
VerbMouseOver(0);
break;
case 0x96: // SO_USERPUT_SOFT_ON
_userPut++;
break;
case 0x97: // SO_USERPUT_SOFT_OFF
_userPut--;
break;
case 0x99: // SO_CURSOR_IMAGE Set cursor image
{
int room, obj;
PopRoomAndObj(out room, out obj);
SetCursorFromImg(obj, room, 1);
break;
}
case 0x9A: // SO_CURSOR_HOTSPOT Set cursor hotspot
{
var y = (short)Pop();
var x = (short)Pop();
SetCursorHotspot(new Point(x, y));
UpdateCursor();
}
break;
case 0x9C: // SO_CHARSET_SET
InitCharset(Pop());
break;
case 0x9D: // SO_CHARSET_COLOR
var args = GetStackList(16);
for (var i = 0; i < args.Length; i++)
CharsetColorMap[i] = _charsetData[String[1].Default.Charset][i] = (byte)args[i];
break;
case 0xD6: // SO_CURSOR_TRANSPARENT Set cursor transparent color
SetCursorTransparency(Pop());
break;
default:
throw new NotSupportedException(string.Format("CursorCommand: default case {0:X2}", subOp));
}
Variables[VariableCursorState.Value] = _cursor.State;
Variables[VariableUserPut.Value] = _userPut;
}