private void ReadObjects(Rance10 rance10)
        {
            var idx = 0;

            Objects = new Rance10Object[ObjectAddresses.Length];

            foreach (var i in ObjectAddresses)
            {
                var tbladdr = TableStart + (idx / 4) * 4;

                Log.WriteLine($"\t#{idx/4}\t{tbladdr:X8}...{i:X8}");

                try
                {
                    var obj = ReadObject(rance10, i, idx);
                    Objects[idx++] = obj;

                    if (null != obj)
                    {
                        obj.Analyze(rance10);
                    }
                } catch (Exception ex)
                {
                    Log.WriteLine(ex.ToString());
                    Log.Flush();
                    throw;
                }
            }
        }
Beispiel #2
0
        private TreeNode AddNode(TreeNodeCollection nodes, Rance10Object obj)
        {
            var node = nodes.Add(NodeText(obj));

            node.Tag = obj;

            if (null != obj.ObjectData)
            {
                foreach (var i in obj.ObjectData)
                {
                    AddNode(node.Nodes, i);
                }
            }

            return(node);
        }
        private Rance10Object ReadObject(Rance10 rance10, uint addr, int idx)
        {
            if (addr == 0)
            {
                return(null);
            }

            var buf = new byte[64];
            var m   = rance10.ReadMemory(new IntPtr(addr), buf, 8);

            if (!m.Success)
            {
                System.Diagnostics.Debug.Print($"Failed to read memory: {addr:X8}");
                return(null);
            }

            var type = BitConverter.ToInt32(m.Data, 4);

            switch (type)
            {
            case 0: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject0.Size); break;

            case 1: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject1_Value.Size); break;

            case 2: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject2_String.Size); break;

            case 3: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject3_Array.Size); break;

            case 4: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject4_Class.Size); break;

            case 5: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject5.Size); break;

            default: throw new Exception($"Invalid type no: {type} @{addr:X8}");
            }

            if (!m.Success)
            {
                System.Diagnostics.Debug.Print($"Failed to read memory: {addr:X8}");
                return(null);
            }

            var obj = Rance10Object.New(null, (uint)m.Address.ToInt64(), m.Data);

            obj.Seq = idx;

            return(obj);
        }
Beispiel #4
0
        private string NodeText(Rance10Object value)
        {
            switch (value.Type)
            {
            case 0: return($"#{value.Seq:X8} @{value.Address:X8} 0");

            case 1: return($"#{value.Seq:X8} @{value.Address:X8} 1");

            case 2: return($"#{value.Seq:X8} @{value.Address:X8} 2 \"{value.ValueString}\"");

            case 3: return($"#{value.Seq:X8} @{value.Address:X8} 3");

            case 4: return($"#{value.Seq:X8} @{value.Address:X8} 4 {value.ClassName}");

            case 5: return($"#{value.Seq:X8} @{value.Address:X8} 5");

            default:    throw new Exception();
            }
        }
        private void AnalyzeObject(Rance10 rance10, Rance10Object obj)
        {
            Log.WriteLine($"\t\t{obj}");

            if (null == obj.ObjectData)
            {
                return;
            }

            foreach (var i in obj.ObjectData)
            {
                var assoc = GetObject((int)i);

                if (null == assoc)
                {
                    Log.WriteLine($"\t\t\t{i:X8}->\tnull");
                }
                else
                {
                    Log.WriteLine($"\t\t\t{i:X8}->\t{assoc}");
                }
            }
        }
Beispiel #6
0
 public Leader(Rance10ObjectAnalyzer ana, Rance10Object obj)
     : base(ana, obj)
 {
 }
Beispiel #7
0
 public Party(Rance10ObjectAnalyzer ana, Rance10Object obj)
     : base(ana, obj)
 {
 }
Beispiel #8
0
 public CommonParam(Rance10ObjectAnalyzer ana, Rance10Object obj)
     : base(ana, obj)
 {
 }
Beispiel #9
0
 public ObjectBase(Rance10ObjectAnalyzer ana, Rance10Object obj)
 {
     Analyzer   = ana;
     BaseObject = obj;
 }