public void SetGraphicsState(GraphicsState state, int offsetStart, int offsetEnd, int width=-1, int scale=2) { GraphicsState.TileModifiedHandler tileModifiedHandler = delegate(int bank, int tile) { draw(tile+bank*0x180); }; if (graphicsState != null) graphicsState.RemoveTileModifiedHandler(tileModifiedHandler); if (state != null) state.AddTileModifiedHandler(tileModifiedHandler); graphicsState = state; int size = (offsetEnd-offsetStart)/16; if (width == -1) width = (int)Math.Sqrt(size); int height = size/width; this.offsetStart = offsetStart; this.offsetEnd = offsetEnd; Width = width; Height = height; TileWidth = 8; TileHeight = 8; Scale = scale; image = new Bitmap(Width*TileWidth,Height*TileHeight); for (int i=offsetStart/16; i<offsetEnd/16; i++) draw(i); }
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))); }