From de930c8d09a3a8560439ea43ab9a6e475b9fd03d Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Tue, 30 Apr 2024 21:58:07 +0100 Subject: [PATCH] Split up turtle textures (#1813) Turtles currently read their textures from a single 128x128 sprite sheet. Most of this texture is unused which means we end up wasting a lot of the block texture atlas[^1]. This change splits up the turtle textures into individual 32x32 textures[^2], one for each side, and then an additional backpack texture. I'm very sorry to any resource pack artists out there. The tools/update-resources.py script will update existing packs, but does not (currently) handle non-standard resolutions. [^1]: It used to be worse: https://github.com/dan200/ComputerCraft/issues/145 [^2]: Turtle textures are a bit weird, in that they mostly *look* 16x16, but have some detail in places. --- .../kotlin/cc/tweaked/gradle/MergeTrees.kt | 1 - .../models/block/turtle_advanced.json | 13 +++- .../models/block/turtle_normal.json | 13 +++- .../data/BlockModelProvider.java | 16 ++++- .../models/block/turtle_base.json | 24 +++---- .../models/block/turtle_colour.json | 60 +++++++++++------- .../models/block/turtle_elf_overlay.json | 37 +++++++++-- .../models/block/turtle_overlay.json | 43 ------------- .../textures/block/turtle_advanced.png | Bin 1686 -> 0 bytes .../textures/block/turtle_advanced_back.png | Bin 0 -> 533 bytes .../block/turtle_advanced_backpack.png | Bin 0 -> 489 bytes .../textures/block/turtle_advanced_bottom.png | Bin 0 -> 421 bytes .../textures/block/turtle_advanced_front.png | Bin 0 -> 495 bytes .../textures/block/turtle_advanced_left.png | Bin 0 -> 502 bytes .../textures/block/turtle_advanced_right.png | Bin 0 -> 517 bytes .../textures/block/turtle_advanced_top.png | Bin 0 -> 490 bytes .../textures/block/turtle_colour.png | Bin 2344 -> 0 bytes .../block/turtle_colour_body_back.png | Bin 0 -> 258 bytes .../block/turtle_colour_body_backpack.png | Bin 0 -> 229 bytes .../block/turtle_colour_body_bottom.png | Bin 0 -> 361 bytes .../block/turtle_colour_body_front.png | Bin 0 -> 247 bytes .../block/turtle_colour_body_left.png | Bin 0 -> 292 bytes .../block/turtle_colour_body_right.png | Bin 0 -> 253 bytes .../textures/block/turtle_colour_body_top.png | Bin 0 -> 168 bytes .../block/turtle_colour_frame_back.png | Bin 0 -> 235 bytes .../block/turtle_colour_frame_backpack.png | Bin 0 -> 191 bytes .../block/turtle_colour_frame_bottom.png | Bin 0 -> 233 bytes .../block/turtle_colour_frame_front.png | Bin 0 -> 203 bytes .../block/turtle_colour_frame_left.png | Bin 0 -> 225 bytes .../block/turtle_colour_frame_right.png | Bin 0 -> 184 bytes .../block/turtle_colour_frame_top.png | Bin 0 -> 185 bytes .../textures/block/turtle_elf_overlay.png | Bin 1681 -> 0 bytes .../block/turtle_elf_overlay_back.png | Bin 0 -> 338 bytes .../block/turtle_elf_overlay_backpack.png | Bin 0 -> 483 bytes .../block/turtle_elf_overlay_front.png | Bin 0 -> 234 bytes .../block/turtle_elf_overlay_left.png | Bin 0 -> 233 bytes .../block/turtle_elf_overlay_right.png | Bin 0 -> 272 bytes .../textures/block/turtle_elf_overlay_top.png | Bin 0 -> 590 bytes .../textures/block/turtle_normal.png | Bin 1096 -> 0 bytes .../textures/block/turtle_normal_back.png | Bin 0 -> 397 bytes .../textures/block/turtle_normal_backpack.png | Bin 0 -> 287 bytes .../textures/block/turtle_normal_bottom.png | Bin 0 -> 350 bytes .../textures/block/turtle_normal_front.png | Bin 0 -> 410 bytes .../textures/block/turtle_normal_left.png | Bin 0 -> 408 bytes .../textures/block/turtle_normal_right.png | Bin 0 -> 393 bytes .../textures/block/turtle_normal_top.png | Bin 0 -> 340 bytes .../textures/block/turtle_rainbow_overlay.png | Bin 596 -> 186 bytes .../textures/block/turtle_trans_overlay.png | Bin 4303 -> 154 bytes tools/update-resources.py | 51 +++++++++++++++ 49 files changed, 171 insertions(+), 87 deletions(-) delete mode 100644 projects/common/src/main/resources/assets/computercraft/models/block/turtle_overlay.json delete mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_back.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_backpack.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_bottom.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_front.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_left.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_right.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_top.png delete mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_back.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_backpack.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_bottom.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_front.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_left.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_right.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_top.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_back.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_backpack.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_bottom.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_front.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_left.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_right.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_top.png delete mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_back.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_backpack.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_front.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_left.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_right.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_top.png delete mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_back.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_backpack.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_bottom.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_front.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_left.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_right.png create mode 100644 projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_top.png mode change 100644 => 100755 tools/update-resources.py diff --git a/buildSrc/src/main/kotlin/cc/tweaked/gradle/MergeTrees.kt b/buildSrc/src/main/kotlin/cc/tweaked/gradle/MergeTrees.kt index 16074cb93..21754f563 100644 --- a/buildSrc/src/main/kotlin/cc/tweaked/gradle/MergeTrees.kt +++ b/buildSrc/src/main/kotlin/cc/tweaked/gradle/MergeTrees.kt @@ -98,7 +98,6 @@ abstract class MergeTrees : DefaultTask() { } val sharedFiles = files.entries.asSequence().filter { (_, v) -> v.found == sources.size }.map { (k, _) -> k }.toList() - println(sharedFiles) // Copy shared files to the common directory fsOperations.sync { diff --git a/projects/common/src/generated/resources/assets/computercraft/models/block/turtle_advanced.json b/projects/common/src/generated/resources/assets/computercraft/models/block/turtle_advanced.json index 99ba96d2c..b149f4869 100644 --- a/projects/common/src/generated/resources/assets/computercraft/models/block/turtle_advanced.json +++ b/projects/common/src/generated/resources/assets/computercraft/models/block/turtle_advanced.json @@ -1 +1,12 @@ -{"parent": "computercraft:block/turtle_base", "textures": {"texture": "computercraft:block/turtle_advanced"}} +{ + "parent": "computercraft:block/turtle_base", + "textures": { + "back": "computercraft:block/turtle_advanced_back", + "backpack": "computercraft:block/turtle_advanced_backpack", + "bottom": "computercraft:block/turtle_advanced_bottom", + "front": "computercraft:block/turtle_advanced_front", + "left": "computercraft:block/turtle_advanced_left", + "right": "computercraft:block/turtle_advanced_right", + "top": "computercraft:block/turtle_advanced_top" + } +} diff --git a/projects/common/src/generated/resources/assets/computercraft/models/block/turtle_normal.json b/projects/common/src/generated/resources/assets/computercraft/models/block/turtle_normal.json index a3ea9a7f4..c73e5333c 100644 --- a/projects/common/src/generated/resources/assets/computercraft/models/block/turtle_normal.json +++ b/projects/common/src/generated/resources/assets/computercraft/models/block/turtle_normal.json @@ -1 +1,12 @@ -{"parent": "computercraft:block/turtle_base", "textures": {"texture": "computercraft:block/turtle_normal"}} +{ + "parent": "computercraft:block/turtle_base", + "textures": { + "back": "computercraft:block/turtle_normal_back", + "backpack": "computercraft:block/turtle_normal_backpack", + "bottom": "computercraft:block/turtle_normal_bottom", + "front": "computercraft:block/turtle_normal_front", + "left": "computercraft:block/turtle_normal_left", + "right": "computercraft:block/turtle_normal_right", + "top": "computercraft:block/turtle_normal_top" + } +} diff --git a/projects/common/src/main/java/dan200/computercraft/data/BlockModelProvider.java b/projects/common/src/main/java/dan200/computercraft/data/BlockModelProvider.java index d05d8c308..c0c9f3491 100644 --- a/projects/common/src/main/java/dan200/computercraft/data/BlockModelProvider.java +++ b/projects/common/src/main/java/dan200/computercraft/data/BlockModelProvider.java @@ -38,6 +38,9 @@ import static net.minecraft.data.models.model.TextureMapping.getBlockTexture; class BlockModelProvider { private static final TextureSlot CURSOR = TextureSlot.create("cursor"); + private static final TextureSlot LEFT = TextureSlot.create("left"); + private static final TextureSlot RIGHT = TextureSlot.create("right"); + private static final TextureSlot BACKPACK = TextureSlot.create("backpack"); private static final ModelTemplate COMPUTER_ON = new ModelTemplate( Optional.of(new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/computer_on")), @@ -58,7 +61,7 @@ class BlockModelProvider { private static final ModelTemplate TURTLE = new ModelTemplate( Optional.of(new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_base")), Optional.empty(), - TextureSlot.TEXTURE + TextureSlot.FRONT, TextureSlot.BACK, TextureSlot.TOP, TextureSlot.BOTTOM, LEFT, RIGHT, BACKPACK ); private static final ModelTemplate TURTLE_UPGRADE_LEFT = new ModelTemplate( Optional.of(new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_upgrade_base_left")), @@ -167,7 +170,16 @@ class BlockModelProvider { } private static void registerTurtle(BlockModelGenerators generators, TurtleBlock block) { - var model = TURTLE.create(block, TextureMapping.defaultTexture(block), generators.modelOutput); + var model = TURTLE.create(block, new TextureMapping() + .put(TextureSlot.FRONT, getBlockTexture(block, "_front")) + .put(TextureSlot.BACK, getBlockTexture(block, "_back")) + .put(TextureSlot.TOP, getBlockTexture(block, "_top")) + .put(TextureSlot.BOTTOM, getBlockTexture(block, "_bottom")) + .put(LEFT, getBlockTexture(block, "_left")) + .put(RIGHT, getBlockTexture(block, "_right")) + .put(BACKPACK, getBlockTexture(block, "_backpack")), + generators.modelOutput + ); generators.blockStateOutput.accept( MultiVariantGenerator.multiVariant(block, Variant.variant().with(VariantProperties.MODEL, model)) .with(createHorizontalFacingDispatch()) diff --git a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_base.json b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_base.json index 52ae637d4..d526ac215 100644 --- a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_base.json +++ b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_base.json @@ -2,30 +2,30 @@ "parent": "block/block", "render_type": "translucent", "textures": { - "particle": "#texture" + "particle": "#front" }, "elements": [ { "from": [ 2, 2, 2 ], "to": [ 14, 14, 13 ], "faces": { - "down": { "uv": [ 5.75, 2.75, 2.75, 0 ], "texture": "#texture" }, - "up": { "uv": [ 8.75, 0, 5.75, 2.75 ], "texture": "#texture" }, - "north": { "uv": [ 11.5, 5.75, 8.5, 2.75 ], "texture": "#texture" }, - "south": { "uv": [ 5.75, 5.75, 2.75, 2.75 ], "texture": "#texture" }, - "west": { "uv": [ 8.5, 5.75, 5.75, 2.75 ], "texture": "#texture" }, - "east": { "uv": [ 2.75, 5.75, 0, 2.75 ], "texture": "#texture" } + "down": { "uv": [ 0, 0, 12, 11 ], "texture": "#bottom" }, + "up": { "uv": [ 0, 0, 12, 11 ], "texture": "#top" }, + "north": { "uv": [ 0, 0, 12, 12 ], "texture": "#front" }, + "south": { "uv": [ 0, 0, 12, 12 ], "texture": "#back" }, + "west": { "uv": [ 0, 0, 11, 12 ], "texture": "#left" }, + "east": { "uv": [ 0, 0, 11, 12 ], "texture": "#right" } } }, { "from": [ 3, 6, 13 ], "to": [ 13, 13, 15 ], "faces": { - "down": { "uv": [ 11.75, 0.5, 9.25, 0 ], "texture": "#texture" }, - "up": { "uv": [ 14.25, 0, 11.75, 0.5 ], "texture": "#texture" }, - "south": { "uv": [ 11.75, 2.25, 9.25, 0.5 ], "texture": "#texture" }, - "west": { "uv": [ 12.25, 2.25, 11.75, 0.5 ], "texture": "#texture" }, - "east": { "uv": [ 9.25, 2.25, 8.75, 0.5 ], "texture": "#texture" } + "down": { "uv": [ 2, 9, 12, 11 ], "texture": "#backpack" }, + "up": { "uv": [ 2, 0, 12, 2 ], "texture": "#backpack" }, + "south": { "uv": [ 2, 2, 12, 9 ], "texture": "#backpack" }, + "west": { "uv": [ 0, 2, 2, 9 ], "texture": "#backpack" }, + "east": { "uv": [ 12, 2, 14, 9 ], "texture": "#backpack" } } } ] diff --git a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_colour.json b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_colour.json index d40487d67..652791dae 100644 --- a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_colour.json +++ b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_colour.json @@ -1,53 +1,67 @@ { "parent": "computercraft:block/turtle_base", "textures": { - "texture": "computercraft:block/turtle_colour" + "texture": "computercraft:block/turtle_colour", + "body_back": "computercraft:block/turtle_colour_body_back", + "body_backpack": "computercraft:block/turtle_colour_body_backpack", + "body_bottom": "computercraft:block/turtle_colour_body_bottom", + "body_front": "computercraft:block/turtle_colour_body_front", + "body_left": "computercraft:block/turtle_colour_body_left", + "body_right": "computercraft:block/turtle_colour_body_right", + "body_top": "computercraft:block/turtle_colour_body_top", + "frame_back": "computercraft:block/turtle_colour_frame_back", + "frame_backpack": "computercraft:block/turtle_colour_frame_backpack", + "frame_bottom": "computercraft:block/turtle_colour_frame_bottom", + "frame_front": "computercraft:block/turtle_colour_frame_front", + "frame_left": "computercraft:block/turtle_colour_frame_left", + "frame_right": "computercraft:block/turtle_colour_frame_right", + "frame_top": "computercraft:block/turtle_colour_frame_top" }, "elements": [ { "from": [ 2, 2, 2 ], "to": [ 14, 14, 13 ], "faces": { - "down": { "uv": [ 5.75, 8.5, 2.75, 5.75 ], "texture": "#texture", "tintindex": 0 }, - "up": { "uv": [ 8.75, 5.75, 5.75, 8.5 ], "texture": "#texture", "tintindex": 0 }, - "north": { "uv": [ 11.5, 11.5, 8.5, 8.5 ], "texture": "#texture", "tintindex": 0 }, - "south": { "uv": [ 5.75, 11.5, 2.75, 8.5 ], "texture": "#texture", "tintindex": 0 }, - "west": { "uv": [ 8.5, 11.5, 5.75, 8.555 ], "texture": "#texture", "tintindex": 0 }, - "east": { "uv": [ 2.75, 11.5, 0, 8.5 ], "texture": "#texture", "tintindex": 0 } + "down": { "uv": [ 0, 0, 12, 11 ], "texture": "#body_bottom", "tintindex": 0 }, + "up": { "uv": [ 0, 0, 12, 11 ], "texture": "#body_top", "tintindex": 0 }, + "north": { "uv": [ 0, 0, 12, 12 ], "texture": "#body_front", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 12, 12 ], "texture": "#body_back", "tintindex": 0 }, + "west": { "uv": [ 0, 0, 11, 12 ], "texture": "#body_left", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 11, 12 ], "texture": "#body_right", "tintindex": 0 } } }, { "from": [ 3, 6, 13 ], "to": [ 13, 13, 15 ], "faces": { - "down": { "uv": [ 11.75, 6.25, 9.25, 5.75 ], "texture": "#texture", "tintindex": 0 }, - "up": { "uv": [ 14.25, 5.75, 11.75, 6.25 ], "texture": "#texture", "tintindex": 0 }, - "south": { "uv": [ 11.75, 8, 9.25, 6.25 ], "texture": "#texture", "tintindex": 0 }, - "west": { "uv": [ 12.25, 8, 11.75, 6.25 ], "texture": "#texture", "tintindex": 0 }, - "east": { "uv": [ 9.25, 8, 8.75, 6.25 ], "texture": "#texture", "tintindex": 0 } + "down": { "uv": [ 2, 9, 12, 11 ], "texture": "#body_backpack", "tintindex": 0 }, + "up": { "uv": [ 2, 0, 12, 2 ], "texture": "#body_backpack", "tintindex": 0 }, + "south": { "uv": [ 2, 2, 12, 9 ], "texture": "#body_backpack", "tintindex": 0 }, + "west": { "uv": [ 0, 2, 2, 9 ], "texture": "#body_backpack", "tintindex": 0 }, + "east": { "uv": [ 12, 2, 14, 9 ], "texture": "#body_backpack", "tintindex": 0 } } }, { "from": [ 2, 2, 2 ], "to": [ 14, 14, 13 ], "faces": { - "down": { "uv": [ 5.75, 2.75, 2.75, 0 ], "texture": "#texture" }, - "up": { "uv": [ 8.75, 0, 5.75, 2.75 ], "texture": "#texture" }, - "north": { "uv": [ 11.5, 5.75, 8.5, 2.75 ], "texture": "#texture" }, - "south": { "uv": [ 5.75, 5.75, 2.75, 2.75 ], "texture": "#texture" }, - "west": { "uv": [ 8.5, 5.75, 5.75, 2.75 ], "texture": "#texture" }, - "east": { "uv": [ 2.75, 5.75, 0, 2.75 ], "texture": "#texture" } + "down": { "uv": [ 0, 0, 12, 11 ], "texture": "#frame_bottom" }, + "up": { "uv": [ 0, 0, 12, 11 ], "texture": "#frame_top" }, + "north": { "uv": [ 0, 0, 12, 12 ], "texture": "#frame_front" }, + "south": { "uv": [ 0, 0, 12, 12 ], "texture": "#frame_back" }, + "west": { "uv": [ 0, 0, 11, 12 ], "texture": "#frame_left" }, + "east": { "uv": [ 0, 0, 11, 12 ], "texture": "#frame_right" } } }, { "from": [ 3, 6, 13 ], "to": [ 13, 13, 15 ], "faces": { - "down": { "uv": [ 11.75, 0.5, 9.25, 0 ], "texture": "#texture" }, - "up": { "uv": [ 14.25, 0, 11.75, 0.5 ], "texture": "#texture" }, - "south": { "uv": [ 11.75, 2.25, 9.25, 0.5 ], "texture": "#texture" }, - "west": { "uv": [ 12.25, 2.25, 11.75, 0.5 ], "texture": "#texture" }, - "east": { "uv": [ 9.25, 2.25, 8.75, 0.5 ], "texture": "#texture" } + "down": { "uv": [ 2, 9, 12, 11 ], "texture": "#frame_backpack" }, + "up": { "uv": [ 2, 0, 12, 2 ], "texture": "#frame_backpack" }, + "south": { "uv": [ 2, 2, 12, 9 ], "texture": "#frame_backpack" }, + "west": { "uv": [ 0, 2, 2, 9 ], "texture": "#frame_backpack" }, + "east": { "uv": [ 12, 2, 14, 9 ], "texture": "#frame_backpack" } } } ] diff --git a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_elf_overlay.json b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_elf_overlay.json index 047576123..66495626a 100644 --- a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_elf_overlay.json +++ b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_elf_overlay.json @@ -1,6 +1,35 @@ { - "parent": "computercraft:block/turtle_overlay", + "parent": "block/block", "textures": { - "texture": "computercraft:block/turtle_elf_overlay" - } -} + "back": "computercraft:block/turtle_elf_overlay_back", + "backpack": "computercraft:block/turtle_elf_overlay_backpack", + "front": "computercraft:block/turtle_elf_overlay_front", + "left": "computercraft:block/turtle_elf_overlay_left", + "right": "computercraft:block/turtle_elf_overlay_right", + "top": "computercraft:block/turtle_elf_overlay_top" + }, + "elements": [ + { + "from": [ 2, 2, 2 ], + "to": [ 14, 14, 13 ], + "faces": { + "up": { "uv": [ 0, 0, 12, 11 ], "texture": "#top" }, + "north": { "uv": [ 0, 0, 12, 12 ], "texture": "#front" }, + "south": { "uv": [ 0, 0, 12, 12 ], "texture": "#back" }, + "west": { "uv": [ 0, 0, 11, 12 ], "texture": "#left" }, + "east": { "uv": [ 0, 0, 11, 12 ], "texture": "#right" } + } + }, + { + "from": [ 3, 6, 13 ], + "to": [ 13, 13, 15 ], + "faces": { + "down": { "uv": [ 2, 9, 12, 11 ], "texture": "#backpack" }, + "up": { "uv": [ 2, 0, 12, 2 ], "texture": "#backpack" }, + "south": { "uv": [ 2, 2, 12, 9 ], "texture": "#backpack" }, + "west": { "uv": [ 0, 2, 2, 9 ], "texture": "#backpack" }, + "east": { "uv": [ 12, 2, 14, 9 ], "texture": "#backpack" } + } + } + ] + } diff --git a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_overlay.json b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_overlay.json deleted file mode 100644 index 906b68a82..000000000 --- a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_overlay.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "particle": "#texture" - }, - "elements": [ - { - "from": [ 2, 2, 2 ], - "to": [ 14, 14, 13 ], - "faces": { - "down": { "uv": [ 2.75, 0, 5.75, 2.75 ], "texture": "#texture" }, - "up": { "uv": [ 5.75, 0, 8.75, 2.75 ], "texture": "#texture" }, - "north": { "uv": [ 8.5, 5.75, 11.5, 2.75 ], "texture": "#texture" }, - "south": { "uv": [ 2.75, 5.75, 5.75, 2.75 ], "texture": "#texture" }, - "west": { "uv": [ 0, 5.75, 2.75, 2.75 ], "texture": "#texture" }, - "east": { "uv": [ 5.75, 5.75, 8.5, 2.75 ], "texture": "#texture" } - } - }, - { - "from": [ 3, 6, 13 ], - "to": [ 13, 13, 15 ], - "faces": { - "down": { "uv": [ 9.25, 0, 11.75, 0.5 ], "texture": "#texture" }, - "up": { "uv": [ 11.75, 0, 14.25, 0.5 ], "texture": "#texture" }, - "south": { "uv": [ 9.25, 2.25, 11.75, 0.5 ], "texture": "#texture" }, - "west": { "uv": [ 8.75, 2.25, 9.25, 0.5 ], "texture": "#texture" }, - "east": { "uv": [ 11.75, 2.25, 12.25, 0.5 ], "texture": "#texture" } - } - }, - { - "from": [ 1.5, 1.5, 1.5 ], - "to": [ 14.5, 14.5, 13.5 ], - "faces": { - "down": { "uv": [ 2.75, 8, 5.75, 10.75 ], "texture": "#texture" }, - "up": { "uv": [ 5.75, 8, 8.75, 10.75 ], "texture": "#texture" }, - "north": { "uv": [ 8.5, 13.75, 11.5, 10.75 ], "texture": "#texture" }, - "south": { "uv": [ 2.75, 13.75, 5.75, 10.75 ], "texture": "#texture" }, - "west": { "uv": [ 0, 13.75, 2.75, 10.75 ], "texture": "#texture" }, - "east": { "uv": [ 5.75, 13.75, 8.5, 10.75 ], "texture": "#texture" } - } - } - ] -} diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced.png deleted file mode 100644 index cf617d963293c3a39c5bb8c8ae121b52b621b5eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1686 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4rT@hhA$5${$yZaTovFG;>y6lprxgyqobp% ztE;D{r?0PXU|?WqXlP_)WNd6~Vq#)yYHDU?W^Qh7VPRouX=!C;Wo>P3V`F1$Yinm` z=jiBo^H#~tTV*$IRo%Q*bL)2Lt=r|dZdcyEn0fnZ_U)_Hx33r8zFvO&M(OPvmA7wH z-@a9P`&RkwTh+Jkl-;?|bmvmtohx;Bt~A`aT5#uT$(?HjcdixPxmI%LTG^dz6?d*x z-MLnC=UUyJYYlg<*W9^Ycjrdlof`#rZWP_QQF7--*_|5|cWzYOxlwcHX33qKRd;UI z+__b9=T_OBTNQV1m)*Htap!i`o!d2cZa3V$Tz~gU@!cz>cdypoy;^_wdg0ycrFXBF z-@RUW_j>i+>$P`p=HIwC&FdL&-pqM>t@`cF+P9C|-#%`C`=tHt^Uk-= zd*8n5fBS0k+t*XyzUh7YX7bxNQ{TRs`S#7+cduG*Y)V?rz`(#*666=m;PC858Uq8% zEKe85kcwMxXK;sK_7G{9Z8q0OZSogJEv@b@55|v;K}STQbUWNuukF=kd!2p#Zt30a zi`HnITD9WnQ~Uh9<2S;u2}ixrOMh;?+|t}Q^Y_x7J7-4EKQG$jI`LA$j7tdt)0i23 zo5d9+yoHXfx@E!t{^y;Vx4&!Se(-b5&|8tEFyUlGnBDwMCvVGGPV#uMOXE=W4IjJu zHxZ^@D!+ai&HPonp6QYMnXD_0jIM@9tH1BtTmL^?pg^f*(ZzZ5YVK`fWB>ho`7)jC z#KiOSO00w~Zt-b58*y!+^VN*!=K@Y#=Ti8cu`+eq`jZ5Ioi* zajccw+4=eT^JnK;o12%voRq36v~a?rFJBJuq;#!2?0sE7&S$C4>fO6j8|OdRQ_sSv z{z*ZhW|1wU$D#Z6Ki|$?zn`5^eNjlDn|t@sW_ES8qMeP65pUky49d*$nPzClGvi`w zW8=-p4i@G`DMAaUvCewm#K)yj^6JXT$;)P*?(I49_~@f2DH|g+G`dtmkNeLrJ7(DD z;^wX&-*=q%pb4*|flsi(q?63-3(86&9tgkX+7a6nz_IY|?u9F^Or5qqB{KB!$B!R_ zJjIV4f9qnR>wRJJ$(Jwx{^rb#T(DE%Z?i*ub3@`5{R>y0hIMcRUcGm({Ax&N5Gc^qk(wDj4J!pLvArrR30WknWD znUFAHf=5e`@9S5KOav5I#3DE}&3ZrIj#Q915)t^P&b8Bx(~(0?XOhU)M*XQz%bsoT zK5%)tw^`2aZQov9Jw5%y;eQ_mXEeUOb!)bHS5x8Viv@|Z+~fCTgfryr@#8r0Dc($5 zJLmVGpSQQKUj4AZ-~>wo&$F;FIs3Zrdwp`v|v@f&q%`=v~+=&hf2ZGWy zt!-?KjO^U}20bF279y6?%iM&5p2u7XU{+95VLxhw3hY`pziy6=G7-UG+f zSez6+wrhtM?YtRz`ApjSSZV2I_jS?SY;P@968|oWxx7HPaq;WvnzOdqvh3Qec-L>v zj5#gSv}fvwO!D+xG{scv^XK2+mIf`oG}BlCsz+vFKt|G{jj@(hA%Rv}3T6)?85TY( z>2@(lJN-T)CoQdD!*+AA=m-y$1-9*rUx`0$Ik73xgexM<57E+t))u!IOiNNyj*K=iHxf6%RZt lu#n+vKa7X^y#IN=%T3qQ?LRHvFfcGMc)I$ztaD0e0sv$Zb!`9u diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_back.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_back.png new file mode 100644 index 0000000000000000000000000000000000000000..e642a61542396d60a5a2ef138ee9d18424be7fca GIT binary patch literal 533 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANNfcRXDjLn`LHoo2i4a)3bV z{+(qqOBW@wzERSx`kTGLb&E)x+ z^Rl<|w(|vKvpy)=$*>`6EyIi7^X8wQy^Qg|UB(+ZW(;%u)EU10wq=OD&bZwN!NqYVFi`7&W$$H~qEy$P@8x%{%&u6FNk+lT8q4!SW%w%u1nN?RC_!HgRGM|25Gjm&R zI_ri#Ot0PxCOu2c)|z-koHJr8R5b z8GWrj*KGF2fCsF=FsSO(vze4i#riCZGNw;SXVEbCS zW9jyjS8aX$F8ojD)7ZW~Zog-^pVM`hkp2F@f8CtV^)hV9>^b)jed5Ys z){@(v5ZdQ!>7(}Tb;@PckG5wjWbPK*$USHMaH!#b$98`I$=~zi?a%z%e)XNZyx?@V z&33=-zBAsPwCdl*|KdHu-@+I+JMV3pZtzc+!LYXGKWoLkJpT3@6SjQKN;>z~JfX=d#Wzp$Py=3jN0b literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_backpack.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_backpack.png new file mode 100644 index 0000000000000000000000000000000000000000..0ad22371e80068eb786d1a3affdaa94dbbaecb3e GIT binary patch literal 489 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG76tf(xH2#>XlZHb>gww0 z>FMk18yFZE8X6iI85tWJo0yoGnwpxKnVFlLTUc0FT3T9JSy@|K+u7OOyj61ZR@JTB z<+rb9-@aaW`+E898`ZaOmEO6~bmvOlohuD@t`*$5R(0oE&7JEtcW&g}xlwTEM#-HU zWp{2=+__nD=VsNNn>BZCm)*Htap!i`o!bp}FW29_QhN7#;oa+{cdu98yI-j;!qx|$vRr!pLx literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_bottom.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..3950c69f3aba9be4e0c7cb0d269df0354ab7f346 GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGS^|7RTp1V`baZrdb#?Xh z^z`-h4Gatn4GoQqjEs$qO-xKoO-;?r%*@TrEi5c7EiJ9AtgNlAZEbDuT&lZst>VtL znmgAT?p&|Ad$soN^}@T?OYdHIomoLg+zNmTmqV46& zmY1&^UcKyi^|Jf*^X%6zYhJ&sd;PNcSD^;Tfs7?Ve!&b5&u*kKFfg3=ba4!^IQ{nG zO|HWV0<0H8dS6;>&D?eDR&D&h|Nn0_dbumLILKEYEI6qANX3~&fNA5ZHLfzf3{#jK z&NxLmu757X_`sp=(Y{{BwR7*Rzt(?yvO`9c`vafldMr-K3vG?XsL zh%mcOloI(J$#SS-UvHz0Kkum-9472X47*Yo*Q$H2hA;OXk;vd$@?2>{wxw*>$I literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_front.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_front.png new file mode 100644 index 0000000000000000000000000000000000000000..0d508d9c8879d743b97fabd1568bb780200fa29c GIT binary patch literal 495 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG)&=;4xH2#>XlZHb=;-L` z>gws~>Feto7#J8D8X6fH8538Y&fgLwnE|~Bh-ln)@ia-m; z#x=*R;~AGe{+M#u!9~>?-QKY*5D- zIZY+o&U4ZTe(>=+&t?Yz54W14B|`8%aw8J$*N{aCR#FV*+vW(614<@^T2T!EHtdPk?fH7pJ~i&_2D=%n8SlSjU|?YIboFyt=akR{ E0A>^FkpKVy literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_left.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_advanced_left.png new file mode 100644 index 0000000000000000000000000000000000000000..d3fcd1d01f5dbd0f4c2b8a67129288c51b7a552d GIT binary patch literal 502 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGjs^IHxH2#>XlZHb=;-L` z>gwz38yFZE8X6iI85tWJo0yoGnwpxKnVFlLTUc1w*x1~>RdVxI)$OatecW#&6xm|JR zcGaER4R^2B-o0LU_j>i+oB4Nd7T_!>`1H(N}7sn8b({C@G^<#1raDBMGy6vHRfXv}*-|KbE^-3H=B-|EM z7c{D=EJ*n_uk`7i*{isw9&%L8oZ7Tz(wn~mu?yGS(Q@hC*lOZt0y&dTmmnBGboYcJ@e_(YQNmo7v_|ocvpYl zS-^GnNvCA}n;K8OWnZ0co7;J=;-L^>gww2 z>l+vt7#bQH85tQH8=IJzn3|fJnVFfJn_F61T3K0HTU*=M*x1?G-Mm$H^H$aE8u=>y>w} zSKqx}d-rDX-J9iiZ&p6IU-kM;-|IJ%-n{I4^SbZN>nU$u&v^4@&fA-{Zy&Y4ebWB+ zRsY*pli$ASefwte+cz`czL{&(yY~hI0|R48kY6x^!?PP{3=9lcJzX3_EKa|@u-ETU zfXuOn&*yBrz~opsrSl~BhkyBp51!1JW03V@%>{mT)4~M@-~D?wS^fX_7N6V&ld@$~ zwR&A%E`Q;ZS(2T()bx8+`oo*At~Y-^6remkYw9t(oU=OBoYnei_hKTtjGX(`?p1TF z4a#mhR$&Fn${r$3bDb`H`O|*thNFO>YslV~1y@f@xpwG#SDe!c7Drvvl7LfJv%cPM e{lD)Q%i5{-fw`087Bes~FnGH9xvXp8M^MZs*(Uc6`oK?}k4&lGrEl<}4^(mh~|@<#dvRot>TQx8Hl2 z)?CkK__dFH!D}l9FU`e&FTXUo6~8u&A!dCzLx?DYAmf7qiyMdaJ?d-!@J~7M-b$3Ygqogf45M^`2%IylFG{(Ux_}Se@MIF^;$O5xQ#2W z2fV$bAkI*>`)(}fmh=Tx&sMCoxt_EB<-zZ3m5!X_bnIPgdb`qdTUxr#vQ)mek~?Dd z9Lg&8-L|tYEc;Wrx)$%cviWk8&emr*vRlhvHf{gLb7zjWmhAH>O`I{(5BYCCjh>>m48_j@{Z5w`+W1? z$Cj`p`_^CTpXHu!x<9Enfq}u()z4*}Q$iB}nR@5z literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour.png deleted file mode 100644 index 9d3fb89d6706df16d379b8329a82778fa4aba168..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2344 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4rT@hhA$5${$yZaW(e>Jab;j&(9+V<(b3V> z)z#C})7RHGFfcGQG&C|YGB!3gF)=YUH8nFcGdDN4u&}VSw6wCavbMIiv9YnWwY9Ue zb98h(eE9H@BS(%NJ$mfekz>b>9Y22j#EF9^P8>UN;>5|5Cr_O^b^7$_GiT16J$v@t zxpU{wpTBV7!o`ahFI~EH`SRr}SFT*WdiC11YuB$|zj5Qn&6_uG-MV%A_U$`&?%ch5 z_ujpG4<0;t`0(MQM~@yqe*EOglc!IgK701;`Sa&5Up#p6;>F9CFJHZS_4@VeH*em& zef##^yLa#3zh@W)qai?a2u$EJC}v<_WGD&p3;sW{0YmV2c2x!jmg}A_jv*Dd-p)Fo zf5%1SxV_x%yJzz*hlDsSP!P!Lyu}VUiH3Fbnaft z>DT{#|7D$U_<48wll|fj2FL4oI=on(`!3dtIjP1I!GF9|R!D4>8PAfZ3nu?e*`DR2 zyL+8N<;6LTZ2!u|nQuL`msrl#khpjckJ#U4Gs6o@I$6J#Dk^r_?39Q&^P;Cwra9|e zLrI6@+GW-qjlRnTJkNI>n`Xz6A7|FV_%fnhZ?8T30q=ArtwXo0(|;?Js67fQKYU}N zfSpR`ch>(VX$hMDsu?+sc_guUuo!X*v-NmL2rx6=l9Jylx^C*Vmg^jxGdCP;2o7@M zX){!qk>J4@c(lTyqo}97@A-1^b^k+GcBvO1yKeJhz4DLi3uko(e>Atg(ep$|qGQhQ z>PIJi9*5jtxPMjF!G@S19v8ni&gWNgEa&QrHrVh>hr>2>-tJEm&+UAtmAFHVXV0p) zE7#wW`0zaHJ!@6t58k=I1k%(`W?9Dyv#qo4IThTr>pgpm`&akuLk@4wG#zOEc4g-^ z>2o(%$u+FA>6Fe>y~zFim9I@k?`5m6FAfJuX6&kTV}8CW>pb5?t5Sz;9gSDh8-N{n?lbP_-uOnU*+Jpi8vE;48s~4CZ~Z2HFaNYt2Q zuK3Sec?JGlaN?AA>SMaGmDxRY_BB-_1;agug`3&V-j>nmep%xXY$#c;|;z# zjdAwh+cH;+U&Ow(zpKxs@K8W#*@Oa?%bTBG>x*s?xv*sE--cO`*YDR>#c z{$Tf^v+s3}*WN0-VA=52L|dWa@t*A2`_%sY7hAfo%>MnGQnm-)K7r>YnOLe1{8f5! z>YKvvxp!|0H?hyDbuTTGX8U%k^nt2gCwibbER6 z&GoODUo4XitE(@bsN*49`P!Os=i6h3`6qeqEIVi~IG53&ct!7XmX!OfA#0a8{;VtQ zzH~pTHKE?%CF2){DhAsIIS2j)>=&3{pmWybkzuL|svA6A{an^LB{Ts5 DB7p20 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_back.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_back.png new file mode 100644 index 0000000000000000000000000000000000000000..cb38782820886a22a54c08b066f83e25a32f3356 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Cp}#pLn`LHof;@~SU|*8 zK9POj=02b8`L^2}>~C4G6mJPj-%?mNqrJ0Q$*H82#p>FvfH@j28~egex!2y#d&$ZZ zY5a1wMoAIpd5d+~r%l#1Mk)W{*)mJ!_<>D27ah)VtUvvH3z<>aOE9e8$c!+_1jj-0y%R zv0j$Pe|Q@BZWsT2M&kJ*3I4uhPmznW%%ZkC?%m8U5iQ1iY=$+Xw{-S;riRxI#hR~; zZ#av;N#C-iQNU~MYqs0M7EyDh`JEiT$h|gKIU*30#q7kaxqeoIo3LNfnWGg94LA7z ge6iod`>*a0bKD`*wELW;UqJ5nboFyt=akR{0O~?k0RR91 literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_bottom.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..511a976dcb297dbb7ac10b88d7656c97822ee2cb GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG5(0ceTp1V`4j(>zICbjOnKNh3o;`c++`04T&tJTF@zSMBmoHzwdiCnHYuBz{zkci1 ztp^VtJbLu#$&)8fpFVx|?Ai0@&tJTF@$$ukmoHzwdiCn{>(_7Iym|ZfZT+I^Mg|53 z#*!evUj}$!Sv3D~w-YcK`UE##9eYxKmdrcL*nK{KL2(cYl{d31Y z&I#!aOAa!!wN00_P;;#Ky-k9hb+fe-tk@cMO5#_2Xyogd%LnGmKVfwJ X&SSTy+vqt10|SGntDnm{r-UW|lTNXL literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_front.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_front.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3f48ddd79660220a85b590e155b8a006a21d0d GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}`#fD7Ln`LHotnsZL_nZb zUaGu6xbw01k(D>%C;M(~zM6OK-LHRB%1-S$&hW>&N$TG37+#S@zvj&g@?vP%`t46U z(@o(oer8!yys9cq=lM1ioQst*JQfk_W!AXb%k8+Og@DtGAcI{gIZR$FFLOo-Us@;c zn=wzz;249&HRJ31yDMchu1^U5x0^3ObjqpDYq18WZ1^(Pmdh8do9|x!wzX15!~f6} zp@!v`;@tOrS5fh>Ts~vB@{YRhe(MbpI%3`Iw)doqmG~Z(FfcGMc)I$ztaD0e0suH| BWBC98 literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_left.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_left.png new file mode 100644 index 0000000000000000000000000000000000000000..f773e86f8916d2329013b1b96fc42548b6974d49 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}uRUEHLn`LHofga2qQKL# z{Ov17lVb(K@84(ET$FxccQy2yyuqePyzx$6zRt^(7aTY|!SB|#xqRH6X2rc{co;Hf zrNve-{T69|P{^o1_lDT~htd1pYxs7QrCpCNRgq(NVL4EzUUlZppL!XCV+=n^mTi1( z#o#b4bv8Fk`GR$?y}5UPD&^XCZ>=HQVFMPy2Yc90ZQ{{(a8Xc7cy?7`(aqka9JP7< zr|rS7QoNpE@YwR3!W7#J8BJYD@<);T3K0RT=;ce?-p literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_right.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_body_right.png new file mode 100644 index 0000000000000000000000000000000000000000..d086592c02633416e970aed93f3b1b82180bcae2 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}M?75|Ln`LHoqCY>umX>( zy?`1=%*^J$H@T};+z}C<6m)Tt+n;X6=uLlBauPPM$U1Rkng?_|+C9Z+^S$3i39g$| ze@IKk9dK%wdNeEQakiCy<6^#(=W|z|b9T_2YMJG-W9j?v|5@T>PTzH%`*HWyZQhLX zf-k1ZXb3!5JXJ?9;`-L;q6HHj-ak1Y%(&LHVQum+(URvU>#aC@4Pz%w{i5(-&S@FV zw|URG-!a*7b{^QRvd)+@xrbrfx&AVy`uwW}Ou-;ve&VI*+&ez!W-~A_FnGH9xvX&pEz;w#EBCpPo7-<@mW3t0|R48kY6x^!?PP{3=9kwo-U3d8t0P} z6nIz~9XvfxT5M^~U{vMcII5eFBg4g%DQny*#?i_s9>dgfR^g3-P)&57cft<_hEOM+ Wr(tiZ?lLeiFnGH9xvXU1bCMKq)remXb>FVdQ&MBb@0JTL}1poj5 literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_front.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_front.png new file mode 100644 index 0000000000000000000000000000000000000000..c58d2e6fa330d7753f3e40f80a0814770383da91 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1Vrjj7PUgO^;x=YM?iGTpJlpjePB3K^FrF8gki zGJQSM*9}_F$`bS~`|=y!v^Gd6J9sI%)ULO46#XNcYw|;L<2RO4kaHP4UHx3vIVCg! E0RKQlX#fBK literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_left.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_left.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4cc2294a757d7b5195c4e476e92c82e3d14a3 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I7G?$phQ^Te;|vT8x&b~Rt_%zeT3T8EaloaX#5&_RWuZQxh^~eLNGuW^h2j;xGeqrUgsdA=a>m0vxT}XO1Wqi0gge zYd?^;qrs4`k#C2CB_E?|6VtJRMq>*WfqBIT6*oxV4d7`kn$Gw5?)!U7rFVdQ&MBb@0BtKhsQ>@~ literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_top.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_colour_frame_top.png new file mode 100644 index 0000000000000000000000000000000000000000..8ccd72641f317a38d7d3ed95a9a2cf644f6b7970 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1Vrjj7PUeN l&s82vW;ks7b9n#yGUjW>q7`4?>dpqa$y6l;OOZ1@>$ud zr{%BC$G?10cJ)jeLkj39WP@8KT{PKQx!K;Ee}&Y zA5)_Mb3Gq(13z<eZ{)3=FS%d0z_% zycQIE!@%%{mGuob_ZuFbHzFc$-n@Cs$@!Lx>#da3+qZAuF*CnoV|&NP_fAmoov`q` zckkXaGrwnJd(Y1Po`>f>FYkMP{`Vpx?-dl@D=U9sWBb6v^MRN5!-o$a85lmYuzX}? z{m8}jk(c))KmR92#!u|*pZNJd2@8J`5&87#(`Ocz&una;d3Zka@qHE$_$(y!SyJ+| zmev;rhA&J^U)b5d@bG-$E+g~( z`}ZHr%s*IJe{gaA;O73p!}Eim|A(;f4^hz{Vq!np*?)3!{^aBPDJuF?T>R(HpT9Ub zesOdE5)}L;D*Ef!uixzKzkmP!!^!zaMC6aC=pPxGKUX>ba&!OX=l?4r@>fyu?={Z9 zfB*iImHnrw`S0Jq|LpAlxw-!f2>cfj`7bK^Uqa%)wDf-&ng4Qf{}mPgYia$z#r^*d z*Z;fR|L<}Cf583!0nh(OeE%N{{C~>-{~6!^XZ-)43IBgC@c)(Y|F@$5-;4kM|9|5X zZzcu?2KJI5zhDMNMn+C9fzP>HJQ*06Jv?0;Ln>~)y^^1CHB^HA!}-1U&h9+B@lM3D zj9Fb`r~fqsbll*U^l_DGV^!m6YB5-*@6$ac!_|?+YaCTy~?i z^N|wgO66tCW8C%!v7Xzhb1VOx?XR9=FXynWDLvqq%O#RwajPt%tD^vB; z{@PHh_2*6DZPRW5DS0`wxUbpdvrwf8ty?U2)U{U6> z%zL%F;~ZZ-V=z2ClX1zqQubMI%e)!Gh4x?jwd&%Oqu~X=8Lr>^FI&hIY?{J6Az#4c z#?q(jSYl3kTJM=8dmwSEU1n@Td!VW9Be}h{4ZK-@7KC^AUx`v(d5o3&NbQ1yMeD8e zKCWdr^L1Z%>8f2^D_q;fOu0%uW)+KmDBJaIx(`EG)XGC_wl9}`wKAEVKi&1#nh6Hp z?e?WoYkhZ?9WPy;J$+@^O5e$w<-RTT^?UVsrMHxgcIL5OhF3h9n-2Z_&sbp?yW3p2 zq4iu;{*4OHt3qBXz89BXYTyd)DL*k`iPvu3&uf2AojrS9@9!I8SFioPXfC(uN}zAr u?3JF&#n+tTY|v3>U{W9(y>6&y-1hk9gea9?=NK3m7(8A5T-G@yGywn*smv(= diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_back.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_back.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e50e9b4d6fb85be35d618fe01129373d8ed253 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGk^_7~Tp1V`uAWId%fN8w z&YgSr?%n6)e8kK9n4SIce literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_backpack.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_backpack.png new file mode 100644 index 0000000000000000000000000000000000000000..8a71da941ea7a6af1cc04c012874786b2eaea404 GIT binary patch literal 483 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG)&=;4xH2#>Fyt^W zGz)Qdi2u3D`S%*<|6APu?{NLU%l-cz_x}gn{~z%Df5i9yvB3YQ{QsZv{eQ;)|C#Xr z=K}v<3IBg9`v1N7LxD+`7#J8BOM?7@862M7NMm4Nc?ceWcnY1-Q7-J6(Y9DLiteDcwoB4gTe~DWM4f%U-tb literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_front.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_front.png new file mode 100644 index 0000000000000000000000000000000000000000..422a17635938e4cab5c303afa982280e39ec49e2 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}8$DedLn`LHy=s_!C_sSW zfxhp7tOX}8T(o5UfAqKNzZCQ74(*d%jYY+qZQd*hZqM1u_dWM}-{T7Q}qvOV literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_left.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_left.png new file mode 100644 index 0000000000000000000000000000000000000000..9b49d9924c1b12930387427211e74ce00e70bbaa GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGTmyVUTp1V`&N47uxpL*s zojZ>nJ$lN(@bu}^=WJ{*7#Q9#FuY-9eJ3dR;lqcIyu9C(l)ioY_MMaSyNt|FPR?Jy ze*OOa`@f9L|NsBr%!_`&z`(#*666=m;PC858Uq7Ekf)1dh{fr*r_6;K6a*L?iYzQH zG5)V#C7QgDuU9o%|8WgZcDAmnYQr@F=Yqbw+Zr?c7D+@id#n^$yVt#j(@Dcs<*Blc m_LDoi4d2{0lR5senfvvBR?~+{TB!^S3=E#GelF{r5}E+z>06}$ literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_right.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_right.png new file mode 100644 index 0000000000000000000000000000000000000000..8182236bd114f3b194ca3981d74e53a11c4ef573 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG`~rMJTp1V`UOp>(^|buu zi?SC+b;o^Sm8-vk7{DJgwt zWc<#_`ThI%pPZaOfByXS>(}q!zf&Ac-Y_sQu#^P(1v4-*a(U0c@`-_gA=lHzF~s8Z z+jD3691H~9F7^c;4f%iN!Qc2RPDd8KaB@+4S9WfC&kHN1XA;f|NoD7%HD5=)Np-v& zar^rj7sVqhuGsK9-&R|oGj-OoRaOkgdKO=k7Rb~Vi06{K$E?7_pfK;Q@q@2jOzY;K dY1)5V*XjXV(_E2&8w?B#44$rjF6*2UngCeJcS!&M literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_top.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_elf_overlay_top.png new file mode 100644 index 0000000000000000000000000000000000000000..71e96cc1843909f97413e41b2e42a1c7f5b65754 GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANM!qMj~}Ar*7pUh@r(iWF&m z$Q~dNpjfw{QH41@?EioJOSUH#>|P}+aC(WdTZaf|Kw|>>`dz-)6 zE&ulXVIt@A%bFIpmW-#rO8I>I=J5C>XNjELfxn-PGqy(^ILH`L`#)~2y$y@|<;=7B zi~j9C`CmEf`rSOvzh%-k?wN-3o71*)pIWryne(#p8lGe3=2w4R<>FyyE|3;lyy!*& z)9bkPE&J1rFPu2C;y(N7ieyQBnJcU7^_(9qy?gsU`+v8}d<&N2*RRj^O?dw8qhO55 z>;$>+?T^HpPq47yy6$OS1jLe!M9$aZ;$>h(s6wMM@Gka(V4c;JsT%S-S>%K&iu|PK~$;v zX3pl<4sRd+{VgQ7cuU2}&v#=l^xj^sSUjn2;;%x{rSl&x+%Lxc!M$UfSU0b_!MTro z_H``(ebo}|w?8uR@(X^LCRsl*)UDFirRySxj?=T6%kP_RExD+%P*l8pQOP`;IQ{7l zqD5p=9-n-gYWnXf_lx!`D!;>Se$U){uYk$C+3~B=uDz_?;@{m4TD@=b`_&zCOeylx ziP*p=ewoj5e|&w%$5a33Mh?^M8^_GHZS0NTcmdKI;Vst0D5T~ ALjV8( literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal.png deleted file mode 100644 index 93f0d75aca4c376c5d369f7535f6906024975d4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1096 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4h9AWhG(I6;tUK7OeH~n!3+##lh0Z(Ft9Ls zx;TbZ+!pFq;38#`OC(a`F=`n7I9IrcVe+O(7wwu`J{o9iU5b+kya%Z$HEta z2U|}%9hp#jO^+p3LW1*KeZkZ-H)``k=RSUPZEx-Fw|#$2h1p&;re*nEeY>ve^_7*y z>k_rrKe(ZCIB-JXrKeN$_#6$N-01w5{NPjZuiNMU8-DZV)Srh?F!As4UFP>$EO_eIe~!&~J9jaY=Kq2YCV9Sx0;;L| zb#|DPe&L&b(_K&{f=AQK>5$-lz3r?A7(e)4ezo=PGNGv(c+(d&9DGzczq+a6vF$tY zDV&E_E@tgNzVL|!!`i*hC#IJ=HB|e)u6uoBiG+`Lqap7*v$eCeH6H|gSsj)5f2q{Os!~Hep=fg>d@NH{mh5HZM}8y$tqXPKoNJznj>4>w4;4f1YT_9 z?>PMU#hORVr!Oq7O$zI1IbX-qtNlkLDnC8K>;s3X(`XGJ-9E=sltx?Ov&eLj%joF zrnSszVw4r);;~Fn`&A!V#iVbeZlXVVl2Jl8pR_L z-!_U*%~a#tHP$WESAD9+xz}JCM4QqQ7kh9`X*6;Y;p?MiEKa^{;uQ186x8Kght(WC1l@eOE_`>>c z!2&VDjN10sC$KIR(fvL7Zr1u>pTDxc`&3@c(e&ALsOj1w$8SQ%HH7S1CeLa2@|Y#6 z9Z;|`Rs0`|4X3q?e~;Ldx76AQeUGPSzwHD8BEr+v&t;ucLK6U>(&a4x diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_back.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_back.png new file mode 100644 index 0000000000000000000000000000000000000000..a99500c583f99fb6ac5b4fa89400254e0b087c82 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANNfA)YRdAr*7pPIJs_cHnW9 zZxkq!kJxa!bqC+_6NVNH(>s|sTl7|~XW7oDv&v8VquJs_hfn{LrQK5_{TTX>GdKMH z%Xgq|KYM}%Tip4_7HkQ#)EN4XD>KyIXD-+o!{BjQq+wgG^1Th!tzHS< zW4!wPVFANFE#YgDzvtDiv)kxW!M-Hs#;OhFt7A4supcXo5p}3w7g;&|>^x7xh)hX7o*Vl3< z)UL4$4L$p#s#C{Ptdxy!!KP+3dZ`V}yJ!|9QKzA~`wvF|+ZCjBR3JZ{q9_Lp^c)#vp29CD<&lvE=p2RGfPe}=Dn1)cm669wfeLt zb1ukouhfx=m=QIza^qCDDes&-RGc!x;&PS>7Cs8$Xclnt=uBVlq1-j)P>A@hFPcl% zZu*?@{LZ{6Wz*p4EqQjCPBSEz)PCN1f0d`^((1c16FE`?>S79?cUk{_bvPs|s3`Zs zHIIC@Ocz=VUg9}*j@K#t+to`)mTx_9EMckULdhk93#&JX33Uq0GLFu4 oc{y**9&KT7X~n5?zr63SVa)PT31H?_JqGf*r>mdKI;Vst0EU@uBme*a literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_bottom.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..3b5064202fd9f5f8b4f2470f1eb92e0bd54ccf56 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1Vrjj7PUla)RkeK74j zTlK$=sJBaHi`zxnkBP-?*LJ;8(abE}UXkh@a_C6zb79l#cMG>^`-?0rUuRJqd1cZU zvzH-H7B88+U(@M%>!Y3fj|Od>-lMX$#$WyBv{=PS-xeRdvhv{FH5_x5BR}yRH=DOZ zz`OUCW?$*0bgk@9T7W`kXBDq^YTRpApY>$rVp-cP=PyGAsUdMP+*}^+4R6qa}aGtJyF6*2U FngAl;n!f-5 literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_front.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_front.png new file mode 100644 index 0000000000000000000000000000000000000000..f5900b53821d8e57c711f9b4f4252391ce577a0a GIT binary patch literal 410 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANNfiJmTwAr*7pPIKJUWFX)o z&!r?CCfCIMLiNVZ4|Q<|TCXp#;Oko2#J#$^Xid$bXV3p@RS64ml$58nb#A+z%YVUy zmtpl)t_F=Rh6)=wh9#N549{=kX;}A~VaNUV3@V-f#U7S+FyPL8FUFLS)4v z&(5>u+^-LOtoWiNaIf)e6>rV_xw5sg0>AcsR}#3#7^{)LHYxhE?i%HweK&LVaI};! z$c<+BWW&zJnw)MC*0ApSYVpPod@uA@NKE+j{4*yH*VUgp5|W?)Pid6daLRO7*52$X z%w1~@S;`e|y)Cn?`M>|FYIJLn+qspKR;>^CvO0U+s#p2tM~&0Y%=pOkUnx=gZo`U4 Q3=9kmp00i_>zopr0OE+a%m4rY literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_left.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_left.png new file mode 100644 index 0000000000000000000000000000000000000000..90e61364ca7b8c8f6d417678a79a53104e8258a8 GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANNf@t!V@Ar*7pPIK&Qau9Hh zXYSIoVQ-l$(;!_fzHP?`K0S{MD|RIO6VNVev1su*bbG<2l_j>TSKWU5{kNC`k2Axq zZLA5q?=ltajA2;uTB_k|6>mc^U&HOUYz{KV_3xkF^hT^kL1I&emr`no2rGl*hdTdL z5&n{wtBzXA@GUko*x&g3@4ea%r3L3NwBOS%&h{y6GuqD>`gS|pmk@E@)H>$bXW3q? zj<}i|*mkYqE#Fb;Q-9dx`q>#WXO-Fixzgk#)9=m@w)*OAhHD3Y*2ryb>}Q*#A}Ly+ zv%lEk|H`=qjsg=>C6`~$3~-pQDc_u(pd~!f&-ym&`&G8S!K+qPRsPpqy!*j=UzbxU z+ix>2Soh)K9OctS>l;sIC1@$#O$lLs#kKI}yV)PNRnJ-`xwY{puLg5!9`B9I=ltxd zoj=W0wM#R9@X02B;rW>KgI}vyf8E}g=$j<3eK{X0eVb#!!W7)ugk((`jeycrl6 O7(8A5T-G@yGywo-`>&?} literal 0 HcmV?d00001 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_right.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_normal_right.png new file mode 100644 index 0000000000000000000000000000000000000000..04f6127b8b21f67785b6efd9c437f0c2a36b223a GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANNf0iG_7Ar*7pPIK&QO5ka= z7jSfXWSVfg$-2Pj-2>A*1(F<&DPrd)FXWt9zerJSkFT!Si|V)Wubx)gG2O{CXIP~1 zXubS#Lx%6aWgGUrXS9&(-)!->-a>|9N8EZj?FZ{Qf2lCtuYVFSO_gEZ^RsIbYVV4( zFft@cFcs{KnIm)~uJQ8AFF!t>cG=LQ8~ow;Ue8Ri|(I{shG!fw#ab9bDPtfZuV~bR^>NI#gB7M&;#K!tyW_gm2ov1_Ef8pAiof6EsAuthZ5Ey&4s y(OFMv|J&ORY%$f2+qUlY`x{;5Z*FXS%znKlUp)xj$xAyb3$x5!zUZ| z0}{oX`X5(pTAs;uV3Q7m%yC8s5m$yUwf|p5bkxuK!{1|*JBzKNdR^F!W1f>31dgxY z>~V5i?p_&=^$wBKYh0wk@M0GqL#TV|aTDJI tzvugxJ^gEX|LfdMhg}O;j&Gc+m|xVx7zc9i+~)ka1( zg@!(5VEEt5@c$iyT+B3S1_lPEk|4ie28Oc9XDt{Q7@R#_978y+C(p1fe%8Xk#_!h_ zx;jjkBf;Zg%8k9%-`NZf-?(vuL1*cbB}*8@IC*(_IT8vUE2lIx2(hsUh$IN4ERbPf Z&`9Pt&z1D-VPIfj@O1TaS?83{1ONhwHIe`T delta 583 zcmdnRc!gzxL_G%^0|SHn=l_We42*f1&dvdu$;k{18WT$=T6;4)inQ)m=~^V{s_ViM z?6R>#fh%d{Mh{_?BOGqIlg@gdNWSSiAwl~_1dEP~bbRZ7hv=N-bEXHoC_AO(7q@5?z+*&mJbs*oS(qhx_+wM z_MfhWx1RAIbyKn7_q%#|^18NaX`&Zc_bx^MH!`_9Qfmlj=dyy-lnh4aC2 z=Q%>JQ#6hAO!a4)e)IkFORQd_!+r90KS^hqOru9%JEJD8^IWNUaq_1W&DD4QKhIpY zOzrKvJo_zn(bs-+YO>_%)r1c1j3A$?$-TbU|{I+ba4!^@K3Hdb>M@%cp5{K(Xqb&3Q}xb zckcc-Z*6Nj>hLRKN!7%q7jGP$QIzxM4bOYK+9vM}1}c-%7NYzM;|`g rCuhr*e)!15qbt&0uW)SEWnr+6FuJ~=a^FD)1_lOCS3j3^P6(# sv4WC=W{1=Q4i=5W5`H`(>@Hcsfsd^hjfe zn9QGuHC8(;UcY*v#nB|MuujjfOE2ir|4B~W68wF?Kfb&7_?_&7{E!)0Wk(r9H}{kn zDW(*!cKRU7*t0-h@r>7*E6-gFSKU$KOzP71KbCm6J@H_i_0Ng1!hUi7DMse)4(Dgx zj?R`}&hOB+%j+%!d;5WiiJPw5-jjXx=Iwpswg2iE_NNyeW!PKd#=yW^kr@(E65;D( zm7Jfemza{Dl&V*eTfhJUHue<-iOJciB??KY>6v-9O7C~?S5nAKu~iB;^)>JvhzmDRN z%7Rq=pw#00(xT*4*Rs^S5@lo~Qj+2N3rdS}z}`to)=$kz%}vcKDb_dCGeoh{-P1P! zt^*VV>6y6&U|kit1t=;@GSd)&h2k5K4A?u!4ynj3fSZe=8s>MfVsIE)x#TC8f}H2+ zVygtQ-zp_PIWxry%(O7Fv`jHGG|@FMFfh?Iu}DtTwM0NfnH{2ij|3Fim6drijl6dfu*IciG^8;uBCBGnyzuGahh>jvWbOZ znkkYI{zaMTnR$sh$gTnzm6DlaWoTlWVrrb4sGDeLl%i{rnrf+=Xku)jo0OQEl9-fc zVV0Vj1~w`s*~%@yC^xahRw*+#F+EkkATJ#(0Sa&{#{f@TB_llpgh)V6Vo6$lQLe3$ zPi9_e1wtYuGdDH3BoP#vhGrH9M&=flCYBcF=B5Ug2t{G3Ma7xjmk${aS3DEG)LF3B&d z1PeiORB&n`ga_f~WP(&HC@6q4g;ioQ#0$lVWvMA(Z@{IJGZORCQ&Vh}pve`cB@;_h zNHZ}uHBL6L)HP2tGt)IOHb~M^ z5?dwr%-jNSSSe_LBT5t1E#(=hpja?4GS)RP*2N4keTWxr^g(3?%*QtR7-0fYfK?k)`fL47V`^_tHN3=EtF9+AZi z4BWyX%*Zfnjsyb(1AB?5uPgg=W_bZlPMdNWIR*xXDo+>35R22vJhs1|+cWcRxHY3y zFm}y>yMOl!$jdw5eRZ{GVfz0+>5(PX{LFsL8#*>_+-$t(_ZQA{=?^)|k7qJCvoJdz z_>}zAk1goH`uX;fEkAw;upL>sYeEV`oA?G+5k>J08#f>R>BFPK6sM@z7H?nwsAp-Q c0oMs81|bz?#-la0p&(a#y85}Sb4q9e038hvNdN!< diff --git a/tools/update-resources.py b/tools/update-resources.py old mode 100644 new mode 100755 index 7664d1ced..08e0953ac --- a/tools/update-resources.py +++ b/tools/update-resources.py @@ -76,6 +76,45 @@ def unstitch_corners(input_file: pathlib.Path, family: str): sidebar.save(output_dir / f"sidebar_{family}.png") +def unstitch_turtle(input_file: pathlib.Path, family: str, *, dy: int = 0): + input = Image.open(input_file) + output_dir = input_file.parent + + fragments = [ + ("bottom", 22, 0, 24, 22, Image.Transpose.ROTATE_180), + ("top", 46, 0, 24, 22, Image.Transpose.FLIP_LEFT_RIGHT), + ("right", 0, 22, 22, 24, Image.Transpose.ROTATE_180), + ("back", 22, 22, 24, 24, Image.Transpose.ROTATE_180), + ("left", 46, 22, 22, 24, Image.Transpose.ROTATE_180), + ("front", 68, 22, 24, 24, Image.Transpose.ROTATE_180), + ] + + for suffix, x, y, w, h, transform in fragments: + if family == "elf_overlay" and suffix == "bottom": + continue + + slice = input.crop(box(x, dy + y, w, h)).transpose(transform) + + fragment = Image.new("RGBA", (32, 32)) + fragment.paste(slice) + fragment.save(output_dir / f"turtle_{family}_{suffix}.png") + + backpack = Image.new("RGBA", (32, 32)) + backpack.paste( + input.crop(box(70, dy + 4, 28, 14)).transpose(Image.Transpose.ROTATE_180), + (0, 4), + ) + backpack.paste( + input.crop(box(74, dy + 0, 20, 4)).transpose(Image.Transpose.ROTATE_180), + (4, 18), + ) + backpack.paste( + input.crop(box(94, dy + 0, 20, 4)).transpose(Image.Transpose.FLIP_LEFT_RIGHT), + (4, 0), + ) + backpack.save(output_dir / f"turtle_{family}_backpack.png") + + def main() -> None: spec = argparse.ArgumentParser() spec.add_argument("dir", type=pathlib.Path) @@ -97,6 +136,18 @@ def main() -> None: unstitch_corners(path, family) transformed.append(path) + for family in ("normal", "advanced", "elf_overlay"): + path = texture_path / "block" / f"turtle_{family}.png" + if path.exists(): + unstitch_turtle(path, family) + transformed.append(path) + + path = texture_path / "block" / f"turtle_colour.png" + if path.exists(): + unstitch_turtle(path, "colour_frame") + unstitch_turtle(path, "colour_body", dy=46) + transformed.append(path) + if len(transformed) == 0: print("No files were transformed") return