diff --git a/core/src/TilePalette.cpp b/core/src/TilePalette.cpp index 5408305..4d4ef2c 100644 --- a/core/src/TilePalette.cpp +++ b/core/src/TilePalette.cpp @@ -154,3 +154,144 @@ void appendUtilityAndRedstone(std::vector& rows) { 0.09f, 0.20f, 0.30f)); } +// Rails, hoppers and the machine blocks. Everything a minecart runs on is a +// cutout: the track has to leave the ground showing between its ties. +void appendTransportAndAutomation(std::vector& rows) { + rows.push_back(cutOut(runsVertical(makeTile("ladder", M::Wood, P::Lattice, {142, 108, 62}, + {96, 70, 38}, 0.10f, 0.45f, 0.55f)))); + rows.push_back(cutOut(makeTile("rail", M::Metal, P::Lattice, {154, 150, 146}, {120, 88, 50}, + 0.10f, 0.30f, 0.60f))); + rows.push_back(cutOut(makeTile("poweredRail", M::Metal, P::Lattice, {198, 158, 68}, + {124, 84, 46}, 0.10f, 0.30f, 0.60f))); + rows.push_back(cutOut(makeTile("detectorRail", M::Metal, P::Lattice, {170, 166, 160}, + {188, 64, 52}, 0.10f, 0.30f, 0.60f))); + rows.push_back(cutOut(makeTile("activatorRail", M::Metal, P::Lattice, {138, 134, 132}, + {186, 84, 64}, 0.10f, 0.30f, 0.60f))); + rows.push_back(cutOut(flipped(makeTile("hopper", M::Metal, P::Lattice, {74, 74, 78}, + {40, 40, 44}, 0.11f, 0.30f, 0.75f)))); + rows.push_back(makeTile("dropper", M::Stone, P::GrowthRings, {112, 112, 116}, {58, 58, 62}, + 0.09f, 0.80f, 0.70f)); + rows.push_back(makeTile("dispenser", M::Stone, P::GrowthRings, {106, 106, 110}, {44, 44, 48}, + 0.09f, 0.65f, 0.80f)); + rows.push_back(makeTile("observer", M::Stone, P::GrowthRings, {96, 96, 100}, {200, 58, 48}, + 0.09f, 0.70f, 0.60f)); + rows.push_back(makeTile("targetBlock", M::Fabric, P::GrowthRings, {226, 214, 196}, + {198, 68, 52}, 0.09f, 0.35f, 0.80f)); + rows.push_back(makeTile("slimeBlock", M::Organic, P::Splatter, {124, 196, 96}, {166, 226, 138}, + 0.10f, 0.55f, 0.50f)); + rows.push_back(makeTile("noteBlock", M::Wood, P::GrowthRings, {126, 96, 58}, {70, 50, 30}, + 0.10f, 0.75f, 0.70f)); +} + +// Crops, gourds and the cold blocks. Crops are cross sprites, so their tiles +// are cut out around the stalk; the gourds are solid and get their ribbing +// from a vertical plank pattern. +void appendFarmingAndClimate(std::vector& rows) { + rows.push_back(makeTile("farmlandTop", M::Soil, P::Plank, {104, 72, 42}, {66, 44, 24}, + 0.11f, 0.30f, 0.45f)); + rows.push_back(cutOut(runsVertical(makeTile("wheat", M::Foliage, P::Cross, {198, 178, 86}, + {150, 132, 54}, 0.10f, 0.35f, 0.55f)))); + rows.push_back(cutOut(runsVertical(makeTile("carrot", M::Foliage, P::Cross, {62, 132, 52}, + {226, 124, 32}, 0.10f, 0.40f, 0.50f)))); + rows.push_back(cutOut(runsVertical(makeTile("potato", M::Foliage, P::Cross, {70, 136, 58}, + {214, 196, 96}, 0.10f, 0.40f, 0.50f)))); + rows.push_back(makeTile("pumpkinTop", M::Organic, P::GrowthRings, {206, 126, 32}, + {148, 88, 20}, 0.09f, 0.45f, 0.70f)); + rows.push_back(runsVertical(makeTile("pumpkinSide", M::Organic, P::Plank, {212, 132, 34}, + {152, 90, 22}, 0.09f, 0.30f, 0.40f))); + rows.push_back(makeTile("melonTop", M::Organic, P::GrowthRings, {110, 150, 42}, {66, 106, 28}, + 0.09f, 0.40f, 0.70f)); + rows.push_back(runsVertical(makeTile("melonSide", M::Organic, P::Plank, {116, 158, 46}, + {58, 100, 26}, 0.09f, 0.26f, 0.45f))); + rows.push_back(cutOut(runsVertical(makeTile("pumpkinStem", M::Foliage, P::Cross, {126, 166, 58}, + {92, 130, 40}, 0.10f, 0.30f, 0.45f)))); + rows.push_back(cutOut(runsVertical(makeTile("melonStem", M::Foliage, P::Cross, {110, 152, 50}, + {80, 118, 34}, 0.10f, 0.30f, 0.45f)))); + rows.push_back(cutOut(runsVertical(makeTile("sugarCane", M::Foliage, P::Cross, {150, 196, 120}, + {106, 162, 88}, 0.10f, 0.45f, 0.35f)))); + rows.push_back(makeTile("cactusTop", M::Foliage, P::GrowthRings, {80, 138, 58}, {52, 98, 38}, + 0.10f, 0.35f, 0.65f)); + rows.push_back(makeTile("cactusBottom", M::Foliage, P::Solid, {70, 120, 50}, {44, 84, 32}, + 0.10f, 0.45f, 0.55f)); + rows.push_back(runsVertical(makeTile("cactusSide", M::Foliage, P::Plank, {74, 128, 54}, + {38, 78, 30}, 0.10f, 0.25f, 0.55f))); + rows.push_back(cutOut(runsVertical(makeTile("sapling", M::Foliage, P::Cross, {112, 84, 44}, + {74, 142, 58}, 0.10f, 0.30f, 0.60f)))); + rows.push_back(cutOut(runsVertical(makeTile("vine", M::Foliage, P::Cross, {56, 116, 44}, + {88, 154, 62}, 0.10f, 0.30f, 0.70f)))); + rows.push_back(makeTile("snowLayer", M::Crystal, P::EdgeBand, {238, 242, 248}, {202, 214, 232}, + 0.10f, 0.30f, 0.50f)); + rows.push_back(makeTile("packedIce", M::Crystal, P::Strata, {138, 180, 232}, {176, 210, 246}, + 0.08f, 0.45f, 0.40f)); +} + +// The brewing bench, the enchanting corner and the two blocks that hang in the +// air. The cobweb is the only Web tile in the palette and the only one whose +// shape is drawn from the centre outwards. +void appendBrewingAndCombat(std::vector& rows) { + rows.push_back(cutOut(runsVertical(makeTile("brewingStand", M::Metal, P::Lattice, + {124, 116, 110}, {188, 168, 96}, + 0.11f, 0.40f, 0.35f)))); + rows.push_back(makeTile("enchantingTableTop", M::Crystal, P::Dots, {58, 42, 74}, {212, 58, 58}, + 0.11f, 0.60f, 0.30f)); + rows.push_back(makeTile("enchantingTableSide", M::Crystal, P::Strata, {48, 36, 64}, + {128, 56, 152}, 0.11f, 0.35f, 0.30f)); + rows.push_back(makeTile("cauldronTop", M::Fluid, P::Liquid, {62, 62, 66}, {58, 102, 172}, + 0.09f, 0.55f, 0.80f)); + rows.push_back(makeTile("cauldronSide", M::Metal, P::EdgeBand, {72, 72, 76}, {112, 112, 118}, + 0.10f, 0.22f, 0.50f)); + rows.push_back(makeTile("anvilTop", M::Metal, P::Splatter, {84, 84, 88}, {50, 50, 54}, + 0.11f, 0.40f, 0.45f)); + rows.push_back(makeTile("anvilSide", M::Metal, P::EdgeBand, {68, 68, 72}, {104, 104, 110}, + 0.11f, 0.35f, 0.50f)); + rows.push_back(runsVertical(makeTile("bookshelf", M::Fabric, P::Plank, {158, 124, 74}, + {176, 72, 64}, 0.10f, 0.16f, 0.55f))); + rows.push_back(cutOut(makeTile("cobweb", M::Fabric, P::Web, {236, 236, 240}, {180, 180, 190}, + 0.09f, 0.45f, 0.50f))); +} + +// The Nether. Everything here is warm and dark, so the accents carry most of +// the contrast: a red rock with a slightly redder rock on top would render as +// one flat plate. +void appendNether(std::vector& rows) { + rows.push_back(makeTile("netherrack", M::Stone, P::Splatter, {124, 44, 44}, {84, 24, 24}, + 0.12f, 0.30f, 0.55f)); + rows.push_back(makeTile("soulSand", M::Soil, P::Splatter, {88, 68, 54}, {52, 38, 30}, + 0.12f, 0.40f, 0.50f)); + rows.push_back(makeTile("soulSoil", M::Soil, P::Splatter, {74, 58, 46}, {44, 32, 26}, + 0.12f, 0.50f, 0.45f)); + rows.push_back(makeTile("netherQuartzOre", M::Stone, P::OreSpeckle, {124, 46, 46}, + {236, 232, 226}, 0.11f, 0.40f, 0.30f)); + rows.push_back(makeTile("netherBrick", M::Stone, P::Brick, {70, 36, 40}, {38, 18, 22}, + 0.09f, 0.40f, 0.50f)); + rows.push_back(cutOut(makeTile("netherPortal", M::Crystal, P::Liquid, {110, 42, 182}, + {196, 128, 240}, 0.12f, 0.55f, 0.75f))); + rows.push_back(makeTile("magma", M::Light, P::Splatter, {148, 52, 24}, {248, 170, 52}, + 0.13f, 0.35f, 0.45f)); + rows.push_back(makeTile("basaltTop", M::Stone, P::Splatter, {82, 80, 84}, {50, 48, 52}, + 0.11f, 0.30f, 0.50f)); + rows.push_back(runsVertical(makeTile("basaltSide", M::Stone, P::Strata, {76, 74, 80}, + {44, 42, 48}, 0.11f, 0.55f, 0.40f))); + rows.push_back(makeTile("blackstone", M::Stone, P::Splatter, {52, 48, 56}, {24, 22, 28}, + 0.14f, 0.45f, 0.55f)); +} + +// The End. Pale stone, purple masonry and two plants that grow on nothing. +void appendEnd(std::vector& rows) { + rows.push_back(makeTile("endStone", M::Stone, P::Solid, {222, 222, 164}, {192, 190, 126}, + 0.09f, 0.55f, 0.50f)); + rows.push_back(cutOut(makeTile("endPortal", M::Light, P::Liquid, {16, 16, 32}, {132, 220, 204}, + 0.14f, 0.60f, 0.70f))); + rows.push_back(makeTile("endPortalFrameTop", M::Crystal, P::GrowthRings, {198, 198, 148}, + {56, 92, 84}, 0.09f, 0.40f, 0.75f)); + rows.push_back(makeTile("endPortalFrameSide", M::Stone, P::Strata, {186, 188, 140}, + {146, 148, 102}, 0.09f, 0.30f, 0.35f)); + rows.push_back(makeTile("purpur", M::Stone, P::Dots, {172, 124, 172}, {206, 162, 206}, + 0.10f, 0.30f, 0.60f)); + rows.push_back(cutOut(runsVertical(makeTile("chorusPlant", M::Organic, P::Cross, {124, 88, 124}, + {84, 54, 84}, 0.11f, 0.50f, 0.55f)))); + rows.push_back(cutOut(runsVertical(makeTile("chorusFlower", M::Organic, P::Cross, + {198, 180, 198}, {142, 120, 142}, + 0.11f, 0.45f, 0.65f)))); +} +