private void MdiParentForm_Load(object sender, EventArgs e) { LevelChooser lc = new LevelChooser(); lc.MdiParent = this; lc.Show(); //For some reason, without this, the MDI form is created behind other windows. WTF? this.Activate(); }
public static void gotSection(File f, int offs, int size) { uint magic = f.getUintAt(offs); if (magic == 0x504C5454) //PLTT { new PaletteViewer(new InlineFile(f, offs + 0x18, size - 0x18, f.name)).Show(); } else if (magic == 0x43484152) //CHAR { LevelChooser.showImgMgr(); int tileWidth = f.getUshortAt(offs + 0xA); if (tileWidth == 0xFFFF) { tileWidth = 8; } LevelChooser.imgMgr.m.addImage(new Image2D(new InlineFile(f, offs + 0x20, size - 0x20, f.name), 8 * tileWidth, true)); } else if (magic == 0x5343524E) //SCRN { if (LevelChooser.imgMgr == null) { return; } Image2D img = LevelChooser.imgMgr.m.getSelectedImage(); Palette[] pals = LevelChooser.imgMgr.m.getPalettes(); if (img == null) { return; } if (pals == null) { return; } if (pals.Length == 0) { return; } InlineFile ff = new InlineFile(f, offs + 0x14, size - 0x14, f.name); Tilemap t = new Tilemap(ff, 32, img, pals, 0, 0); new TilemapEditorWindow(t).Show(); } else { Console.WriteLine(String.Format("Unknown magic: {0:X8}", magic)); } }
private void addPalette(int i) { int palSize = 256; if (is4bpp.Checked) { palSize = 16; } int palOffs = i * palSize; int palLen = palSize; if (palOffs + palLen > pal.Length) { palLen = pal.Length - palOffs; } File ifl = new InlineFile(f, palOffs * 2, palLen * 2, f.name + " - " + i); LevelChooser.showImgMgr(); LevelChooser.imgMgr.m.addPalette(new FilePalette(ifl)); }
ushort unk; //Let's save it just in case. public Bncd(File f) { ByteArrayInputStream inp = new ByteArrayInputStream(f.getContents()); inp.readInt(); //Magic; unk = inp.readUShort(); ushort entryCount = inp.readUShort(); uint entriesOffset = inp.readUInt(); uint subEntriesOffset = inp.readUInt(); uint dataOffset = inp.readUInt(); uint dataSize = inp.readUInt(); bool BPP4 = true; //*/BPP4 = false; inp.seek(entriesOffset); //Stores tilenum, tilecount to imageid Dictionary <uint, int> imagesDict = new Dictionary <uint, int> (); for (uint entryId = 0; entryId < entryCount; entryId++) { BncdEntry e = new BncdEntry(); e.width = inp.readByte(); e.height = inp.readByte(); uint subEntryIdx = inp.readUShort(); uint subEntryCt = inp.readUShort(); inp.savePos(); inp.seek(subEntriesOffset + subEntryIdx * 12); for (int i = 0; i < subEntryCt; i++) { BncdSubEntry se = new BncdSubEntry(); e.subEntries.Add(se); se.oamAttr0 = inp.readUShort(); se.oamAttr1 = inp.readUShort(); se.unk = inp.readUInt(); se.tileNumber = inp.readUShort(); se.tileCount = inp.readUShort(); //*/se.tileCount *= 2; uint imageCode = (uint)((se.tileNumber << 16) | se.tileCount); int imageId = imagesDict.Count; if (imagesDict.ContainsKey(imageCode)) { imageId = imagesDict[imageCode]; } else { imagesDict[imageCode] = imageId; BncdImage img = new BncdImage(); images.Add(img); img.tileNumber = se.tileNumber; img.tileCount = se.tileCount; int oamShape = se.oamAttr0 >> 14; int oamSize = se.oamAttr1 >> 14; img.tileWidth = widths[oamSize, oamShape]; } se.imageId = imageId; } inp.loadPos(); } LevelChooser.showImgMgr(); int tileLen = 8 * 8 / 2; foreach (BncdImage img in images) { File imgFile = new InlineFile(f, (int)dataOffset + img.tileNumber * tileLen, img.tileCount * tileLen, f.name); LevelChooser.imgMgr.m.addImage(new Image2D(imgFile, 8 * img.tileWidth, BPP4)); } }
public Bncd256(File f) { ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(f.getContents()); arrayInputStream.readInt(); this.unk = arrayInputStream.readUShort(); ushort num1 = arrayInputStream.readUShort(); uint pos = arrayInputStream.readUInt(); uint num2 = arrayInputStream.readUInt(); uint num3 = arrayInputStream.readUInt(); arrayInputStream.readUInt(); arrayInputStream.seek(pos); Dictionary <uint, int> dictionary = new Dictionary <uint, int>(); for (uint index1 = 0; index1 < (uint)num1; ++index1) { Bncd256.Bncd256Entry bncdEntry = new Bncd256.Bncd256Entry(); bncdEntry.width = (int)arrayInputStream.readByte(); bncdEntry.height = (int)arrayInputStream.readByte(); uint num4 = (uint)arrayInputStream.readUShort(); uint num5 = (uint)arrayInputStream.readUShort(); arrayInputStream.savePos(); arrayInputStream.seek(num2 + num4 * 12U); for (int index2 = 0; (long)index2 < (long)num5; ++index2) { Bncd256.Bncd256SubEntry bncdSubEntry = new Bncd256.Bncd256SubEntry(); bncdEntry.subEntries.Add(bncdSubEntry); bncdSubEntry.oamAttr0 = arrayInputStream.readUShort(); bncdSubEntry.oamAttr1 = arrayInputStream.readUShort(); bncdSubEntry.unk = arrayInputStream.readUInt(); bncdSubEntry.tileNumber = arrayInputStream.readUShort(); bncdSubEntry.tileCount = arrayInputStream.readUShort(); bncdSubEntry.tileCount *= (ushort)2; uint key = (uint)bncdSubEntry.tileNumber << 16 | (uint)bncdSubEntry.tileCount; int count = dictionary.Count; if (dictionary.ContainsKey(key)) { count = dictionary[key]; } else { dictionary[key] = count; Bncd256.Bncd256Image bncdImage = new Bncd256.Bncd256Image(); this.images.Add(bncdImage); bncdImage.tileNumber = (int)bncdSubEntry.tileNumber; bncdImage.tileCount = (int)bncdSubEntry.tileCount; int index3 = (int)bncdSubEntry.oamAttr0 >> 14; int index4 = (int)bncdSubEntry.oamAttr1 >> 14; bncdImage.tileWidth = Bncd256.widths[index4, index3]; } bncdSubEntry.imageId = count; } arrayInputStream.loadPos(); } LevelChooser.showImgMgr(); int num6 = 32; foreach (Bncd256.Bncd256Image image in this.images) { File f1 = (File) new InlineFile(f, (int)num3 + image.tileNumber * num6, image.tileCount * num6, f.name); LevelChooser.imgMgr.m.addImage((PalettedImage) new Image2D(f1, 8 * image.tileWidth, false)); } }