Пример #1
0
 internal void RestoreBranches()
 {
     foreach (var addr in DListBranches)
     {
         Zpr.WriteRam8((int)addr.DlistBranch, 0xDE);
     }
 }
Пример #2
0
 static Bitmap GetFrameBufferBitmap(int frameBuffer)
 {
     byte[] pixelData = Zpr.ReadRam(frameBuffer, BUFFER_SIZE);
     //pixelData.Reverse32();
     frameBuffer &= 0xFFFFFF;
     return(DrawRGB5A1(pixelData, 320, 240));
 }
Пример #3
0
 private void NullBranches()
 {
     foreach (var addr in DListBranches)
     {
         Zpr.WriteRam8((int)addr.DlistBranch, 0x00);
     }
 }
Пример #4
0
        private List <ModelViewerDlist> GetDlistBranches(N64Ptr topDlist)
        {
            List <ModelViewerDlist> result = new List <ModelViewerDlist>();

            var data = Zpr.ReadRam(0, 0x400000);

            //bool foundProjection = false;

            List <(N64Ptr ptr, bool check)> stack = new List <(N64Ptr, bool)>();

            List <int> endDlists = gfxDList.Select(x => (int)x.StartPtr).ToList();

            using (BinaryReader br = new BinaryReader(new MemoryStream(data)))
            {
                foreach (var item in MicrocodeParser.DeepTrace(br, (int)topDlist))
                {
                    //if (item.Item2.Name == G_.G_MTX)
                    //{
                    //    if ((item.Item2.EncodingHigh & 0x4) > 0)
                    //        foundProjection = true;
                    //}

                    //if (!foundProjection)
                    //    continue;

                    if (item.gbi.Name == G_.G_DL)
                    {
                        if (endDlists.Contains((int)item.gbi.EncodingLow))
                        {
                            break;
                        }
                        bool check = (item.gbi.EncodingLow >> 24) != 0x80;

                        var list = stack.Where(x => x.check == check).Select(y => y.ptr).ToList();

                        if (check)
                        {
                            result.Add(new ModelViewerDlist(item.ptr, list));
                        }
                        stack.Add((item.ptr, check));
                    }
                    if (item.gbi.Name == G_.G_ENDDL)
                    {
                        var remove = stack.Count - 1;
                        if (remove >= 0)
                        {
                            stack.RemoveAt(remove);
                        }
                    }
                }
            }
            return(result);
        }
Пример #5
0
        public static List <OvlActor> GetActorFiles()
        {
            List <OvlActor> actorFiles = new List <OvlActor>();
            OvlActor        working;

            byte[] actorTbl;
            byte[] actorFileData = new byte[LENGTH];

            actorTbl = Zpr.ReadRam(OVL_TABLE_ADDR, TOTAL_ACTORS * LENGTH);

            for (int i = 0; i < TOTAL_ACTORS; i++)
            {
                Array.Copy(actorTbl, i * LENGTH, actorFileData, 0, LENGTH);
                working = new OvlActor(i, actorFileData);
                if (working.IsFileLoaded)
                {
                    actorFiles.Add(working);
                }
            }
            return(actorFiles);
        }
Пример #6
0
        public static List <OvlParticle> GetFiles()
        {
            List <OvlParticle> particleFiles = new List <OvlParticle>();
            OvlParticle        working;

            byte[] particleOvlTable;
            byte[] particleFileData = new byte[LENGTH];

            particleOvlTable = Zpr.ReadRam(OVL_TABLE_ADDR, TOTAL_PARTICLE_EFFECTS * LENGTH);
            particleOvlTable.Reverse32();
            for (int i = 0; i < TOTAL_PARTICLE_EFFECTS; i++)
            {
                Array.Copy(particleOvlTable, i * LENGTH, particleFileData, 0, LENGTH);
                Endian.Reverse32(particleFileData);
                working = new OvlParticle(i, particleFileData);
                if (working.IsFileLoaded)
                {
                    particleFiles.Add(working);
                }
            }
            return(particleFiles);
        }
Пример #7
0
        private void SetInstanceSize()
        {
            N64Ptr readAddr;
            uint   offset;


            if (VRamActorInit.Offset < 0x800000)
            {
                //Read address 0C in the ovl file
                readAddr = VRamActorInit + 0x0C;
            }
            else if (IsFileLoaded)
            {
                offset   = (uint)(VRamActorInit - VRam.Start) + 0x0C;
                readAddr = Ram.Start + offset;
            }
            else
            {
                return;
            }

            InstanceSize[Actor] = (ushort)Zpr.ReadRamInt32(readAddr);
        }
Пример #8
0
        public void ScrollDlist(int v)
        {
            if (DListBranches.Count == 0)
            {
                return;
            }

            NullBranches();

            //var record = DListBranches[DListIndex];
            //var addr = record.DlistBranch;

            //Zpr.WriteRam8((int)addr, 0x00);

            DListIndex += v;
            if (DListIndex >= DListBranches.Count)
            {
                DListIndex = 0;
            }
            if (DListIndex < 0)
            {
                DListIndex = DListBranches.Count - 1;
            }

            var addr = DListBranches[DListIndex].DlistBranch;

            Zpr.WriteRam8(addr, 0xDE);

            Console.Clear();
            Console.WriteLine($"{Zpr.ReadRamInt32(addr + 4):X8}");

            foreach (var item in DListBranches[DListIndex].DListHierarchy)
            {
                Zpr.WriteRam8(item, 0xDE);
            }
        }
Пример #9
0
 static Bitmap GetBufferBitmap(TextureFormat format, N64Ptr start, int width, int height)
 {
     byte[] pixelData = Zpr.ReadRam(start, GetSizeInBytes(format, width, height));
     return(formatInfo[format].CreateBitmap(pixelData, width, height));
 }
Пример #10
0
 static Bitmap GetFrameBufferBitmap(N64Ptr framebuffer)
 {
     byte[] pixelData = Zpr.ReadRam(framebuffer, BUFFER_SIZE);
     return(DrawRGB5A1(pixelData, 320, 240));
 }
Пример #11
0
 public static int GetCount()
 {
     return(Zpr.ReadRamByte(OBJ_ALLOC_TABLE_ADDR + 0x08));
 }