Core - Move ColorEntry info into colorEntries.json

This commit is contained in:
miku-666
2025-12-14 04:00:03 +01:00
parent e2a26c1ceb
commit a6b8e55b5a
26 changed files with 3870 additions and 5896 deletions

View File

@@ -16,10 +16,8 @@
* 3. This notice may not be removed or altered from any source distribution.
**/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
@@ -34,6 +32,7 @@ using PckStudio.Core.IO;
using PckStudio.Core.Json;
using PckStudio.Interfaces;
using PckStudio.Internal;
using PckStudio.Json;
using PckStudio.Properties;
namespace PckStudio.Forms.Editor
@@ -43,7 +42,7 @@ namespace PckStudio.Forms.Editor
private readonly ITryGet<string, Animation> _tryGetAnimation;
private readonly ITryGet<string, ISaveContext<Animation>> _tryGetAnimationSaveContext;
private readonly AtlasResource _atlasResource;
private readonly ColorContainer _colourTable;
private readonly ColorContainer _colorTable;
private readonly ResourceCategory _resourceLocationCategory;
private readonly Atlas _atlas;
@@ -70,7 +69,7 @@ namespace PckStudio.Forms.Editor
Text += _atlas.Name;
originalPictureBox.Image = atlas;
_colourTable = colorContainer ?? AppResourceManager.Default.GetData(Resources.tu69colours, new COLFileReader());
_colorTable = colorContainer ?? AppResourceManager.Default.GetData(Resources.tu69colours, new COLFileReader());
_tryGetAnimation = tryGetAnimation;
_tryGetAnimationSaveContext = tryGetAnimationSaveContext;
_atlasResource = resourceLocation as AtlasResource;
@@ -115,15 +114,22 @@ namespace PckStudio.Forms.Editor
private void UpdateAtlasDisplay()
{
using (var g = Graphics.FromImage(originalPictureBox.Image))
{
g.ApplyConfig(_graphicsConfig);
g.Clear(Color.Transparent);
Image image = EditorValue;
g.DrawImage(image, 0, 0, image.Width, image.Height);
using Graphics g = Graphics.FromImage(originalPictureBox.Image);
g.ApplyConfig(_graphicsConfig);
g.Clear(Color.Transparent);
Image image = EditorValue;
g.DrawImage(image, 0, 0, image.Width, image.Height);
SolidBrush brush = new SolidBrush(Color.FromArgb(127, Color.White));
g.FillRectangle(brush, allowGroupsToolStripMenuItem.Checked ? _atlas.GetTileArea(_selectedTile) : _selectedTile.GetArea(_atlas.TileSize));
SolidBrush brush = new SolidBrush(Color.FromArgb(127, Color.White));
if (!allowGroupsToolStripMenuItem.Checked)
{
g.FillRectangle(brush, _selectedTile.GetArea(_atlas.TileSize));
originalPictureBox.Invalidate();
return;
}
foreach (Rectangle area in _atlas.GetTileArea(_selectedTile))
{
g.FillRectangle(brush, area);
}
originalPictureBox.Invalidate();
}
@@ -146,13 +152,13 @@ namespace PckStudio.Forms.Editor
tileNameLabel.Text = $"{tileInfo?.DisplayName}";
internalTileNameLabel.Text = $"{tileInfo?.InternalName}";
setColorButton.Enabled = tileInfo.AllowCustomColour;
variantComboBox.Enabled = variantComboBox.Visible = tileInfo.HasColourEntry && tileInfo.ColourEntry?.Variants?.Length > 1;
variantComboBox.Enabled = Tiles.ColorEntries.TryGetValue(tileInfo.ColorKey, out JsonColorEntry colorEntry) && colorEntry?.Variants?.Length > 1 || _colorTable.Colors.Any(c => c.Name == tileInfo.ColorKey);
if (variantComboBox.Enabled)
{
if (tileInfo.ColourEntry.IsWaterColour)
if (colorEntry?.IsWaterColour ?? default)
{
foreach (ColorContainer.WaterColor col in _colourTable.WaterColors)
foreach (ColorContainer.WaterColor col in _colorTable.WaterColors)
{
if (!variantComboBox.Items.Contains(col.Name))
variantComboBox.Items.Add(col.Name);
@@ -160,10 +166,22 @@ namespace PckStudio.Forms.Editor
}
// TODO: only add variants that are available in the color table
variantComboBox.Items.AddRange(tileInfo.ColourEntry.Variants.Where(colorName => _colourTable.Colors.Any(c => c.Name == colorName) || _colourTable.WaterColors.Any(c => c.Name == colorName)).ToArray());
if (_colorTable.Colors.Where(c => c.Name == tileInfo.ColorKey).FirstOrDefault() is ColorContainer.Color c)
variantComboBox.Items.Add(c.Name);
if (_colorTable.WaterColors.Where(c => c.Name == tileInfo.ColorKey).FirstOrDefault() is ColorContainer.WaterColor wc)
variantComboBox.Items.Add(wc.Name);
if (tileInfo.HasColourEntry)
{
if (!string.IsNullOrWhiteSpace(colorEntry.DefaultName))
variantComboBox.Items.Add(colorEntry.DefaultName);
variantComboBox.Items.AddRange(colorEntry.Variants.Where(colorName => _colorTable.Colors.Any(c => c.Name == colorName) || _colorTable.WaterColors.Any(c => c.Name == colorName)).ToArray());
}
if (variantComboBox.Items.Count > 0)
{
variantComboBox.Visible = variantComboBox.Items.Count > 1;
variantComboBox.SelectedIndex = 0;
}
}
CheckForAnimation();
@@ -197,7 +215,8 @@ namespace PckStudio.Forms.Editor
if (_selectedTile.IsPartOfGroup && allowGroupsToolStripMenuItem.Checked)
{
AtlasGroup group = _selectedTile.GetGroup();
tileNameLabel.Text = $"{group.Name}";
if (!string.IsNullOrWhiteSpace(group.Name))
tileNameLabel.Text = group.Name;
internalTileNameLabel.Text = string.Empty;
if (group.IsAnimation())
{
@@ -211,10 +230,9 @@ namespace PckStudio.Forms.Editor
return;
}
}
if (group.IsLargeTile())
{
selectTilePictureBox.Image = _atlas.GetTileTexture(_selectedTile);
}
selectTilePictureBox.UseBlendColor = false;
setColorButton.Enabled |= group.AllowCustomColor;
selectTilePictureBox.Image = _atlas.GetTileTexture(_selectedTile, selectTilePictureBox.BlendColor);
}
}
@@ -324,11 +342,11 @@ namespace PckStudio.Forms.Editor
private void SetTile(Image texture)
{
if (_selectedTile.IsPartOfGroup)
if (_selectedTile.IsPartOfGroup && allowGroupsToolStripMenuItem.Checked)
{
AtlasGroup group = _selectedTile.GetGroup();
_atlas.SetGroup(group, texture);
selectTilePictureBox.Image = _atlas.GetTileTexture(_selectedTile);
selectTilePictureBox.Image = _atlas.GetTileTexture(_selectedTile, selectTilePictureBox.BlendColor);
UpdateAtlasDisplay();
return;
}
@@ -343,55 +361,45 @@ namespace PckStudio.Forms.Editor
private Color GetBlendColor()
{
if (_selectedTile.TryGetUserDataOfType(out JsonTileInfo tileInfo) && tileInfo.HasColourEntry)
if (_selectedTile.TryGetUserDataOfType(out JsonTileInfo tileInfo))
{
return FindBlendColorByKey(tileInfo.ColourEntry.DefaultName);
string colorKey = tileInfo.InternalName;
colorSlider.Visible = colorSliderLabel.Visible = true;
// Simply, Experience orbs red value is just sliding between 255 and 0
if (colorKey.StartsWith("experience_orb"))
return Color.FromArgb(colorSlider.Value, 255, 0);
// Similar story for critical hits, but for all values
if (colorKey == "critical_hit")
return Color.FromArgb(colorSlider.Value, colorSlider.Value, colorSlider.Value);
// Enchanted hits are modified critical hit particles
if (colorKey == "enchanted_hit")
{
// This is directly based on Java's source code for handling enchanted hits
// it just multiplies the red by 0.3 and green by .8 of the color assigned to the critical hit particle
var c = Color.FromArgb(colorSlider.Value, colorSlider.Value, colorSlider.Value);
return Color.FromArgb((byte)(c.R * 0.3f), (byte)(c.G * 0.8f), c.B);
}
colorSlider.Visible = colorSliderLabel.Visible = false;
if (tileInfo.HasColourEntry)
return FindBlendColorByKey(tileInfo.ColorEntry.DefaultName);
}
return Color.White;
}
private Color GetSpecificBlendColor(string colorKey)
private Color FindBlendColorByKey(string colorKey, bool isWaterColour = default)
{
colorSlider.Visible = colorSliderLabel.Visible = true;
// Simply, Experience orbs red value is just sliding between 255 and 0
if (colorKey == "experience_orb")
return Color.FromArgb(colorSlider.Value, 255, 0);
// Similar story for critical hits, but for all values
return Color.FromArgb(colorSlider.Value, colorSlider.Value, colorSlider.Value);
}
private Color FindBlendColorByKey(string colorKey)
{
// The following tiles are hardcoded within a range and do not have color table entries
if (colorKey == "experience_orb" || colorKey == "critical_hit")
return GetSpecificBlendColor(colorKey);
if (!_selectedTile.TryGetUserDataOfType(out JsonTileInfo tileInfo) || !tileInfo.HasColourEntry)
{
Debug.WriteLine("Could not find: " + colorKey);
if (string.IsNullOrWhiteSpace(colorKey))
return Color.White;
}
// Enchanted hits are modified critical hit particles
if (tileInfo.InternalName == "enchanted_hit")
{
// This is directly based on Java's source code for handling enchanted hits
// it just multiplies the red by 0.3 and green by .8 of the color assigned to the critical hit particle
var c = Color.FromArgb(colorSlider.Value, colorSlider.Value, colorSlider.Value);
return Color.FromArgb((int)(c.R * 0.3f), (int)(c.R * 0.8f), c.B);
}
// basic way to check for classic water colors
if (!tileInfo.ColourEntry.IsWaterColour || colorKey.StartsWith("Water_"))
if (!isWaterColour && !colorKey.StartsWith("Water_") && _colorTable.Colors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.Color color)
{
if (_colourTable.Colors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.Color color)
{
return color.ColorPallette;
}
return color.ColorPallette;
}
else if (_colourTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor)
if (_colorTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor)
{
return waterColor.SurfaceColor;
}
@@ -407,6 +415,18 @@ namespace PckStudio.Forms.Editor
int down = _atlas.Rows;
int left = -1;
int right = 1;
if (_selectedTile.IsPartOfGroup)
{
AtlasGroup group = _selectedTile.GetGroup();
if (!group.IsComposedOfMultipleTiles())
{
Size s = group.GetSize(new Size(1, 1));
up = -_atlas.Rows * (group.Column - _selectedTile.Column + 1);
down = _atlas.Rows * (group.Column - _selectedTile.Column + s.Height);
left = group.Row - _selectedTile.Row - 1;
right = group.Row - _selectedTile.Row + s.Width;
}
}
switch (keyData)
{
case Keys.R:
@@ -513,14 +533,14 @@ namespace PckStudio.Forms.Editor
};
if (saveFileDialog.ShowDialog(this) == DialogResult.OK)
{
_atlas.GetTileTexture(_selectedTile).Save(saveFileDialog.FileName, ImageFormat.Png);
_atlas.GetTileTexture(_selectedTile, selectTilePictureBox.BlendColor).Save(saveFileDialog.FileName, ImageFormat.Png);
Action<AtlasTile, FileInfo> onChange = new Action<AtlasTile, FileInfo>((tile, fileInfo) =>
{
Image img = Image.FromFile(fileInfo.FullName).ReleaseFromFile();
bool success = _atlas.SetTile(tile, img);
if (!success)
{
Size s = _atlas.GetTileArea(tile).Size;
Size s = _atlas.GetTileArea(tile).FirstOrDefault().Size;
new ToastContentBuilder()
.AddText("Invalid Image Dimensions")
.AddText($"Required: {s.Width}x{s.Height} Recived: {img.Width}x{img.Height}")
@@ -555,13 +575,8 @@ namespace PckStudio.Forms.Editor
{
string colorKey = variantComboBox.SelectedItem.ToString();
Color blendColor = FindBlendColorByKey(colorKey);
if (_selectedTile.IsPartOfGroup && _selectedTile.GetGroup().IsAnimation())
{
selectTilePictureBox.Image = _atlas.GetAnimationFromGroup(_selectedTile.GetGroup()).CreateAnimationImage(blendColor);
selectTilePictureBox.Start();
return;
}
selectTilePictureBox.BlendColor = blendColor;
CheckForAnimation();
}
}
@@ -590,6 +605,7 @@ namespace PckStudio.Forms.Editor
selectTilePictureBox.BlendColor = _colorPick.Color;
variantComboBox.Enabled = false;
clearColorButton.Enabled = true;
CheckForAnimation();
}
private void clearColorButton_Click(object sender, EventArgs e)
@@ -599,6 +615,7 @@ namespace PckStudio.Forms.Editor
selectTilePictureBox.BlendColor = Color.White;
clearColorButton.Enabled = false;
CheckForAnimation();
}
private void colorSlider_ValueChanged(object sender, EventArgs e)

View File

@@ -156,19 +156,19 @@ namespace PckStudio.Core
{
if (!group.IsAnimation())
return Animation.CreateEmpty();
if (group is AtlasGroupLargeTileAnimation largeTileAnimation)
if (group is AtlasLargeTileAnimation largeTileAnimation)
return GetLargeAnimation(largeTileAnimation);
return GetAnimation(group as AtlasGroupAnimation);
return GetAnimation(group as AtlasAnimation);
}
private Animation GetLargeAnimation(AtlasGroupLargeTileAnimation group)
private Animation GetLargeAnimation(AtlasLargeTileAnimation group)
{
return new Animation(GetLargeAnimationTiles(group).Select(largeTileParts => largeTileParts.Select(t => t.Texture).Combine(group.RowSpan, group.ColumnSpan, _layoutDirection)), true, group.FrameTime);
}
private IEnumerable<IEnumerable<AtlasTile>> GetLargeAnimationTiles(AtlasGroupLargeTileAnimation group) => group.GetLargeTiles().Select(GetLargeTile);
private IEnumerable<IEnumerable<AtlasTile>> GetLargeAnimationTiles(AtlasLargeTileAnimation group) => group.GetLargeTiles().Select(GetLargeTile);
private Animation GetAnimation(AtlasGroupAnimation groupAnimation) => new Animation(GetRange(groupAnimation.Row, groupAnimation.Column, groupAnimation.Direction == ImageLayoutDirection.Horizontal ? groupAnimation.Count : 1, groupAnimation.Direction == ImageLayoutDirection.Vertical ? groupAnimation.Count : 1).Select(t => t.Texture), true, groupAnimation.FrameTime);
private Animation GetAnimation(AtlasAnimation groupAnimation) => new Animation(GetRange(groupAnimation.Row, groupAnimation.Column, groupAnimation.Direction == ImageLayoutDirection.Horizontal ? groupAnimation.Count : 1, groupAnimation.Direction == ImageLayoutDirection.Vertical ? groupAnimation.Count : 1).Select(t => t.Texture), true, groupAnimation.FrameTime);
private Image BuildFinalImage() => _tiles.Select(t => t.Texture).Combine(Rows, Columns, _layoutDirection);
@@ -179,30 +179,50 @@ namespace PckStudio.Core
SetRange(group.Row, group.Column, group.Count, group.Direction, animation.GetFrames().Select(f => f.Texture));
}
private IEnumerable<AtlasTile> GetLargeTile(AtlasGroupLargeTile group) => GetRange(group.Row, group.Column, group.RowSpan, group.ColumnSpan);
private IEnumerable<AtlasTile> GetLargeTile(AtlasLargeTile group) => GetRange(group.Row, group.Column, group.RowSpan, group.ColumnSpan);
public Image GetTileTexture(AtlasTile tile)
public Image GetTileTexture(AtlasTile tile, Color blendColor)
{
if (!tile.IsPartOfGroup)
return tile;
AtlasGroup atlasGroup = tile.GetGroup();
if (atlasGroup.IsComposedOfMultipleTiles())
return ComposeTileTexture(atlasGroup, blendColor);
if (!atlasGroup.IsLargeTile())
return tile;
AtlasGroupLargeTile largeTile = atlasGroup is AtlasGroupLargeTileAnimation largeTileAnimation ? largeTileAnimation.GetTile(tile.Row, tile.Column) : atlasGroup as AtlasGroupLargeTile;
return GetLargeTile(largeTile).Select(t => t.Texture).Combine(largeTile.RowSpan, largeTile.ColumnSpan, _layoutDirection);
AtlasLargeTile largeTile = atlasGroup is AtlasLargeTileAnimation largeTileAnimation ? largeTileAnimation.GetTile(tile.Row, tile.Column) : atlasGroup as AtlasLargeTile;
Image tileTexture = GetLargeTile(largeTile).Select(t => t.Texture).Combine(largeTile.RowSpan, largeTile.ColumnSpan, _layoutDirection);
return atlasGroup.AllowCustomColor ? tileTexture.Blend(BlendOption.Multiply(blendColor)) : tileTexture;
}
private Image ComposeTileTexture(AtlasGroup atlasGroup, Color blendColor)
{
Image result = new Bitmap(TileSize.Width, TileSize.Height);
using Graphics g = Graphics.FromImage(result);
g.ApplyConfig(GraphicsConfig.PixelPerfect());
AtlasTile[] textures = atlasGroup.GetTileArea(new Size(1, 1)).Select(r => this[r.X, r.Y]).ToArray();
if (textures.Length > 1)
{
g.DrawImage(textures[0].Texture.Blend(BlendOption.Multiply(blendColor)), Point.Empty);
g.DrawImage(textures[1], Point.Empty);
}
return result;
}
private IEnumerable<AtlasTile> InternalGetTilesFromGroup(AtlasGroup atlasGroup, out int rowSpan, out int columnSpan)
{
if (atlasGroup is AtlasGroupLargeTileAnimation largeTileAnimation)
if (atlasGroup is AtlasLargeTileAnimation largeTileAnimation)
{
rowSpan = largeTileAnimation.RowSpan;
columnSpan = largeTileAnimation.ColumnSpan;
return largeTileAnimation.GetLargeTiles().SelectMany(GetLargeTile);
}
if (atlasGroup is AtlasGroupLargeTile largeTile)
if (atlasGroup is AtlasLargeTile largeTile)
{
rowSpan = largeTile.RowSpan;
columnSpan = largeTile.ColumnSpan;
@@ -210,15 +230,17 @@ namespace PckStudio.Core
}
rowSpan = 1;
columnSpan = 1;
if (atlasGroup is AtlasOverlayGroup multipleTiles)
return multipleTiles.GetTileArea(new Size(1, 1)).Select(r => this[r.X, r.Y]);
return GetRange(atlasGroup.Row, atlasGroup.Column, atlasGroup.Count, atlasGroup.Direction);
}
public Rectangle GetTileArea(AtlasTile tile)
public Rectangle[] GetTileArea(AtlasTile tile)
{
if (!tile.IsPartOfGroup)
return tile.GetArea(TileSize);
return [tile.GetArea(TileSize)];
AtlasGroup group = tile.GetGroup();
return new Rectangle(new Point(group.Row * TileSize.Width, group.Column * TileSize.Height), group.GetSize(TileSize));
return group.GetTileArea(TileSize);
}
public bool SetGroup(AtlasGroup group, Image texture)

View File

@@ -21,7 +21,7 @@ using Newtonsoft.Json.Serialization;
namespace PckStudio.Core
{
internal sealed class AtlasGroupAnimation : AtlasGroup
internal sealed class AtlasAnimation : AtlasGroup
{
[JsonProperty("frameCount", Required = Required.Always)]
private int _frameCount;
@@ -40,10 +40,12 @@ namespace PckStudio.Core
[JsonIgnore]
protected override bool isLargeTile => false;
protected override bool isComposedOfMultipleTiles => false;
public override Size GetSize(Size tileSize) => new Size(tileSize.Width * (Direction == ImageLayoutDirection.Horizontal ? Count : 1), tileSize.Height * (Direction == ImageLayoutDirection.Vertical ? Count : 1));
public AtlasGroupAnimation(string name, int row, int column, int frameCount, ImageLayoutDirection direction, int frameTime = Animation.MINIMUM_FRAME_TIME)
: base(name, row, column)
public AtlasAnimation(string name, int row, int column, int frameCount, ImageLayoutDirection direction, int frameTime = Animation.MINIMUM_FRAME_TIME, bool allowCustomColor = default)
: base(name, row, column, allowCustomColor)
{
_frameCount = frameCount;
Direction = direction;

View File

@@ -16,7 +16,6 @@
* 3. This notice may not be removed or altered from any source distribution.
**/
using System;
using System.Data.SqlTypes;
using System.Drawing;
using Newtonsoft.Json;
@@ -30,6 +29,8 @@ namespace PckStudio.Core
public int Row { get; }
[JsonProperty("column", Required = Required.Always, Order = 2)]
public int Column { get; }
[JsonProperty("allowCustomColor", DefaultValueHandling = DefaultValueHandling.Populate)]
public bool AllowCustomColor { get; }
[JsonIgnore]
public virtual int Count => 1;
@@ -38,20 +39,28 @@ namespace PckStudio.Core
protected abstract bool isAnimation { get; }
[JsonIgnore]
protected abstract bool isLargeTile { get; }
[JsonIgnore]
protected abstract bool isComposedOfMultipleTiles { get; }
[JsonProperty("direction")]
public virtual ImageLayoutDirection Direction => Column > Row ? ImageLayoutDirection.Vertical : ImageLayoutDirection.Horizontal;
public AtlasGroup(string name, int row, int column)
public AtlasGroup(string name, int row, int column, bool allowCustomColor)
{
Name = name;
Row = Math.Max(0, row);
Column = Math.Max(0, column);
AllowCustomColor = allowCustomColor;
}
public bool IsAnimation() => isAnimation;
public bool IsLargeTile() => isLargeTile;
public bool IsComposedOfMultipleTiles() => isComposedOfMultipleTiles;
public abstract Size GetSize(Size tileSize);
internal virtual Rectangle[] GetTileArea(Size tileSize)
{
return [new Rectangle(new Point(Row * tileSize.Width, Column * tileSize.Height), GetSize(tileSize))];
}
}
}

View File

@@ -19,6 +19,7 @@ using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using PckStudio.Core.Extensions;
using PckStudio.Core.Json;
namespace PckStudio.Core
{
@@ -31,6 +32,11 @@ namespace PckStudio.Core
if (!jObject.TryGetValue("name", out string name) || !jObject.TryGetValue("row", out int row) || !jObject.TryGetValue("column", out int column))
return default;
bool allowCustomColor = default;
jObject.TryGetValue("allowCustomColor", out allowCustomColor);
if (jObject.TryGetValue("overlay", out JsonRowAndColumn rowsAndColumns))
return new AtlasOverlayGroup(name, row, column, rowsAndColumns, allowCustomColor);
int frameTime = Animation.MINIMUM_FRAME_TIME;
int frameCount = default;
int rowSpan = default;
@@ -41,11 +47,11 @@ namespace PckStudio.Core
jObject.TryGetValue("direction", out direction);
bool isLargeTile = jObject.TryGetValue("rowSpan", out rowSpan) && jObject.TryGetValue("columnSpan", out columnSpan);
if (isAnimation && isLargeTile)
return new AtlasGroupLargeTileAnimation(name, row, column, rowSpan, columnSpan, frameCount, direction, frameTime);
return new AtlasLargeTileAnimation(name, row, column, rowSpan, columnSpan, frameCount, direction, frameTime, allowCustomColor);
if (isAnimation)
return new AtlasGroupAnimation(name, row, column, frameCount, direction, frameTime);
return new AtlasAnimation(name, row, column, frameCount, direction, frameTime, allowCustomColor);
if (isLargeTile)
return new AtlasGroupLargeTile(name, row, column, rowSpan, columnSpan);
return new AtlasLargeTile(name, row, column, rowSpan, columnSpan, allowCustomColor);
return default;
}

View File

@@ -21,7 +21,7 @@ using Newtonsoft.Json;
namespace PckStudio.Core
{
internal sealed class AtlasGroupLargeTile : AtlasGroup
internal sealed class AtlasLargeTile : AtlasGroup
{
[JsonProperty("rowSpan")]
public int RowSpan { get; }
@@ -37,10 +37,12 @@ namespace PckStudio.Core
[JsonIgnore]
protected override bool isLargeTile => true;
protected override bool isComposedOfMultipleTiles => false;
public override Size GetSize(Size tileSize) => new Size(RowSpan * tileSize.Width, ColumnSpan * tileSize.Height);
public AtlasGroupLargeTile(string name, int row, int column, int rowSpan, int columnSpan)
: base(name, row, column)
public AtlasLargeTile(string name, int row, int column, int rowSpan, int columnSpan, bool allowCustomColor)
: base(name, row, column, allowCustomColor)
{
RowSpan = Math.Max(1, rowSpan);
ColumnSpan = Math.Max(1, columnSpan);

View File

@@ -23,10 +23,10 @@ using Newtonsoft.Json;
namespace PckStudio.Core
{
internal sealed class AtlasGroupLargeTileAnimation : AtlasGroup
internal sealed class AtlasLargeTileAnimation : AtlasGroup
{
[JsonIgnore]
private AtlasGroupLargeTile[] _largeTiles;
private AtlasLargeTile[] _largeTiles;
[JsonProperty("frameCount")]
private int _frameCount;
@@ -50,10 +50,12 @@ namespace PckStudio.Core
[JsonIgnore]
protected override bool isLargeTile => true;
protected override bool isComposedOfMultipleTiles => false;
public override Size GetSize(Size tileSize) => new Size(RowSpan * tileSize.Width * (Direction == ImageLayoutDirection.Horizontal ? _frameCount : 1), ColumnSpan * tileSize.Height * (Direction == ImageLayoutDirection.Vertical ? _frameCount : 1));
public AtlasGroupLargeTileAnimation(string name, int row, int column, int rowSpan, int columnSpan, int frameCount, ImageLayoutDirection direction, int frameTime = Animation.MINIMUM_FRAME_TIME)
: base(name, row, column)
public AtlasLargeTileAnimation(string name, int row, int column, int rowSpan, int columnSpan, int frameCount, ImageLayoutDirection direction, int frameTime = Animation.MINIMUM_FRAME_TIME, bool allowCustomColor = default)
: base(name, row, column, allowCustomColor)
{
_frameCount = Math.Abs(frameCount);
RowSpan = Math.Max(1, rowSpan);
@@ -63,16 +65,16 @@ namespace PckStudio.Core
_largeTiles = InternalGetLargeTiles().ToArray();
}
private IEnumerable<AtlasGroupLargeTile> InternalGetLargeTiles()
private IEnumerable<AtlasLargeTile> InternalGetLargeTiles()
{
for (int i = 0; i < _frameCount; i++)
{
yield return new AtlasGroupLargeTile($"{Name}_{i}", Row + (Direction == ImageLayoutDirection.Horizontal ? i * RowSpan : 0), Column + (Direction == ImageLayoutDirection.Vertical ? i * ColumnSpan : 0), RowSpan, ColumnSpan);
yield return new AtlasLargeTile($"{Name}_{i}", Row + (Direction == ImageLayoutDirection.Horizontal ? i * RowSpan : 0), Column + (Direction == ImageLayoutDirection.Vertical ? i * ColumnSpan : 0), RowSpan, ColumnSpan, AllowCustomColor);
}
yield break;
}
internal AtlasGroupLargeTile GetTile(int row, int col)
internal AtlasLargeTile GetTile(int row, int col)
{
if (!IsInRange(row, col))
return default;
@@ -85,6 +87,6 @@ namespace PckStudio.Core
return Row <= row && row < (Row + (RowSpan * (Direction == ImageLayoutDirection.Horizontal ? _frameCount : 1))) && Column <= col && col < (Column + (ColumnSpan * (Direction == ImageLayoutDirection.Horizontal ? _frameCount : 1)));
}
internal IEnumerable<AtlasGroupLargeTile> GetLargeTiles() => _largeTiles;
internal IEnumerable<AtlasLargeTile> GetLargeTiles() => _largeTiles;
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PckStudio.Core.Json;
namespace PckStudio.Core
{
internal class AtlasOverlayGroup : AtlasGroup
{
private JsonRowAndColumn _overlayAtlasLocation;
public AtlasOverlayGroup(string name, int row, int column, JsonRowAndColumn overlayAtlasLocation, bool allowCustomColor)
: base(name, row, column, allowCustomColor)
{
_overlayAtlasLocation = overlayAtlasLocation;
}
protected override bool isAnimation => false;
protected override bool isLargeTile => false;
protected override bool isComposedOfMultipleTiles => true;
public override Size GetSize(Size tileSize) => tileSize;
internal override Rectangle[] GetTileArea(Size tileSize) => [new Rectangle(new Point(Row * tileSize.Width, Column * tileSize.Height), tileSize), new Rectangle(new Point(_overlayAtlasLocation.Row * tileSize.Width, _overlayAtlasLocation.Column * tileSize.Height), tileSize)];
}
}

View File

@@ -16,6 +16,7 @@
* 3. This notice may not be removed or altered from any source distribution.
**/
using System;
using System.Diagnostics;
using System.Drawing;
namespace PckStudio.Core
@@ -44,6 +45,7 @@ namespace PckStudio.Core
internal void SetGroup(AtlasGroup group)
{
Debug.Assert(_group is null, $"Tile is already part of group:'{_group?.Name}'");
_group = group;
}

View File

@@ -9,13 +9,13 @@ namespace PckStudio.Core.Json
{
public class JsonColorEntry
{
[JsonProperty("defaultName", Required = Required.Always)]
[JsonProperty("defaultName", DefaultValueHandling = DefaultValueHandling.Populate)]
public string DefaultName { get; set; }
[JsonProperty("isWaterColour", DefaultValueHandling = DefaultValueHandling.Populate)]
public bool IsWaterColour { get; set; }
[JsonProperty("variants", DefaultValueHandling = DefaultValueHandling.Populate)]
public string[] Variants { get; set; }
[JsonProperty("variants", NullValueHandling = NullValueHandling.Ignore)]
public string[] Variants { get; set; } = Array.Empty<string>();
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace PckStudio.Core.Json
{
internal class JsonRowAndColumn
{
[JsonProperty("row", Required = Required.Always)]
public int Row { get; set; }
[JsonProperty("column", Required = Required.Always)]
public int Column { get; set; }
}
}

View File

@@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using PckStudio.Json;
namespace PckStudio.Core.Json
{
@@ -15,21 +16,18 @@ namespace PckStudio.Core.Json
[JsonProperty("internalName")]
public string InternalName { get; set; }
[JsonProperty("width")]
public int TileWidth { get; set; } = 1;
[JsonProperty("height")]
public int TileHeight { get; set; } = 1;
[JsonIgnore]
public bool HasColourEntry => ColourEntry != null;
[JsonProperty("colourEntry", DefaultValueHandling = DefaultValueHandling.Ignore)]
public JsonColorEntry ColourEntry { get; set; }
[JsonProperty("allowCustomColour", DefaultValueHandling = DefaultValueHandling.Populate)]
public bool AllowCustomColour { get; set; }
[JsonProperty("colorKey", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string ColorKey { get; set; } = string.Empty;
[JsonIgnore]
public bool HasColourEntry => Tiles.ColorEntries.ContainsKey(ColorKey);
[JsonIgnore]
public JsonColorEntry ColorEntry => Tiles.ColorEntries[ColorKey];
public JsonTileInfo(string displayName, string internalName)
{
DisplayName = displayName;

View File

@@ -56,14 +56,15 @@
<Compile Include="ArmorPiece.cs" />
<Compile Include="ArmorSet.cs" />
<Compile Include="ArmorSetDescription.cs" />
<Compile Include="Atlas.cs" />
<Compile Include="AtlasGroup.cs" />
<Compile Include="AtlasGroupAnimation.cs" />
<Compile Include="AtlasGroupJsonConverter.cs" />
<Compile Include="AtlasGroupLargeTile.cs" />
<Compile Include="AtlasGroupLargeTileAnimation.cs" />
<Compile Include="Atlas\Atlas.cs" />
<Compile Include="Atlas\AtlasGroup.cs" />
<Compile Include="Atlas\AtlasAnimation.cs" />
<Compile Include="Atlas\AtlasGroupJsonConverter.cs" />
<Compile Include="Atlas\AtlasLargeTile.cs" />
<Compile Include="Atlas\AtlasLargeTileAnimation.cs" />
<Compile Include="AtlasResource.cs" />
<Compile Include="AtlasTile.cs" />
<Compile Include="Atlas\AtlasOverlayGroup.cs" />
<Compile Include="Atlas\AtlasTile.cs" />
<Compile Include="BoundingBox.cs" />
<Compile Include="ConsolePlatform.cs" />
<Compile Include="DelegatedFileSaveContext.cs" />
@@ -155,6 +156,7 @@
<Compile Include="Json\EntityInfo.cs" />
<Compile Include="Json\JsonDefaultModel.cs" />
<Compile Include="Json\JsonModelMetaData.cs" />
<Compile Include="Json\JsonRowAndColumn.cs" />
<Compile Include="Json\TileInfo.cs" />
<Compile Include="Json\UpdateInformation.cs" />
<Compile Include="MapData.cs" />
@@ -221,6 +223,7 @@
<None Include="Resources\atlas\additionalMapiconsData.json" />
<None Include="Resources\atlas\bannerData.json" />
<None Include="Resources\atlas\blockData.json" />
<None Include="Resources\atlas\colorEntries.json" />
<None Include="Resources\atlas\experienceOrbData.json" />
<None Include="Resources\atlas\explosionData.json" />
<None Include="Resources\atlas\groups\item_groups.json" />

View File

@@ -105,30 +105,28 @@ namespace PckStudio.Core.Properties {
/// <summary>
/// Looks up a localized string similar to {
/// &quot;COMMENT_1&quot;: &quot;JSON by MattNL&quot;,
/// &quot;entries&quot;: [
/// {
/// &quot;internalName&quot;: &quot;base&quot;,
/// &quot;displayName&quot;: &quot;Base&quot;,
///
/// &quot;colourEntry&quot;: {
/// &quot;defaultName&quot;: &quot;Banner_White&quot;,
/// &quot;variants&quot;: [
/// &quot;Banner_Black&quot;,
/// &quot;Banner_Blue&quot;,
/// &quot;Banner_Brown&quot;,
/// &quot;Banner_Cyan&quot;,
/// &quot;Banner_Gray&quot;,
/// &quot;Banner_Green&quot;,
/// &quot;Banner_Light_Blue&quot;,
/// &quot;Banner_Lime&quot;,
/// &quot;Banner_Magenta&quot;,
/// &quot;Banner_Orange&quot;,
/// &quot;Banner_Pink&quot;,
/// &quot;Banner_Purple&quot;,
/// &quot;Banner_Red&quot;,
/// &quot;Banner_Silver&quot;,
/// &quot;Banner [rest of string was truncated]&quot;;.
/// &quot;COMMENT_1&quot;: &quot;JSON by MattNL&quot;,
/// &quot;entries&quot;: [
/// {
/// &quot;internalName&quot;: &quot;base&quot;,
/// &quot;displayName&quot;: &quot;Base&quot;,
/// &quot;colorKey&quot;: &quot;Banner_Color&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;border&quot;,
/// &quot;displayName&quot;: &quot;Bordure&quot;,
/// &quot;colorKey&quot;: &quot;Banner_Color&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;bricks&quot;,
/// &quot;displayName&quot;: &quot;Field Masoned&quot;,
/// &quot;colorKey&quot;: &quot;Banner_Color&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;circle&quot;,
/// &quot;displayName&quot;: &quot;Roundel&quot;,
/// &quot;colorKey&quot;: &quot;Banner_Color&quot;
/// }, [rest of string was truncated]&quot;;.
/// </summary>
public static string bannerData {
get {
@@ -157,12 +155,7 @@ namespace PckStudio.Core.Properties {
///
/// &quot;colourEntry&quot;: {
/// &quot;defaultName&quot;: &quot;Grass_Common&quot;,
/// &quot;variants&quot;: [
/// &quot;Grass_Common&quot;,
/// &quot;Grass_Mesa&quot;,
/// &quot;Grass_Swamp1&quot;,
/// &quot;Grass_Swamp2&quot;
/// ]
/// &quot;colorCategory&quot;: [&quot;Grass&quot;]
/// }
/// },
/// {
@@ -171,7 +164,11 @@ namespace PckStudio.Core.Properties {
/// },
/// {
/// &quot;internalName&quot;: &quot;dirt&quot;,
/// &quot;displayName&quot; [rest of string was truncated]&quot;;.
/// &quot;displayName&quot;: &quot;Dirt&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;grass_side&quot;,
/// &quot;displayName&quot;: &quot;Grass [rest of string was truncated]&quot;;.
/// </summary>
public static string blockData {
get {
@@ -229,6 +226,37 @@ namespace PckStudio.Core.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to {
/// &quot;Particle&quot;: {
/// &quot;variants&quot;: [
/// &quot;Particle_Smoke&quot;,
/// &quot;Particle_NetherPortal&quot;,
/// &quot;Particle_EnderPortal&quot;,
/// &quot;Particle_Ender&quot;,
/// &quot;Particle_DragonBreathMin&quot;,
/// &quot;Particle_DragonBreathMax&quot;
/// ]
/// },
/// &quot;Particle_EnchantmentTable&quot;: {
/// &quot;defaultName&quot;: &quot;Particle_EnchantmentTable&quot;
/// },
/// &quot;Particle_ScoreRing&quot;: {
/// &quot;variants&quot;: [
/// &quot;Particle_ScoreRing_Small&quot;,
/// &quot;Particle_ScoreRing_Medium&quot;,
/// &quot;Particle_ScoreRing_Large&quot;
/// ]
/// },
/// &quot;Potion_Effect&quot;: {
/// [rest of string was truncated]&quot;;.
/// </summary>
public static string colorEntries {
get {
return ResourceManager.GetString("colorEntries", resourceCulture);
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@@ -298,24 +326,23 @@ namespace PckStudio.Core.Properties {
/// &quot;entries&quot;: [
/// {
/// &quot;internalName&quot;: &quot;experience_orb_0&quot;,
/// &quot;displayName&quot;: &quot;Experience Orb (Size 1)&quot;,
/// &quot;hasColourEntry&quot;: true,
/// &quot;colourEntry&quot;: {
/// &quot;defaultName&quot;: &quot;experience_orb&quot;,
/// &quot;variants&quot;: [&quot;experience_orb&quot;]
/// }
/// &quot;displayName&quot;: &quot;Experience Orb (Size 1)&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;experience_orb_1&quot;,
/// &quot;displayName&quot;: &quot;Experience Orb (Size 2)&quot;,
/// &quot;hasColourEntry&quot;: true,
/// &quot;colourEntry&quot;: {
/// &quot;defaultName&quot;: &quot;experience_orb&quot;,
/// &quot;variants&quot;: [&quot;experience_orb&quot;]
/// }
/// &quot;displayName&quot;: &quot;Experience Orb (Size 2)&quot;
/// },
/// {
/// &quot; [rest of string was truncated]&quot;;.
/// &quot;internalName&quot;: &quot;experience_orb_2&quot;,
/// &quot;displayName&quot;: &quot;Experience Orb (Size 3)&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;experience_orb_3&quot;,
/// &quot;displayName&quot;: &quot;Experience Orb (Size 4)&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;experience_orb_4&quot;,
/// &quot;displayName&quot;: &quot;Experience Or [rest of string was truncated]&quot;;.
/// </summary>
public static string experienceOrbData {
get {
@@ -325,28 +352,26 @@ namespace PckStudio.Core.Properties {
/// <summary>
/// Looks up a localized string similar to {
/// &quot;COMMENT_1&quot;: &quot;JSON by MattNL&quot;,
/// &quot;entries&quot;: [
/// {
/// &quot;internalName&quot;: &quot;explosion_0&quot;,
/// &quot;displayName&quot;: &quot;Explosion (Stage 1)&quot;,
/// &quot;hasColourEntry&quot;: true,
/// &quot;colourEntry&quot;: {
/// &quot;defaultName&quot;: &quot;Particle_Explode&quot;,
/// &quot;variants&quot;: [
/// &quot;Particle_Explode&quot;,
/// &quot;Particle_HugeExplosion&quot;
/// ]
/// }
/// },
/// {
/// &quot;internalName&quot;: &quot;explosion_1&quot;,
/// &quot;displayName&quot;: &quot;Explosion (Stage 2)&quot;,
/// &quot;hasColourEntry&quot;: true,
/// &quot;colourEntry&quot;: {
/// &quot;defaultName&quot;: &quot;Particle_Explode&quot;,
/// &quot;variants&quot;: [
/// [rest of string was truncated]&quot;;.
/// &quot;COMMENT_1&quot;: &quot;JSON by MattNL&quot;,
/// &quot;entries&quot;: [
/// {
/// &quot;internalName&quot;: &quot;explosion_0&quot;,
/// &quot;displayName&quot;: &quot;Explosion (Stage 1)&quot;,
/// &quot;colorKey&quot;: &quot;Particle_Explode&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;explosion_1&quot;,
/// &quot;displayName&quot;: &quot;Explosion (Stage 2)&quot;,
/// &quot;colorKey&quot;: &quot;Particle_Explode&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;explosion_2&quot;,
/// &quot;displayName&quot;: &quot;Explosion (Stage 3)&quot;,
/// &quot;colorKey&quot;: &quot;Particle_Explode&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;explosion_3&quot;,
/// [rest of string was truncated]&quot;;.
/// </summary>
public static string explosionData {
get {
@@ -413,18 +438,19 @@ namespace PckStudio.Core.Properties {
/// &quot;internalName&quot;: &quot;helmetCloth&quot;,
/// &quot;displayName&quot;: &quot;Leather Cap&quot;,
/// &quot;allowCustomColour&quot;: true,
/// &quot;hasColourEntry&quot;: true,
/// &quot;colourEntry&quot;: {
/// &quot;defaultName&quot;: &quot;Armour_Default_Leather_Colour&quot;,
/// &quot;variants&quot;: [ &quot;Armour_Default_Leather_Colour&quot; ]
/// }
/// &quot;colorKey&quot;: &quot;Armour_Default_Leather_Colour&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;helmetChain&quot;,
/// &quot;displayName&quot;: &quot;Chain Helmet&quot;
/// },
/// {
/// &quot;internalName&quot;: [rest of string was truncated]&quot;;.
/// &quot;internalName&quot;: &quot;helmetIron&quot;,
/// &quot;displayName&quot;: &quot;Iron Helmet&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;helmetDiamond&quot;,
/// &quot;displayName&quot;: [rest of string was truncated]&quot;;.
/// </summary>
public static string itemData {
get {
@@ -445,14 +471,33 @@ namespace PckStudio.Core.Properties {
/// <summary>
/// Looks up a localized string similar to [
/// {
/// &quot;frameCount&quot;: 3,
/// &quot;frameTime&quot;: 6,
/// &quot;direction&quot;: 1,
/// &quot;name&quot;: &quot;Bow Pulling&quot;,
/// &quot;row&quot;: 5,
/// &quot;column&quot;: 6
/// }
///].
/// &quot;column&quot;: 6,
/// &quot;frameCount&quot;: 3,
/// &quot;frameTime&quot;: 6,
/// &quot;direction&quot;: 1
/// },
/// {
/// &quot;name&quot;: &quot;Leather Cap&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: 0,
/// &quot;overlay&quot;: { &quot;row&quot;: 0, &quot;column&quot;: 9 }
/// },
/// {
/// &quot;name&quot;: &quot;Leather Tunic&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: 1,
/// &quot;overlay&quot;: { &quot;row&quot;: 0, &quot;column&quot;: 10 }
/// },
/// {
/// &quot;name&quot;: &quot;Leather Pants&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: 2,
/// &quot;overlay&quot;: { &quot;row&quot;: 0, &quot;column&quot;: 11 }
/// },
/// {
/// &quot;name&quot;: &quot;Leather [rest of string was truncated]&quot;;.
/// </summary>
public static string items_groups {
get {
@@ -588,35 +633,35 @@ namespace PckStudio.Core.Properties {
/// <summary>
/// Looks up a localized string similar to [
/// {
/// &quot;rowSpan&quot;: 2,
/// &quot;columnSpan&quot;: 1,
/// &quot;name&quot;: &quot;The Pool&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: 2,
/// &quot;rowSpan&quot;: 2,
/// &quot;columnSpan&quot;: 1,
/// &quot;direction&quot;: 1
/// },
/// {
/// &quot;rowSpan&quot;: 2,
/// &quot;columnSpan&quot;: 1,
/// &quot;name&quot;: &quot;Bonjour Monsiuer Courbet&quot;,
/// &quot;row&quot;: 2,
/// &quot;column&quot;: 2,
/// &quot;rowSpan&quot;: 2,
/// &quot;columnSpan&quot;: 1,
/// &quot;direction&quot;: 0
/// },
/// {
/// &quot;rowSpan&quot;: 2,
/// &quot;columnSpan&quot;: 1,
/// &quot;name&quot;: &quot;Seaside&quot;,
/// &quot;row&quot;: 4,
/// &quot;column&quot;: 2,
/// &quot;rowSpan&quot;: 2,
/// &quot;columnSpan&quot;: 1,
/// &quot;direction&quot;: 0
/// },
/// {
/// &quot;rowSpan&quot;: 2,
/// &quot;columnSpan&quot;: 1,
/// &quot;name&quot;: &quot;sunset_dense&quot;,
/// &quot;row&quot;: 6,
/// &quot;column&quot;: [rest of string was truncated]&quot;;.
/// &quot;column&quot;: 2,
/// &quot;rowSpan&quot;: 2,
/// &quot;columnSpan&quot;: [rest of string was truncated]&quot;;.
/// </summary>
public static string painting_groups {
get {
@@ -671,21 +716,22 @@ namespace PckStudio.Core.Properties {
/// {
/// &quot;internalName&quot;: &quot;generic_0&quot;,
/// &quot;displayName&quot;: &quot;Generic (Stage 1)&quot;,
/// &quot;colourEntry&quot;: {
/// &quot;defaultName&quot;: &quot;None&quot;,
/// &quot;variants&quot;: [
/// &quot;None&quot;,
/// &quot;Particle_Smoke&quot;,
/// &quot;Particle_NetherPortal&quot;,
/// &quot;Particle_EnderPortal&quot;,
/// &quot;Particle_Ender&quot;,
/// &quot;Particle_DragonBreathMin&quot;,
/// &quot;Particle_DragonBreathMax&quot;
/// ]
/// }
/// &quot;colorKey&quot;: &quot;Particle&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;generic_1&quot;, [rest of string was truncated]&quot;;.
/// &quot;internalName&quot;: &quot;generic_1&quot;,
/// &quot;displayName&quot;: &quot;Generic (Stage 2)&quot;,
/// &quot;colorKey&quot;: &quot;Particle&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;generic_2&quot;,
/// &quot;displayName&quot;: &quot;Generic (Stage 3)&quot;,
/// &quot;colorKey&quot;: &quot;Particle&quot;
/// },
/// {
/// &quot;internalName&quot;: &quot;generic_3&quot;,
/// &quot;displayName&quot;: &quot;Generic (Stage 4)&quot;,
/// [rest of string was truncated]&quot;;.
/// </summary>
public static string particleData {
get {
@@ -706,36 +752,36 @@ namespace PckStudio.Core.Properties {
/// <summary>
/// Looks up a localized string similar to [
/// {
/// &quot;name&quot;: &quot;Generic&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: 0,
/// &quot;frameCount&quot;: 8,
/// &quot;frameTime&quot;: 2,
/// &quot;direction&quot;: 0,
/// &quot;name&quot;: &quot;generic&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: 0
/// &quot;direction&quot;: 0
/// },
/// {
/// &quot;name&quot;: &quot;Splash&quot;,
/// &quot;row&quot;: 3,
/// &quot;column&quot;: 1,
/// &quot;frameCount&quot;: 4,
/// &quot;frameTime&quot;: 2,
/// &quot;direction&quot;: 0,
/// &quot;name&quot;: &quot;splash&quot;,
/// &quot;row&quot;: 3,
/// &quot;column&quot;: 1
/// &quot;direction&quot;: 0
/// },
/// {
/// &quot;name&quot;: &quot;Drip&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: 7,
/// &quot;frameCount&quot;: 3,
/// &quot;frameTime&quot;: 4,
/// &quot;direction&quot;: 0,
/// &quot;name&quot;: &quot;drip&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: 7
/// &quot;direction&quot;: 0
/// },
/// {
/// &quot;name&quot;: &quot;Effect&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: 8,
/// &quot;frameCount&quot;: 8,
/// &quot;frameTime&quot;: 2,
/// &quot;direction&quot;: 0,
/// &quot;name&quot;: &quot;effect&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: [rest of string was truncated]&quot;;.
/// &quot;direction&quot;: [rest of string was truncated]&quot;;.
/// </summary>
public static string particles_groups {
get {
@@ -776,35 +822,35 @@ namespace PckStudio.Core.Properties {
/// <summary>
/// Looks up a localized string similar to [
/// {
/// &quot;rowSpan&quot;: 1,
/// &quot;columnSpan&quot;: 2,
/// &quot;name&quot;: &quot;Oak Door&quot;,
/// &quot;row&quot;: 1,
/// &quot;column&quot;: 5,
/// &quot;rowSpan&quot;: 1,
/// &quot;columnSpan&quot;: 2,
/// &quot;direction&quot;: 1
/// },
/// {
/// &quot;rowSpan&quot;: 1,
/// &quot;columnSpan&quot;: 2,
/// &quot;name&quot;: &quot;Iron Door&quot;,
/// &quot;row&quot;: 2,
/// &quot;column&quot;: 5,
/// &quot;rowSpan&quot;: 1,
/// &quot;columnSpan&quot;: 2,
/// &quot;direction&quot;: 1
/// },
/// {
/// &quot;rowSpan&quot;: 1,
/// &quot;columnSpan&quot;: 2,
/// &quot;name&quot;: &quot;Acacia Door&quot;,
/// &quot;row&quot;: 0,
/// &quot;column&quot;: 23,
/// &quot;rowSpan&quot;: 1,
/// &quot;columnSpan&quot;: 2,
/// &quot;direction&quot;: 1
/// },
/// {
/// &quot;rowSpan&quot;: 1,
/// &quot;columnSpan&quot;: 2,
/// &quot;name&quot;: &quot;Birch Door&quot;,
/// &quot;row&quot;: 1,
/// &quot;column&quot;: 23,
/// &quot;rowSpan&quot;: 1,
/// &quot;columnSpan&quot;: 2,
/// &quot;di [rest of string was truncated]&quot;;.
/// </summary>
public static string terrain_groups {

View File

@@ -247,4 +247,7 @@
<data name="unknown_pack" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\unknown_pack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="colorEntries" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\atlas\colorEntries.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,376 @@
{
"Grass": {
"variants": [
"Grass_Common",
"Grass_Mesa",
"Grass_Swamp1",
"Grass_Swamp2"
]
},
"Foliage": {
"variants": [
"Foliage_Default",
"Foliage_Evergreen",
"Foliage_Birch",
"Foliage_Mesa",
"Foliage_Swampland"
]
},
"RedstoneDust": {
"variants": [
"Tile_RedstoneDust",
"Tile_RedstoneDustUnlit",
"Tile_RedstoneDustLitMin",
"Tile_RedstoneDustLitMax"
]
},
"Particle": {
"variants": [
"Particle_Smoke",
"Particle_NetherPortal",
"Particle_EnderPortal",
"Particle_Ender",
"Particle_DragonBreathMin",
"Particle_DragonBreathMax"
]
},
"Particle_ScoreRing": {
"variants": [
"Particle_ScoreRing_Small",
"Particle_ScoreRing_Medium",
"Particle_ScoreRing_Large"
]
},
"Potion_Effect": {
"variants": [
"Potion_BaseColour",
"Effect_MovementSpeed",
"Effect_MovementSlowDown",
"Effect_DigSpeed",
"Effect_DigSlowdown",
"Effect_DamageBoost",
"Effect_Heal",
"Effect_Harm",
"Effect_Jump",
"Effect_Confusion",
"Effect_Regeneration",
"Effect_DamageResistance",
"Effect_FireResistance",
"Effect_WaterBreathing",
"Effect_Invisibility",
"Effect_Blindness",
"Effect_NightVision",
"Effect_Hunger",
"Effect_Weakness",
"Effect_Poison",
"Effect_Wither",
"Effect_HealthBoost",
"Effect_Absorption",
"Effect_Saturation",
"Effect_Levitation",
"Effect_Luck",
"Effect_BadLuck",
"Effect_TurtleMaster",
"Effect_SlowFall"
]
},
"Particle_Drip": {
"variants": [
"Particle_DripWater",
"Particle_DripLavaStart",
"Particle_DripLavaEnd"
]
},
"Particle_Note": {
"variants": [
"Particle_Note_00",
"Particle_Note_01",
"Particle_Note_02",
"Particle_Note_03",
"Particle_Note_04",
"Particle_Note_05",
"Particle_Note_06",
"Particle_Note_07",
"Particle_Note_08",
"Particle_Note_09",
"Particle_Note_10",
"Particle_Note_11",
"Particle_Note_12",
"Particle_Note_13",
"Particle_Note_14",
"Particle_Note_15",
"Particle_Note_16",
"Particle_Note_17",
"Particle_Note_18",
"Particle_Note_19",
"Particle_Note_20",
"Particle_Note_21",
"Particle_Note_22",
"Particle_Note_23",
"Particle_Note_24"
]
},
"Water": {
"isWaterColour": true,
"variants": [
"Water_Plains",
"Water_Ocean",
"Water_Desert",
"Water_ExtremeHills",
"Water_Forest",
"Water_Taiga",
"Water_Swampland",
"Water_River",
"Water_Hell",
"Water_Sky",
"Water_FrozenOcean",
"Water_FrozenRiver",
"Water_IcePlains",
"Water_IceMountains",
"Water_MushroomIsland",
"Water_MushroomIslandShore",
"Water_Beach",
"Water_DesertHills",
"Water_ForestHills",
"Water_TaigaHills",
"Water_ExtremeHillsEdge",
"Water_Jungle",
"Water_JungleHills",
"Water_JungleEdge",
"Water_DeepOcean",
"Water_StoneBeach",
"Water_ColdBeach",
"Water_BirchForest",
"Water_BirchForestHills",
"Water_RoofedForest",
"Water_ColdTaiga",
"Water_ColdTaigaHills",
"Water_MegaTaiga",
"Water_MegaTaigaHills",
"Water_ExtremeHillsPlus",
"Water_Savanna",
"Water_SavannaPlateau",
"Water_Mesa",
"Water_MesaPlateauF",
"Water_MesaPlateau"
]
},
"SpawnEggBaseColor": {
"variants": [
"Mob_Creeper_Colour1",
"Mob_Skeleton_Colour1",
"Mob_Spider_Colour1",
"Mob_Zombie_Colour1",
"Mob_Slime_Colour1",
"Mob_Ghast_Colour1",
"Mob_PigZombie_Colour1",
"Mob_Enderman_Colour1",
"Mob_CaveSpider_Colour1",
"Mob_Silverfish_Colour1",
"Mob_Blaze_Colour1",
"Mob_LavaSlime_Colour1",
"Mob_Pig_Colour1",
"Mob_Sheep_Colour1",
"Mob_Cow_Colour1",
"Mob_Chicken_Colour1",
"Mob_Squid_Colour1",
"Mob_Wolf_Colour1",
"Mob_MushroomCow_Colour1",
"Mob_Ocelot_Colour1",
"Mob_Villager_Colour1",
"Mob_Bat_Colour1",
"Mob_Witch_Colour1",
"Mob_Horse_Colour1",
"Mob_Endermite_Color1",
"Mob_Guardian_Color1",
"Mob_Rabbit_Colour1",
"Mob_PolarBear_Colour1",
"Mob_Shulker_Colour1",
"Mob_Elder_Guardian_Colour1",
"Mob_Evocation_Illager_Colour1",
"Mob_Llama_Colour1",
"Mob_Donkey_Colour1",
"Mob_Skeleton_Horse_Colour1",
"Mob_Zombie_Horse_Colour1",
"Mob_Mule_Colour1",
"Mob_Stray_Colour1",
"Mob_Husk_Colour1",
"Mob_Vex_Colour1",
"Mob_Vindication_Illager_Colour1",
"Mob_Zombie_Villager_Colour1",
"Mob_Parrot_Colour1",
"Mob_Wither_Skeleton_Colour1",
"Mob_Turtle_Colour1",
"Mob_Tropical_Colour1",
"Mob_Cod_Colour1",
"Mob_Pufferfish_Colour1",
"Mob_Salmon_Colour1",
"Mob_Drowned_Colour1",
"Mob_Dolphin_Colour1",
"Mob_Phantom_Colour1"
]
},
"SpawnEggOverlayColor": {
"variants": [
"Mob_Creeper_Colour2",
"Mob_Skeleton_Colour2",
"Mob_Spider_Colour2",
"Mob_Zombie_Colour2",
"Mob_Slime_Colour2",
"Mob_Ghast_Colour2",
"Mob_PigZombie_Colour2",
"Mob_Enderman_Colour2",
"Mob_CaveSpider_Colour2",
"Mob_Silverfish_Colour2",
"Mob_Blaze_Colour2",
"Mob_LavaSlime_Colour2",
"Mob_Pig_Colour2",
"Mob_Sheep_Colour2",
"Mob_Cow_Colour2",
"Mob_Chicken_Colour2",
"Mob_Squid_Colour2",
"Mob_Wolf_Colour2",
"Mob_MushroomCow_Colour2",
"Mob_Ocelot_Colour2",
"Mob_Villager_Colour2",
"Mob_Bat_Colour2",
"Mob_Witch_Colour2",
"Mob_Horse_Colour2",
"Mob_Endermite_Color2",
"Mob_Guardian_Color2",
"Mob_Rabbit_Colour2",
"Mob_PolarBear_Colour2",
"Mob_Shulker_Colour2",
"Mob_Elder_Guardian_Colour2",
"Mob_Evocation_Illager_Colour2",
"Mob_Llama_Colour2",
"Mob_Donkey_Colour2",
"Mob_Skeleton_Horse_Colour2",
"Mob_Zombie_Horse_Colour2",
"Mob_Mule_Colour2",
"Mob_Stray_Colour2",
"Mob_Husk_Colour2",
"Mob_Vex_Colour2",
"Mob_Vindication_Illager_Colour2",
"Mob_Zombie_Villager_Colour2",
"Mob_Parrot_Colour2",
"Mob_Wither_Skeleton_Colour2",
"Mob_Turtle_Colour2",
"Mob_Tropical_Colour2",
"Mob_Cod_Colour2",
"Mob_Pufferfish_Colour2",
"Mob_Salmon_Colour2",
"Mob_Drowned_Colour2",
"Mob_Dolphin_Colour2",
"Mob_Phantom_Colour2"
]
},
"Bed_Color": {
"defaultName": "Bed_White",
"variants": [
"Bed_Black",
"Bed_Blue",
"Bed_Brown",
"Bed_Cyan",
"Bed_Grey",
"Bed_Green",
"Bed_Light_Blue",
"Bed_Lime",
"Bed_Magenta",
"Bed_Orange",
"Bed_Pink",
"Bed_Purple",
"Bed_Red",
"Bed_Silver",
"Bed_White",
"Bed_Yellow"
]
},
"Particle_Explode": {
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
},
"Banner_Color": {
"defaultName": "Banner_White",
"variants": [
"Banner_Black",
"Banner_Blue",
"Banner_Brown",
"Banner_Cyan",
"Banner_Gray",
"Banner_Green",
"Banner_Light_Blue",
"Banner_Lime",
"Banner_Magenta",
"Banner_Orange",
"Banner_Pink",
"Banner_Purple",
"Banner_Red",
"Banner_Silver",
"Banner_White",
"Banner_Yellow"
]
},
"Cauldron_Water_Effect": {
"variants": [
"Cauldron_Water",
"Effect_MovementSpeed",
"Effect_MovementSlowDown",
"Effect_DigSpeed",
"Effect_DigSlowdown",
"Effect_DamageBoost",
"Effect_Heal",
"Effect_Harm",
"Effect_Jump",
"Effect_Confusion",
"Effect_Regeneration",
"Effect_DamageResistance",
"Effect_FireResistance",
"Effect_WaterBreathing",
"Effect_Invisibility",
"Effect_Blindness",
"Effect_NightVision",
"Effect_Hunger",
"Effect_Weakness",
"Effect_Poison",
"Effect_Wither",
"Effect_HealthBoost",
"Effect_Absorption",
"Effect_Saturation",
"Effect_Levitation",
"Effect_Luck",
"Effect_BadLuck",
"Effect_TurtleMaster",
"Effect_SlowFall"
]
},
"Shulker_Box_Color": {
"defaultName": "Shulker_Box_Purple",
"variants": [
"Shulker_Box_Black",
"Shulker_Box_Blue",
"Shulker_Box_Brown",
"Shulker_Box_Cyan",
"Shulker_Box_Grey",
"Shulker_Box_Green",
"Shulker_Box_Light_Blue",
"Shulker_Box_Light_Green",
"Shulker_Box_Magenta",
"Shulker_Box_Orange",
"Shulker_Box_Pink",
"Shulker_Box_Purple",
"Shulker_Box_Red",
"Shulker_Box_Silver",
"Shulker_Box_White",
"Shulker_Box_Yellow"
]
},
"Stem_Color": {
"variants": [
"Tile_StemMin",
"Tile_StemMax"
]
}
}

View File

@@ -3,102 +3,47 @@
"entries": [
{
"internalName": "experience_orb_0",
"displayName": "Experience Orb (Size 1)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 1)"
},
{
"internalName": "experience_orb_1",
"displayName": "Experience Orb (Size 2)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 2)"
},
{
"internalName": "experience_orb_2",
"displayName": "Experience Orb (Size 3)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 3)"
},
{
"internalName": "experience_orb_3",
"displayName": "Experience Orb (Size 4)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 4)"
},
{
"internalName": "experience_orb_4",
"displayName": "Experience Orb (Size 5)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 5)"
},
{
"internalName": "experience_orb_5",
"displayName": "Experience Orb (Size 6)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 6)"
},
{
"internalName": "experience_orb_6",
"displayName": "Experience Orb (Size 7)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 7)"
},
{
"internalName": "experience_orb_7",
"displayName": "Experience Orb (Size 8)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 8)"
},
{
"internalName": "experience_orb_8",
"displayName": "Experience Orb (Size 9)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 9)"
},
{
"internalName": "experience_orb_9",
"displayName": "Experience Orb (Size 10)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 10)"
},
{
"internalName": "experience_orb_10",
"displayName": "Experience Orb (Size 11)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "experience_orb",
"variants": ["experience_orb"]
}
"displayName": "Experience Orb (Size 11)"
},
{
"internalName": "",

View File

@@ -1,197 +1,85 @@
{
"COMMENT_1": "JSON by MattNL",
"entries": [
{
"internalName": "explosion_0",
"displayName": "Explosion (Stage 1)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_1",
"displayName": "Explosion (Stage 2)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_2",
"displayName": "Explosion (Stage 3)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_3",
"displayName": "Explosion (Stage 4)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_4",
"displayName": "Explosion (Stage 5)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_5",
"displayName": "Explosion (Stage 6)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_6",
"displayName": "Explosion (Stage 7)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_7",
"displayName": "Explosion (Stage 8)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_8",
"displayName": "Explosion (Stage 9)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_9",
"displayName": "Explosion (Stage 10)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_10",
"displayName": "Explosion (Stage 11)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_11",
"displayName": "Explosion (Stage 12)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_12",
"displayName": "Explosion (Stage 13)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_13",
"displayName": "Explosion (Stage 14)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_14",
"displayName": "Explosion (Stage 15)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
},
{
"internalName": "explosion_15",
"displayName": "Explosion (Stage 16)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Particle_Explode",
"variants": [
"Particle_Explode",
"Particle_HugeExplosion"
]
}
}
]
"COMMENT_1": "JSON by MattNL",
"entries": [
{
"internalName": "explosion_0",
"displayName": "Explosion (Stage 1)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_1",
"displayName": "Explosion (Stage 2)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_2",
"displayName": "Explosion (Stage 3)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_3",
"displayName": "Explosion (Stage 4)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_4",
"displayName": "Explosion (Stage 5)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_5",
"displayName": "Explosion (Stage 6)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_6",
"displayName": "Explosion (Stage 7)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_7",
"displayName": "Explosion (Stage 8)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_8",
"displayName": "Explosion (Stage 9)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_9",
"displayName": "Explosion (Stage 10)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_10",
"displayName": "Explosion (Stage 11)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_11",
"displayName": "Explosion (Stage 12)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_12",
"displayName": "Explosion (Stage 13)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_13",
"displayName": "Explosion (Stage 14)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_14",
"displayName": "Explosion (Stage 15)",
"colorKey": "Particle_Explode"
},
{
"internalName": "explosion_15",
"displayName": "Explosion (Stage 16)",
"colorKey": "Particle_Explode"
}
]
}

View File

@@ -6,5 +6,35 @@
"frameCount": 3,
"frameTime": 6,
"direction": 1
},
{
"name": "Leather Cap",
"row": 0,
"column": 0,
"overlay": { "row": 0, "column": 9 }
},
{
"name": "Leather Tunic",
"row": 0,
"column": 1,
"overlay": { "row": 0, "column": 10 }
},
{
"name": "Leather Pants",
"row": 0,
"column": 2,
"overlay": { "row": 0, "column": 11 }
},
{
"name": "Leather Boots",
"row": 0,
"column": 3,
"overlay": { "row": 0, "column": 12 }
},
{
"name": "Leather Horse Armor",
"row": 15,
"column": 13,
"overlay": { "row": 0, "column": 16 }
}
]

View File

@@ -1,6 +1,6 @@
[
{
"name": "generic",
"name": "Generic",
"row": 0,
"column": 0,
"frameCount": 8,
@@ -8,7 +8,7 @@
"direction": 0
},
{
"name": "splash",
"name": "Splash",
"row": 3,
"column": 1,
"frameCount": 4,
@@ -16,7 +16,7 @@
"direction": 0
},
{
"name": "drip",
"name": "Drip",
"row": 0,
"column": 7,
"frameCount": 3,
@@ -24,7 +24,7 @@
"direction": 0
},
{
"name": "effect",
"name": "Effect",
"row": 0,
"column": 8,
"frameCount": 8,
@@ -32,7 +32,7 @@
"direction": 0
},
{
"name": "splash_effect",
"name": "Splash Effect",
"row": 0,
"column": 9,
"frameCount": 8,
@@ -40,7 +40,7 @@
"direction": 0
},
{
"name": "firework_spark",
"name": "Firework Spark",
"row": 0,
"column": 10,
"frameCount": 8,
@@ -48,7 +48,7 @@
"direction": 0
},
{
"name": "glitter",
"name": "Shulker/End Rod Glitter",
"row": 0,
"column": 11,
"frameCount": 8,
@@ -56,7 +56,7 @@
"direction": 0
},
{
"name": "BE_explosion",
"name": "Bedrock Edition Explosion (Unused)",
"row": 0,
"column": 12,
"frameCount": 16,
@@ -64,15 +64,16 @@
"direction": 0
},
{
"name": "flash",
"name": "Firework Flash",
"row": 4,
"column": 2,
"rowSpan": 4,
"columnSpan": 4,
"direction": 0
"direction": 0,
"allowCustomColor": true
},
{
"name": "bubble_pop",
"name": "Bubble Pop (Unused)",
"row": 6,
"column": 6,
"frameCount": 5,

View File

@@ -6,11 +6,7 @@
"internalName": "helmetCloth",
"displayName": "Leather Cap",
"allowCustomColour": true,
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Armour_Default_Leather_Colour",
"variants": [ "Armour_Default_Leather_Colour" ]
}
"colorKey": "Armour_Default_Leather_Colour"
},
{
"internalName": "helmetChain",
@@ -76,11 +72,7 @@
"internalName": "chestplateCloth",
"displayName": "Leather Tunic",
"allowCustomColour": true,
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Armour_Default_Leather_Colour",
"variants": [ "Armour_Default_Leather_Colour" ]
}
"colorKey": "Armour_Default_Leather_Colour"
},
{
"internalName": "chestplateChain",
@@ -146,11 +138,7 @@
"internalName": "leggingsCloth",
"displayName": "Leather Pants",
"allowCustomColour": true,
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Armour_Default_Leather_Colour",
"variants": [ "Armour_Default_Leather_Colour" ]
}
"colorKey": "Armour_Default_Leather_Colour"
},
{
"internalName": "leggingsChain",
@@ -216,11 +204,7 @@
"internalName": "bootsCloth",
"displayName": "Leather Boots",
"allowCustomColour": true,
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Armour_Default_Leather_Colour",
"variants": [ "Armour_Default_Leather_Colour" ]
}
"colorKey": "Armour_Default_Leather_Colour"
},
{
"internalName": "bootsChain",
@@ -594,41 +578,7 @@
"internalName": "potion_contents",
"displayName": "Potion (Overlay)",
"allowCustomColour": true,
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Potion_BaseColour",
"variants": [
"Potion_BaseColour",
"Effect_MovementSpeed",
"Effect_MovementSlowDown",
"Effect_DigSpeed",
"Effect_DigSlowdown",
"Effect_DamageBoost",
"Effect_Heal",
"Effect_Harm",
"Effect_Jump",
"Effect_Confusion",
"Effect_Regeneration",
"Effect_DamageResistance",
"Effect_FireResistance",
"Effect_WaterBreathing",
"Effect_Invisibility",
"Effect_Blindness",
"Effect_NightVision",
"Effect_Hunger",
"Effect_Weakness",
"Effect_Poison",
"Effect_Wither",
"Effect_HealthBoost",
"Effect_Absorption",
"Effect_Saturation",
"Effect_Levitation",
"Effect_Luck",
"Effect_BadLuck",
"Effect_TurtleMaster",
"Effect_SlowFall"
]
}
"colorKey": "Potion_Effect"
},
{
"internalName": "dyePowder_blue",
@@ -677,63 +627,7 @@
{
"internalName": "monsterPlacer",
"displayName": "Spawn Egg",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Mob_Creeper_Colour1",
"variants": [
"Mob_Creeper_Colour1",
"Mob_Skeleton_Colour1",
"Mob_Spider_Colour1",
"Mob_Zombie_Colour1",
"Mob_Slime_Colour1",
"Mob_Ghast_Colour1",
"Mob_PigZombie_Colour1",
"Mob_Enderman_Colour1",
"Mob_CaveSpider_Colour1",
"Mob_Silverfish_Colour1",
"Mob_Blaze_Colour1",
"Mob_LavaSlime_Colour1",
"Mob_Pig_Colour1",
"Mob_Sheep_Colour1",
"Mob_Cow_Colour1",
"Mob_Chicken_Colour1",
"Mob_Squid_Colour1",
"Mob_Wolf_Colour1",
"Mob_MushroomCow_Colour1",
"Mob_Ocelot_Colour1",
"Mob_Villager_Colour1",
"Mob_Bat_Colour1",
"Mob_Witch_Colour1",
"Mob_Horse_Colour1",
"Mob_Endermite_Color1",
"Mob_Guardian_Color1",
"Mob_Rabbit_Colour1",
"Mob_PolarBear_Colour1",
"Mob_Shulker_Colour1",
"Mob_Elder_Guardian_Colour1",
"Mob_Evocation_Illager_Colour1",
"Mob_Llama_Colour1",
"Mob_Donkey_Colour1",
"Mob_Skeleton_Horse_Colour1",
"Mob_Zombie_Horse_Colour1",
"Mob_Mule_Colour1",
"Mob_Stray_Colour1",
"Mob_Husk_Colour1",
"Mob_Vex_Colour1",
"Mob_Vindication_Illager_Colour1",
"Mob_Zombie_Villager_Colour1",
"Mob_Parrot_Colour1",
"Mob_Wither_Skeleton_Colour1",
"Mob_Turtle_Colour1",
"Mob_Tropical_Colour1",
"Mob_Cod_Colour1",
"Mob_Pufferfish_Colour1",
"Mob_Salmon_Colour1",
"Mob_Drowned_Colour1",
"Mob_Dolphin_Colour1",
"Mob_Phantom_Colour1"
]
}
"colorKey": "SpawnEggBaseColor"
},
{
"internalName": "potion_splash",
@@ -798,89 +692,12 @@
{
"internalName": "monsterPlacer_overlay",
"displayName": "Spawn Egg (Overlay)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Mob_Creeper_Colour2",
"variants": [
"Mob_Creeper_Colour2",
"Mob_Skeleton_Colour2",
"Mob_Spider_Colour2",
"Mob_Zombie_Colour2",
"Mob_Slime_Colour2",
"Mob_Ghast_Colour2",
"Mob_PigZombie_Colour2",
"Mob_Enderman_Colour2",
"Mob_CaveSpider_Colour2",
"Mob_Silverfish_Colour2",
"Mob_Blaze_Colour2",
"Mob_LavaSlime_Colour2",
"Mob_Pig_Colour2",
"Mob_Sheep_Colour2",
"Mob_Cow_Colour2",
"Mob_Chicken_Colour2",
"Mob_Squid_Colour2",
"Mob_Wolf_Colour2",
"Mob_MushroomCow_Colour2",
"Mob_Ocelot_Colour2",
"Mob_Villager_Colour2",
"Mob_Bat_Colour2",
"Mob_Witch_Colour2",
"Mob_Horse_Colour2",
"Mob_Endermite_Color2",
"Mob_Guardian_Color2",
"Mob_Rabbit_Colour2",
"Mob_PolarBear_Colour2",
"Mob_Shulker_Colour2",
"Mob_Elder_Guardian_Colour2",
"Mob_Evocation_Illager_Colour2",
"Mob_Llama_Colour2",
"Mob_Donkey_Colour2",
"Mob_Skeleton_Horse_Colour2",
"Mob_Zombie_Horse_Colour2",
"Mob_Mule_Colour2",
"Mob_Stray_Colour2",
"Mob_Husk_Colour2",
"Mob_Vex_Colour2",
"Mob_Vindication_Illager_Colour2",
"Mob_Zombie_Villager_Colour2",
"Mob_Parrot_Colour2",
"Mob_Wither_Skeleton_Colour2",
"Mob_Turtle_Colour2",
"Mob_Tropical_Colour2",
"Mob_Cod_Colour2",
"Mob_Pufferfish_Colour2",
"Mob_Salmon_Colour2",
"Mob_Drowned_Colour2",
"Mob_Dolphin_Colour2",
"Mob_Phantom_Colour2"
]
}
"colorKey": "SpawnEggOverlayColor"
},
{
"internalName": "bed_overlay",
"displayName": "Bed (Overlay)",
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Bed_White",
"variants": [
"Bed_Black",
"Bed_Blue",
"Bed_Brown",
"Bed_Cyan",
"Bed_Grey",
"Bed_Green",
"Bed_Light_Blue",
"Bed_Lime",
"Bed_Magenta",
"Bed_Orange",
"Bed_Pink",
"Bed_Purple",
"Bed_Red",
"Bed_Silver",
"Bed_White",
"Bed_Yellow"
]
}
"colorKey": "Bed_Color"
},
{
"internalName": "expBottle",
@@ -1095,11 +912,7 @@
"internalName": "leather_horse_armor_base",
"displayName": "Leather Horse Armor",
"allowCustomColour": true,
"hasColourEntry": true,
"colourEntry": {
"defaultName": "Armour_Default_Leather_Colour",
"variants": [ "Armour_Default_Leather_Colour" ]
}
"colorKey": "Armour_Default_Leather_Colour"
},
{
"internalName": "structure_void",

View File

@@ -51,21 +51,19 @@
},
{
"internalName": "Back",
"displayName": "Back Texture",
"width": 4,
"height": 4
"displayName": "Back Texture"
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "1x1E1",
@@ -121,20 +119,19 @@
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "Pool",
"displayName": "\"The Pool\" by Kristoffer Zetterstrand",
"width": 2
"displayName": "\"The Pool\" by Kristoffer Zetterstrand"
},
{
"internalName": "Pool",
@@ -142,8 +139,7 @@
},
{
"internalName": "Courbet",
"displayName": "\"Bonjour Monsieur Courbet\" by Kristoffer Zetterstrand",
"width": 2
"displayName": "\"Bonjour Monsieur Courbet\" by Kristoffer Zetterstrand"
},
{
"internalName": "Courbet",
@@ -151,8 +147,7 @@
},
{
"internalName": "Sea",
"displayName": "\"Seaside\" by Kristoffer Zetterstrand",
"width": 2
"displayName": "\"Seaside\" by Kristoffer Zetterstrand"
},
{
"internalName": "Sea",
@@ -160,8 +155,7 @@
},
{
"internalName": "Sunset",
"displayName": "\"sunset_dense\" by Kristoffer Zetterstrand",
"width": 2
"displayName": "\"sunset_dense\" by Kristoffer Zetterstrand"
},
{
"internalName": "Sunset",
@@ -169,8 +163,7 @@
},
{
"internalName": "Creebet",
"displayName": "\"Creebet\" by Kristoffer Zetterstrand",
"width": 2
"displayName": "\"Creebet\" by Kristoffer Zetterstrand"
},
{
"internalName": "Creebet",
@@ -190,15 +183,15 @@
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "",
@@ -254,25 +247,23 @@
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "Back",
"displayName": "",
"displayName": ""
},
{
"internalName": "Wanderer",
"displayName": "\"Wanderer\" by Kristoffer Zetterstrand",
"height": 2
"displayName": "\"Wanderer\" by Kristoffer Zetterstrand"
},
{
"internalName": "Graham",
"displayName": "\"Graham\" by Kristoffer Zetterstrand",
"height": 2
"displayName": "\"Graham\" by Kristoffer Zetterstrand"
},
{
"internalName": "",
@@ -316,21 +307,19 @@
},
{
"internalName": "Skeleton",
"displayName": "\"Mortal Coil\" by Kristoffer Zetterstrand",
"width": 4,
"height": 3
"displayName": "\"Mortal Coil\" by Kristoffer Zetterstrand"
},
{
"internalName": "Skeleton",
"displayName": "",
"displayName": ""
},
{
"internalName": "Skeleton",
"displayName": "",
"displayName": ""
},
{
"internalName": "Skeleton",
"displayName": "",
"displayName": ""
},
{
"internalName": "Wanderer",
@@ -382,25 +371,23 @@
},
{
"internalName": "Skeleton",
"displayName": "",
"displayName": ""
},
{
"internalName": "Skeleton",
"displayName": "",
"displayName": ""
},
{
"internalName": "Skeleton",
"displayName": "",
"displayName": ""
},
{
"internalName": "Skeleton",
"displayName": "",
"displayName": ""
},
{
"internalName": "Fighters",
"displayName": "\"Fighters\" by Kristoffer Zetterstrand",
"width": 4,
"height": 2
"displayName": "\"Fighters\" by Kristoffer Zetterstrand"
},
{
"internalName": "Fighters",
@@ -512,9 +499,7 @@
},
{
"internalName": "DonkeyKong",
"displayName": "\"Kong\" by Kristoffer Zetterstrand",
"width": 4,
"height": 3
"displayName": "\"Kong\" by Kristoffer Zetterstrand"
},
{
"internalName": "DonkeyKong",
@@ -530,9 +515,7 @@
},
{
"internalName": "Match",
"displayName": "\"Match\" by Kristoffer Zetterstrand",
"width": 2,
"height": 2
"displayName": "\"Match\" by Kristoffer Zetterstrand"
},
{
"internalName": "Match",
@@ -540,9 +523,7 @@
},
{
"internalName": "Bust",
"displayName": "\"Bust\" by Kristoffer Zetterstrand",
"width": 2,
"height": 2
"displayName": "\"Bust\" by Kristoffer Zetterstrand"
},
{
"internalName": "Bust",
@@ -550,9 +531,7 @@
},
{
"internalName": "Stage",
"displayName": "\"The stage is set\" by Kristoffer Zetterstrand",
"width": 2,
"height": 2
"displayName": "\"The stage is set\" by Kristoffer Zetterstrand"
},
{
"internalName": "Stage",
@@ -560,9 +539,7 @@
},
{
"internalName": "Void",
"displayName": "\"The Void\" by Kristoffer Zetterstrand",
"width": 2,
"height": 2
"displayName": "\"The Void\" by Kristoffer Zetterstrand"
},
{
"internalName": "Void",
@@ -570,9 +547,7 @@
},
{
"internalName": "SkullAndRoses",
"displayName": "\"Skull and Roses\" by Kristoffer Zetterstrand",
"width": 2,
"height": 2
"displayName": "\"Skull and Roses\" by Kristoffer Zetterstrand"
},
{
"internalName": "SkullAndRoses",
@@ -580,9 +555,7 @@
},
{
"internalName": "Wither",
"displayName": "\"Wither\" by Jens Bergensten",
"width": 2,
"height": 2
"displayName": "\"Wither\" by Jens Bergensten"
},
{
"internalName": "Wither",
@@ -654,19 +627,19 @@
},
{
"internalName": "DonkeyKong",
"displayName": "",
"displayName": ""
},
{
"internalName": "DonkeyKong",
"displayName": "",
"displayName": ""
},
{
"internalName": "DonkeyKong",
"displayName": "",
"displayName": ""
},
{
"internalName": "DonkeyKong",
"displayName": "",
"displayName": ""
},
{
"internalName": "",
@@ -798,9 +771,7 @@
},
{
"internalName": "Pointer",
"displayName": "\"Pointer\" by Kristoffer Zetterstrand",
"width": 4,
"height": 4
"displayName": "\"Pointer\" by Kristoffer Zetterstrand"
},
{
"internalName": "Pointer",
@@ -816,9 +787,7 @@
},
{
"internalName": "Pigscene",
"displayName": "\"Pigscene\" by Kristoffer Zetterstrand",
"width": 4,
"height": 4
"displayName": "\"Pigscene\" by Kristoffer Zetterstrand"
},
{
"internalName": "Pigscene",
@@ -834,9 +803,7 @@
},
{
"internalName": "BurningSkull",
"displayName": "\"Skull On Fire\" by Kristoffer Zetterstrand",
"width": 4,
"height": 4
"displayName": "\"Skull On Fire\" by Kristoffer Zetterstrand"
},
{
"internalName": "BurningSkull",
@@ -852,83 +819,19 @@
},
{
"internalName": "",
"displayName": "",
},
{
"internalName": "",
"displayName": "",
},
{
"internalName": "",
"displayName": "",
},
{
"internalName": "",
"displayName": "",
},
{
"internalName": "Pointer",
"displayName": "",
},
{
"internalName": "Pointer",
"displayName": ""
},
{
"internalName": "Pointer",
"displayName": ""
},
{
"internalName": "Pointer",
"displayName": ""
},
{
"internalName": "Pigscene",
"displayName": ""
},
{
"internalName": "Pigscene",
"displayName": ""
},
{
"internalName": "Pigscene",
"displayName": ""
},
{
"internalName": "Pigscene",
"displayName": ""
},
{
"internalName": "BurningSkull",
"displayName": ""
},
{
"internalName": "BurningSkull",
"displayName": ""
},
{
"internalName": "BurningSkull",
"displayName": ""
},
{
"internalName": "BurningSkull",
"displayName": ""
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": "",
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "Pointer",
@@ -948,7 +851,7 @@
},
{
"internalName": "Pigscene",
"displayName": "",
"displayName": ""
},
{
"internalName": "Pigscene",
@@ -964,7 +867,7 @@
},
{
"internalName": "BurningSkull",
"displayName": "",
"displayName": ""
},
{
"internalName": "BurningSkull",
@@ -980,23 +883,23 @@
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "Pointer",
"displayName": "",
"displayName": ""
},
{
"internalName": "Pointer",
@@ -1012,7 +915,7 @@
},
{
"internalName": "Pigscene",
"displayName": "",
"displayName": ""
},
{
"internalName": "Pigscene",
@@ -1028,7 +931,7 @@
},
{
"internalName": "BurningSkull",
"displayName": "",
"displayName": ""
},
{
"internalName": "BurningSkull",
@@ -1044,19 +947,83 @@
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": "",
"displayName": ""
},
{
"internalName": "Pointer",
"displayName": ""
},
{
"internalName": "Pointer",
"displayName": ""
},
{
"internalName": "Pointer",
"displayName": ""
},
{
"internalName": "Pointer",
"displayName": ""
},
{
"internalName": "Pigscene",
"displayName": ""
},
{
"internalName": "Pigscene",
"displayName": ""
},
{
"internalName": "Pigscene",
"displayName": ""
},
{
"internalName": "Pigscene",
"displayName": ""
},
{
"internalName": "BurningSkull",
"displayName": ""
},
{
"internalName": "BurningSkull",
"displayName": ""
},
{
"internalName": "BurningSkull",
"displayName": ""
},
{
"internalName": "BurningSkull",
"displayName": ""
},
{
"internalName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": ""
},
{
"internalName": "",
"displayName": ""
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
@@ -29,6 +30,7 @@ namespace PckStudio.Json
public static JsonTiles JsonPaintingData { get; } = JsonConvert.DeserializeObject<JsonTiles>(Resources.paintingData);
public static JsonTiles JsonBannerData { get; } = JsonConvert.DeserializeObject<JsonTiles>(Resources.bannerData);
public static ReadOnlyDictionary<string, JsonColorEntry> ColorEntries { get; } = JsonConvert.DeserializeObject<ReadOnlyDictionary<string, JsonColorEntry>>(Resources.colorEntries);
public static List<JsonTileInfo> ItemTileInfos => JsonItemData.Entries;
public static List<JsonTileInfo> BlockTileInfos => JsonBlockData.Entries;
public static List<JsonTileInfo> ParticleTileInfos => JsonParticleData.Entries;