GetData() public method

public GetData ( string labelStr, int offset ) : Data
labelStr string
offset int
return Data
示例#1
0
        internal WarpDestGroup(Project p, int id) : base(p, id)
        {
            fileParser = Project.GetFileWithLabel("warpDestTable");
            Data tmp = fileParser.GetData("warpDestTable", id * 2);

            string label = tmp.GetValue(0);

            WarpDestData data = fileParser.GetData(label) as WarpDestData;

            warpDestDataList = new List <WarpDestData>();

            while (data != null)
            {
                data.DestGroup = this;
                data.DestIndex = warpDestDataList.Count;
                warpDestDataList.Add(data);

                FileComponent component = data.Next;
                data = null;
                while (component != null)
                {
                    if (component is Label)
                    {
                        data = null;
                        break;
                    }
                    else if (component is Data)
                    {
                        data = component as WarpDestData;
                        break;
                    }
                    component = component.Next;
                }
            }
        }
示例#2
0
        void SetMainGfx(int index)
        {
            graphicsState.RemoveGfxHeaderType(GfxHeaderType.Main);

            FileParser    gfxHeaderFile = Project.GetFileWithLabel("gfxHeaderTable");
            Data          pointerData   = gfxHeaderFile.GetData("gfxHeaderTable", index * 2);
            GfxHeaderData header        = gfxHeaderFile.GetData(pointerData.GetValue(0))
                                          as GfxHeaderData;

            if (header != null)
            {
                bool next = true;
                while (next)
                {
                    graphicsState.AddGfxHeader(header, GfxHeaderType.Main);
                    next = false;
                    if (header.ShouldHaveNext)
                    {
                        GfxHeaderData nextHeader = header.NextData as GfxHeaderData;
                        if (nextHeader != null)
                        {
                            header = nextHeader;
                            next   = true;
                        }
                        // Might wanna print a warning if no next value is found
                    }
                }
            }
            InvalidateAllTiles();
        }
示例#3
0
        internal WarpDestGroup(Project p, int id)
            : base(p,id)
        {
            fileParser = Project.GetFileWithLabel("warpDestTable");
            Data tmp = fileParser.GetData("warpDestTable", id*2);

            string label = tmp.GetValue(0);

            WarpDestData data = fileParser.GetData(label) as WarpDestData;

            warpDestDataList = new List<WarpDestData>();

            while (data != null) {
                data.DestGroup = this;
                data.DestIndex = warpDestDataList.Count;
                warpDestDataList.Add(data);

                FileComponent component = data.Next;
                data = null;
                while (component != null) {
                    if (component is Label) {
                        data = null;
                        break;
                    }
                    else if (component is Data) {
                        data = component as WarpDestData;
                        break;
                    }
                    component = component.Next;
                }
            }
        }
示例#4
0
        internal Dungeon(Project p, int i) : base(p, i)
        {
            FileParser dungeonDataFile = Project.GetFileWithLabel("dungeonDataTable");
            Data       pointerData     = dungeonDataFile.GetData("dungeonDataTable", Index * 2);
            string     label           = pointerData.GetValue(0);

            dataStart = dungeonDataFile.GetData(label);
        }
示例#5
0
        public PaletteHeaderData(Project p, string command, IEnumerable <string> values, FileParser parser, IList <int> spacing)
            : base(p, command, values, 3, parser, spacing)
        {
            int dest = -1;

            try {
                dest = Project.EvalToInt(GetValue(2));
            }
            catch (FormatException) {
                dest = -1;
            }

            if (dest != -1)
            {
                sourceFromRam = true;
            }
            else
            {
                paletteDataFile = Project.GetFileWithLabel(GetValue(2));
                if (!(paletteDataFile.GetData(GetValue(2)) is RgbData))
                {
                    throw new Exception("Label \"" + GetValue(2) + "\" was expected to reference data defined with m_RGB16");
                }
            }
        }
示例#6
0
        internal WarpSourceGroup(Project p, int id)
            : base(p,id)
        {
            fileParser = Project.GetFileWithLabel("warpSourcesTable");
            Data d = fileParser.GetData("warpSourcesTable", id*2);
            string label = d.GetValue(0);

            warpSourceDataList = new List<WarpSourceData>();
            WarpSourceData warpData = fileParser.GetData(label) as WarpSourceData;
            while (warpData != null && warpData.WarpSourceType != WarpSourceType.WarpSourcesEnd) {
                warpSourceDataList.Add(warpData);
                warpData = warpData.NextData as WarpSourceData;
            }
            if (warpData != null)
                warpSourceDataList.Add(warpData); // WarpSourcesEnd
        }
示例#7
0
 void SetUniqueGfx(int index)
 {
     graphicsState.RemoveGfxHeaderType(GfxHeaderType.Unique);
     if (index != 0)
     {
         FileParser    uniqueGfxHeaderFile = Project.GetFileWithLabel("uniqueGfxHeadersStart");
         GfxHeaderData header
             = uniqueGfxHeaderFile.GetData("uniqueGfxHeader" + index.ToString("x2"))
               as GfxHeaderData;
         if (header != null)
         {
             bool next = true;
             while (next)
             {
                 graphicsState.AddGfxHeader(header, GfxHeaderType.Unique);
                 next = false;
                 if (header.ShouldHaveNext)
                 {
                     GfxHeaderData nextHeader = header.NextData as GfxHeaderData;
                     if (nextHeader != null)
                     {
                         header = nextHeader;
                         next   = true;
                     }
                     // Might wanna print a warning if no next value is found
                 }
             }
         }
     }
     InvalidateAllTiles();
 }
示例#8
0
 public GfxHeaderData GetGfxHeader(int i) {
     int index = gfxHeaderIndices[i];
     FileParser parser = Project.GetFileWithLabel("animationGfxHeaders");
     var header = parser.GetData("animationGfxHeaders") as GfxHeaderData;
     for (int j=0; j<index; j++)
         header = header.NextData as GfxHeaderData;
     return header;
 }
示例#9
0
        internal AnimationGroup(Project p, int i) : base(p, i)
        {
            FileParser parser  = Project.GetFileWithLabel("animationGroupTable");
            Data       pointer = parser.GetData("animationGroupTable", 2 * Index);
            string     label   = pointer.GetValue(0);

            Data data = parser.GetData(label);
            int  b1   = Project.EvalToInt(data.GetValue(0));

            data = data.NextData;
            int bits = b1 & 0xf;

            if (bits >= 0xf)
            {
                _numAnimations = 4;
            }
            else if (bits >= 0x7)
            {
                _numAnimations = 3;
            }
            else if (bits >= 0x3)
            {
                _numAnimations = 2;
            }
            else if (bits >= 0x1)
            {
                _numAnimations = 1;
            }
            else
            {
                _numAnimations = 0;
            }

            for (int j = 0; j < NumAnimations; j++)
            {
                if (data.CommandLowerCase != ".dw")
                {
                    throw new Exception("Malformatted animation group data (index 0x" +
                                        Index.ToString("x") + "\n");
                }
                animations[j] = Project.GetDataType <Animation>(data.GetValue(0));
                data          = data.NextData;
            }
        }
示例#10
0
        internal WarpSourceGroup(Project p, int id) : base(p, id)
        {
            fileParser = Project.GetFileWithLabel("warpSourcesTable");
            Data   d     = fileParser.GetData("warpSourcesTable", id * 2);
            string label = d.GetValue(0);

            warpSourceDataList = new List <WarpSourceData>();
            WarpSourceData warpData = fileParser.GetData(label) as WarpSourceData;

            while (warpData != null && warpData.WarpSourceType != WarpSourceType.WarpSourcesEnd)
            {
                warpSourceDataList.Add(warpData);
                warpData = warpData.NextData as WarpSourceData;
            }
            if (warpData != null)
            {
                warpSourceDataList.Add(warpData); // WarpSourcesEnd
            }
        }
示例#11
0
 internal Animation(Project p, string label) : base(p, label) {
     FileParser parser = Project.GetFileWithLabel(label);
     Data data = parser.GetData(label);
     while (data != null && data.CommandLowerCase == ".db") {
         counters.Add(Project.EvalToInt(data.GetValue(0)));
         data = data.NextData;
         if (data.CommandLowerCase != ".db")
             throw new Exception("Malformatted animation data");
         gfxHeaderIndices.Add(Project.EvalToInt(data.GetValue(0)));
         data = data.NextData;
     }
 }
示例#12
0
        internal ObjectGroup(Project p, String id) : base(p, id)
        {
            parser = Project.GetFileWithLabel(Identifier);
            ObjectData data = parser.GetData(Identifier) as ObjectData;

            while (data.GetObjectType() != ObjectType.End && data.GetObjectType() != ObjectType.EndPointer)
            {
                objectDataList.Add(data);
                data = data.NextData as ObjectData;
            }
            objectDataList.Add(data);
        }
示例#13
0
        internal ObjectGroup(Project p, String id)
            : base(p, id)
        {
            parser = Project.GetFileWithLabel(Identifier);
            ObjectData data = parser.GetData(Identifier) as ObjectData;

            while (data.GetObjectType() != ObjectType.End && data.GetObjectType() != ObjectType.EndPointer) {
                objectDataList.Add(data);
                data = data.NextData as ObjectData;
            }
            objectDataList.Add(data);
        }
示例#14
0
        PaletteHeaderGroup(Project project, int index) : base(project, index)
        {
            FileParser palettePointerFile = project.GetFileWithLabel("paletteHeaderTable");
            Data       headerPointerData  = palettePointerFile.GetData("paletteHeaderTable", index * 2);
            FileParser paletteHeaderFile  = project.GetFileWithLabel(headerPointerData.GetValue(0));
            Data       headerData         = paletteHeaderFile.GetData(headerPointerData.GetValue(0));

            if (!(headerData is PaletteHeaderData))
            {
                throw new Exception("Expected palette header group " + index.ToString("X") + " to start with palette header data");
            }
            firstPaletteHeader = (PaletteHeaderData)headerData;
        }
示例#15
0
        internal Area(Project p, int i) : base(p, i)
        {
            areaFile = Project.GetFileWithLabel("areaData");

            areaData = areaFile.GetData("areaData", Index * 8);


            // If this is Seasons, it's possible that areaData does not point to 8 bytes as
            // expected, but instead to an "m_SeasonalData" macro.
            if (areaData.CommandLowerCase == "m_seasonalarea")
            {
                int season = 0;
                areaData = Project.GetData(areaData.GetValue(0), season * 8);
            }

            // Initialize graphics state
            graphicsState = new GraphicsState();
            // Global palettes
            PaletteHeaderGroup globalPaletteHeaderGroup =
                Project.GetIndexedDataType <PaletteHeaderGroup>(0xf);

            graphicsState.AddPaletteHeaderGroup(globalPaletteHeaderGroup, PaletteGroupType.Common);

            Data data = areaData;

            flags1 = p.EvalToInt(data.GetValue(0));

            data   = data.NextData;
            flags2 = p.EvalToInt(data.GetValue(0));

            data = data.NextData;
            SetUniqueGfx(Project.EvalToInt(data.GetValue(0)));

            data = data.NextData;
            SetMainGfx(Project.EvalToInt(data.GetValue(0)));

            data = data.NextData;
            SetPaletteHeader(Project.EvalToInt(data.GetValue(0)));

            data = data.NextData;
            SetTileset(Project.EvalToInt(data.GetValue(0)));

            data        = data.NextData;
            layoutGroup = Project.EvalToInt(data.GetValue(0));

            data = data.NextData;
            SetAnimation((byte)Project.EvalToInt(data.GetValue(0)));
        }
示例#16
0
        internal TilesetHeaderGroup(Project p, int i) : base(p, i)
        {
            FileParser tableFile   = Project.GetFileWithLabel("tilesetHeaderGroupTable");
            Data       pointerData = tableFile.GetData("tilesetHeaderGroupTable", Index * 2);
            string     labelName   = pointerData.GetValue(0);

            FileParser        headerFile = Project.GetFileWithLabel(labelName);
            TilesetHeaderData headerData = headerFile.GetData(labelName) as TilesetHeaderData;
            bool next = true;

            while (next)
            {
                if (headerData == null)
                {
                    throw new Exception("Expected tileset header group " + Index.ToString("X") + " to reference tileset header data (m_TilesetHeader)");
                }

                Stream dataFile = headerData.ReferencedData;
                dataFile.Position = 0;
                if (headerData.DestAddress == Project.EvalToInt("w3TileMappingIndices"))
                {
                    // Mappings
                    mappingsDataFile = dataFile;
                }
                else if (headerData.DestAddress == Project.EvalToInt("w3TileCollisions"))
                {
                    // Collisions
                    collisionsDataFile = dataFile;
                }

                if (headerData.ShouldHaveNext())
                {
                    headerData = headerData.NextData as TilesetHeaderData;
                    if (headerData != null)
                    {
                        next = true;
                    }
                }
                else
                {
                    next = false;
                }
            }
        }
示例#17
0
        void UpdateRoomData()
        {
            // Get the tileDataFile
            int        layoutGroup = area.LayoutGroup;
            string     label       = "room" + ((layoutGroup << 8) + (Index & 0xff)).ToString("X4").ToLower();
            FileParser parserFile  = Project.GetFileWithLabel(label);
            Data       data        = parserFile.GetData(label);

            if (data.CommandLowerCase != "m_roomlayoutdata")
            {
                throw new Exception("Expected label \"" + label + "\" to be followed by the m_RoomLayoutData macro.");
            }
            string roomString = data.GetValue(0) + ".bin";

            try {
                tileDataFile = Project.GetBinaryFile(
                    "rooms/" + Project.GameString + "/small/" + roomString);
            }
            catch (FileNotFoundException) {
                try {
                    tileDataFile = Project.GetBinaryFile(
                        "rooms/" + Project.GameString + "/large/" + roomString);
                }
                catch (FileNotFoundException) {
                    throw new FileNotFoundException("Couldn't find \"" + roomString + "\" in \"rooms/small\" or \"rooms/large\".");
                }
            }

            if (tileDataFile.Length == 80)   // Small map
            {
                width  = fileWidth = 10;
                height = 8;
            }
            else if (tileDataFile.Length == 176)   // Large map
            {
                width     = 0xf;
                fileWidth = 0x10;
                height    = 0xb;
            }
            else
            {
                throw new Exception("Size of file \"" + tileDataFile.Name + "\" was invalid!");
            }
        }
示例#18
0
        public PaletteHeaderData(Project p, string command, IEnumerable<string> values, FileParser parser, IList<int> spacing)
            : base(p, command, values, 3, parser, spacing)
        {
            int dest = -1;
            try {
                dest = Project.EvalToInt(GetValue(2));
            }
            catch(FormatException) {
                dest = -1;
            }

            if (dest != -1)
                sourceFromRam = true;
            else {
                paletteDataFile = Project.GetFileWithLabel(GetValue(2));
                if (!(paletteDataFile.GetData(GetValue(2)) is RgbData))
                    throw new Exception("Label \"" + GetValue(2) + "\" was expected to reference data defined with m_RGB16");
            }
        }
示例#19
0
文件: Area.cs 项目: Drenn1/LynnaLab
        internal Area(Project p, int i)
            : base(p, i)
        {
            areaFile = Project.GetFileWithLabel("areaData");

            areaData = areaFile.GetData("areaData", Index * 8);

            // Initialize graphics state
            graphicsState = new GraphicsState();
            // Global palettes
            PaletteHeaderGroup globalPaletteHeaderGroup =
                Project.GetIndexedDataType<PaletteHeaderGroup>(0xf);
            graphicsState.AddPaletteHeaderGroup(globalPaletteHeaderGroup, PaletteGroupType.Common);

            Data data = areaData;
            flags1 = p.EvalToInt(data.GetValue(0));

            data = data.NextData;
            flags2 = p.EvalToInt(data.GetValue(0));

            data = data.NextData;
            SetUniqueGfx(Project.EvalToInt(data.GetValue(0)));

            data = data.NextData;
            SetMainGfx(Project.EvalToInt(data.GetValue(0)));

            data = data.NextData;
            SetPaletteHeader(Project.EvalToInt(data.GetValue(0)));

            data = data.NextData;
            SetTileset(Project.EvalToInt(data.GetValue(0)));

            data = data.NextData;
            layoutGroup = Project.EvalToInt(data.GetValue(0));

            data = data.NextData;
            SetAnimation((byte)Project.EvalToInt(data.GetValue(0)));
        }