protected override Statement ActorOps()
{
var subOp = ReadByte();
if (subOp == 0x7A)
{
return new BinaryExpression(CurrentActor, Operator.Assignment, Pop()).ToStatement();
}
var actor = (Expression)CurrentActor;
switch (subOp)
{
case 0x64: // SO_ACTOR_COSTUME Set actor costume
actor = new MethodInvocation(new MemberAccess(actor, "SetCostume")).AddArgument(Pop());
break;
case 0x65: // SO_ACTOR_STEP_DIST Set actor width of steps
{
var j = Pop();
var i = Pop();
actor = new MethodInvocation(new MemberAccess(actor, "WalkSpeed")).AddArguments(i, j);
}
break;
case 0x67: // SO_ACTOR_ANIMATION_DEFAULT Set actor animation to default
actor = new MethodInvocation(new MemberAccess(actor, "Default"));
break;
case 0x68: // SO_ACTOR_ANIMATION_INIT Initialize animation
{
var a = Pop();
actor = new MethodInvocation(new MemberAccess(actor, "Init")).AddArgument(a);
}
break;
case 0x69: // SO_ACTOR_ANIMATION_TALK Set actor animation to talk animation
{
var b = Pop();
var a = Pop();
actor = new MethodInvocation(new MemberAccess(actor, "SetTalkAnim")).AddArguments(a, b);
}
break;
case 0x6A: // SO_ACTOR_ANIMATION_WALK Set actor animation to walk animation
{
var f = Pop();
actor = new MethodInvocation(new MemberAccess(actor, "SetWalkFrame")).AddArguments(f);
}
break;
case 0x6B: // SO_ACTOR_ANIMATION_STAND Set actor animation to standing animation
{
var a = Pop();
actor = new MethodInvocation(new MemberAccess(actor, "SetStandAnim")).AddArgument(a);
}
break;
case 0x6C: // SO_ACTOR_ANIMATION_SPEED Set speed of animation
{
var a = Pop();
actor = new MethodInvocation(new MemberAccess(actor, "SetSpeed")).AddArgument(a);
}
break;
case 0x6D: // SO_ACTOR_DEFAULT
{
actor = new MethodInvocation(new MemberAccess(actor, "InitDefault"));
}
break;
case 0x6E: // SO_ACTOR_ELEVATION
actor = new MethodInvocation(new MemberAccess(actor, "Elevation")).AddArgument(Pop());
break;
case 0x6F: // SO_ACTOR_PALETTE Set actor palette
{
var b = Pop();
var a = Pop();
actor = new MethodInvocation(new MemberAccess(actor, "SetPalette")).AddArguments(a, b);
}
break;
case 0x70: // SO_ACTOR_TALK_COLOR Set actor talk color
actor = new MethodInvocation(new MemberAccess(actor, "TalkColor")).AddArgument(Pop());
break;
case 0x71: // SO_ACTOR_NAME Set name of actor
actor = new MethodInvocation(new MemberAccess(actor, "Name")).AddArgument(ReadCharacters());
break;
case 0x72: // SO_ACTOR_WIDTH Set width of actor
actor = new MethodInvocation(new MemberAccess(actor, "Width")).AddArgument(Pop());
break;
case 0x73: // SO_ACTOR_SCALE Set scaling of actor
actor = new MethodInvocation(new MemberAccess(actor, "Scale")).AddArgument(Pop());
break;
case 0x74: // SO_ACTOR_NEVER_ZCLIP
actor = new MethodInvocation(new MemberAccess(actor, "NoZClip"));
break;
case 0x75: // SO_ACTOR_ALWAYS_ZCLIP
actor = new MethodInvocation(new MemberAccess(actor, "ZClip")).AddArgument(Pop());
break;
case 0x76: // SO_ACTOR_IGNORE_BOXES Make actor ignore boxes
actor = new MethodInvocation(new MemberAccess(actor, "IgnoreBoxes"));
break;
case 0x77: // SO_ACTOR_FOLLOW_BOXES Make actor follow boxes
actor = new MethodInvocation(new MemberAccess(actor, "FollowBoxes"));
break;
case 0x78: // SO_ACTOR_SPECIAL_DRAW
actor = new MethodInvocation(new MemberAccess(actor, "SpecialDraw")).AddArgument(Pop());
break;
case 0x79: // SO_ACTOR_TEXT_OFFSET Set text offset relative to actor
{
var y = Pop();
var x = Pop();
actor = new MethodInvocation(new MemberAccess(actor, "Offset")).AddArguments(x, y);
}
break;
case 0x7B: // SO_ACTOR_VARIABLE Set actor variable
{
var b = Pop();
var a = Pop();
actor = new MethodInvocation(new MemberAccess(actor, "SetAnimVar")).AddArguments(a, b);
}
break;
case 0x7C: // SO_ACTOR_IGNORE_TURNS_ON Make actor ignore turns
actor = new MethodInvocation(new MemberAccess(actor, "IgnoreTurns")).AddArgument(true);
break;
case 0x7D: // SO_ACTOR_IGNORE_TURNS_OFF Make actor follow turns
actor = new MethodInvocation(new MemberAccess(actor, "IgnoretTurns")).AddArgument(false);
break;
case 0x7E: // SO_ACTOR_NEW New actor
actor = new MethodInvocation(new MemberAccess(actor, "New"));
break;
case 0x7F: // SO_ACTOR_DEPTH Set actor Z position
actor = new MethodInvocation(new MemberAccess(actor, "Depth")).AddArgument(Pop());
break;
case 0x80: // SO_ACTOR_STOP
actor = new MethodInvocation(new MemberAccess(actor, "Stop"));
break;
case 0x81: // SO_ACTOR_FACE Make actor face angle
actor = new MethodInvocation(new MemberAccess(actor, "SetDirection")).AddArgument(Pop());
break;
case 0x82: // SO_ACTOR_TURN Turn actor
actor = new MethodInvocation(new MemberAccess(actor, "Turn")).AddArgument(Pop());
break;
case 0x83: // SO_ACTOR_WALK_SCRIPT Set walk script for actor?
actor = new MethodInvocation(new MemberAccess(actor, "WalkScript")).AddArguments(Pop());
break;
case 0x84: // SO_ACTOR_TALK_SCRIPT Set talk script for actor?
actor = new MethodInvocation(new MemberAccess(actor, "TalkScript")).AddArguments(Pop());
break;
case 0x85: // SO_ACTOR_WALK_PAUSE
actor = new MethodInvocation(new MemberAccess(actor, "Pause"));
break;
case 0x86: // SO_ACTOR_WALK_RESUME
actor = new MethodInvocation(new MemberAccess(actor, "Resume"));
break;
case 0x87: // SO_ACTOR_VOLUME Set volume of actor speech
actor = new MethodInvocation(new MemberAccess(actor, "Volume")).AddArgument(Pop());
break;
case 0x88: // SO_ACTOR_FREQUENCY Set frequency of actor speech
actor = new MethodInvocation(new MemberAccess(actor, "Frequency")).AddArgument(Pop());
break;
case 0x89: // SO_ACTOR_PAN
actor = new MethodInvocation(new MemberAccess(actor, "Pan")).AddArgument(Pop());
break;
default:
throw new NotSupportedException(string.Format("o6_actorOps: default case {0}", subOp));
}
return actor.ToStatement();
}