コード例 #1
0
            public override IAstNode Visit(ElementAccess node)
            {
                var name = node.Target as SimpleName;

                if (name != null && name.Name == "Variables" && node.Indices.Count == 1)
                {
                    var index = node.Indices[0] as IntegerLiteralExpression;
                    if (index != null)
                    {
                        if (KnownVariables.ContainsKey(index.Value))
                        {
                            return(new SimpleName(KnownVariables[index.Value]));
                        }
                    }
                }
                return(new ElementAccess((Expression)node.Target.Accept(this), node.Indices.Select(idx => (Expression)idx.Accept(this))));
            }
コード例 #2
0
        Statement ActorOps()
        {
            var        convertTable = new byte[] { 1, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20 };
            Expression actor        = new ElementAccess("Actors", GetVarOrDirectByte(OpCodeParameter.Param1));

            while ((_opCode = ReadByte()) != 0xFF)
            {
                if (Game.Version < 5)
                {
                    _opCode = ((_opCode & 0xE0) | convertTable[(_opCode & 0x1F) - 1]);
                }
                switch (_opCode & 0x1F)
                {
                case 0:
                {
                    /*						 dummy case */
                    var dummy = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(
                        new MemberAccess(actor,
                                         "ActorOpUnk0"))
                            .AddArgument(dummy);
                    break;
                }

                case 1:
                {                 // SO_COSTUME
                    var cost = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "Costume")).AddArgument(cost);
                }
                break;

                case 2:
                {                 // SO_STEP_DIST
                    var i = GetVarOrDirectByte(OpCodeParameter.Param1);
                    var j = GetVarOrDirectByte(OpCodeParameter.Param2);
                    actor = new MethodInvocation(new MemberAccess(actor, "SetWalkSpeed")).AddArguments(i, j);
                }
                break;

                case 3:
                {                 // SOSound
                    var sound = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "SetSound")).AddArgument(sound);
                }
                break;

                case 4:
                {                 // SO_WALK_ANIMATION
                    var walkFrame = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "SetWalkAnimation")).AddArgument(walkFrame);
                }
                break;

                case 5:
                {                // SO_TALK_ANIMATION
                    var talkStartFrame = GetVarOrDirectByte(OpCodeParameter.Param1);
                    var talkStopFrame  = GetVarOrDirectByte(OpCodeParameter.Param2);
                    actor = new MethodInvocation(new MemberAccess(actor, "SetTalkAnimation")).AddArguments(talkStartFrame, talkStopFrame);
                }
                break;

                case 6:
                {                // SO_STAND_ANIMATION
                    var standFrame = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "SetStandAnimation")).AddArgument(standFrame);
                }
                break;

                case 7:
                {                 // SO_ANIMATION
                    var i = GetVarOrDirectByte(OpCodeParameter.Param1);
                    var j = GetVarOrDirectByte(OpCodeParameter.Param2);
                    var k = GetVarOrDirectByte(OpCodeParameter.Param3);
                    actor = new MethodInvocation(new MemberAccess(actor, "SetAnimation")).AddArguments(i, j, k);
                }
                break;

                case 8:             // SO_DEFAULT
                    actor = new MethodInvocation(new MemberAccess(actor, "SetDefaultAnimation"));
                    break;

                case 9:
                {               // SO_ELEVATION
                    var elevation = GetVarOrDirectWord(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "SetElevation")).AddArgument(elevation);
                }
                break;

                case 10:            // SO_ANIMATION_DEFAULT
                    actor = new MethodInvocation(new MemberAccess(actor, "ResetAnimation"));
                    break;

                case 11:
                {               // SO_PALETTE
                    var i = GetVarOrDirectByte(OpCodeParameter.Param1);
                    var j = GetVarOrDirectByte(OpCodeParameter.Param2);
                    actor = new MethodInvocation(new MemberAccess(actor, "SetPalette")).AddArguments(i, j);
                }
                break;

                case 12:
                {               // SO_TALK_COLOR
                    var talkColor = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "SetTalkColor")).AddArgument(talkColor);
                }
                break;

                case 13:
                {                // SO_ACTOR_NAME
                    var name = ReadCharacters();
                    actor = new MethodInvocation(new MemberAccess(actor, "SetName")).AddArgument(name);
                }
                break;

                case 14:
                {               // SO_INIT_ANIMATION
                    var initFrame = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "SetInitAnimation")).AddArgument(initFrame);
                }
                break;

                case 16:
                {                // SO_ACTOR_WIDTH
                    var width = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "Width")).AddArgument(width);
                }
                break;

                case 17:
                {               // SO_ACTOR_SCALE
                    var args = new List <Expression>();
                    if (Game.Version == 4)
                    {
                        var arg = GetVarOrDirectByte(OpCodeParameter.Param1);
                        args.Add(arg);
                        args.Add(arg);
                    }
                    else
                    {
                        args.Add(GetVarOrDirectByte(OpCodeParameter.Param1));
                        args.Add(GetVarOrDirectByte(OpCodeParameter.Param2));
                    }
                    actor = new MethodInvocation(new MemberAccess(actor, "Scale")).AddArguments(args);
                }
                break;

                case 18:
                {               // SO_NEVER_ZCLIP
                    actor = new MethodInvocation(new MemberAccess(actor, "NeverZClip"));
                }
                break;

                case 19:
                {               // SO_ALWAYS_ZCLIP
                    var clip = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "ForceCLip")).AddArgument(clip);
                }
                break;

                case 20:        // SO_IGNORE_BOXES
                case 21:
                {               // SO_FOLLOW_BOXES
                    var ignoreBoxes = (_opCode & 1) == 0;
                    actor = new MethodInvocation(new MemberAccess(actor, "IgnoreBoxes")).AddArgument(ignoreBoxes.ToLiteral());
                }
                break;

                case 22:
                {               // SO_ANIMATION_SPEED
                    var animSpeed = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "AnimationSpeed")).AddArgument(animSpeed);
                }
                break;

                case 23:
                {                // SO_SHADOW
                    var shadowMode = GetVarOrDirectByte(OpCodeParameter.Param1);
                    actor = new MethodInvocation(new MemberAccess(actor, "ShadowMode")).AddArgument(shadowMode);
                }
                break;

                default:
                    throw new NotImplementedException(string.Format("ActorOps #{0} is not yet implemented, sorry :(", _opCode & 0x1F));
                }
            }
            return(actor.ToStatement());
        }
コード例 #3
0
        public override string Visit(ElementAccess node)
        {
            var indices = string.Join(", ", node.Indices.Select(index => index.Accept(this)));

            return(string.Format("{0}[{1}]", node.Target.Accept(this), indices));
        }
コード例 #4
0
        Statement VerbOps()
        {
            Expression verb = new ElementAccess("Verbs", GetVarOrDirectByte(OpCodeParameter.Param1));

            while ((_opCode = ReadByte()) != 0xFF)
            {
                switch (_opCode & 0x1F)
                {
                case 1:         // SO_VERB_IMAGE
                {
                    var a = GetVarOrDirectWord(OpCodeParameter.Param1);
                    verb = new MethodInvocation(new MemberAccess(verb, "SetImage")).AddArgument(a);
                }
                break;

                case 2:         // SO_VERB_NAME
                    var text = ReadCharacters();
                    verb = new MethodInvocation(new MemberAccess(verb, "SetName")).AddArgument(text);
                    break;

                case 3:         // SO_VERB_COLOR
                {
                    var color = GetVarOrDirectByte(OpCodeParameter.Param1);
                    verb = new MethodInvocation(new MemberAccess(verb, "SetColor")).AddArgument(color);
                }
                break;

                case 4:         // SO_VERB_HICOLOR
                    var hiColor = GetVarOrDirectByte(OpCodeParameter.Param1);
                    verb = new MethodInvocation(new MemberAccess(verb, "SetHiColor")).AddArgument(hiColor);
                    break;

                case 5:         // SO_VERB_AT
                    var left = GetVarOrDirectWord(OpCodeParameter.Param1);
                    var top  = GetVarOrDirectWord(OpCodeParameter.Param2);
                    verb = new MethodInvocation(new MemberAccess(verb, "At")).AddArguments(left, top);
                    break;

                case 6:
                    // SO_VERB_ON
                    verb = new MethodInvocation(new MemberAccess(verb, "On"));
                    break;

                case 7:
                    // SO_VERB_OFF
                    verb = new MethodInvocation(new MemberAccess(verb, "Off"));
                    break;

                case 8:         // SO_VERB_DELETE
                    verb = new MethodInvocation(new MemberAccess(verb, "Delete"));
                    break;

                case 9:
                {
                    // SO_VERB_NEW
                    verb = new MethodInvocation(new MemberAccess(verb, "New"));
                    break;
                }

                case 16:        // SO_VERB_DIMCOLOR
                {
                    var color = GetVarOrDirectByte(OpCodeParameter.Param1);
                    verb = new MethodInvocation(new MemberAccess(verb, "SetDimColor")).AddArgument(color);
                }
                break;

                case 17:        // SO_VERB_DIM
                    verb = new MethodInvocation(new MemberAccess(verb, "Dim"));
                    break;

                case 18:        // SO_VERB_KEY
                    var key = GetVarOrDirectByte(OpCodeParameter.Param1);
                    verb = new MethodInvocation(new MemberAccess(verb, "SetKey")).AddArgument(key);
                    break;

                case 19:        // SO_VERB_CENTER
                    verb = new MethodInvocation(new MemberAccess(verb, "Center"));
                    break;

                case 20:        // SO_VERB_NAME_STR
                    var index = GetVarOrDirectWord(OpCodeParameter.Param1);
                    verb = new MethodInvocation(new MemberAccess(verb, "SetText")).AddArgument(new ElementAccess("Strings", index));
                    break;

                case 22:        // assign object
                {
                    var a = GetVarOrDirectWord(OpCodeParameter.Param1);
                    var b = GetVarOrDirectByte(OpCodeParameter.Param2);
                    verb = new MethodInvocation(new MemberAccess(verb, "SetVerbObject")).AddArguments(a, b);
                }
                break;

                case 23:        // Set Back Color
                {
                    var color = GetVarOrDirectByte(OpCodeParameter.Param1);
                    verb = new MethodInvocation(new MemberAccess(verb, "SetBackColor")).AddArgument(color);
                }
                break;

                default:
                    throw new NotImplementedException(string.Format("VerbOps #{0} is not yet implemented.", _opCode & 0x1F));
                }
            }
            return(verb.ToStatement());
        }
コード例 #5
0
 public override IAstNode Visit(ElementAccess node)
 {
     return(new ElementAccess((Expression)node.Target.Accept(this), node.Indices.Select(idx => (Expression)idx.Accept(this))));
 }