protected override void SetItemPicture() { if (Items == null) { return; } Size = new Size(ItemCellSize * ItemsPerRow + 3, ItemCellSize * (int)(Math.Ceiling((decimal)Items.Length / ItemsPerRow)) + 3); CurrentItemImage?.Dispose(); CurrentItemImage = ImageGeneration.DrawFurnitureArrows((Bitmap)Inventory.GetItemPic(ItemCellSize, ItemsPerRow, Items, MainForm.SaveFile.SaveType, Size), (Furniture[])Items, ItemsPerRow); Image?.Dispose(); Image = (Image)CurrentItemImage.Clone(); }
public static Bitmap GeneratePalettePreview(uint[] Palette, int SelectedColor = -1, uint Width = 32, uint Height = 480) { byte[] PaletteBitmapBuffer = new byte[Width * Height * 4]; int PaletteColorDataLength = (int)(Width * (Height / 15) * 4); // There are 15 colors in a Palette. int PaletteIndex = -1; for (int i = 0; i < PaletteBitmapBuffer.Length; i += 4) { if (i % PaletteColorDataLength == 0) { PaletteIndex++; } Buffer.BlockCopy(BitConverter.GetBytes(Palette[PaletteIndex]), 0, PaletteBitmapBuffer, i, 4); } Bitmap Preview = CreateBitmap(PaletteBitmapBuffer, Width, Height); return(ImageGeneration.DrawGrid2(Preview, (int)Width, new Size((int)Width, (int)Height), null, false, false, true)); }
public ActionResult Index(InputData data) { data.AwayTeamShortName = _db.GetShortName(data.AwayTeam); data.HomeTeamShortName = _db.GetShortName(data.HomeTeam); data.HomeTeamLogo = SetTeamLogo(data.HomeTeamShortName); data.AwayTeamLogo = SetTeamLogo(data.AwayTeamShortName); data.BackgroundImage = Server.MapPath(data.BackgroundImage); string preview = @"Images\Posters\Preview\"; preview = SetPath(preview); string recap = @"Images\Posters\Recap\"; recap = SetPath(recap); //data.Result = (TypeOfResult) Enum.Parse(typeof (TypeOfResult), result); ImageGeneration.ImageProcessing(data, preview, recap); return(RedirectToAction("Index")); }
public static Bitmap GeneratePalettePreview(uint[] palette, int selectedColor = -1, uint width = 32, uint height = 480) { var paletteBitmapBuffer = new byte[width * height * 4]; var paletteColorDataLength = (int)(width * (height / 15) * 4); // There are 15 colors in a Palette. var paletteIndex = -1; for (var i = 0; i < paletteBitmapBuffer.Length; i += 4) { if (i % paletteColorDataLength == 0) { paletteIndex++; } if (paletteIndex < palette.Length && i < paletteBitmapBuffer.Length) { Buffer.BlockCopy(BitConverter.GetBytes(palette[paletteIndex]), 0, paletteBitmapBuffer, i, 4); } } var preview = CreateBitmap(paletteBitmapBuffer, width, height); return(ImageGeneration.DrawGrid2(preview, (int)width, new Size((int)width, (int)height), null, false, false, true)); }
public override void Undo() { if (!UndoStack.Any()) { return; } // Get Previous Change var previousItemChange = UndoStack.Pop(); var selectedItem = Items[previousItemChange.Index]; // Set Redo Change PushNewItemChange(selectedItem, previousItemChange.Index, RedoStack); // Undo Items[previousItemChange.Index] = (Furniture)previousItemChange.Item; var img = Image; Image = ImageGeneration.DrawFurnitureArrows((Bitmap)Inventory.GetItemPic(ItemCellSize, ItemsPerRow, Items, MainForm.SaveFile.SaveType, Size), (Furniture[])Items, ItemsPerRow); img?.Dispose(); OnItemChanged(selectedItem, Items[previousItemChange.Index], previousItemChange.Index); }
public Player(int offset, int idx, Save save) { _saveData = save; Index = idx; Offset = offset; Offsets = PlayerInfo.GetPlayerInfo(save.SaveType); Exists = _saveData.ReadByte(offset + Offsets.Identifier) != 0 && _saveData.ReadByte(offset + Offsets.Identifier) != 0xFF; if (!Exists) { return; } var playerDataType = typeof(PlayerData); var playerSaveInfoType = typeof(PlayerSaveInfo); object boxedData = new PlayerData(); foreach (var field in playerSaveInfoType.GetFields(BindingFlags.Public | BindingFlags.Instance)) { if (field.GetValue(Offsets) != null && !field.Name.Contains("Count") && !field.Name.Contains("Size")) { if (playerDataType.GetField(field.Name) != null) { if (field.FieldType != typeof(int) || (int)field.GetValue(Offsets) == -1) { continue; } var currentField = playerDataType.GetField(field.Name); var fieldType = currentField.FieldType; var dataOffset = Offset + (int)field.GetValue(Offsets); switch (field.Name) { case "TownPassCardImage" when save.SaveGeneration == SaveGeneration.N3DS: playerDataType.GetField("TownPassCardData").SetValue(boxedData, _saveData.ReadByteArray(dataOffset, 0x1400)); currentField.SetValue(boxedData, ImageGeneration.GetTpcImage((byte[])playerDataType.GetField("TownPassCardData").GetValue(boxedData))); break; case "Reset" when save.SaveGeneration == SaveGeneration.GCN: currentField.SetValue(boxedData, _saveData.ReadUInt32(dataOffset, _saveData.IsBigEndian) != 0); break; default: if (fieldType == typeof(byte)) { currentField.SetValue(boxedData, _saveData.ReadByte(dataOffset)); } else if (fieldType == typeof(byte[]) && playerSaveInfoType.GetField(field.Name + "Count") != null) { currentField.SetValue(boxedData, _saveData.ReadByteArray(dataOffset, (int)playerSaveInfoType.GetField(field.Name + "Count").GetValue(Offsets))); } else if (fieldType == typeof(ushort)) { currentField.SetValue(boxedData, _saveData.ReadUInt16(dataOffset, _saveData.IsBigEndian)); } else if (fieldType == typeof(ushort[])) { currentField.SetValue(boxedData, _saveData.ReadUInt16Array(dataOffset, (int)playerSaveInfoType.GetField(field.Name + "Count").GetValue(Offsets), _saveData.IsBigEndian)); } else if (fieldType == typeof(uint)) { currentField.SetValue(boxedData, _saveData.ReadUInt32(dataOffset, _saveData.IsBigEndian)); } else if (fieldType == typeof(string)) { currentField.SetValue(boxedData, new AcString(_saveData.ReadByteArray(dataOffset, (int)playerSaveInfoType.GetField(field.Name + "Size").GetValue(Offsets)), _saveData.SaveType).Trim()); } else if (fieldType == typeof(Inventory)) { if (save.SaveGeneration == SaveGeneration.N3DS) { currentField.SetValue(boxedData, new Inventory(_saveData.ReadUInt32Array(dataOffset, (int)playerSaveInfoType.GetField(field.Name + "Count").GetValue(Offsets), false))); } else { currentField.SetValue(boxedData, new Inventory(_saveData.ReadUInt16Array(dataOffset, (int)playerSaveInfoType.GetField(field.Name + "Count").GetValue(Offsets), _saveData.IsBigEndian), save, this)); } } else if (fieldType == typeof(Item)) { if (save.SaveGeneration == SaveGeneration.N3DS) { currentField.SetValue(boxedData, new Item(_saveData.ReadUInt32(dataOffset, false))); } else { currentField.SetValue(boxedData, new Item(_saveData.ReadUInt16(dataOffset, _saveData.IsBigEndian))); } } else if (fieldType == typeof(Item[])) { if (field.Name.Equals("Dressers")) { switch (_saveData.SaveGeneration) { case SaveGeneration.NDS: dataOffset = _saveData.SaveDataStartOffset + 0x15430 + 0xB4 * Index; // Terrible hack break; case SaveGeneration.Wii: dataOffset = _saveData.SaveDataStartOffset + 0x1F3038 + 0x140 * Index; break; } } var itemArray = new Item[(int)playerSaveInfoType.GetField(field.Name + "Count").GetValue(Offsets)]; for (var i = 0; i < itemArray.Length; i++) { if (save.SaveGeneration == SaveGeneration.N3DS) { itemArray[i] = new Item(_saveData.ReadUInt32(dataOffset + i * 4, false)); } else { itemArray[i] = new Item(_saveData.ReadUInt16(dataOffset + i * 2, _saveData.IsBigEndian)); } } currentField.SetValue(boxedData, itemArray); } else if (fieldType == typeof(NewLeafInt32)) { var intData = _saveData.ReadUInt32Array(dataOffset, 2); currentField.SetValue(boxedData, new NewLeafInt32(intData[0], intData[1])); } else if (fieldType == typeof(AcDate) && dataOffset > 0) { currentField.SetValue(boxedData, new AcDate(_saveData.ReadByteArray(dataOffset, (int)playerSaveInfoType.GetField(field.Name + "Size").GetValue(Offsets)))); } break; } } } } Data = (PlayerData)boxedData; switch (save.SaveType) { case SaveType.WildWorld: var condensedData = Data.HairColor; Data.HairColor = (byte)(condensedData & 0x0F); Data.Tan = (byte)((condensedData & 0xF0) >> 4); //Has to be 0 - 3 condensedData = Data.HairType; Data.FaceType = (byte)(condensedData & 0x0F); Data.HairType = (byte)((condensedData & 0xF0) >> 4); if (Data.Tan > 3) { Data.Tan = 0; } if (Data.HairColor > 7) { Data.HairColor = 0; } break; case SaveType.CityFolk: Data.Tan = (byte)(Data.Tan >> 1); //Not 100% sure about this, but this is what ACToolkit does if (Data.Tan > 7) { Data.Tan = 0; } if (Data.HairType > 0x19) { Data.HairType = 0x19; } Data.FaceType = (byte)(Data.FaceType & 0x0F); Data.EyeColor = (byte)(Data.FaceType & 0xF0); //Not actually eye color, just there to hold the upper nibble break; } if (Offsets.Patterns > -1) { Data.Patterns = new Pattern[Offsets.PatternCount]; for (var i = 0; i < Data.Patterns.Length; i++) { Data.Patterns[i] = new Pattern(offset + Offsets.Patterns + Offsets.PatternSize * i, i, save); } } if (_saveData.SaveType == SaveType.CityFolk) { Data.Reset = (_saveData.ReadByte(Offset + 0x8670) & 0x02) == 0x02; } else if (_saveData.SaveType == SaveType.NewLeaf) { Data.Reset = (_saveData.ReadByte(Offset + 0x5702) & 0x02) == 0x02; } else if (_saveData.SaveType == SaveType.WelcomeAmiibo) { Data.Reset = (_saveData.ReadByte(Offset + 0x570A) & 0x02) == 0x02; } // Get the Player's House House = HouseInfo.GetHouse(this, save.SaveType); if (House != null) { if (House.Data.Bed != null) { Data.Bed = House.Data.Bed; } } Console.WriteLine($"Player {Index}'s house = {House}"); // Mail Test if (_saveData.SaveGeneration != SaveGeneration.GCN) { return; } { for (var i = 0; i < 10; i++) { var mail = new GcnPlayerMail(_saveData, this, i); //System.Windows.Forms.MessageBox.Show(Mail.GetFormattedMailString()); } } }
protected override void OnEditorMouseDown(object sender, MouseEventArgs e) { if (!GetXyPosition(e, out var x, out var y, out var index)) { return; } var selectedItem = Items[index]; switch (e.Button) { case MouseButtons.Left: var newItem = new Furniture(Item.SelectedItem); if (selectedItem != newItem) { // Save Old Item PushNewItemChange(selectedItem, index, UndoStack); // Clear Redo Stack NewChange(null); // Set New Item Items[index] = newItem; // Redraw Item Image CurrentItemImage?.Dispose(); CurrentItemImage = ImageGeneration.DrawFurnitureArrows((Bitmap)Inventory.GetItemPic( ItemCellSize, ItemsPerRow, Items, MainForm.SaveFile.SaveType, Size), (Furniture[])Items, ItemsPerRow); Image?.Dispose(); Image = (Image)CurrentItemImage.Clone(); ImageGeneration.OverlayItemBoxGlow((Bitmap)Image, ItemCellSize, x, y); // Update ToolTip ItemToolTip.Show( string.Format(HoverText, newItem.Name, newItem.ItemId.ToString("X4"), newItem.ItemFlag.ToString()), this, e.X + 10, e.Y + 10, int.MaxValue); // Fire ItemChanged Event OnItemChanged(selectedItem, newItem, index); MainForm.SaveFile.ChangesMade = true; Modified = true; } break; case MouseButtons.Right: base.OnEditorMouseDown(sender, e); // Just invoke the default bevavior here. break; case MouseButtons.Middle: var tempItems = (Furniture[])Items; Utility.FloodFillFurnitureArray(ref tempItems, ItemsPerRow, index, (Furniture)Items[index], new Furniture(Item.SelectedItem)); Items = tempItems; break; } }