/// <summary> /// Gets the tile set colors to use /// </summary> /// <param name="context">The context</param> /// <returns>The tile set colors to use</returns> public IList <BaseColor> GetTileSetColors(Context context) { var levelTileSetFileName = GetSpecialTileSetPath(context.Settings); if (FileSystem.FileExists(context.BasePath + levelTileSetFileName)) { ObjectArray <RGBA5551Color> cols = FileFactory.Read <ObjectArray <RGBA5551Color> >(levelTileSetFileName, context, onPreSerialize: (s, x) => x.Length = s.CurrentLength / 2); return(cols.Value); } // Get the file name var filename = GetWorldFilePath(context.Settings); // Read the file var worldJPFile = FileFactory.Read <R1_PS1_WorldFile>(filename, context); // Return the tile set return(worldJPFile.RawTiles); }
/// <summary> /// Fills the PS1 v-ram and returns it /// </summary> /// <param name="context">The context</param> /// <param name="mode">The blocks to fill</param> /// <returns>The filled v-ram</returns> protected override void FillVRAM(Context context, VRAMMode mode) { // Read the files var fixGraphics = FileFactory.Read <Array <byte> >(FixGraphicsPath, context, onPreSerialize: (s, a) => a.Length = s.CurrentLength); var lvlGraphics = FileFactory.Read <Array <byte> >(GetLevelGraphicsPath(context.Settings), context, onPreSerialize: (s, a) => a.Length = s.CurrentLength); var palettes = FileFactory.Read <ObjectArray <RGBA5551Color> >(SpritePalettesPath, context, onPreSerialize: (s, a) => a.Length = s.CurrentLength / 2); var tilePalettes = new ObjectArray <RGBA5551Color> [4]; for (int i = 0; i < MapCount; i++) { tilePalettes[i] = FileFactory.Read <ObjectArray <RGBA5551Color> >(GetSubMapPalettePath(i), context, onPreSerialize: (s, a) => a.Length = s.CurrentLength / 2); } PS1_VRAM vram = new PS1_VRAM(); // skip loading the backgrounds for now. They take up 320 (=5*64) x 256 per background // 2 backgrounds are stored underneath each other vertically, so this takes up 10 pages in total vram.currentXPage = 5; // Since skippedPagesX is uneven, and all other data takes up 2x2 pages, the game corrects this by // storing the first bit of sprites we load as 1x2 byte[] cageSprites = new byte[128 * (256 * 2)]; Array.Copy(fixGraphics.Value, 0, cageSprites, 0, cageSprites.Length); byte[] allFixSprites = new byte[fixGraphics.Value.Length - cageSprites.Length]; Array.Copy(fixGraphics.Value, cageSprites.Length, allFixSprites, 0, allFixSprites.Length); /*byte[] unknown = new byte[128 * 8]; * vram.AddData(unknown, 128);*/ vram.AddData(cageSprites, 128); vram.AddData(allFixSprites, 256); vram.AddData(lvlGraphics.Value, 256); // Palettes start at y = 256 + 234 (= 490), so page 1 and y=234 int paletteY = 240; vram.AddDataAt(0, 0, 0, paletteY, palettes.Value.SelectMany(c => BitConverter.GetBytes(c.Color5551)).ToArray(), 512); paletteY = 248; vram.AddDataAt(12, 1, 0, paletteY++, tilePalettes[3].Value.SelectMany(c => BitConverter.GetBytes(c.Color5551)).ToArray(), 512); vram.AddDataAt(12, 1, 0, paletteY++, tilePalettes[2].Value.SelectMany(c => BitConverter.GetBytes(c.Color5551)).ToArray(), 512); vram.AddDataAt(12, 1, 0, paletteY++, tilePalettes[2].Value.SelectMany(c => BitConverter.GetBytes(c.Color5551)).ToArray(), 512); vram.AddDataAt(12, 1, 0, paletteY++, tilePalettes[2].Value.SelectMany(c => BitConverter.GetBytes(c.Color5551)).ToArray(), 512); vram.AddDataAt(12, 1, 0, paletteY++, tilePalettes[2].Value.SelectMany(c => BitConverter.GetBytes(c.Color5551)).ToArray(), 512); vram.AddDataAt(12, 1, 0, paletteY++, tilePalettes[1].Value.SelectMany(c => BitConverter.GetBytes(c.Color5551)).ToArray(), 512); vram.AddDataAt(12, 1, 0, paletteY++, tilePalettes[0].Value.SelectMany(c => BitConverter.GetBytes(c.Color5551)).ToArray(), 512); vram.AddDataAt(12, 1, 0, paletteY++, tilePalettes[0].Value.SelectMany(c => BitConverter.GetBytes(c.Color5551)).ToArray(), 512); /*vram.AddDataAt(12, 1, 0, paletteY++, allFix.Palette3.SelectMany(c => BitConverter.GetBytes(c.Color1555)).ToArray(), 512); * vram.AddDataAt(12, 1, 0, paletteY++, allFix.Palette4.SelectMany(c => BitConverter.GetBytes(c.Color1555)).ToArray(), 512);*/ /*vram.AddDataAt(12, 1, 0, paletteY++, world.EventPalette1.SelectMany(c => BitConverter.GetBytes(c.Color1555)).ToArray(), 512); * vram.AddDataAt(12, 1, 0, paletteY++, world.EventPalette2.SelectMany(c => BitConverter.GetBytes(c.Color1555)).ToArray(), 512); * vram.AddDataAt(12, 1, 0, paletteY++, allFix.Palette1.SelectMany(c => BitConverter.GetBytes(c.Color1555)).ToArray(), 512); * vram.AddDataAt(12, 1, 0, paletteY++, allFix.Palette5.SelectMany(c => BitConverter.GetBytes(c.Color1555)).ToArray(), 512); * vram.AddDataAt(12, 1, 0, paletteY++, allFix.Palette6.SelectMany(c => BitConverter.GetBytes(c.Color1555)).ToArray(), 512); * vram.AddDataAt(12, 1, 0, paletteY++, allFix.Palette2.SelectMany(c => BitConverter.GetBytes(c.Color1555)).ToArray(), 512); * * paletteY += 13 - world.TilePalettes.Length; * * foreach (var p in world.TilePalettes) * vram.AddDataAt(12, 1, 0, paletteY++, p.SelectMany(c => BitConverter.GetBytes(c.Color1555)).ToArray(), 512);*/ vram.AddDataAt(0, 0, 0, paletteY, palettes.Value.SelectMany(c => BitConverter.GetBytes(c.Color5551)).ToArray(), 512); context.StoreObject("vram", vram); //PaletteHelpers.ExportVram(context.Settings.GameDirectory + "vram.png", vram); }