NScumm.Dump.ScriptParser8.ActorOps C# (CSharp) Method

ActorOps() protected method

protected ActorOps ( ) : Statement
return Statement
        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();
        }