コード例 #1
0
        public int WriteWorld(World w, int levelAddress)
        {
            Rom[levelAddress++] = (byte)w.GraphicsBank;
            Rom[levelAddress++] = (byte)w.Palette;
            Rom[levelAddress++] = (byte)(ProjectController.MusicManager.MusicList[w.Music].Value);
            Rom[levelAddress++] = (byte)w.Length;
            Rom[levelAddress++] = (byte)w.Pointers.Count;

            foreach (var p in w.Pointers)
            {
                if (!levelIndexTable.ContainsKey(p.LevelGuid))
                {
                    Rom[levelAddress++] = (byte)0xFF;
                }
                else
                {
                    Rom[levelAddress++] = levelIndexTable[p.LevelGuid];
                }
                Rom[levelAddress++] = (byte)(((p.X & 0xF0) >> 4) | ((p.X & 0x0F) << 4));
                Rom[levelAddress++] = (byte)((p.AltLevelEntrance ? 0x80 : 0x00) | (p.Y - 0x0F));
            }

            byte[] levelData = w.GetCompressedData();
            for (int i = 0; i < levelData.Length; i++)
            {
                Rom[levelAddress++] = levelData[i];
            }

            Rom[levelAddress++] = (byte)0xFF;
            foreach (var s in from sprites in w.SpriteData orderby sprites.X select sprites)
            {
                Rom[levelAddress++] = (byte)s.InGameID;
                Rom[levelAddress++] = (byte)s.X;
                Rom[levelAddress++] = (byte)(s.Y - 0x0F);
            }

            Rom[levelAddress++] = (byte)0xFF;
            return(levelAddress);
        }
コード例 #2
0
ファイル: RomManager.cs プロジェクト: AbuSLmLm/reuben-smb3
        public int WriteWorld(World w, int levelAddress)
        {
            Rom[levelAddress++] = (byte)w.GraphicsBank;
            Rom[levelAddress++] = (byte)w.Palette;
            Rom[levelAddress++] = (byte)(ProjectController.MusicManager.MusicList[w.Music].Value);
            Rom[levelAddress++] = (byte)w.Length;
            Rom[levelAddress++] = (byte)w.Pointers.Count;

            foreach (var p in w.Pointers)
            {
                if (!levelIndexTable.ContainsKey(p.LevelGuid))
                {
                    Rom[levelAddress++] = (byte)0xFF;
                }
                else
                {
                    Rom[levelAddress++] = levelIndexTable[p.LevelGuid];
                }
                Rom[levelAddress++] = (byte)(((p.X & 0xF0) >> 4) | ((p.X & 0x0F) << 4));
                Rom[levelAddress++] = (byte)((p.AltLevelEntrance ? 0x80 : 0x00) | (p.Y - 0x0F));
            }

            byte[] levelData = w.GetCompressedData();
            for (int i = 0; i < levelData.Length; i++)
            {
                Rom[levelAddress++] = levelData[i];
            }

            Rom[levelAddress++] = (byte)0xFF;
            foreach (var s in from sprites in w.SpriteData orderby sprites.X select sprites)
            {
                Rom[levelAddress++] = (byte)s.InGameID;
                Rom[levelAddress++] = (byte)s.X;
                Rom[levelAddress++] = (byte)(s.Y - 0x0F);
            }

            Rom[levelAddress++] = (byte)0xFF;
            return levelAddress;
        }